<?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>30776</bug_id>
          
          <creation_ts>2009-10-26 08:23:20 -0700</creation_ts>
          <short_desc>Web Inspector: Extract AbstractTimelinePanel that will be a base class for ResourcesPanel and TimelinePanel.</short_desc>
          <delta_ts>2009-10-26 14:36:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>157777</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-26 08:23:20 -0700</bug_when>
    <thetext>These panels will look very similar. This is going to be a multi-patch commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157784</commentid>
    <comment_count>1</comment_count>
      <attachid>41868</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-26 08:58:59 -0700</bug_when>
    <thetext>Created attachment 41868
[PATCH] Step 1 that might need follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157805</commentid>
    <comment_count>2</comment_count>
      <attachid>41868</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-10-26 09:50:27 -0700</bug_when>
    <thetext>Comment on attachment 41868
[PATCH] Step 1 that might need follow up.

There are a few mentions of &quot;resources&quot; in AbstractTimelinePanel, mostly in classes and node ids.

I think createTimelinePanels would be better named &quot;createInterface&quot;, createTimelinePanels confused me since I thought it was creating the panels.

Will the scope bar live in AbstractTimelinePanel but just not be used by TimelinePanel?

The scope bar code needes merged with SVN, there have been some changes to support Command-Clicking.

Any &quot;create&quot; function that only gets called internal to one class should have a underscore prefix. (Like createStatusbarButtons.)

r- since it needs merged with SVN first to get scope bar changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157884</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-26 13:05:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 41868 [details])
&gt; There are a few mentions of &quot;resources&quot; in AbstractTimelinePanel, mostly in
&gt; classes and node ids.
&gt; 

I plan on renaming those, but want to do it in smaller steps.

&gt; I think createTimelinePanels would be better named &quot;createInterface&quot;,
&gt; createTimelinePanels confused me since I thought it was creating the panels.
&gt; 

Done.

&gt; Will the scope bar live in AbstractTimelinePanel but just not be used by
&gt; TimelinePanel?
&gt; 

Whatever is there, it will probably look similar between Resources and Timeline, so I decided extracting just in case.

&gt; The scope bar code needes merged with SVN, there have been some changes to
&gt; support Command-Clicking.
&gt; 

Done.

&gt; Any &quot;create&quot; function that only gets called internal to one class should have a
&gt; underscore prefix. (Like createStatusbarButtons.)
&gt; 

Done.

&gt; r- since it needs merged with SVN first to get scope bar changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157886</commentid>
    <comment_count>4</comment_count>
      <attachid>41885</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-26 13:10:56 -0700</bug_when>
    <thetext>Created attachment 41885
[PATCH] Step 1 with comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157926</commentid>
    <comment_count>5</comment_count>
      <attachid>41885</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-10-26 14:29:04 -0700</bug_when>
    <thetext>Comment on attachment 41885
[PATCH] Step 1 with comments addressed.

isCategoryVisible should probially be in the abstract class too and just return false and be something that needs subclasses to implement. Along with show/hideCategory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157930</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-10-26 14:36:38 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	A	WebCore/inspector/front-end/AbstractTimelinePanel.js
	M	WebCore/inspector/front-end/ResourceCategory.js
	M	WebCore/inspector/front-end/ResourcesPanel.js
	M	WebCore/inspector/front-end/SummaryBar.js
	M	WebCore/inspector/front-end/WebKit.qrc
	M	WebCore/inspector/front-end/inspector.html
	M	WebCore/inspector/front-end/inspector.js
Committed r50095</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41868</attachid>
            <date>2009-10-26 08:58:59 -0700</date>
            <delta_ts>2009-10-26 13:10:56 -0700</delta_ts>
            <desc>[PATCH] Step 1 that might need follow up.</desc>
            <filename>extract_abstract_panel</filename>
            <type>text/plain</type>
            <size>49954</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDgzZTBlZS4uMjIzZTYzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAwOS0xMC0yNiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBFeHRyYWN0IEFic3RyYWN0VGltZWxp
bmVQYW5lbCB0aGF0IHdpbGwgYmUgYSBiYXNlCisgICAgICAgIGNsYXNzIGZvciBSZXNvdXJjZXNQ
YW5lbCBhbmQgVGltZWxpbmVQYW5lbC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzA3NzYKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0Fic3RyYWN0VGltZWxpbmVQYW5lbC5qczogQWRkZWQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5B
YnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmdldCBjYXRlZ29yaWVzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLnNob3dDYXRlZ29y
eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlw
ZS5oaWRlQ2F0ZWdvcnkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQ
YW5lbC5wcm90b3R5cGUuY3JlYXRlVGltZWxpbmVQYW5lbHMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZUZpbHRlclBhbmVsLmNy
ZWF0ZUZpbHRlckVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFic3RyYWN0VGltZWxp
bmVQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZUZpbHRlclBhbmVsKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmZpbHRlcik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVy
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBl
Ll9jcmVhdGVHcmFwaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBh
bmVsLnByb3RvdHlwZS51cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZVN1bW1hcnlH
cmFwaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3Rv
dHlwZS5fdXBkYXRlRGl2aWRlcnNMYWJlbEJhclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmdldCBuZWVkc1JlZnJlc2gpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuc2V0
IG5lZWRzUmVmcmVzaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBh
bmVsLnByb3RvdHlwZS5yZWZyZXNoSWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFi
c3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuc2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlwZS5yZXNpemUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUudXBkYXRlTWFpblZpZXdX
aWR0aCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVDYWxjdWxhdG9yKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlLmNvbXB1dGVTdW1t
YXJ5VmFsdWVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJv
dG90eXBlLmNvbXB1dGVCYXJHcmFwaFBlcmNlbnRhZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlLmNvbXB1dGVCYXJHcmFwaExhYmVscyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVDYWxjdWxhdG9yLnByb3RvdHlwZS5nZXQgYm91
bmRhcnlTcGFuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJv
dG90eXBlLnVwZGF0ZUJvdW5kYXJpZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5l
Q2FsY3VsYXRvci5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lQ2FsY3VsYXRvci5wcm90b3R5cGUuX3ZhbHVlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
aW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlLmZvcm1hdFZhbHVlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdvcnkuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuUmVzb3VyY2VDYXRlZ29yeSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZXNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnRvb2xiYXJJdGVt
Q2xhc3MuZ2V0IHRvb2xiYXJJdGVtTGFiZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291
cmNlc1BhbmVsLnByb3RvdHlwZS5nZXQgc3RhdHVzQmFySXRlbXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5nZXQgY2F0ZWdvcmllcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNob3dDYXRlZ29yeSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLmhpZGVDYXRlZ29y
eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLmlzQ2F0
ZWdvcnlWaXNpYmxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUucG9wdWxhdGVTaWRlYmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQ
YW5lbC5wcm90b3R5cGUuY3JlYXRlUGFuZWxFbmFibGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuY3JlYXRlU3RhdHVzYmFyQnV0dG9ucyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNldCBtYWluUmVzb3Vy
Y2VMb2FkVGltZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlLnNldCBtYWluUmVzb3VyY2VET01Db250ZW50VGltZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5yZXNpemUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5yZWZyZXNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS51cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS51cGRhdGVNYWlu
Vmlld1dpZHRoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRpbWVDYWxjdWxhdG9y
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyYW5zZmVyU2l6ZUNhbGN1bGF0b3Ip
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJhbnNmZXJTaXplQ2FsY3VsYXRvci5w
cm90b3R5cGUuY29tcHV0ZUJhckdyYXBoTGFiZWxzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1N1bW1hcnlCYXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VtbWFyeUJhci5w
cm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5sb2FkZWQpOgorCiAyMDA5LTEwLTI2ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMjFiY2Ew
Mi4uMGIzNWExOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTM1ODUsNiArMzU4NSw3IEBACiAgICAgICAgICd3ZWJpbnNwZWN0
b3JfZmlsZXMnOiBbCiAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5odG1sJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Fic3RyYWN0VGltZWxp
bmVQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Cb3R0b21VcFBy
b2ZpbGVEYXRhR3JpZFRyZWUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
QnJlYWtwb2ludC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50c1NpZGViYXJQYW5lLmpzJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IGFlYTc0MDEuLjU4MTAyYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agpAQCAtMzYyMjIsNiArMzYyMjIsMTAgQEAKIAkJCQlOYW1lPSJmcm9udC1lbmQiDQogCQkJCT4N
CiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxB
YnN0cmFjdFRpbWVsaW5lUGFuZWwuanMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZp
bGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxCb3R0b21VcFBy
b2ZpbGVEYXRhR3JpZFRyZWUuanMiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQWJzdHJhY3RUaW1lbGluZVBhbmVsLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Fic3RyYWN0VGltZWxpbmVQYW5lbC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmFlNjliCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Fic3RyYWN0VGltZWxpbmVQYW5lbC5qcwpA
QCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFu
dGhvbnkgUmljYXVkIDxyaWtAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5l
UGFuZWwgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLlBhbmVsLmNhbGwodGhpcyk7
Cit9CisKK1dlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlID0gewor
ICAgIGdldCBjYXRlZ29yaWVzKCkKKyAgICB7CisgICAgICAgIC8vIFNob3VsZCBiZSBpbXBsZW1l
bnRlZCBieSB0aGUgY29uY3JldGUgc3ViY2xhc3Nlcy4KKyAgICAgICAgcmV0dXJuIHt9OworICAg
IH0sCisKKyAgICBzaG93Q2F0ZWdvcnk6IGZ1bmN0aW9uKGNhdGVnb3J5KQorICAgIHsKKyAgICAg
ICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBjb25jcmV0ZSBzdWJjbGFzc2VzLgor
ICAgIH0sCisKKyAgICBoaWRlQ2F0ZWdvcnk6IGZ1bmN0aW9uKGNhdGVnb3J5KQorICAgIHsKKyAg
ICAgICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBjb25jcmV0ZSBzdWJjbGFzc2Vz
LgorICAgIH0sCisKKyAgICBjcmVhdGVUaW1lbGluZVBhbmVsczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fY3JlYXRlRmlsdGVyUGFuZWwoKTsKKworICAgICAgICB0aGlzLmNvbnRh
aW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGhp
cy5jb250YWluZXJFbGVtZW50LmlkID0gInJlc291cmNlcy1jb250YWluZXIiOworICAgICAgICB0
aGlzLmNvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fdXBk
YXRlRGl2aWRlcnNMYWJlbEJhclBvc2l0aW9uLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICAgICAg
dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudCk7CisKKyAgICAg
ICAgdGhpcy5jcmVhdGVTaWRlYmFyKHRoaXMuY29udGFpbmVyRWxlbWVudCwgdGhpcy5lbGVtZW50
KTsKKyAgICAgICAgdGhpcy5zaWRlYmFyRWxlbWVudC5pZCA9ICJyZXNvdXJjZXMtc2lkZWJhciI7
CisgICAgICAgIHRoaXMucG9wdWxhdGVTaWRlYmFyKCk7CisKKyAgICAgICAgdGhpcy5fY3JlYXRl
R3JhcGgoKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUZpbHRlclBhbmVsOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB0aGlzLmZpbHRlckJhckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50LmlkID0gInJlc291cmNl
cy1maWx0ZXIiOworICAgICAgICB0aGlzLmZpbHRlckJhckVsZW1lbnQuY2xhc3NOYW1lID0gInNj
b3BlLWJhciI7CisgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmZpbHRlckJh
ckVsZW1lbnQpOworCisgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbHRlckVsZW1lbnQoY2F0ZWdv
cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjYXRlZ29yeSA9PT0gImFsbCIpCisgICAg
ICAgICAgICAgICAgdmFyIGxhYmVsID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBbGwiKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY2F0ZWdvcmllc1tjYXRlZ29yeV0pCisgICAgICAgICAg
ICAgICAgdmFyIGxhYmVsID0gdGhpcy5jYXRlZ29yaWVzW2NhdGVnb3J5XS50aXRsZTsKKworICAg
ICAgICAgICAgdmFyIGNhdGVnb3J5RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxp
Iik7CisgICAgICAgICAgICBjYXRlZ29yeUVsZW1lbnQuY2F0ZWdvcnkgPSBjYXRlZ29yeTsKKyAg
ICAgICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRTdHlsZUNsYXNzKGNhdGVnb3J5KTsKKyAgICAg
ICAgICAgIGNhdGVnb3J5RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShsYWJlbCkpOworICAgICAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fdXBkYXRlRmlsdGVyLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICAgICAg
ICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudC5hcHBlbmRDaGlsZChjYXRlZ29yeUVsZW1lbnQpOwor
CisgICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnlFbGVtZW50OworICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy5maWx0ZXJBbGxFbGVtZW50ID0gY3JlYXRlRmlsdGVyRWxlbWVudC5jYWxsKHRoaXMs
ICJhbGwiKTsKKworICAgICAgICAvLyBBZGQgYSBkaXZpZGVyCisgICAgICAgIHZhciBkaXZpZGVy
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBkaXZpZGVy
RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJkaXZpZGVyIik7CisgICAgICAgIHRoaXMuZmlsdGVyQmFy
RWxlbWVudC5hcHBlbmRDaGlsZChkaXZpZGVyRWxlbWVudCk7CisKKyAgICAgICAgZm9yICh2YXIg
Y2F0ZWdvcnkgaW4gdGhpcy5jYXRlZ29yaWVzKQorICAgICAgICAgICAgY3JlYXRlRmlsdGVyRWxl
bWVudC5jYWxsKHRoaXMsIGNhdGVnb3J5KTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5jdGlv
biAodGFyZ2V0KQorICAgIHsKKyAgICAgICAgaWYgKHRhcmdldC5jYXRlZ29yeSA9PT0gIkFsbCIp
IHsKKyAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzU3R5bGVDbGFzcygic2VsZWN0ZWQiKSkgewor
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHVuc2VsZWN0IGFsbCwgc28gd2UgYnJlYWsgZWFy
bHkgaGVyZQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gSWYgYWxsIHdhc24ndCBzZWxlY3RlZCwgYW5kIG5vdyBpcywgdW5zZWxlY3QgZXZl
cnl0aGluZyBlbHNlLgorICAgICAgICAgICAgZm9yICh2YXIgY2hpbGQgaW4gdGhpcy5maWx0ZXJC
YXJFbGVtZW50LmNoaWxkTm9kZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNhdGVn
b3J5ICE9PSAiQWxsIikKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlU3R5bGVDbGFz
cygic2VsZWN0ZWQiKTsKKyAgICAgICAgICAgICAgICB0aGlzLmhpZGVDYXRlZ29yeSh0YXJnZXQu
Y2F0ZWdvcnkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gU29tZXRoaW5nIG90aGVyIHRoYW4gYWxsIGlzIGJlaW5nIHNlbGVjdGVkLCBzbyB3ZSB3YW50
IHRvIHVuc2VsZWN0IGFsbAorICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyQWxsRWxlbWVudC5o
YXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJB
bGxFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7CisgICAgICAgICAgICAgICAg
dGhpcy5oaWRlQ2F0ZWdvcnkoImFsbCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRhcmdldC5oYXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7CisgICAgICAgICAg
ICB0YXJnZXQucmVtb3ZlU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKKyAgICAgICAgICAgIHRoaXMu
aGlkZUNhdGVnb3J5KHRhcmdldC5jYXRlZ29yeSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0YXJnZXQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKKyAgICAgICAgICAgIHRoaXMu
c2hvd0NhdGVnb3J5KHRhcmdldC5jYXRlZ29yeSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAg
X3VwZGF0ZUZpbHRlcjogZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAgIHRoaXMuZmlsdGVyKGUu
dGFyZ2V0KTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUdyYXBoOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9jb250YWluZXJDb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICB0aGlzLl9jb250YWluZXJDb250ZW50RWxlbWVudC5pZCA9
ICJyZXNvdXJjZXMtY29udGFpbmVyLWNvbnRlbnQiOworICAgICAgICB0aGlzLmNvbnRhaW5lckVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyQ29udGVudEVsZW1lbnQpOworCisgICAg
ICAgIHRoaXMuc3VtbWFyeUJhciA9IG5ldyBXZWJJbnNwZWN0b3IuU3VtbWFyeUJhcih0aGlzLmNh
dGVnb3JpZXMpOworICAgICAgICB0aGlzLnN1bW1hcnlCYXIuZWxlbWVudC5pZCA9ICJyZXNvdXJj
ZXMtc3VtbWFyeSI7CisgICAgICAgIHRoaXMuX2NvbnRhaW5lckNvbnRlbnRFbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuc3VtbWFyeUJhci5lbGVtZW50KTsKKworICAgICAgICB0aGlzLnJlc291cmNl
c0dyYXBoc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAg
dGhpcy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50LmlkID0gInJlc291cmNlcy1ncmFwaHMiOworICAg
ICAgICB0aGlzLl9jb250YWluZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJlc291
cmNlc0dyYXBoc0VsZW1lbnQpOworCisgICAgICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50
LmlkID0gInJlc291cmNlcy1kaXZpZGVycyI7CisgICAgICAgIHRoaXMuX2NvbnRhaW5lckNvbnRl
bnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZGl2aWRlcnNFbGVtZW50KTsKKworICAgICAgICB0
aGlzLmV2ZW50RGl2aWRlcnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgIHRoaXMuZXZlbnREaXZpZGVyc0VsZW1lbnQuaWQgPSAicmVzb3VyY2VzLWV2ZW50
LWRpdmlkZXJzIjsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyQ29udGVudEVsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5ldmVudERpdmlkZXJzRWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5kaXZpZGVy
c0xhYmVsQmFyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAg
ICB0aGlzLmRpdmlkZXJzTGFiZWxCYXJFbGVtZW50LmlkID0gInJlc291cmNlcy1kaXZpZGVycy1s
YWJlbC1iYXIiOworICAgICAgICB0aGlzLl9jb250YWluZXJDb250ZW50RWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLmRpdmlkZXJzTGFiZWxCYXJFbGVtZW50KTsKKyAgICB9LAorCisgICAgdXBkYXRl
R3JhcGhEaXZpZGVyc0lmTmVlZGVkOiBmdW5jdGlvbihmb3JjZSkKKyAgICB7CisgICAgICAgIGlm
ICghdGhpcy52aXNpYmxlKSB7CisgICAgICAgICAgICB0aGlzLm5lZWRzUmVmcmVzaCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZG9j
dW1lbnQuYm9keS5vZmZzZXRXaWR0aCA8PSAwKSB7CisgICAgICAgICAgICAvLyBUaGUgc3R5bGVz
aGVldCBoYXNuJ3QgbG9hZGVkIHlldCBvciB0aGUgd2luZG93IGlzIGNsb3NlZCwKKyAgICAgICAg
ICAgIC8vIHNvIHdlIGNhbid0IGNhbGN1bGF0ZSB3aGF0IGlzIG5lZWQuIFJldHVybiBlYXJseS4K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBkaXZp
ZGVyQ291bnQgPSBNYXRoLnJvdW5kKHRoaXMuZGl2aWRlcnNFbGVtZW50Lm9mZnNldFdpZHRoIC8g
NjQpOworICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLmNhbGN1bGF0b3IuYm91bmRhcnlTcGFuIC8g
ZGl2aWRlckNvdW50OworICAgICAgICBpZiAoIWZvcmNlICYmIHRoaXMuX2N1cnJlbnREaXZpZGVy
U2xpY2UgPT09IHNsaWNlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHRo
aXMuX2N1cnJlbnREaXZpZGVyU2xpY2UgPSBzbGljZTsKKworICAgICAgICB0aGlzLmRpdmlkZXJz
RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLmV2ZW50RGl2aWRlcnNFbGVt
ZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuZGl2aWRlcnNMYWJlbEJhckVsZW1l
bnQucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBkaXZp
ZGVyQ291bnQ7ICsraSkgeworICAgICAgICAgICAgdmFyIGRpdmlkZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIGRpdmlkZXIuY2xhc3NOYW1lID0gInJlc291
cmNlcy1kaXZpZGVyIjsKKyAgICAgICAgICAgIGlmIChpID09PSBkaXZpZGVyQ291bnQpCisgICAg
ICAgICAgICAgICAgZGl2aWRlci5hZGRTdHlsZUNsYXNzKCJsYXN0Iik7CisgICAgICAgICAgICBk
aXZpZGVyLnN0eWxlLmxlZnQgPSAoKGkgLyBkaXZpZGVyQ291bnQpICogMTAwKSArICIlIjsKKwor
ICAgICAgICAgICAgdGhpcy5kaXZpZGVyc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2aWRlci5jbG9u
ZU5vZGUoKSk7CisKKyAgICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICAgICAgbGFiZWwuY2xhc3NOYW1lID0gInJlc291cmNlcy1kaXZp
ZGVyLWxhYmVsIjsKKyAgICAgICAgICAgIGlmICghaXNOYU4oc2xpY2UpKQorICAgICAgICAgICAg
ICAgIGxhYmVsLnRleHRDb250ZW50ID0gdGhpcy5jYWxjdWxhdG9yLmZvcm1hdFZhbHVlKHNsaWNl
ICogaSk7CisgICAgICAgICAgICBkaXZpZGVyLmFwcGVuZENoaWxkKGxhYmVsKTsKKworICAgICAg
ICAgICAgdGhpcy5kaXZpZGVyc0xhYmVsQmFyRWxlbWVudC5hcHBlbmRDaGlsZChkaXZpZGVyKTsK
KyAgICAgICAgfQorICAgIH0sCisKKyAgICBfdXBkYXRlU3VtbWFyeUdyYXBoOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB0aGlzLnN1bW1hcnlCYXIudXBkYXRlKHRoaXMuX3Jlc291cmNlcyk7
CisgICAgfSwKKworICAgIF91cGRhdGVEaXZpZGVyc0xhYmVsQmFyUG9zaXRpb246IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQu
c2Nyb2xsVG9wOworICAgICAgICB2YXIgZGl2aWRlcnNUb3AgPSAoc2Nyb2xsVG9wIDwgdGhpcy5z
dW1tYXJ5QmFyLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID8gdGhpcy5zdW1tYXJ5QmFyLmVsZW1lbnQu
b2Zmc2V0SGVpZ2h0IDogc2Nyb2xsVG9wKTsKKyAgICAgICAgdGhpcy5kaXZpZGVyc0VsZW1lbnQu
c3R5bGUudG9wID0gc2Nyb2xsVG9wICsgInB4IjsKKyAgICAgICAgdGhpcy5ldmVudERpdmlkZXJz
RWxlbWVudC5zdHlsZS50b3AgPSBzY3JvbGxUb3AgKyAicHgiOworICAgICAgICB0aGlzLmRpdmlk
ZXJzTGFiZWxCYXJFbGVtZW50LnN0eWxlLnRvcCA9IGRpdmlkZXJzVG9wICsgInB4IjsKKyAgICB9
LAorCisgICAgZ2V0IG5lZWRzUmVmcmVzaCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
bmVlZHNSZWZyZXNoOworICAgIH0sCisKKyAgICBzZXQgbmVlZHNSZWZyZXNoKHgpCisgICAgewor
ICAgICAgICBpZiAodGhpcy5fbmVlZHNSZWZyZXNoID09PSB4KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRoaXMuX25lZWRzUmVmcmVzaCA9IHg7CisKKyAgICAgICAgaWYgKHgpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgISgiX3JlZnJlc2hUaW1lb3V0IiBpbiB0
aGlzKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGltZW91dCA9IHNldFRpbWVvdXQo
dGhpcy5yZWZyZXNoLmJpbmQodGhpcyksIDUwMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIl9yZWZyZXNoVGltZW91dCIgaW4gdGhpcykgeworICAgICAgICAgICAgICAgIGNs
ZWFyVGltZW91dCh0aGlzLl9yZWZyZXNoVGltZW91dCk7CisgICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX3JlZnJlc2hUaW1lb3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwK
KworICAgIHJlZnJlc2hJZk5lZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMubmVlZHNSZWZyZXNoKQorICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7CisgICAgfSwKKwor
ICAgIHNob3c6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5w
cm90b3R5cGUuc2hvdy5jYWxsKHRoaXMpOworCisgICAgICAgIHRoaXMuX3VwZGF0ZURpdmlkZXJz
TGFiZWxCYXJQb3NpdGlvbigpOworICAgICAgICB0aGlzLnJlZnJlc2hJZk5lZWRlZCgpOworICAg
IH0sCisKKyAgICByZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMudXBkYXRl
R3JhcGhEaXZpZGVyc0lmTmVlZGVkKCk7CisgICAgfSwKKworICAgIHVwZGF0ZU1haW5WaWV3V2lk
dGg6IGZ1bmN0aW9uKHdpZHRoKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyQ29udGVu
dEVsZW1lbnQuc3R5bGUubGVmdCA9IHdpZHRoICsgInB4IjsKKyAgICAgICAgdGhpcy51cGRhdGVH
cmFwaERpdmlkZXJzSWZOZWVkZWQoKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BYnN0cmFj
dFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5QYW5lbC5w
cm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IgPSBmdW5jdGlvbigp
Cit7Cit9CisKK1dlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlID0gewor
ICAgIGNvbXB1dGVTdW1tYXJ5VmFsdWVzOiBmdW5jdGlvbihpdGVtcykKKyAgICB7CisgICAgICAg
IHZhciB0b3RhbCA9IDA7CisgICAgICAgIHZhciBjYXRlZ29yeVZhbHVlcyA9IHt9OworCisgICAg
ICAgIHZhciBpdGVtc0xlbmd0aCA9IGl0ZW1zLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBpdGVtc0xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1z
W2ldOworICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUoaXRlbSk7CisgICAgICAg
ICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICghKGl0ZW0uY2F0ZWdvcnkubmFtZSBpbiBjYXRlZ29y
eVZhbHVlcykpCisgICAgICAgICAgICAgICAgY2F0ZWdvcnlWYWx1ZXNbaXRlbS5jYXRlZ29yeS5u
YW1lXSA9IDA7CisgICAgICAgICAgICBjYXRlZ29yeVZhbHVlc1tpdGVtLmNhdGVnb3J5Lm5hbWVd
ICs9IHZhbHVlOworICAgICAgICAgICAgdG90YWwgKz0gdmFsdWU7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4ge2NhdGVnb3J5VmFsdWVzOiBjYXRlZ29yeVZhbHVlcywgdG90YWw6IHRvdGFs
fTsKKyAgICB9LAorCisgICAgY29tcHV0ZUJhckdyYXBoUGVyY2VudGFnZXM6IGZ1bmN0aW9uKGl0
ZW0pCisgICAgeworICAgICAgICByZXR1cm4ge3N0YXJ0OiAwLCBtaWRkbGU6IDAsIGVuZDogKHRo
aXMuX3ZhbHVlKGl0ZW0pIC8gdGhpcy5ib3VuZGFyeVNwYW4pICogMTAwfTsKKyAgICB9LAorCisg
ICAgY29tcHV0ZUJhckdyYXBoTGFiZWxzOiBmdW5jdGlvbihpdGVtKQorICAgIHsKKyAgICAgICAg
Y29uc3QgbGFiZWwgPSB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3ZhbHVlKGl0ZW0pKTsKKyAgICAg
ICAgcmV0dXJuIHtsZWZ0OiBsYWJlbCwgcmlnaHQ6IGxhYmVsLCB0b29sdGlwOiBsYWJlbH07Cisg
ICAgfSwKKworICAgIGdldCBib3VuZGFyeVNwYW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMubWF4aW11bUJvdW5kYXJ5IC0gdGhpcy5taW5pbXVtQm91bmRhcnk7CisgICAgfSwKKworICAg
IHVwZGF0ZUJvdW5kYXJpZXM6IGZ1bmN0aW9uKGl0ZW0pCisgICAgeworICAgICAgICB0aGlzLm1p
bmltdW1Cb3VuZGFyeSA9IDA7CisKKyAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUoaXRl
bSk7CisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5tYXhpbXVtQm91bmRhcnkgPT09ICJ1bmRlZmlu
ZWQiIHx8IHZhbHVlID4gdGhpcy5tYXhpbXVtQm91bmRhcnkpIHsKKyAgICAgICAgICAgIHRoaXMu
bWF4aW11bUJvdW5kYXJ5ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBkZWxldGUgdGhpcy5taW5pbXVtQm91bmRhcnk7CisgICAgICAg
IGRlbGV0ZSB0aGlzLm1heGltdW1Cb3VuZGFyeTsKKyAgICB9LAorCisgICAgX3ZhbHVlOiBmdW5j
dGlvbihpdGVtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSwKKworICAgIGZvcm1h
dFZhbHVlOiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1N0
cmluZygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SZXNvdXJjZUNhdGVnb3J5LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291
cmNlQ2F0ZWdvcnkuanMKaW5kZXggZmM1MDhkMC4uN2I0Njc2NCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdvcnkuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdvcnkuanMKQEAgLTI2LDEwICsyNiwxMSBA
QAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSA9IGZ1
bmN0aW9uKHRpdGxlLCBuYW1lKQorV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkgPSBmdW5j
dGlvbihuYW1lLCB0aXRsZSwgY29sb3IpCiB7CiAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB0
aGlzLnRpdGxlID0gdGl0bGU7CisgICAgdGhpcy5jb2xvciA9IGNvbG9yOwogICAgIHRoaXMucmVz
b3VyY2VzID0gW107CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SZXNvdXJjZXNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcwppbmRleCBmZmJlZDg3Li45YjlkMWE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC0yOSwyNDkgKzI5LDEzMiBAQAogCiBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwgPSBmdW5jdGlvbigpCiB7Ci0gICAgV2ViSW5zcGVj
dG9yLlBhbmVsLmNhbGwodGhpcyk7Ci0KKyAgICBXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGlu
ZVBhbmVsLmNhbGwodGhpcyk7CiAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInJlc291
cmNlcyIpOwogCi0gICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50LmlkID0gInJlc291cmNlcy1m
aWx0ZXIiOwotICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudC5jbGFzc05hbWUgPSAic2NvcGUtYmFy
IjsKLSAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5maWx0ZXJCYXJFbGVtZW50KTsK
KyAgICB0aGlzLmNyZWF0ZVBhbmVsRW5hYmxlcigpOwogCiAgICAgdGhpcy52aWV3c0NvbnRhaW5l
ckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLnZpZXdz
Q29udGFpbmVyRWxlbWVudC5pZCA9ICJyZXNvdXJjZS12aWV3cyI7CiAgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMudmlld3NDb250YWluZXJFbGVtZW50KTsKIAotICAgIHRoaXMuY29u
dGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMu
Y29udGFpbmVyRWxlbWVudC5pZCA9ICJyZXNvdXJjZXMtY29udGFpbmVyIjsKLSAgICB0aGlzLmNv
bnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fdXBkYXRlRGl2
aWRlcnNMYWJlbEJhclBvc2l0aW9uLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50KTsKLQotICAgIHRoaXMuY3JlYXRl
U2lkZWJhcih0aGlzLmNvbnRhaW5lckVsZW1lbnQsIHRoaXMuZWxlbWVudCk7Ci0KLSAgICB0aGlz
LnNpZGViYXJFbGVtZW50LmlkID0gInJlc291cmNlcy1zaWRlYmFyIjsKLQotICAgIHRoaXMuY29u
dGFpbmVyQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAg
ICB0aGlzLmNvbnRhaW5lckNvbnRlbnRFbGVtZW50LmlkID0gInJlc291cmNlcy1jb250YWluZXIt
Y29udGVudCI7Ci0gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29u
dGFpbmVyQ29udGVudEVsZW1lbnQpOwotCi0gICAgdGhpcy5zdW1tYXJ5QmFyID0gbmV3IFdlYklu
c3BlY3Rvci5TdW1tYXJ5QmFyKHRoaXMuY2F0ZWdvcmllcyk7Ci0gICAgdGhpcy5zdW1tYXJ5QmFy
LmVsZW1lbnQuaWQgPSAicmVzb3VyY2VzLXN1bW1hcnkiOwotICAgIHRoaXMuY29udGFpbmVyQ29u
dGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zdW1tYXJ5QmFyLmVsZW1lbnQpOwotCi0gICAg
dGhpcy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgdGhpcy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50LmlkID0gInJlc291cmNlcy1ncmFw
aHMiOwotICAgIHRoaXMuY29udGFpbmVyQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5y
ZXNvdXJjZXNHcmFwaHNFbGVtZW50KTsKLQotICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5kaXZpZGVyc0VsZW1lbnQuaWQg
PSAicmVzb3VyY2VzLWRpdmlkZXJzIjsKLSAgICB0aGlzLmNvbnRhaW5lckNvbnRlbnRFbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuZGl2aWRlcnNFbGVtZW50KTsKLSAgICAKLSAgICB0aGlzLmV2ZW50
RGl2aWRlcnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhp
cy5ldmVudERpdmlkZXJzRWxlbWVudC5pZCA9ICJyZXNvdXJjZXMtZXZlbnQtZGl2aWRlcnMiOwot
ICAgIHRoaXMuY29udGFpbmVyQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ldmVudERp
dmlkZXJzRWxlbWVudCk7Ci0KLSAgICB0aGlzLmRpdmlkZXJzTGFiZWxCYXJFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5kaXZpZGVyc0xhYmVsQmFyRWxl
bWVudC5pZCA9ICJyZXNvdXJjZXMtZGl2aWRlcnMtbGFiZWwtYmFyIjsKLSAgICB0aGlzLmNvbnRh
aW5lckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZGl2aWRlcnNMYWJlbEJhckVsZW1l
bnQpOwotCi0gICAgdmFyIHRpbWVHcmFwaEl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJU
cmVlRWxlbWVudCgicmVzb3VyY2VzLXRpbWUtZ3JhcGgtc2lkZWJhci1pdGVtIiwgV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJUaW1lIikpOwotICAgIHRpbWVHcmFwaEl0ZW0ub25zZWxlY3QgPSB0aGlz
Ll9ncmFwaFNlbGVjdGVkLmJpbmQodGhpcyk7Ci0KLSAgICB2YXIgdHJhbnNmZXJUaW1lQ2FsY3Vs
YXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmFuc2ZlclRpbWVDYWxjdWxhdG9yKCk7
Ci0gICAgdmFyIHRyYW5zZmVyRHVyYXRpb25DYWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVRyYW5zZmVyRHVyYXRpb25DYWxjdWxhdG9yKCk7Ci0KLSAgICB0aW1lR3JhcGhJdGVt
LnNvcnRpbmdPcHRpb25zID0gWwotICAgICAgICB7IG5hbWU6IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU29ydCBieSBTdGFydCBUaW1lIiksIHNvcnRpbmdGdW5jdGlvbjogV2ViSW5zcGVjdG9yLlJl
c291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBhcmVCeUFzY2VuZGluZ1N0YXJ0VGltZSwgY2Fs
Y3VsYXRvcjogdHJhbnNmZXJUaW1lQ2FsY3VsYXRvciB9LAotICAgICAgICB7IG5hbWU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiU29ydCBieSBSZXNwb25zZSBUaW1lIiksIHNvcnRpbmdGdW5jdGlv
bjogV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBhcmVCeUFzY2Vu
ZGluZ1Jlc3BvbnNlUmVjZWl2ZWRUaW1lLCBjYWxjdWxhdG9yOiB0cmFuc2ZlclRpbWVDYWxjdWxh
dG9yIH0sCi0gICAgICAgIHsgbmFtZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTb3J0IGJ5IEVu
ZCBUaW1lIiksIHNvcnRpbmdGdW5jdGlvbjogV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclRy
ZWVFbGVtZW50LkNvbXBhcmVCeUFzY2VuZGluZ0VuZFRpbWUsIGNhbGN1bGF0b3I6IHRyYW5zZmVy
VGltZUNhbGN1bGF0b3IgfSwKLSAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlNvcnQgYnkgRHVyYXRpb24iKSwgc29ydGluZ0Z1bmN0aW9uOiBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VTaWRlYmFyVHJlZUVsZW1lbnQuQ29tcGFyZUJ5RGVzY2VuZGluZ0R1cmF0aW9uLCBjYWxjdWxh
dG9yOiB0cmFuc2ZlckR1cmF0aW9uQ2FsY3VsYXRvciB9LAotICAgICAgICB7IG5hbWU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiU29ydCBieSBMYXRlbmN5IiksIHNvcnRpbmdGdW5jdGlvbjogV2Vi
SW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBhcmVCeURlc2NlbmRpbmdM
YXRlbmN5LCBjYWxjdWxhdG9yOiB0cmFuc2ZlckR1cmF0aW9uQ2FsY3VsYXRvciB9LAotICAgIF07
CisgICAgdGhpcy5jcmVhdGVUaW1lbGluZVBhbmVscygpOwogCi0gICAgdGltZUdyYXBoSXRlbS5z
ZWxlY3RlZFNvcnRpbmdPcHRpb25JbmRleCA9IDE7CisgICAgdGhpcy5jcmVhdGVTdGF0dXNiYXJC
dXR0b25zKCk7CiAKLSAgICB2YXIgc2l6ZUdyYXBoSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU2lk
ZWJhclRyZWVFbGVtZW50KCJyZXNvdXJjZXMtc2l6ZS1ncmFwaC1zaWRlYmFyLWl0ZW0iLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKSk7Ci0gICAgc2l6ZUdyYXBoSXRlbS5vbnNlbGVjdCA9
IHRoaXMuX2dyYXBoU2VsZWN0ZWQuYmluZCh0aGlzKTsKLQotICAgIHZhciB0cmFuc2ZlclNpemVD
YWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyYW5zZmVyU2l6ZUNhbGN1bGF0
b3IoKTsKLSAgICBzaXplR3JhcGhJdGVtLnNvcnRpbmdPcHRpb25zID0gWwotICAgICAgICB7IG5h
bWU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU29ydCBieSBTaXplIiksIHNvcnRpbmdGdW5jdGlv
bjogV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBhcmVCeURlc2Nl
bmRpbmdTaXplLCBjYWxjdWxhdG9yOiB0cmFuc2ZlclNpemVDYWxjdWxhdG9yIH0sCi0gICAgXTsK
LQotICAgIHNpemVHcmFwaEl0ZW0uc2VsZWN0ZWRTb3J0aW5nT3B0aW9uSW5kZXggPSAwOwotCi0g
ICAgdGhpcy5ncmFwaHNUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rp
b25UcmVlRWxlbWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdSQVBIUyIpLCB7fSwgdHJ1ZSk7
Ci0gICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZCh0aGlzLmdyYXBoc1RyZWVFbGVtZW50
KTsKLQotICAgIHRoaXMuZ3JhcGhzVHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGltZUdyYXBoSXRl
bSk7Ci0gICAgdGhpcy5ncmFwaHNUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChzaXplR3JhcGhJdGVt
KTsKLSAgICB0aGlzLmdyYXBoc1RyZWVFbGVtZW50LmV4cGFuZCgpOwotCi0gICAgdGhpcy5yZXNv
dXJjZXNUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxl
bWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJFU09VUkNFUyIpLCB7fSwgdHJ1ZSk7Ci0gICAg
dGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZCh0aGlzLnJlc291cmNlc1RyZWVFbGVtZW50KTsK
LQotICAgIHRoaXMucmVzb3VyY2VzVHJlZUVsZW1lbnQuZXhwYW5kKCk7CisgICAgdGhpcy5yZXNl
dCgpOworICAgIHRoaXMuZmlsdGVyKHRoaXMuZmlsdGVyQWxsRWxlbWVudCk7CisgICAgdGhpcy5n
cmFwaHNUcmVlRWxlbWVudC5jaGlsZHJlblswXS5zZWxlY3QoKTsKK30KIAotICAgIHZhciBwYW5l
bEVuYWJsZXJIZWFkaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJZb3UgbmVlZCB0byBlbmFi
bGUgcmVzb3VyY2UgdHJhY2tpbmcgdG8gdXNlIHRoaXMgcGFuZWwuIik7Ci0gICAgdmFyIHBhbmVs
RW5hYmxlckRpc2NsYWltZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsaW5nIHJlc291
cmNlIHRyYWNraW5nIHdpbGwgcmVsb2FkIHRoZSBwYWdlIGFuZCBtYWtlIHBhZ2UgbG9hZGluZyBz
bG93ZXIuIik7Ci0gICAgdmFyIHBhbmVsRW5hYmxlckJ1dHRvbiA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiRW5hYmxlIHJlc291cmNlIHRyYWNraW5nIik7CitXZWJJbnNwZWN0b3IuUmVzb3VyY2Vz
UGFuZWwucHJvdG90eXBlID0geworICAgIHRvb2xiYXJJdGVtQ2xhc3M6ICJyZXNvdXJjZXMiLAog
Ci0gICAgdGhpcy5wYW5lbEVuYWJsZXJWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5QYW5lbEVuYWJs
ZXJWaWV3KCJyZXNvdXJjZXMiLCBwYW5lbEVuYWJsZXJIZWFkaW5nLCBwYW5lbEVuYWJsZXJEaXNj
bGFpbWVyLCBwYW5lbEVuYWJsZXJCdXR0b24pOwotICAgIHRoaXMucGFuZWxFbmFibGVyVmlldy5h
ZGRFdmVudExpc3RlbmVyKCJlbmFibGUgY2xpY2tlZCIsIHRoaXMuX2VuYWJsZVJlc291cmNlVHJh
Y2tpbmcsIHRoaXMpOworICAgIGdldCB0b29sYmFySXRlbUxhYmVsKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc291cmNlcyIpOworICAgIH0sCiAKLSAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wYW5lbEVuYWJsZXJWaWV3LmVsZW1lbnQp
OworICAgIGdldCBzdGF0dXNCYXJJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gW3RoaXMu
ZW5hYmxlVG9nZ2xlQnV0dG9uLmVsZW1lbnQsIHRoaXMubGFyZ2VyUmVzb3VyY2VzQnV0dG9uLmVs
ZW1lbnQsIHRoaXMuc29ydGluZ1NlbGVjdEVsZW1lbnRdOworICAgIH0sCiAKLSAgICB0aGlzLmVu
YWJsZVRvZ2dsZUJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKCIiLCAi
ZW5hYmxlLXRvZ2dsZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1
dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZVJlc291cmNlVHJhY2tp
bmcuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIGdldCBjYXRlZ29yaWVzKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IucmVzb3VyY2VDYXRlZ29yaWVzOworICAgIH0sCiAKLSAg
ICB0aGlzLmxhcmdlclJlc291cmNlc0J1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFy
QnV0dG9uKFdlYkluc3BlY3Rvci5VSVN0cmluZygiVXNlIHNtYWxsIHJlc291cmNlIHJvd3MuIiks
ICJyZXNvdXJjZXMtbGFyZ2VyLXJlc291cmNlcy1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlz
LmxhcmdlclJlc291cmNlc0J1dHRvbi50b2dnbGVkID0gUHJlZmVyZW5jZXMucmVzb3VyY2VzTGFy
Z2VSb3dzOwotICAgIHRoaXMubGFyZ2VyUmVzb3VyY2VzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fdG9nZ2xlTGFyZ2VyUmVzb3VyY2VzLmJpbmQodGhpcyksIGZhbHNlKTsK
LSAgICBpZiAoIVByZWZlcmVuY2VzLnJlc291cmNlc0xhcmdlUm93cykgewotICAgICAgICBQcmVm
ZXJlbmNlcy5yZXNvdXJjZXNMYXJnZVJvd3MgPSAhUHJlZmVyZW5jZXMucmVzb3VyY2VzTGFyZ2VS
b3dzOwotICAgICAgICB0aGlzLl90b2dnbGVMYXJnZXJSZXNvdXJjZXMoKTsgLy8gdGhpcyB3aWxs
IHRvZ2dsZSB0aGUgcHJlZmVyZW5jZSBiYWNrIHRvIHRoZSBvcmlnaW5hbAotICAgIH0KKyAgICBz
aG93Q2F0ZWdvcnk6IGZ1bmN0aW9uKGNhdGVnb3J5KQorICAgIHsKKyAgICAgICAgdmFyIGZpbHRl
ckNsYXNzID0gImZpbHRlci0iICsgY2F0ZWdvcnkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgdGhp
cy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50LmFkZFN0eWxlQ2xhc3MoZmlsdGVyQ2xhc3MpOworICAg
ICAgICB0aGlzLnJlc291cmNlc1RyZWVFbGVtZW50LmNoaWxkcmVuTGlzdEVsZW1lbnQuYWRkU3R5
bGVDbGFzcyhmaWx0ZXJDbGFzcyk7CisgICAgfSwKKyAgICAKKyAgICBoaWRlQ2F0ZWdvcnk6IGZ1
bmN0aW9uKGNhdGVnb3J5KQorICAgIHsKKyAgICAgICAgdmFyIGZpbHRlckNsYXNzID0gImZpbHRl
ci0iICsgY2F0ZWdvcnkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgdGhpcy5yZXNvdXJjZXNHcmFw
aHNFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoZmlsdGVyQ2xhc3MpOworICAgICAgICB0aGlzLnJl
c291cmNlc1RyZWVFbGVtZW50LmNoaWxkcmVuTGlzdEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhm
aWx0ZXJDbGFzcyk7CisgICAgfSwKIAotICAgIHRoaXMuc29ydGluZ1NlbGVjdEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKLSAgICB0aGlzLnNvcnRpbmdTZWxlY3RF
bGVtZW50LmNsYXNzTmFtZSA9ICJzdGF0dXMtYmFyLWl0ZW0iOwotICAgIHRoaXMuc29ydGluZ1Nl
bGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy5fY2hhbmdlU29ydGlu
Z0Z1bmN0aW9uLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICBpc0NhdGVnb3J5VmlzaWJsZTogZnVu
Y3Rpb24oY2F0ZWdvcnlOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLnJlc291cmNl
c0dyYXBoc0VsZW1lbnQuaGFzU3R5bGVDbGFzcygiZmlsdGVyLWFsbCIpIHx8IHRoaXMucmVzb3Vy
Y2VzR3JhcGhzRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJmaWx0ZXItIiArIGNhdGVnb3J5TmFtZS50
b0xvd2VyQ2FzZSgpKSk7CisgICAgfSwKIAotICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbHRlckVsZW1l
bnQoY2F0ZWdvcnkpCisgICAgcG9wdWxhdGVTaWRlYmFyOiBmdW5jdGlvbigpCiAgICAgewotICAg
ICAgICBpZiAoY2F0ZWdvcnkgPT09ICJhbGwiKQotICAgICAgICAgICAgdmFyIGxhYmVsID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJBbGwiKTsKLSAgICAgICAgZWxzZSBpZiAoV2ViSW5zcGVjdG9y
LnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0pCi0gICAgICAgICAgICB2YXIgbGFiZWwgPSBX
ZWJJbnNwZWN0b3IucmVzb3VyY2VDYXRlZ29yaWVzW2NhdGVnb3J5XS50aXRsZTsKKyAgICAgICAg
dmFyIHRpbWVHcmFwaEl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudCgi
cmVzb3VyY2VzLXRpbWUtZ3JhcGgtc2lkZWJhci1pdGVtIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJUaW1lIikpOworICAgICAgICB0aW1lR3JhcGhJdGVtLm9uc2VsZWN0ID0gdGhpcy5fZ3JhcGhT
ZWxlY3RlZC5iaW5kKHRoaXMpOwogCi0gICAgICAgIHZhciBjYXRlZ29yeUVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOwotICAgICAgICBjYXRlZ29yeUVsZW1lbnQuY2F0ZWdv
cnkgPSBjYXRlZ29yeTsKLSAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZFN0eWxlQ2xhc3MoY2F0
ZWdvcnkpOwotICAgICAgICBjYXRlZ29yeUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobGFiZWwpKTsKLSAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgdGhpcy5fdXBkYXRlRmlsdGVyLmJpbmQodGhpcyksIGZhbHNlKTsKLSAg
ICAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50LmFwcGVuZENoaWxkKGNhdGVnb3J5RWxlbWVudCk7
CisgICAgICAgIHZhciB0cmFuc2ZlclRpbWVDYWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVRyYW5zZmVyVGltZUNhbGN1bGF0b3IoKTsKKyAgICAgICAgdmFyIHRyYW5zZmVyRHVy
YXRpb25DYWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyYW5zZmVyRHVyYXRp
b25DYWxjdWxhdG9yKCk7CiAKLSAgICAgICAgcmV0dXJuIGNhdGVnb3J5RWxlbWVudDsKLSAgICB9
CisgICAgICAgIHRpbWVHcmFwaEl0ZW0uc29ydGluZ09wdGlvbnMgPSBbCisgICAgICAgICAgICB7
IG5hbWU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU29ydCBieSBTdGFydCBUaW1lIiksIHNvcnRp
bmdGdW5jdGlvbjogV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBh
cmVCeUFzY2VuZGluZ1N0YXJ0VGltZSwgY2FsY3VsYXRvcjogdHJhbnNmZXJUaW1lQ2FsY3VsYXRv
ciB9LAorICAgICAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNvcnQgYnkg
UmVzcG9uc2UgVGltZSIpLCBzb3J0aW5nRnVuY3Rpb246IFdlYkluc3BlY3Rvci5SZXNvdXJjZVNp
ZGViYXJUcmVlRWxlbWVudC5Db21wYXJlQnlBc2NlbmRpbmdSZXNwb25zZVJlY2VpdmVkVGltZSwg
Y2FsY3VsYXRvcjogdHJhbnNmZXJUaW1lQ2FsY3VsYXRvciB9LAorICAgICAgICAgICAgeyBuYW1l
OiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNvcnQgYnkgRW5kIFRpbWUiKSwgc29ydGluZ0Z1bmN0
aW9uOiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyVHJlZUVsZW1lbnQuQ29tcGFyZUJ5QXNj
ZW5kaW5nRW5kVGltZSwgY2FsY3VsYXRvcjogdHJhbnNmZXJUaW1lQ2FsY3VsYXRvciB9LAorICAg
ICAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNvcnQgYnkgRHVyYXRpb24i
KSwgc29ydGluZ0Z1bmN0aW9uOiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyVHJlZUVsZW1l
bnQuQ29tcGFyZUJ5RGVzY2VuZGluZ0R1cmF0aW9uLCBjYWxjdWxhdG9yOiB0cmFuc2ZlckR1cmF0
aW9uQ2FsY3VsYXRvciB9LAorICAgICAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlNvcnQgYnkgTGF0ZW5jeSIpLCBzb3J0aW5nRnVuY3Rpb246IFdlYkluc3BlY3Rvci5SZXNv
dXJjZVNpZGViYXJUcmVlRWxlbWVudC5Db21wYXJlQnlEZXNjZW5kaW5nTGF0ZW5jeSwgY2FsY3Vs
YXRvcjogdHJhbnNmZXJEdXJhdGlvbkNhbGN1bGF0b3IgfSwKKyAgICAgICAgXTsKIAotICAgIHRo
aXMuYWxsRWxlbWVudCA9IGNyZWF0ZUZpbHRlckVsZW1lbnQuY2FsbCh0aGlzLCAiYWxsIik7Cisg
ICAgICAgIHRpbWVHcmFwaEl0ZW0uc2VsZWN0ZWRTb3J0aW5nT3B0aW9uSW5kZXggPSAxOwogCi0g
ICAgLy8gQWRkIGEgZGl2aWRlcgotICAgIHZhciBkaXZpZGVyRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIGRpdmlkZXJFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImRp
dmlkZXIiKTsKLSAgICB0aGlzLmZpbHRlckJhckVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2aWRlckVs
ZW1lbnQpOworICAgICAgICB2YXIgc2l6ZUdyYXBoSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU2lk
ZWJhclRyZWVFbGVtZW50KCJyZXNvdXJjZXMtc2l6ZS1ncmFwaC1zaWRlYmFyLWl0ZW0iLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKSk7CisgICAgICAgIHNpemVHcmFwaEl0ZW0ub25zZWxl
Y3QgPSB0aGlzLl9ncmFwaFNlbGVjdGVkLmJpbmQodGhpcyk7CiAKLSAgICBmb3IgKHZhciBjYXRl
Z29yeSBpbiB0aGlzLmNhdGVnb3JpZXMpCi0gICAgICAgIGNyZWF0ZUZpbHRlckVsZW1lbnQuY2Fs
bCh0aGlzLCBjYXRlZ29yeSk7CisgICAgICAgIHZhciB0cmFuc2ZlclNpemVDYWxjdWxhdG9yID0g
bmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyYW5zZmVyU2l6ZUNhbGN1bGF0b3IoKTsKKyAgICAg
ICAgc2l6ZUdyYXBoSXRlbS5zb3J0aW5nT3B0aW9ucyA9IFsKKyAgICAgICAgICAgIHsgbmFtZTog
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTb3J0IGJ5IFNpemUiKSwgc29ydGluZ0Z1bmN0aW9uOiBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFyVHJlZUVsZW1lbnQuQ29tcGFyZUJ5RGVzY2VuZGlu
Z1NpemUsIGNhbGN1bGF0b3I6IHRyYW5zZmVyU2l6ZUNhbGN1bGF0b3IgfSwKKyAgICAgICAgXTsK
IAotICAgIHRoaXMuZmlsdGVyKHRoaXMuYWxsRWxlbWVudCwgZmFsc2UpOworICAgICAgICBzaXpl
R3JhcGhJdGVtLnNlbGVjdGVkU29ydGluZ09wdGlvbkluZGV4ID0gMDsKIAotICAgIHRoaXMucmVz
ZXQoKTsKKyAgICAgICAgdGhpcy5ncmFwaHNUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3Iu
U2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdSQVBIUyIp
LCB7fSwgdHJ1ZSk7CisgICAgICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5n
cmFwaHNUcmVlRWxlbWVudCk7CiAKLSAgICB0aW1lR3JhcGhJdGVtLnNlbGVjdCgpOwotfQorICAg
ICAgICB0aGlzLmdyYXBoc1RyZWVFbGVtZW50LmFwcGVuZENoaWxkKHRpbWVHcmFwaEl0ZW0pOwor
ICAgICAgICB0aGlzLmdyYXBoc1RyZWVFbGVtZW50LmFwcGVuZENoaWxkKHNpemVHcmFwaEl0ZW0p
OworICAgICAgICB0aGlzLmdyYXBoc1RyZWVFbGVtZW50LmV4cGFuZCgpOwogCi1XZWJJbnNwZWN0
b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewotICAgIHRvb2xiYXJJdGVtQ2xhc3M6ICJy
ZXNvdXJjZXMiLAotCi0gICAgZ2V0IGNhdGVnb3JpZXMoKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLl9jYXRlZ29yaWVzKSB7Ci0gICAgICAgICAgICB0aGlzLl9jYXRlZ29yaWVzID0ge2RvY3Vt
ZW50czoge2NvbG9yOiB7cjogNDcsIGc6IDEwMiwgYjogMjM2fX0sIHN0eWxlc2hlZXRzOiB7Y29s
b3I6IHtyOiAxNTcsIGc6IDIzMSwgYjogMTE5fX0sIGltYWdlczoge2NvbG9yOiB7cjogMTY0LCBn
OiA2MCwgYjogMjU1fX0sIHNjcmlwdHM6IHtjb2xvcjoge3I6IDI1NSwgZzogMTIxLCBiOiAwfX0s
IHhocjoge2NvbG9yOiB7cjogMjMxLCBnOiAyMzEsIGI6IDEwfX0sIGZvbnRzOiB7Y29sb3I6IHty
OiAyNTUsIGc6IDgyLCBiOiA2Mn19LCBvdGhlcjoge2NvbG9yOiB7cjogMTg2LCBnOiAxODYsIGI6
IDE4Nn19fTsKLSAgICAgICAgICAgIGZvciAodmFyIGNhdGVnb3J5IGluIHRoaXMuX2NhdGVnb3Jp
ZXMpCi0gICAgICAgICAgICAgICAgdGhpcy5fY2F0ZWdvcmllc1tjYXRlZ29yeV0udGl0bGUgPSBX
ZWJJbnNwZWN0b3IucmVzb3VyY2VDYXRlZ29yaWVzW2NhdGVnb3J5XS50aXRsZTsKLSAgICAgICAg
fQorICAgICAgICB0aGlzLnJlc291cmNlc1RyZWVFbGVtZW50ID0gbmV3IFdlYkluc3BlY3Rvci5T
aWRlYmFyU2VjdGlvblRyZWVFbGVtZW50KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUkVTT1VSQ0VT
IiksIHt9LCB0cnVlKTsKKyAgICAgICAgdGhpcy5zaWRlYmFyVHJlZS5hcHBlbmRDaGlsZCh0aGlz
LnJlc291cmNlc1RyZWVFbGVtZW50KTsKIAotICAgICAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmll
czsgCisgICAgICAgIHRoaXMucmVzb3VyY2VzVHJlZUVsZW1lbnQuZXhwYW5kKCk7CiAgICAgfSwK
IAotICAgIGZpbHRlcjogZnVuY3Rpb24odGFyZ2V0LCBzZWxlY3RNdWx0aXBsZSkKKyAgICBjcmVh
dGVQYW5lbEVuYWJsZXI6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHVuc2Vs
ZWN0QWxsKCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LmZpbHRlckJhckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIHZhciBjaGlsZCA9IHRoaXMuZmlsdGVyQmFyRWxlbWVudC5jaGlsZE5vZGVzW2ldOwotICAg
ICAgICAgICAgICAgIGlmICghY2hpbGQuY2F0ZWdvcnkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZVN0
eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
dmFyIGZpbHRlckNsYXNzID0gImZpbHRlci0iICsgY2hpbGQuY2F0ZWdvcnkudG9Mb3dlckNhc2Uo
KTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlc0dyYXBoc0VsZW1lbnQucmVtb3ZlU3R5
bGVDbGFzcyhmaWx0ZXJDbGFzcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNUcmVl
RWxlbWVudC5jaGlsZHJlbkxpc3RFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoZmlsdGVyQ2xhc3Mp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2YXIgdGFyZ2V0
RmlsdGVyQ2xhc3MgPSAiZmlsdGVyLSIgKyB0YXJnZXQuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKTsK
KyAgICAgICAgdmFyIHBhbmVsRW5hYmxlckhlYWRpbmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IllvdSBuZWVkIHRvIGVuYWJsZSByZXNvdXJjZSB0cmFja2luZyB0byB1c2UgdGhpcyBwYW5lbC4i
KTsKKyAgICAgICAgdmFyIHBhbmVsRW5hYmxlckRpc2NsYWltZXIgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkVuYWJsaW5nIHJlc291cmNlIHRyYWNraW5nIHdpbGwgcmVsb2FkIHRoZSBwYWdlIGFu
ZCBtYWtlIHBhZ2UgbG9hZGluZyBzbG93ZXIuIik7CisgICAgICAgIHZhciBwYW5lbEVuYWJsZXJC
dXR0b24gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSByZXNvdXJjZSB0cmFja2luZyIp
OwogCi0gICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMuYWxsRWxlbWVudCkgewotICAgICAgICAg
ICAgaWYgKHRhcmdldC5oYXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgY2FuJ3QgdW5zZWxlY3QgQWxsLCBzbyB3ZSBicmVhayBlYXJseSBoZXJlCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICB0aGlzLnBhbmVsRW5h
YmxlclZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlBhbmVsRW5hYmxlclZpZXcoInJlc291cmNlcyIs
IHBhbmVsRW5hYmxlckhlYWRpbmcsIHBhbmVsRW5hYmxlckRpc2NsYWltZXIsIHBhbmVsRW5hYmxl
ckJ1dHRvbik7CisgICAgICAgIHRoaXMucGFuZWxFbmFibGVyVmlldy5hZGRFdmVudExpc3RlbmVy
KCJlbmFibGUgY2xpY2tlZCIsIHRoaXMuX2VuYWJsZVJlc291cmNlVHJhY2tpbmcsIHRoaXMpOwog
Ci0gICAgICAgICAgICAvLyBJZiBBbGwgd2Fzbid0IHNlbGVjdGVkLCBhbmQgbm93IGlzLCB1bnNl
bGVjdCBldmVyeXRoaW5nIGVsc2UuCi0gICAgICAgICAgICB1bnNlbGVjdEFsbC5jYWxsKHRoaXMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU29tZXRoaW5nIG90aGVyIHRoYW4g
QWxsIGlzIGJlaW5nIHNlbGVjdGVkLCBzbyB3ZSB3YW50IHRvIHVuc2VsZWN0IEFsbC4KLSAgICAg
ICAgICAgIGlmICh0aGlzLmFsbEVsZW1lbnQuaGFzU3R5bGVDbGFzcygic2VsZWN0ZWQiKSkgewot
ICAgICAgICAgICAgICAgIHRoaXMuYWxsRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJzZWxlY3Rl
ZCIpOwotICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzR3JhcGhzRWxlbWVudC5yZW1vdmVT
dHlsZUNsYXNzKCJmaWx0ZXItYWxsIik7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNU
cmVlRWxlbWVudC5jaGlsZHJlbkxpc3RFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImZpbHRlci1h
bGwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFz
ZWxlY3RNdWx0aXBsZSkgewotICAgICAgICAgICAgLy8gSWYgbXVsdGlwbGUgc2VsZWN0aW9uIGlz
IG9mZiwgd2Ugd2FudCB0byB1bnNlbGVjdCBldmVyeXRoaW5nIGVsc2UKLSAgICAgICAgICAgIC8v
IGFuZCBqdXN0IHNlbGVjdCBvdXJzZWx2ZXMuCi0gICAgICAgICAgICB1bnNlbGVjdEFsbC5jYWxs
KHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0YXJnZXQuYWRkU3R5bGVDbGFzcygi
c2VsZWN0ZWQiKTsKLSAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzR3JhcGhzRWxlbWVudC5hZGRT
dHlsZUNsYXNzKHRhcmdldEZpbHRlckNsYXNzKTsKLSAgICAgICAgICAgIHRoaXMucmVzb3VyY2Vz
VHJlZUVsZW1lbnQuY2hpbGRyZW5MaXN0RWxlbWVudC5hZGRTdHlsZUNsYXNzKHRhcmdldEZpbHRl
ckNsYXNzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHRhcmdldC5oYXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7Ci0gICAgICAg
ICAgICAvLyBJZiBzZWxlY3RNdWx0aXBsZSBpcyB0dXJuZWQgb24sIGFuZCB3ZSB3ZXJlIHNlbGVj
dGVkLCB3ZSBqdXN0Ci0gICAgICAgICAgICAvLyB3YW50IHRvIHVuc2VsZWN0IG91cnNlbHZlcy4K
LSAgICAgICAgICAgIHRhcmdldC5yZW1vdmVTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotCi0gICAg
ICAgICAgICB0aGlzLnJlc291cmNlc0dyYXBoc0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyh0YXJn
ZXRGaWx0ZXJDbGFzcyk7Ci0gICAgICAgICAgICB0aGlzLnJlc291cmNlc1RyZWVFbGVtZW50LmNo
aWxkcmVuTGlzdEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyh0YXJnZXRGaWx0ZXJDbGFzcyk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiBzZWxlY3RNdWx0aXBsZSBpcyB0dXJu
ZWQgb24sIGFuZCB3ZSB3ZXJlbid0IHNlbGVjdGVkLCB3ZSBqdXN0Ci0gICAgICAgICAgICAvLyB3
YW50IHRvIHNlbGVjdCBvdXJzZWx2ZXMuCi0gICAgICAgICAgICB0YXJnZXQuYWRkU3R5bGVDbGFz
cygic2VsZWN0ZWQiKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGFu
ZWxFbmFibGVyVmlldy5lbGVtZW50KTsKIAotICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNHcmFw
aHNFbGVtZW50LmFkZFN0eWxlQ2xhc3ModGFyZ2V0RmlsdGVyQ2xhc3MpOwotICAgICAgICAgICAg
dGhpcy5yZXNvdXJjZXNUcmVlRWxlbWVudC5jaGlsZHJlbkxpc3RFbGVtZW50LmFkZFN0eWxlQ2xh
c3ModGFyZ2V0RmlsdGVyQ2xhc3MpOwotICAgICAgICB9CisgICAgICAgIHRoaXMuZW5hYmxlVG9n
Z2xlQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rvci5TdGF0dXNCYXJCdXR0b24oIiIsICJlbmFibGUt
dG9nZ2xlLXN0YXR1cy1iYXItaXRlbSIpOworICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZVJlc291cmNlVHJhY2tpbmcu
YmluZCh0aGlzKSwgZmFsc2UpOwogICAgIH0sCiAKLSAgICBpc0NhdGVnb3J5VmlzaWJsZTogZnVu
Y3Rpb24oY2F0ZWdvcnlOYW1lKQorICAgIGNyZWF0ZVN0YXR1c2JhckJ1dHRvbnM6IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAodGhpcy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50Lmhh
c1N0eWxlQ2xhc3MoImZpbHRlci1hbGwiKSB8fCB0aGlzLnJlc291cmNlc0dyYXBoc0VsZW1lbnQu
aGFzU3R5bGVDbGFzcygiZmlsdGVyLSIgKyBjYXRlZ29yeU5hbWUudG9Mb3dlckNhc2UoKSkpOwot
ICAgIH0sCisgICAgICAgIHRoaXMubGFyZ2VyUmVzb3VyY2VzQnV0dG9uID0gbmV3IFdlYkluc3Bl
Y3Rvci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJVc2Ugc21hbGwgcmVz
b3VyY2Ugcm93cy4iKSwgInJlc291cmNlcy1sYXJnZXItcmVzb3VyY2VzLXN0YXR1cy1iYXItaXRl
bSIpOworICAgICAgICB0aGlzLmxhcmdlclJlc291cmNlc0J1dHRvbi50b2dnbGVkID0gUHJlZmVy
ZW5jZXMucmVzb3VyY2VzTGFyZ2VSb3dzOworICAgICAgICB0aGlzLmxhcmdlclJlc291cmNlc0J1
dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZUxhcmdlclJlc291cmNl
cy5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgICAgIGlmICghUHJlZmVyZW5jZXMucmVzb3VyY2Vz
TGFyZ2VSb3dzKSB7CisgICAgICAgICAgICBQcmVmZXJlbmNlcy5yZXNvdXJjZXNMYXJnZVJvd3Mg
PSAhUHJlZmVyZW5jZXMucmVzb3VyY2VzTGFyZ2VSb3dzOworICAgICAgICAgICAgdGhpcy5fdG9n
Z2xlTGFyZ2VyUmVzb3VyY2VzKCk7IC8vIHRoaXMgd2lsbCB0b2dnbGUgdGhlIHByZWZlcmVuY2Ug
YmFjayB0byB0aGUgb3JpZ2luYWwKKyAgICAgICAgfQogCi0gICAgX3VwZGF0ZUZpbHRlcjogZnVu
Y3Rpb24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBpc01hYyA9IEluc3BlY3RvckNvbnRyb2xsZXIu
cGxhdGZvcm0oKS5pbmRleE9mKCJtYWMtIikgPT09IDA7Ci0gICAgICAgIHZhciBzZWxlY3RNdWx0
aXBsZSA9IGZhbHNlOwotICAgICAgICBpZiAoaXNNYWMgJiYgZS5tZXRhS2V5ICYmICFlLmN0cmxL
ZXkgJiYgIWUuYWx0S2V5ICYmICFlLnNoaWZ0S2V5KQotICAgICAgICAgICAgc2VsZWN0TXVsdGlw
bGUgPSB0cnVlOwotICAgICAgICBpZiAoIWlzTWFjICYmIGUuY3RybEtleSAmJiAhZS5tZXRhS2V5
ICYmICFlLmFsdEtleSAmJiAhZS5zaGlmdEtleSkKLSAgICAgICAgICAgIHNlbGVjdE11bHRpcGxl
ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHRoaXMuZmlsdGVyKGUudGFyZ2V0LCBzZWxlY3RN
dWx0aXBsZSk7CisgICAgICAgIHRoaXMuc29ydGluZ1NlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKKyAgICAgICAgdGhpcy5zb3J0aW5nU2VsZWN0RWxlbWVu
dC5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtIjsKKyAgICAgICAgdGhpcy5zb3J0aW5nU2Vs
ZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9jaGFuZ2VTb3J0aW5n
RnVuY3Rpb24uYmluZCh0aGlzKSwgZmFsc2UpOwogICAgIH0sCiAKLSAgICBnZXQgdG9vbGJhckl0
ZW1MYWJlbCgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJS
ZXNvdXJjZXMiKTsKLSAgICB9LAotICAgIAogICAgIGdldCBtYWluUmVzb3VyY2VMb2FkVGltZSgp
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbWFpblJlc291cmNlTG9hZFRpbWUgfHwgLTE7
CkBAIC0yODUsNyArMTY4LDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5fbWFpblJlc291cmNlTG9hZFRpbWUgPSB4OwogICAgICAgICAK
ICAgICAgICAgLy8gVXBkYXRlIHRoZSBkaXZpZGVycyB0byBkcmF3IHRoZSBuZXcgbGluZQotICAg
ICAgICB0aGlzLl91cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQodHJ1ZSk7CisgICAgICAgIHRo
aXMudXBkYXRlR3JhcGhEaXZpZGVyc0lmTmVlZGVkKHRydWUpOwogICAgIH0sCiAgICAgCiAgICAg
Z2V0IG1haW5SZXNvdXJjZURPTUNvbnRlbnRUaW1lKCkKQEAgLTMwMCwyMCArMTgzLDEyIEBAIFdl
Ykluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIAogICAgICAg
ICB0aGlzLl9tYWluUmVzb3VyY2VET01Db250ZW50VGltZSA9IHg7CiAgICAgICAgIAotICAgICAg
ICB0aGlzLl91cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQodHJ1ZSk7Ci0gICAgfSwKLQotICAg
IGdldCBzdGF0dXNCYXJJdGVtcygpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMuZW5hYmxl
VG9nZ2xlQnV0dG9uLmVsZW1lbnQsIHRoaXMubGFyZ2VyUmVzb3VyY2VzQnV0dG9uLmVsZW1lbnQs
IHRoaXMuc29ydGluZ1NlbGVjdEVsZW1lbnRdOworICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoRGl2
aWRlcnNJZk5lZWRlZCh0cnVlKTsKICAgICB9LAogCiAgICAgc2hvdzogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5zaG93LmNhbGwodGhpcyk7
Ci0KLSAgICAgICAgdGhpcy5fdXBkYXRlRGl2aWRlcnNMYWJlbEJhclBvc2l0aW9uKCk7Ci0gICAg
ICAgIHRoaXMucmVmcmVzaElmTmVlZGVkKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5BYnN0cmFj
dFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzKTsKIAogICAgICAgICB2YXIg
dmlzaWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3OwogICAgICAgICBpZiAodmlzaWJsZVZpZXcp
IHsKQEAgLTMzNiw3ICsyMTEsNyBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlID0gewogCiAgICAgcmVzaXplOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl91
cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkFic3Ry
YWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyk7CiAKICAgICAgICAg
dmFyIHZpc2libGVWaWV3ID0gdGhpcy52aXNpYmxlVmlldzsKICAgICAgICAgaWYgKHZpc2libGVW
aWV3ICYmICJyZXNpemUiIGluIHZpc2libGVWaWV3KQpAQCAtNDQyLDM1ICszMTcsNiBAQCBXZWJJ
bnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zb3J0
UmVzb3VyY2VzSWZOZWVkZWQoKTsKICAgICB9LAogCi0gICAgZ2V0IG5lZWRzUmVmcmVzaCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbmVlZHNSZWZyZXNoOwotICAgIH0sCi0KLSAgICBz
ZXQgbmVlZHNSZWZyZXNoKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbmVlZHNSZWZyZXNo
ID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX25lZWRzUmVmcmVz
aCA9IHg7Ci0KLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUg
JiYgISgiX3JlZnJlc2hUaW1lb3V0IiBpbiB0aGlzKSkKLSAgICAgICAgICAgICAgICB0aGlzLl9y
ZWZyZXNoVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5yZWZyZXNoLmJpbmQodGhpcyksIDUwMCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIl9yZWZyZXNoVGltZW91dCIgaW4g
dGhpcykgewotICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWZyZXNoVGltZW91
dCk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JlZnJlc2hUaW1lb3V0OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHJlZnJlc2hJZk5lZWRlZDogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKQotICAgICAgICAgICAg
dGhpcy5yZWZyZXNoKCk7Ci0gICAgfSwKLQogICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkKICAgICB7
CiAgICAgICAgIHRoaXMubmVlZHNSZWZyZXNoID0gZmFsc2U7CkBAIC01MDYsNyArMzUyLDcgQEAg
V2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlz
Ll9zdGFsZVJlc291cmNlcyA9IFtdOwogCi0gICAgICAgIHRoaXMuX3VwZGF0ZUdyYXBoRGl2aWRl
cnNJZk5lZWRlZCgpOworICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZCgp
OwogICAgICAgICB0aGlzLl9zb3J0UmVzb3VyY2VzSWZOZWVkZWQoKTsKICAgICAgICAgdGhpcy5f
dXBkYXRlU3VtbWFyeUdyYXBoKCk7CiAgICAgfSwKQEAgLTU1Nyw3ICs0MDMsNyBAQCBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlc291cmNl
c0dyYXBoc0VsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgdGhpcy5zdW1tYXJ5QmFy
LnJlc2V0KCk7CiAKLSAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhEaXZpZGVyc0lmTmVlZGVkKHRy
dWUpOworICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZCh0cnVlKTsKIAog
ICAgICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlci5yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgp
KSB7CiAgICAgICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRvbi50aXRsZSA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiUmVzb3VyY2UgdHJhY2tpbmcgZW5hYmxlZC4gQ2xpY2sgdG8gZGlzYWJs
ZS4iKTsKQEAgLTc3Niw0OCArNjIyLDEzIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgX3VwZGF0ZUdyYXBoRGl2aWRl
cnNJZk5lZWRlZDogZnVuY3Rpb24oZm9yY2UpCisgICAgdXBkYXRlR3JhcGhEaXZpZGVyc0lmTmVl
ZGVkOiBmdW5jdGlvbihmb3JjZSkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7
Ci0gICAgICAgICAgICB0aGlzLm5lZWRzUmVmcmVzaCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCA8
PSAwKSB7Ci0gICAgICAgICAgICAvLyBUaGUgc3R5bGVzaGVldCBoYXNuJ3QgbG9hZGVkIHlldCBv
ciB0aGUgd2luZG93IGlzIGNsb3NlZCwKLSAgICAgICAgICAgIC8vIHNvIHdlIGNhbid0IGNhbGN1
bGF0ZSB3aGF0IGlzIG5lZWQuIFJldHVybiBlYXJseS4KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBkaXZpZGVyQ291bnQgPSBNYXRoLnJvdW5kKHRoaXMuZGl2
aWRlcnNFbGVtZW50Lm9mZnNldFdpZHRoIC8gNjQpOwotICAgICAgICB2YXIgc2xpY2UgPSB0aGlz
LmNhbGN1bGF0b3IuYm91bmRhcnlTcGFuIC8gZGl2aWRlckNvdW50OwotICAgICAgICBpZiAoIWZv
cmNlICYmIHRoaXMuX2N1cnJlbnREaXZpZGVyU2xpY2UgPT09IHNsaWNlKQorICAgICAgICB2YXIg
cHJvY2VlZCA9IFdlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLnVw
ZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZC5jYWxsKHRoaXMsIGZvcmNlKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghcHJvY2VlZCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlz
Ll9jdXJyZW50RGl2aWRlclNsaWNlID0gc2xpY2U7Ci0KLSAgICAgICAgdGhpcy5kaXZpZGVyc0Vs
ZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5ldmVudERpdmlkZXJzRWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLmRpdmlkZXJzTGFiZWxCYXJFbGVtZW50
LnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gZGl2aWRl
ckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBkaXZpZGVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBkaXZpZGVyLmNsYXNzTmFtZSA9ICJyZXNvdXJj
ZXMtZGl2aWRlciI7Ci0gICAgICAgICAgICBpZiAoaSA9PT0gZGl2aWRlckNvdW50KQotICAgICAg
ICAgICAgICAgIGRpdmlkZXIuYWRkU3R5bGVDbGFzcygibGFzdCIpOwotICAgICAgICAgICAgZGl2
aWRlci5zdHlsZS5sZWZ0ID0gKChpIC8gZGl2aWRlckNvdW50KSAqIDEwMCkgKyAiJSI7Ci0KLSAg
ICAgICAgICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50LmFwcGVuZENoaWxkKGRpdmlkZXIuY2xvbmVO
b2RlKCkpOwotCi0gICAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICAgICAgICAgIGxhYmVsLmNsYXNzTmFtZSA9ICJyZXNvdXJjZXMtZGl2aWRl
ci1sYWJlbCI7Ci0gICAgICAgICAgICBpZiAoIWlzTmFOKHNsaWNlKSkKLSAgICAgICAgICAgICAg
ICBsYWJlbC50ZXh0Q29udGVudCA9IHRoaXMuY2FsY3VsYXRvci5mb3JtYXRWYWx1ZShzbGljZSAq
IGkpOwotICAgICAgICAgICAgZGl2aWRlci5hcHBlbmRDaGlsZChsYWJlbCk7Ci0KLSAgICAgICAg
ICAgIHRoaXMuZGl2aWRlcnNMYWJlbEJhckVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2aWRlcik7Ci0g
ICAgICAgIH0KLQogICAgICAgICBpZiAodGhpcy5jYWxjdWxhdG9yLnN0YXJ0QXRaZXJvIHx8ICF0
aGlzLmNhbGN1bGF0b3IuY29tcHV0ZVBlcmNlbnRhZ2VGcm9tRXZlbnRUaW1lKSB7CiAgICAgICAg
ICAgICAvLyBJZiBvdXIgY3VycmVudCBzb3J0aW5nIG1ldGhvZCBzdGFydHMgYXQgemVybywgdGhh
dCBtZWFucyBpdCBzaG93cyBhbGwKICAgICAgICAgICAgIC8vIHJlc291cmNlcyBzdGFydGluZyBh
dCB0aGUgc2FtZSBwb2ludCwgYW5kIHNvIG9uTG9hZCBldmVudCBhbmQgRE9NQ29udGVudApAQCAt
ODU5LDIwICs2NzAsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICB9CiAgICAgfSwKIAotICAgIF91cGRhdGVTdW1tYXJ5R3JhcGg6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc3VtbWFyeUJhci51cGRhdGUodGhpcy5fcmVzb3VyY2Vz
KTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZURpdmlkZXJzTGFiZWxCYXJQb3NpdGlvbjogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuY29udGFpbmVyRWxlbWVu
dC5zY3JvbGxUb3A7Ci0gICAgICAgIHZhciBkaXZpZGVyc1RvcCA9IChzY3JvbGxUb3AgPCB0aGlz
LnN1bW1hcnlCYXIuZWxlbWVudC5vZmZzZXRIZWlnaHQgPyB0aGlzLnN1bW1hcnlCYXIuZWxlbWVu
dC5vZmZzZXRIZWlnaHQgOiBzY3JvbGxUb3ApOwotICAgICAgICB0aGlzLmRpdmlkZXJzRWxlbWVu
dC5zdHlsZS50b3AgPSBzY3JvbGxUb3AgKyAicHgiOwotICAgICAgICB0aGlzLmV2ZW50RGl2aWRl
cnNFbGVtZW50LnN0eWxlLnRvcCA9IHNjcm9sbFRvcCArICJweCI7Ci0gICAgICAgIHRoaXMuZGl2
aWRlcnNMYWJlbEJhckVsZW1lbnQuc3R5bGUudG9wID0gZGl2aWRlcnNUb3AgKyAicHgiOwotICAg
IH0sCi0KICAgICBfZ3JhcGhTZWxlY3RlZDogZnVuY3Rpb24odHJlZUVsZW1lbnQpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5fbGFzdFNlbGVjdGVkR3JhcGhUcmVlRWxlbWVudCkKQEAgLTk2NCwx
MCArNzYxLDggQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAog
ICAgIHVwZGF0ZU1haW5WaWV3V2lkdGg6IGZ1bmN0aW9uKHdpZHRoKQogICAgIHsKLSAgICAgICAg
dGhpcy5jb250YWluZXJDb250ZW50RWxlbWVudC5zdHlsZS5sZWZ0ID0gd2lkdGggKyAicHgiOwor
ICAgICAgICBXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlwZS51cGRh
dGVNYWluVmlld1dpZHRoLmNhbGwodGhpcywgd2lkdGgpOwogICAgICAgICB0aGlzLnZpZXdzQ29u
dGFpbmVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gd2lkdGggKyAicHgiOwotCi0gICAgICAgIHRoaXMu
X3VwZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZCgpOwogICAgIH0sCiAKICAgICBfZW5hYmxlUmVz
b3VyY2VUcmFja2luZzogZnVuY3Rpb24oKQpAQCAtOTkxLDg1ICs3ODYsMTEgQEAgV2ViSW5zcGVj
dG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVs
LnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLlJlc291cmNlQ2FsY3VsYXRvciA9IGZ1bmN0aW9u
KCkKLXsKLX0KLQotV2ViSW5zcGVjdG9yLlJlc291cmNlQ2FsY3VsYXRvci5wcm90b3R5cGUgPSB7
Ci0gICAgY29tcHV0ZVN1bW1hcnlWYWx1ZXM6IGZ1bmN0aW9uKHJlc291cmNlcykKLSAgICB7Ci0g
ICAgICAgIHZhciB0b3RhbCA9IDA7Ci0gICAgICAgIHZhciBjYXRlZ29yeVZhbHVlcyA9IHt9Owot
Ci0gICAgICAgIHZhciByZXNvdXJjZXNMZW5ndGggPSByZXNvdXJjZXMubGVuZ3RoOwotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB0
aGlzLl92YWx1ZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAi
dW5kZWZpbmVkIikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICgh
KHJlc291cmNlLmNhdGVnb3J5Lm5hbWUgaW4gY2F0ZWdvcnlWYWx1ZXMpKQotICAgICAgICAgICAg
ICAgIGNhdGVnb3J5VmFsdWVzW3Jlc291cmNlLmNhdGVnb3J5Lm5hbWVdID0gMDsKLSAgICAgICAg
ICAgIGNhdGVnb3J5VmFsdWVzW3Jlc291cmNlLmNhdGVnb3J5Lm5hbWVdICs9IHZhbHVlOwotICAg
ICAgICAgICAgdG90YWwgKz0gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4ge2Nh
dGVnb3J5VmFsdWVzOiBjYXRlZ29yeVZhbHVlcywgdG90YWw6IHRvdGFsfTsKLSAgICB9LAotCi0g
ICAgY29tcHV0ZUJhckdyYXBoUGVyY2VudGFnZXM6IGZ1bmN0aW9uKHJlc291cmNlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHtzdGFydDogMCwgbWlkZGxlOiAwLCBlbmQ6ICh0aGlzLl92YWx1ZShy
ZXNvdXJjZSkgLyB0aGlzLmJvdW5kYXJ5U3BhbikgKiAxMDB9OwotICAgIH0sCi0KLSAgICBjb21w
dXRlQmFyR3JhcGhMYWJlbHM6IGZ1bmN0aW9uKHJlc291cmNlKQotICAgIHsKLSAgICAgICAgY29u
c3QgbGFiZWwgPSB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3ZhbHVlKHJlc291cmNlKSk7Ci0gICAg
ICAgIHZhciB0b29sdGlwID0gbGFiZWw7Ci0gICAgICAgIGlmIChyZXNvdXJjZS5jYWNoZWQpCi0g
ICAgICAgICAgICB0b29sdGlwID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyAoZnJvbSBjYWNo
ZSkiLCB0b29sdGlwKTsKLSAgICAgICAgcmV0dXJuIHtsZWZ0OiBsYWJlbCwgcmlnaHQ6IGxhYmVs
LCB0b29sdGlwOiB0b29sdGlwfTsKLSAgICB9LAotCi0gICAgZ2V0IGJvdW5kYXJ5U3BhbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5tYXhpbXVtQm91bmRhcnkgLSB0aGlzLm1pbmltdW1C
b3VuZGFyeTsKLSAgICB9LAotCi0gICAgdXBkYXRlQm91bmRhcmllczogZnVuY3Rpb24ocmVzb3Vy
Y2UpCi0gICAgewotICAgICAgICB0aGlzLm1pbmltdW1Cb3VuZGFyeSA9IDA7Ci0KLSAgICAgICAg
dmFyIHZhbHVlID0gdGhpcy5fdmFsdWUocmVzb3VyY2UpOwotICAgICAgICBpZiAodHlwZW9mIHRo
aXMubWF4aW11bUJvdW5kYXJ5ID09PSAidW5kZWZpbmVkIiB8fCB2YWx1ZSA+IHRoaXMubWF4aW11
bUJvdW5kYXJ5KSB7Ci0gICAgICAgICAgICB0aGlzLm1heGltdW1Cb3VuZGFyeSA9IHZhbHVlOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxl
dGUgdGhpcy5taW5pbXVtQm91bmRhcnk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLm1heGltdW1Cb3Vu
ZGFyeTsKLSAgICB9LAotCi0gICAgX3ZhbHVlOiBmdW5jdGlvbihyZXNvdXJjZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0sCi0KLSAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24odmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKLSAgICB9Ci19CitX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlOwogCiBXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUaW1lQ2FsY3VsYXRvciA9IGZ1bmN0aW9uKHN0YXJ0QXRaZXJvKQogewotICAgIFdlYklu
c3BlY3Rvci5SZXNvdXJjZUNhbGN1bGF0b3IuY2FsbCh0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVDYWxjdWxhdG9yLmNhbGwodGhpcyk7CiAgICAgdGhpcy5zdGFydEF0WmVybyA9IHN0
YXJ0QXRaZXJvOwogfQogCkBAIC0xMjMwLDcgKzk1MSw3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJj
ZVRpbWVDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKICAgICB9LAogfQogCi1XZWJJbnNwZWN0b3Iu
UmVzb3VyY2VUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9y
LlJlc291cmNlQ2FsY3VsYXRvci5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1l
Q2FsY3VsYXRvci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2Fs
Y3VsYXRvci5wcm90b3R5cGU7CiAKIFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyYW5zZmVyVGltZUNh
bGN1bGF0b3IgPSBmdW5jdGlvbigpCiB7CkBAIC0xMjc3LDEwICs5OTgsMTkgQEAgV2ViSW5zcGVj
dG9yLlJlc291cmNlVHJhbnNmZXJEdXJhdGlvbkNhbGN1bGF0b3IucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3QKIAogV2ViSW5zcGVjdG9yLlJlc291cmNlVHJhbnNmZXJTaXplQ2FsY3Vs
YXRvciA9IGZ1bmN0aW9uKCkKIHsKLSAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYWxjdWxhdG9y
LmNhbGwodGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2FsY3VsYXRvci5jYWxsKHRo
aXMpOwogfQogCiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmFuc2ZlclNpemVDYWxjdWxhdG9yLnBy
b3RvdHlwZSA9IHsKKyAgICBjb21wdXRlQmFyR3JhcGhMYWJlbHM6IGZ1bmN0aW9uKHJlc291cmNl
KQorICAgIHsKKyAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3Zh
bHVlKHJlc291cmNlKSk7CisgICAgICAgIHZhciB0b29sdGlwID0gbGFiZWw7CisgICAgICAgIGlm
IChyZXNvdXJjZS5jYWNoZWQpCisgICAgICAgICAgICB0b29sdGlwID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlcyAoZnJvbSBjYWNoZSkiLCB0b29sdGlwKTsKKyAgICAgICAgcmV0dXJuIHtsZWZ0
OiBsYWJlbCwgcmlnaHQ6IGxhYmVsLCB0b29sdGlwOiB0b29sdGlwfTsKKyAgICB9LAorCiAgICAg
X3ZhbHVlOiBmdW5jdGlvbihyZXNvdXJjZSkKICAgICB7CiAgICAgICAgIHJldHVybiByZXNvdXJj
ZS5jb250ZW50TGVuZ3RoOwpAQCAtMTI5Miw3ICsxMDIyLDcgQEAgV2ViSW5zcGVjdG9yLlJlc291
cmNlVHJhbnNmZXJTaXplQ2FsY3VsYXRvci5wcm90b3R5cGUgPSB7CiAgICAgfQogfQogCi1XZWJJ
bnNwZWN0b3IuUmVzb3VyY2VUcmFuc2ZlclNpemVDYWxjdWxhdG9yLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYWxjdWxhdG9yLnByb3RvdHlwZTsKK1dlYkluc3Bl
Y3Rvci5SZXNvdXJjZVRyYW5zZmVyU2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlOwogCiBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VTaWRlYmFyVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihyZXNvdXJjZSkKIHsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdW1tYXJ5QmFyLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N1bW1hcnlCYXIuanMKaW5kZXggYmJmMmIxYS4uMWMz
MTQ0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N1bW1hcnlCYXIu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N1bW1hcnlCYXIuanMKQEAgLTc0
LDggKzc0LDcgQEAgV2ViSW5zcGVjdG9yLlN1bW1hcnlCYXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICB2YXIgY29sb3IgPSB0aGlzLmNhdGVnb3JpZXNbY2F0ZWdvcnldLmNvbG9yOwotICAgICAgICAg
ICAgdmFyIGNvbG9yU3RyaW5nID0gInJnYigiICsgY29sb3IuciArICIsICIgKyBjb2xvci5nICsg
IiwgIiArIGNvbG9yLmIgKyAiKSI7CisgICAgICAgICAgICB2YXIgY29sb3JTdHJpbmcgPSB0aGlz
LmNhdGVnb3JpZXNbY2F0ZWdvcnldLmNvbG9yOwogCiAgICAgICAgICAgICB2YXIgZmlsbFNlZ21l
bnQgPSB7Y29sb3I6IGNvbG9yU3RyaW5nLCB2YWx1ZTogc2l6ZX07CiAgICAgICAgICAgICBmaWxs
U2VnbWVudHMucHVzaChmaWxsU2VnbWVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjCmluZGV4IDg5OGJkNGMuLmExZDY3MWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9XZWJLaXQucXJjCkBAIC0xLDYgKzEsNyBAQAogPCFET0NUWVBFIFJDQz48UkNDIHZlcnNpb249
IjEuMCI+CiA8cXJlc291cmNlIHByZWZpeD0iL3dlYmtpdC9pbnNwZWN0b3IiPgogICAgIDxmaWxl
Pmluc3BlY3Rvci5odG1sPC9maWxlPgorICAgIDxmaWxlPkFic3RyYWN0VGltZWxpbmVQYW5lbC5q
czwvZmlsZT4KICAgICA8ZmlsZT5Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+
CiAgICAgPGZpbGU+QnJlYWtwb2ludC5qczwvZmlsZT4KICAgICA8ZmlsZT5CcmVha3BvaW50c1Np
ZGViYXJQYW5lLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5odG1sCmluZGV4IDM2MzUxYjcuLmRlZTAzZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTc0LDYgKzc0LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdGF0dXNCYXJCdXR0b24uanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN1bW1hcnlCYXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkVs
ZW1lbnRzUGFuZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IkFic3RyYWN0VGltZWxpbmVQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VzUGFuZWwuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNjcmlwdHNQYW5lbC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU3Rv
cmFnZVBhbmVsLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzCmluZGV4IDkxMzE4ZjYuLjhiNDZlZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcwpAQCAtMzg0LDEzICszODQsMTMgQEAgV2ViSW5zcGVjdG9yLmxvYWRl
ZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmRvbUFnZW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01B
Z2VudCgpOwogCiAgICAgdGhpcy5yZXNvdXJjZUNhdGVnb3JpZXMgPSB7Ci0gICAgICAgIGRvY3Vt
ZW50czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KFdlYkluc3BlY3Rvci5VSVN0
cmluZygiRG9jdW1lbnRzIiksICJkb2N1bWVudHMiKSwKLSAgICAgICAgc3R5bGVzaGVldHM6IG5l
dyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0
eWxlc2hlZXRzIiksICJzdHlsZXNoZWV0cyIpLAotICAgICAgICBpbWFnZXM6IG5ldyBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VDYXRlZ29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkltYWdlcyIpLCAi
aW1hZ2VzIiksCi0gICAgICAgIHNjcmlwdHM6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRl
Z29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNjcmlwdHMiKSwgInNjcmlwdHMiKSwKLSAgICAg
ICAgeGhyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJYSFIiKSwgInhociIpLAotICAgICAgICBmb250czogbmV3IFdlYkluc3BlY3Rvci5S
ZXNvdXJjZUNhdGVnb3J5KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRm9udHMiKSwgImZvbnRzIiks
Ci0gICAgICAgIG90aGVyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJPdGhlciIpLCAib3RoZXIiKQorICAgICAgICBkb2N1bWVudHM6IG5l
dyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgiZG9jdW1lbnRzIiwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJEb2N1bWVudHMiKSwgInJnYig0NywxMDIsMjM2KSIpLAorICAgICAgICBzdHls
ZXNoZWV0czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJzdHlsZXNoZWV0cyIs
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3R5bGVzaGVldHMiKSwgInJnYigxNTcsMjMxLDExOSki
KSwKKyAgICAgICAgaW1hZ2VzOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoImlt
YWdlcyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW1hZ2VzIiksICJyZ2IoMTY0LDYwLDI1NSki
KSwKKyAgICAgICAgc2NyaXB0czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJz
Y3JpcHRzIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTY3JpcHRzIiksICJyZ2IoMjU1LDEyMSww
KSIpLAorICAgICAgICB4aHI6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgieGhy
IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJYSFIiKSwgInJnYigyMzEsMjMxLDEwKSIpLAorICAg
ICAgICBmb250czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJmb250cyIsIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiRm9udHMiKSwgInJnYigyNTUsODIsNjIpIiksCisgICAgICAg
IG90aGVyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoIm90aGVyIiwgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJPdGhlciIpLCAicmdiKDE4NiwxODYsMTg2KSIpCiAgICAgfTsKIAog
ICAgIHRoaXMucGFuZWxzID0ge307Cg==
</data>
<flag name="review"
          id="23324"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41885</attachid>
            <date>2009-10-26 13:10:56 -0700</date>
            <delta_ts>2009-10-26 14:29:03 -0700</delta_ts>
            <desc>[PATCH] Step 1 with comments addressed.</desc>
            <filename>abstract_timeline</filename>
            <type>text/plain</type>
            <size>51034</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2Y5MWVkYy4uN2Y5OWIxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAwOS0xMC0yNiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBFeHRyYWN0IEFic3RyYWN0VGltZWxp
bmVQYW5lbCB0aGF0IHdpbGwgYmUgYSBiYXNlCisgICAgICAgIGNsYXNzIGZvciBSZXNvdXJjZXNQ
YW5lbCBhbmQgVGltZWxpbmVQYW5lbC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzA3NzYKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0Fic3RyYWN0VGltZWxpbmVQYW5lbC5qczogQWRkZWQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5B
YnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmdldCBjYXRlZ29yaWVzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLnNob3dDYXRlZ29y
eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlw
ZS5oaWRlQ2F0ZWdvcnkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQ
YW5lbC5wcm90b3R5cGUuY3JlYXRlVGltZWxpbmVQYW5lbHMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZUZpbHRlclBhbmVsLmNy
ZWF0ZUZpbHRlckVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFic3RyYWN0VGltZWxp
bmVQYW5lbC5wcm90b3R5cGUuX2NyZWF0ZUZpbHRlclBhbmVsKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmZpbHRlcik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVy
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBl
Ll9jcmVhdGVHcmFwaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBh
bmVsLnByb3RvdHlwZS51cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuX3VwZGF0ZVN1bW1hcnlH
cmFwaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3Rv
dHlwZS5fdXBkYXRlRGl2aWRlcnNMYWJlbEJhclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmdldCBuZWVkc1JlZnJlc2gpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuc2V0
IG5lZWRzUmVmcmVzaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBh
bmVsLnByb3RvdHlwZS5yZWZyZXNoSWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFi
c3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUuc2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlwZS5yZXNpemUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkFic3RyYWN0VGltZWxpbmVQYW5lbC5wcm90b3R5cGUudXBkYXRlTWFpblZpZXdX
aWR0aCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVDYWxjdWxhdG9yKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlLmNvbXB1dGVTdW1t
YXJ5VmFsdWVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJv
dG90eXBlLmNvbXB1dGVCYXJHcmFwaFBlcmNlbnRhZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlLmNvbXB1dGVCYXJHcmFwaExhYmVscyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVDYWxjdWxhdG9yLnByb3RvdHlwZS5nZXQgYm91
bmRhcnlTcGFuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJv
dG90eXBlLnVwZGF0ZUJvdW5kYXJpZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5l
Q2FsY3VsYXRvci5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lQ2FsY3VsYXRvci5wcm90b3R5cGUuX3ZhbHVlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
aW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlLmZvcm1hdFZhbHVlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdvcnkuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuUmVzb3VyY2VDYXRlZ29yeSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZXNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnRvb2xiYXJJdGVt
Q2xhc3MuZ2V0IHRvb2xiYXJJdGVtTGFiZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291
cmNlc1BhbmVsLnByb3RvdHlwZS5nZXQgc3RhdHVzQmFySXRlbXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5nZXQgY2F0ZWdvcmllcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNob3dDYXRlZ29yeSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLmhpZGVDYXRlZ29y
eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLmlzQ2F0
ZWdvcnlWaXNpYmxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUucG9wdWxhdGVTaWRlYmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQ
YW5lbC5wcm90b3R5cGUuY3JlYXRlUGFuZWxFbmFibGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuY3JlYXRlU3RhdHVzYmFyQnV0dG9ucyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNldCBtYWluUmVzb3Vy
Y2VMb2FkVGltZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlLnNldCBtYWluUmVzb3VyY2VET01Db250ZW50VGltZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5yZXNpemUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnVwZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnVwZGF0ZU1haW5W
aWV3V2lkdGgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVGltZUNhbGN1bGF0b3Ip
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJhbnNmZXJTaXplQ2FsY3VsYXRvcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmFuc2ZlclNpemVDYWxjdWxhdG9yLnBy
b3RvdHlwZS5jb21wdXRlQmFyR3JhcGhMYWJlbHMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvU3VtbWFyeUJhci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdW1tYXJ5QmFyLnBy
b3RvdHlwZS51cGRhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLmxvYWRlZCk6CisKIDIwMDktMTAtMjYgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGJlOTNiYjgu
LjZjNjVhYjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0zNTg4LDYgKzM1ODgsNyBAQAogICAgICAgICAnd2ViaW5zcGVjdG9y
X2ZpbGVzJzogWwogCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
aHRtbCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9BYnN0cmFjdFRpbWVsaW5l
UGFuZWwuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQm90dG9tVXBQcm9m
aWxlRGF0YUdyaWRUcmVlLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnQuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qcycsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRl
eCAzMzBmOGFmLi5kNTc1ZGJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTM2Mjc0LDYgKzM2Mjc0LDEwIEBACiAJCQkJTmFtZT0iZnJvbnQtZW5kIg0KIAkJCQk+DQog
CQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQWJz
dHJhY3RUaW1lbGluZVBhbmVsLmpzIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxl
DQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQm90dG9tVXBQcm9m
aWxlRGF0YUdyaWRUcmVlLmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Fic3RyYWN0VGltZWxpbmVQYW5lbC5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BYnN0cmFjdFRpbWVsaW5lUGFuZWwuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlMzMyYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BYnN0cmFjdFRpbWVsaW5lUGFuZWwuanMKQEAg
LTAsMCArMSwzNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBbnRo
b255IFJpY2F1ZCA8cmlrQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBh
bmVsID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5QYW5lbC5jYWxsKHRoaXMpOwor
fQorCitXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlwZSA9IHsKKyAg
ICBnZXQgY2F0ZWdvcmllcygpCisgICAgeworICAgICAgICAvLyBTaG91bGQgYmUgaW1wbGVtZW50
ZWQgYnkgdGhlIGNvbmNyZXRlIHN1YmNsYXNzZXMuCisgICAgICAgIHJldHVybiB7fTsKKyAgICB9
LAorCisgICAgc2hvd0NhdGVnb3J5OiBmdW5jdGlvbihjYXRlZ29yeSkKKyAgICB7CisgICAgICAg
IC8vIFNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgY29uY3JldGUgc3ViY2xhc3Nlcy4KKyAg
ICB9LAorCisgICAgaGlkZUNhdGVnb3J5OiBmdW5jdGlvbihjYXRlZ29yeSkKKyAgICB7CisgICAg
ICAgIC8vIFNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgY29uY3JldGUgc3ViY2xhc3Nlcy4K
KyAgICB9LAorCisgICAgY3JlYXRlSW50ZXJmYWNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9jcmVhdGVGaWx0ZXJQYW5lbCgpOworCisgICAgICAgIHRoaXMuY29udGFpbmVyRWxl
bWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB0aGlzLmNvbnRh
aW5lckVsZW1lbnQuaWQgPSAicmVzb3VyY2VzLWNvbnRhaW5lciI7CisgICAgICAgIHRoaXMuY29u
dGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl91cGRhdGVEaXZp
ZGVyc0xhYmVsQmFyUG9zaXRpb24uYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICB0aGlzLmVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50KTsKKworICAgICAgICB0aGlz
LmNyZWF0ZVNpZGViYXIodGhpcy5jb250YWluZXJFbGVtZW50LCB0aGlzLmVsZW1lbnQpOworICAg
ICAgICB0aGlzLnNpZGViYXJFbGVtZW50LmlkID0gInJlc291cmNlcy1zaWRlYmFyIjsKKyAgICAg
ICAgdGhpcy5wb3B1bGF0ZVNpZGViYXIoKTsKKworICAgICAgICB0aGlzLl9jcmVhdGVHcmFwaCgp
OworICAgIH0sCisKKyAgICBfY3JlYXRlRmlsdGVyUGFuZWw6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICB0aGlzLmZpbHRlckJhckVsZW1lbnQuaWQgPSAicmVzb3VyY2VzLWZpbHRl
ciI7CisgICAgICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudC5jbGFzc05hbWUgPSAic2NvcGUtYmFy
IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZmlsdGVyQmFyRWxlbWVu
dCk7CisKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmlsdGVyRWxlbWVudChjYXRlZ29yeSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNhdGVnb3J5ID09PSAiYWxsIikKKyAgICAgICAgICAg
ICAgICB2YXIgbGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFsbCIpOworICAgICAgICAg
ICAgZWxzZSBpZiAodGhpcy5jYXRlZ29yaWVzW2NhdGVnb3J5XSkKKyAgICAgICAgICAgICAgICB2
YXIgbGFiZWwgPSB0aGlzLmNhdGVnb3JpZXNbY2F0ZWdvcnldLnRpdGxlOworCisgICAgICAgICAg
ICB2YXIgY2F0ZWdvcnlFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKKyAg
ICAgICAgICAgIGNhdGVnb3J5RWxlbWVudC5jYXRlZ29yeSA9IGNhdGVnb3J5OworICAgICAgICAg
ICAgY2F0ZWdvcnlFbGVtZW50LmFkZFN0eWxlQ2xhc3MoY2F0ZWdvcnkpOworICAgICAgICAgICAg
Y2F0ZWdvcnlFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxhYmVs
KSk7CisgICAgICAgICAgICBjYXRlZ29yeUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl91cGRhdGVGaWx0ZXIuYmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICAgICAgdGhp
cy5maWx0ZXJCYXJFbGVtZW50LmFwcGVuZENoaWxkKGNhdGVnb3J5RWxlbWVudCk7CisKKyAgICAg
ICAgICAgIHJldHVybiBjYXRlZ29yeUVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICB0aGlz
LmZpbHRlckFsbEVsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgImFsbCIp
OworCisgICAgICAgIC8vIEFkZCBhIGRpdmlkZXIKKyAgICAgICAgdmFyIGRpdmlkZXJFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGRpdmlkZXJFbGVtZW50
LmFkZFN0eWxlQ2xhc3MoImRpdmlkZXIiKTsKKyAgICAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50
LmFwcGVuZENoaWxkKGRpdmlkZXJFbGVtZW50KTsKKworICAgICAgICBmb3IgKHZhciBjYXRlZ29y
eSBpbiB0aGlzLmNhdGVnb3JpZXMpCisgICAgICAgICAgICBjcmVhdGVGaWx0ZXJFbGVtZW50LmNh
bGwodGhpcywgY2F0ZWdvcnkpOworICAgIH0sCisKKyAgICBmaWx0ZXI6IGZ1bmN0aW9uKHRhcmdl
dCwgc2VsZWN0TXVsdGlwbGUpCisgICAgeworICAgICAgICBmdW5jdGlvbiB1bnNlbGVjdEFsbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJC
YXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIg
Y2hpbGQgPSB0aGlzLmZpbHRlckJhckVsZW1lbnQuY2hpbGROb2Rlc1tpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNoaWxkLmNhdGVnb3J5KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgICAgIGNoaWxkLnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Cisg
ICAgICAgICAgICAgICAgdGhpcy5oaWRlQ2F0ZWdvcnkoY2hpbGQuY2F0ZWdvcnkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRhcmdldCA9PT0gdGhpcy5maWx0ZXJB
bGxFbGVtZW50KSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0Lmhhc1N0eWxlQ2xhc3MoInNlbGVj
dGVkIikpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCB1bnNlbGVjdCBBbGwsIHNvIHdl
IGJyZWFrIGVhcmx5IGhlcmUKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIElmIEFsbCB3YXNuJ3Qgc2VsZWN0ZWQsIGFuZCBub3cgaXMsIHVu
c2VsZWN0IGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICAgICAgICAgIHVuc2VsZWN0QWxsLmNhbGwodGhp
cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTb21ldGhpbmcgb3RoZXIgdGhh
biBBbGwgaXMgYmVpbmcgc2VsZWN0ZWQsIHNvIHdlIHdhbnQgdG8gdW5zZWxlY3QgQWxsLgorICAg
ICAgICAgICAgaWYgKHRoaXMuZmlsdGVyQWxsRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJzZWxlY3Rl
ZCIpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJBbGxFbGVtZW50LnJlbW92ZVN0eWxl
Q2xhc3MoInNlbGVjdGVkIik7CisgICAgICAgICAgICAgICAgdGhpcy5oaWRlQ2F0ZWdvcnkoImFs
bCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzZWxlY3RNdWx0
aXBsZSkgeworICAgICAgICAgICAgLy8gSWYgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIG9mZiwgd2Ug
d2FudCB0byB1bnNlbGVjdCBldmVyeXRoaW5nIGVsc2UKKyAgICAgICAgICAgIC8vIGFuZCBqdXN0
IHNlbGVjdCBvdXJzZWx2ZXMuCisgICAgICAgICAgICB1bnNlbGVjdEFsbC5jYWxsKHRoaXMpOwor
CisgICAgICAgICAgICB0YXJnZXQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKKyAgICAgICAg
ICAgIHRoaXMuc2hvd0NhdGVnb3J5KHRhcmdldC5jYXRlZ29yeSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodGFyZ2V0Lmhhc1N0eWxlQ2xhc3MoInNlbGVj
dGVkIikpIHsKKyAgICAgICAgICAgIC8vIElmIHNlbGVjdE11bHRpcGxlIGlzIHR1cm5lZCBvbiwg
YW5kIHdlIHdlcmUgc2VsZWN0ZWQsIHdlIGp1c3QKKyAgICAgICAgICAgIC8vIHdhbnQgdG8gdW5z
ZWxlY3Qgb3Vyc2VsdmVzLgorICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZVN0eWxlQ2xhc3MoInNl
bGVjdGVkIik7CisgICAgICAgICAgICB0aGlzLmhpZGVDYXRlZ29yeSh0YXJnZXQuY2F0ZWdvcnkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgc2VsZWN0TXVsdGlwbGUgaXMg
dHVybmVkIG9uLCBhbmQgd2Ugd2VyZW4ndCBzZWxlY3RlZCwgd2UganVzdAorICAgICAgICAgICAg
Ly8gd2FudCB0byBzZWxlY3Qgb3Vyc2VsdmVzLgorICAgICAgICAgICAgdGFyZ2V0LmFkZFN0eWxl
Q2xhc3MoInNlbGVjdGVkIik7CisgICAgICAgICAgICB0aGlzLnNob3dDYXRlZ29yeSh0YXJnZXQu
Y2F0ZWdvcnkpOworICAgICAgICB9CisgICAgfSwKKworICAgIF91cGRhdGVGaWx0ZXI6IGZ1bmN0
aW9uKGUpCisgICAgeworICAgICAgICB2YXIgaXNNYWMgPSBJbnNwZWN0b3JDb250cm9sbGVyLnBs
YXRmb3JtKCkuaW5kZXhPZigibWFjLSIpID09PSAwOworICAgICAgICB2YXIgc2VsZWN0TXVsdGlw
bGUgPSBmYWxzZTsKKyAgICAgICAgaWYgKGlzTWFjICYmIGUubWV0YUtleSAmJiAhZS5jdHJsS2V5
ICYmICFlLmFsdEtleSAmJiAhZS5zaGlmdEtleSkKKyAgICAgICAgICAgIHNlbGVjdE11bHRpcGxl
ID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFpc01hYyAmJiBlLmN0cmxLZXkgJiYgIWUubWV0YUtleSAm
JiAhZS5hbHRLZXkgJiYgIWUuc2hpZnRLZXkpCisgICAgICAgICAgICBzZWxlY3RNdWx0aXBsZSA9
IHRydWU7CisKKyAgICAgICAgdGhpcy5maWx0ZXIoZS50YXJnZXQsIHNlbGVjdE11bHRpcGxlKTsK
KyAgICB9LAorCisgICAgX2NyZWF0ZUdyYXBoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
aGlzLl9jb250YWluZXJDb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgICAgICB0aGlzLl9jb250YWluZXJDb250ZW50RWxlbWVudC5pZCA9ICJyZXNvdXJj
ZXMtY29udGFpbmVyLWNvbnRlbnQiOworICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyQ29udGVudEVsZW1lbnQpOworCisgICAgICAgIHRoaXMu
c3VtbWFyeUJhciA9IG5ldyBXZWJJbnNwZWN0b3IuU3VtbWFyeUJhcih0aGlzLmNhdGVnb3JpZXMp
OworICAgICAgICB0aGlzLnN1bW1hcnlCYXIuZWxlbWVudC5pZCA9ICJyZXNvdXJjZXMtc3VtbWFy
eSI7CisgICAgICAgIHRoaXMuX2NvbnRhaW5lckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuc3VtbWFyeUJhci5lbGVtZW50KTsKKworICAgICAgICB0aGlzLnJlc291cmNlc0dyYXBoc0Vs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGhpcy5yZXNv
dXJjZXNHcmFwaHNFbGVtZW50LmlkID0gInJlc291cmNlcy1ncmFwaHMiOworICAgICAgICB0aGlz
Ll9jb250YWluZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJlc291cmNlc0dyYXBo
c0VsZW1lbnQpOworCisgICAgICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50LmlkID0gInJl
c291cmNlcy1kaXZpZGVycyI7CisgICAgICAgIHRoaXMuX2NvbnRhaW5lckNvbnRlbnRFbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuZGl2aWRlcnNFbGVtZW50KTsKKworICAgICAgICB0aGlzLmV2ZW50
RGl2aWRlcnNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAg
IHRoaXMuZXZlbnREaXZpZGVyc0VsZW1lbnQuaWQgPSAicmVzb3VyY2VzLWV2ZW50LWRpdmlkZXJz
IjsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyQ29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5ldmVudERpdmlkZXJzRWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5kaXZpZGVyc0xhYmVsQmFy
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB0aGlzLmRp
dmlkZXJzTGFiZWxCYXJFbGVtZW50LmlkID0gInJlc291cmNlcy1kaXZpZGVycy1sYWJlbC1iYXIi
OworICAgICAgICB0aGlzLl9jb250YWluZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
LmRpdmlkZXJzTGFiZWxCYXJFbGVtZW50KTsKKyAgICB9LAorCisgICAgdXBkYXRlR3JhcGhEaXZp
ZGVyc0lmTmVlZGVkOiBmdW5jdGlvbihmb3JjZSkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy52
aXNpYmxlKSB7CisgICAgICAgICAgICB0aGlzLm5lZWRzUmVmcmVzaCA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZG9jdW1lbnQuYm9k
eS5vZmZzZXRXaWR0aCA8PSAwKSB7CisgICAgICAgICAgICAvLyBUaGUgc3R5bGVzaGVldCBoYXNu
J3QgbG9hZGVkIHlldCBvciB0aGUgd2luZG93IGlzIGNsb3NlZCwKKyAgICAgICAgICAgIC8vIHNv
IHdlIGNhbid0IGNhbGN1bGF0ZSB3aGF0IGlzIG5lZWQuIFJldHVybiBlYXJseS4KKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBkaXZpZGVyQ291bnQg
PSBNYXRoLnJvdW5kKHRoaXMuZGl2aWRlcnNFbGVtZW50Lm9mZnNldFdpZHRoIC8gNjQpOworICAg
ICAgICB2YXIgc2xpY2UgPSB0aGlzLmNhbGN1bGF0b3IuYm91bmRhcnlTcGFuIC8gZGl2aWRlckNv
dW50OworICAgICAgICBpZiAoIWZvcmNlICYmIHRoaXMuX2N1cnJlbnREaXZpZGVyU2xpY2UgPT09
IHNsaWNlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHRoaXMuX2N1cnJl
bnREaXZpZGVyU2xpY2UgPSBzbGljZTsKKworICAgICAgICB0aGlzLmRpdmlkZXJzRWxlbWVudC5y
ZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLmV2ZW50RGl2aWRlcnNFbGVtZW50LnJlbW92
ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuZGl2aWRlcnNMYWJlbEJhckVsZW1lbnQucmVtb3Zl
Q2hpbGRyZW4oKTsKKworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBkaXZpZGVyQ291bnQ7
ICsraSkgeworICAgICAgICAgICAgdmFyIGRpdmlkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgICAgICAgICAgIGRpdmlkZXIuY2xhc3NOYW1lID0gInJlc291cmNlcy1kaXZp
ZGVyIjsKKyAgICAgICAgICAgIGlmIChpID09PSBkaXZpZGVyQ291bnQpCisgICAgICAgICAgICAg
ICAgZGl2aWRlci5hZGRTdHlsZUNsYXNzKCJsYXN0Iik7CisgICAgICAgICAgICBkaXZpZGVyLnN0
eWxlLmxlZnQgPSAoKGkgLyBkaXZpZGVyQ291bnQpICogMTAwKSArICIlIjsKKworICAgICAgICAg
ICAgdGhpcy5kaXZpZGVyc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2aWRlci5jbG9uZU5vZGUoKSk7
CisKKyAgICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworICAgICAgICAgICAgbGFiZWwuY2xhc3NOYW1lID0gInJlc291cmNlcy1kaXZpZGVyLWxhYmVs
IjsKKyAgICAgICAgICAgIGlmICghaXNOYU4oc2xpY2UpKQorICAgICAgICAgICAgICAgIGxhYmVs
LnRleHRDb250ZW50ID0gdGhpcy5jYWxjdWxhdG9yLmZvcm1hdFZhbHVlKHNsaWNlICogaSk7Cisg
ICAgICAgICAgICBkaXZpZGVyLmFwcGVuZENoaWxkKGxhYmVsKTsKKworICAgICAgICAgICAgdGhp
cy5kaXZpZGVyc0xhYmVsQmFyRWxlbWVudC5hcHBlbmRDaGlsZChkaXZpZGVyKTsKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICBfdXBkYXRlU3VtbWFyeUdyYXBoOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLnN1bW1hcnlCYXIudXBkYXRlKHRoaXMuX3Jlc291cmNlcyk7CisgICAgfSwK
KworICAgIF91cGRhdGVEaXZpZGVyc0xhYmVsQmFyUG9zaXRpb246IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuc2Nyb2xsVG9w
OworICAgICAgICB2YXIgZGl2aWRlcnNUb3AgPSAoc2Nyb2xsVG9wIDwgdGhpcy5zdW1tYXJ5QmFy
LmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID8gdGhpcy5zdW1tYXJ5QmFyLmVsZW1lbnQub2Zmc2V0SGVp
Z2h0IDogc2Nyb2xsVG9wKTsKKyAgICAgICAgdGhpcy5kaXZpZGVyc0VsZW1lbnQuc3R5bGUudG9w
ID0gc2Nyb2xsVG9wICsgInB4IjsKKyAgICAgICAgdGhpcy5ldmVudERpdmlkZXJzRWxlbWVudC5z
dHlsZS50b3AgPSBzY3JvbGxUb3AgKyAicHgiOworICAgICAgICB0aGlzLmRpdmlkZXJzTGFiZWxC
YXJFbGVtZW50LnN0eWxlLnRvcCA9IGRpdmlkZXJzVG9wICsgInB4IjsKKyAgICB9LAorCisgICAg
Z2V0IG5lZWRzUmVmcmVzaCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbmVlZHNSZWZy
ZXNoOworICAgIH0sCisKKyAgICBzZXQgbmVlZHNSZWZyZXNoKHgpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fbmVlZHNSZWZyZXNoID09PSB4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHRoaXMuX25lZWRzUmVmcmVzaCA9IHg7CisKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAg
ICAgIGlmICh0aGlzLnZpc2libGUgJiYgISgiX3JlZnJlc2hUaW1lb3V0IiBpbiB0aGlzKSkKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5yZWZy
ZXNoLmJpbmQodGhpcyksIDUwMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
Il9yZWZyZXNoVGltZW91dCIgaW4gdGhpcykgeworICAgICAgICAgICAgICAgIGNsZWFyVGltZW91
dCh0aGlzLl9yZWZyZXNoVGltZW91dCk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Jl
ZnJlc2hUaW1lb3V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIHJl
ZnJlc2hJZk5lZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMubmVlZHNS
ZWZyZXNoKQorICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7CisgICAgfSwKKworICAgIHNob3c6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUu
c2hvdy5jYWxsKHRoaXMpOworCisgICAgICAgIHRoaXMuX3VwZGF0ZURpdmlkZXJzTGFiZWxCYXJQ
b3NpdGlvbigpOworICAgICAgICB0aGlzLnJlZnJlc2hJZk5lZWRlZCgpOworICAgIH0sCisKKyAg
ICByZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMudXBkYXRlR3JhcGhEaXZp
ZGVyc0lmTmVlZGVkKCk7CisgICAgfSwKKworICAgIHVwZGF0ZU1haW5WaWV3V2lkdGg6IGZ1bmN0
aW9uKHdpZHRoKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29udGFpbmVyQ29udGVudEVsZW1lbnQu
c3R5bGUubGVmdCA9IHdpZHRoICsgInB4IjsKKyAgICAgICAgdGhpcy51cGRhdGVHcmFwaERpdmlk
ZXJzSWZOZWVkZWQoKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5l
UGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGU7
CisKK1dlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IgPSBmdW5jdGlvbigpCit7Cit9CisK
K1dlYkluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlID0geworICAgIGNvbXB1
dGVTdW1tYXJ5VmFsdWVzOiBmdW5jdGlvbihpdGVtcykKKyAgICB7CisgICAgICAgIHZhciB0b3Rh
bCA9IDA7CisgICAgICAgIHZhciBjYXRlZ29yeVZhbHVlcyA9IHt9OworCisgICAgICAgIHZhciBp
dGVtc0xlbmd0aCA9IGl0ZW1zLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBp
dGVtc0xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldOworICAg
ICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUoaXRlbSk7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIHZhbHVlID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGlmICghKGl0ZW0uY2F0ZWdvcnkubmFtZSBpbiBjYXRlZ29yeVZhbHVlcykp
CisgICAgICAgICAgICAgICAgY2F0ZWdvcnlWYWx1ZXNbaXRlbS5jYXRlZ29yeS5uYW1lXSA9IDA7
CisgICAgICAgICAgICBjYXRlZ29yeVZhbHVlc1tpdGVtLmNhdGVnb3J5Lm5hbWVdICs9IHZhbHVl
OworICAgICAgICAgICAgdG90YWwgKz0gdmFsdWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4ge2NhdGVnb3J5VmFsdWVzOiBjYXRlZ29yeVZhbHVlcywgdG90YWw6IHRvdGFsfTsKKyAgICB9
LAorCisgICAgY29tcHV0ZUJhckdyYXBoUGVyY2VudGFnZXM6IGZ1bmN0aW9uKGl0ZW0pCisgICAg
eworICAgICAgICByZXR1cm4ge3N0YXJ0OiAwLCBtaWRkbGU6IDAsIGVuZDogKHRoaXMuX3ZhbHVl
KGl0ZW0pIC8gdGhpcy5ib3VuZGFyeVNwYW4pICogMTAwfTsKKyAgICB9LAorCisgICAgY29tcHV0
ZUJhckdyYXBoTGFiZWxzOiBmdW5jdGlvbihpdGVtKQorICAgIHsKKyAgICAgICAgY29uc3QgbGFi
ZWwgPSB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3ZhbHVlKGl0ZW0pKTsKKyAgICAgICAgcmV0dXJu
IHtsZWZ0OiBsYWJlbCwgcmlnaHQ6IGxhYmVsLCB0b29sdGlwOiBsYWJlbH07CisgICAgfSwKKwor
ICAgIGdldCBib3VuZGFyeVNwYW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWF4aW11
bUJvdW5kYXJ5IC0gdGhpcy5taW5pbXVtQm91bmRhcnk7CisgICAgfSwKKworICAgIHVwZGF0ZUJv
dW5kYXJpZXM6IGZ1bmN0aW9uKGl0ZW0pCisgICAgeworICAgICAgICB0aGlzLm1pbmltdW1Cb3Vu
ZGFyeSA9IDA7CisKKyAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fdmFsdWUoaXRlbSk7CisgICAg
ICAgIGlmICh0eXBlb2YgdGhpcy5tYXhpbXVtQm91bmRhcnkgPT09ICJ1bmRlZmluZWQiIHx8IHZh
bHVlID4gdGhpcy5tYXhpbXVtQm91bmRhcnkpIHsKKyAgICAgICAgICAgIHRoaXMubWF4aW11bUJv
dW5kYXJ5ID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBkZWxldGUgdGhpcy5taW5pbXVtQm91bmRhcnk7CisgICAgICAgIGRlbGV0ZSB0
aGlzLm1heGltdW1Cb3VuZGFyeTsKKyAgICB9LAorCisgICAgX3ZhbHVlOiBmdW5jdGlvbihpdGVt
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSwKKworICAgIGZvcm1hdFZhbHVlOiBm
dW5jdGlvbih2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZUNhdGVnb3J5LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdv
cnkuanMKaW5kZXggZmM1MDhkMC4uN2I0Njc2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdvcnkuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlQ2F0ZWdvcnkuanMKQEAgLTI2LDEwICsyNiwxMSBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSA9IGZ1bmN0aW9uKHRp
dGxlLCBuYW1lKQorV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkgPSBmdW5jdGlvbihuYW1l
LCB0aXRsZSwgY29sb3IpCiB7CiAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB0aGlzLnRpdGxl
ID0gdGl0bGU7CisgICAgdGhpcy5jb2xvciA9IGNvbG9yOwogICAgIHRoaXMucmVzb3VyY2VzID0g
W107CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5q
cwppbmRleCBmZmJlZDg3Li5kYmUzYTNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC0yOSwyNDkgKzI5LDEzMiBAQAogCiBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VzUGFuZWwgPSBmdW5jdGlvbigpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLlBhbmVs
LmNhbGwodGhpcyk7Ci0KKyAgICBXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLmNh
bGwodGhpcyk7CiAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInJlc291cmNlcyIpOwog
Ci0gICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7Ci0gICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50LmlkID0gInJlc291cmNlcy1maWx0ZXIiOwot
ICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudC5jbGFzc05hbWUgPSAic2NvcGUtYmFyIjsKLSAgICB0
aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5maWx0ZXJCYXJFbGVtZW50KTsKKyAgICB0aGlz
Ll9jcmVhdGVQYW5lbEVuYWJsZXIoKTsKIAogICAgIHRoaXMudmlld3NDb250YWluZXJFbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy52aWV3c0NvbnRhaW5l
ckVsZW1lbnQuaWQgPSAicmVzb3VyY2Utdmlld3MiOwogICAgIHRoaXMuZWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLnZpZXdzQ29udGFpbmVyRWxlbWVudCk7CiAKLSAgICB0aGlzLmNvbnRhaW5lckVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICB0aGlzLmNvbnRhaW5l
ckVsZW1lbnQuaWQgPSAicmVzb3VyY2VzLWNvbnRhaW5lciI7Ci0gICAgdGhpcy5jb250YWluZXJF
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3VwZGF0ZURpdmlkZXJzTGFi
ZWxCYXJQb3NpdGlvbi5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudCk7Ci0KLSAgICB0aGlzLmNyZWF0ZVNpZGViYXIo
dGhpcy5jb250YWluZXJFbGVtZW50LCB0aGlzLmVsZW1lbnQpOwotCi0gICAgdGhpcy5zaWRlYmFy
RWxlbWVudC5pZCA9ICJyZXNvdXJjZXMtc2lkZWJhciI7Ci0KLSAgICB0aGlzLmNvbnRhaW5lckNv
bnRlbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgdGhpcy5j
b250YWluZXJDb250ZW50RWxlbWVudC5pZCA9ICJyZXNvdXJjZXMtY29udGFpbmVyLWNvbnRlbnQi
OwotICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lckNv
bnRlbnRFbGVtZW50KTsKLQotICAgIHRoaXMuc3VtbWFyeUJhciA9IG5ldyBXZWJJbnNwZWN0b3Iu
U3VtbWFyeUJhcih0aGlzLmNhdGVnb3JpZXMpOwotICAgIHRoaXMuc3VtbWFyeUJhci5lbGVtZW50
LmlkID0gInJlc291cmNlcy1zdW1tYXJ5IjsKLSAgICB0aGlzLmNvbnRhaW5lckNvbnRlbnRFbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuc3VtbWFyeUJhci5lbGVtZW50KTsKLQotICAgIHRoaXMucmVz
b3VyY2VzR3JhcGhzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAg
IHRoaXMucmVzb3VyY2VzR3JhcGhzRWxlbWVudC5pZCA9ICJyZXNvdXJjZXMtZ3JhcGhzIjsKLSAg
ICB0aGlzLmNvbnRhaW5lckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucmVzb3VyY2Vz
R3JhcGhzRWxlbWVudCk7Ci0KLSAgICB0aGlzLmRpdmlkZXJzRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50LmlkID0gInJlc291
cmNlcy1kaXZpZGVycyI7Ci0gICAgdGhpcy5jb250YWluZXJDb250ZW50RWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLmRpdmlkZXJzRWxlbWVudCk7Ci0gICAgCi0gICAgdGhpcy5ldmVudERpdmlkZXJz
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZXZlbnRE
aXZpZGVyc0VsZW1lbnQuaWQgPSAicmVzb3VyY2VzLWV2ZW50LWRpdmlkZXJzIjsKLSAgICB0aGlz
LmNvbnRhaW5lckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZXZlbnREaXZpZGVyc0Vs
ZW1lbnQpOwotCi0gICAgdGhpcy5kaXZpZGVyc0xhYmVsQmFyRWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHRoaXMuZGl2aWRlcnNMYWJlbEJhckVsZW1lbnQuaWQg
PSAicmVzb3VyY2VzLWRpdmlkZXJzLWxhYmVsLWJhciI7Ci0gICAgdGhpcy5jb250YWluZXJDb250
ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmRpdmlkZXJzTGFiZWxCYXJFbGVtZW50KTsKLQot
ICAgIHZhciB0aW1lR3JhcGhJdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1l
bnQoInJlc291cmNlcy10aW1lLWdyYXBoLXNpZGViYXItaXRlbSIsIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiVGltZSIpKTsKLSAgICB0aW1lR3JhcGhJdGVtLm9uc2VsZWN0ID0gdGhpcy5fZ3JhcGhT
ZWxlY3RlZC5iaW5kKHRoaXMpOwotCi0gICAgdmFyIHRyYW5zZmVyVGltZUNhbGN1bGF0b3IgPSBu
ZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlVHJhbnNmZXJUaW1lQ2FsY3VsYXRvcigpOwotICAgIHZh
ciB0cmFuc2ZlckR1cmF0aW9uQ2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VU
cmFuc2ZlckR1cmF0aW9uQ2FsY3VsYXRvcigpOwotCi0gICAgdGltZUdyYXBoSXRlbS5zb3J0aW5n
T3B0aW9ucyA9IFsKLSAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNvcnQg
YnkgU3RhcnQgVGltZSIpLCBzb3J0aW5nRnVuY3Rpb246IFdlYkluc3BlY3Rvci5SZXNvdXJjZVNp
ZGViYXJUcmVlRWxlbWVudC5Db21wYXJlQnlBc2NlbmRpbmdTdGFydFRpbWUsIGNhbGN1bGF0b3I6
IHRyYW5zZmVyVGltZUNhbGN1bGF0b3IgfSwKLSAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlNvcnQgYnkgUmVzcG9uc2UgVGltZSIpLCBzb3J0aW5nRnVuY3Rpb246IFdlYklu
c3BlY3Rvci5SZXNvdXJjZVNpZGViYXJUcmVlRWxlbWVudC5Db21wYXJlQnlBc2NlbmRpbmdSZXNw
b25zZVJlY2VpdmVkVGltZSwgY2FsY3VsYXRvcjogdHJhbnNmZXJUaW1lQ2FsY3VsYXRvciB9LAot
ICAgICAgICB7IG5hbWU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU29ydCBieSBFbmQgVGltZSIp
LCBzb3J0aW5nRnVuY3Rpb246IFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJUcmVlRWxlbWVu
dC5Db21wYXJlQnlBc2NlbmRpbmdFbmRUaW1lLCBjYWxjdWxhdG9yOiB0cmFuc2ZlclRpbWVDYWxj
dWxhdG9yIH0sCi0gICAgICAgIHsgbmFtZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTb3J0IGJ5
IER1cmF0aW9uIiksIHNvcnRpbmdGdW5jdGlvbjogV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJh
clRyZWVFbGVtZW50LkNvbXBhcmVCeURlc2NlbmRpbmdEdXJhdGlvbiwgY2FsY3VsYXRvcjogdHJh
bnNmZXJEdXJhdGlvbkNhbGN1bGF0b3IgfSwKLSAgICAgICAgeyBuYW1lOiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlNvcnQgYnkgTGF0ZW5jeSIpLCBzb3J0aW5nRnVuY3Rpb246IFdlYkluc3BlY3Rv
ci5SZXNvdXJjZVNpZGViYXJUcmVlRWxlbWVudC5Db21wYXJlQnlEZXNjZW5kaW5nTGF0ZW5jeSwg
Y2FsY3VsYXRvcjogdHJhbnNmZXJEdXJhdGlvbkNhbGN1bGF0b3IgfSwKLSAgICBdOworICAgIHRo
aXMuY3JlYXRlSW50ZXJmYWNlKCk7CiAKLSAgICB0aW1lR3JhcGhJdGVtLnNlbGVjdGVkU29ydGlu
Z09wdGlvbkluZGV4ID0gMTsKKyAgICB0aGlzLl9jcmVhdGVTdGF0dXNiYXJCdXR0b25zKCk7CiAK
LSAgICB2YXIgc2l6ZUdyYXBoSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVt
ZW50KCJyZXNvdXJjZXMtc2l6ZS1ncmFwaC1zaWRlYmFyLWl0ZW0iLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlNpemUiKSk7Ci0gICAgc2l6ZUdyYXBoSXRlbS5vbnNlbGVjdCA9IHRoaXMuX2dyYXBo
U2VsZWN0ZWQuYmluZCh0aGlzKTsKLQotICAgIHZhciB0cmFuc2ZlclNpemVDYWxjdWxhdG9yID0g
bmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyYW5zZmVyU2l6ZUNhbGN1bGF0b3IoKTsKLSAgICBz
aXplR3JhcGhJdGVtLnNvcnRpbmdPcHRpb25zID0gWwotICAgICAgICB7IG5hbWU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiU29ydCBieSBTaXplIiksIHNvcnRpbmdGdW5jdGlvbjogV2ViSW5zcGVj
dG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBhcmVCeURlc2NlbmRpbmdTaXplLCBj
YWxjdWxhdG9yOiB0cmFuc2ZlclNpemVDYWxjdWxhdG9yIH0sCi0gICAgXTsKLQotICAgIHNpemVH
cmFwaEl0ZW0uc2VsZWN0ZWRTb3J0aW5nT3B0aW9uSW5kZXggPSAwOwotCi0gICAgdGhpcy5ncmFw
aHNUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVu
dChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdSQVBIUyIpLCB7fSwgdHJ1ZSk7Ci0gICAgdGhpcy5z
aWRlYmFyVHJlZS5hcHBlbmRDaGlsZCh0aGlzLmdyYXBoc1RyZWVFbGVtZW50KTsKLQotICAgIHRo
aXMuZ3JhcGhzVHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGltZUdyYXBoSXRlbSk7Ci0gICAgdGhp
cy5ncmFwaHNUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChzaXplR3JhcGhJdGVtKTsKLSAgICB0aGlz
LmdyYXBoc1RyZWVFbGVtZW50LmV4cGFuZCgpOwotCi0gICAgdGhpcy5yZXNvdXJjZXNUcmVlRWxl
bWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJhclNlY3Rpb25UcmVlRWxlbWVudChXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlJFU09VUkNFUyIpLCB7fSwgdHJ1ZSk7Ci0gICAgdGhpcy5zaWRlYmFy
VHJlZS5hcHBlbmRDaGlsZCh0aGlzLnJlc291cmNlc1RyZWVFbGVtZW50KTsKLQotICAgIHRoaXMu
cmVzb3VyY2VzVHJlZUVsZW1lbnQuZXhwYW5kKCk7CisgICAgdGhpcy5yZXNldCgpOworICAgIHRo
aXMuZmlsdGVyKHRoaXMuZmlsdGVyQWxsRWxlbWVudCwgZmFsc2UpOworICAgIHRoaXMuZ3JhcGhz
VHJlZUVsZW1lbnQuY2hpbGRyZW5bMF0uc2VsZWN0KCk7Cit9CiAKLSAgICB2YXIgcGFuZWxFbmFi
bGVySGVhZGluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiWW91IG5lZWQgdG8gZW5hYmxlIHJl
c291cmNlIHRyYWNraW5nIHRvIHVzZSB0aGlzIHBhbmVsLiIpOwotICAgIHZhciBwYW5lbEVuYWJs
ZXJEaXNjbGFpbWVyID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFbmFibGluZyByZXNvdXJjZSB0
cmFja2luZyB3aWxsIHJlbG9hZCB0aGUgcGFnZSBhbmQgbWFrZSBwYWdlIGxvYWRpbmcgc2xvd2Vy
LiIpOwotICAgIHZhciBwYW5lbEVuYWJsZXJCdXR0b24gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkVuYWJsZSByZXNvdXJjZSB0cmFja2luZyIpOworV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVs
LnByb3RvdHlwZSA9IHsKKyAgICB0b29sYmFySXRlbUNsYXNzOiAicmVzb3VyY2VzIiwKIAotICAg
IHRoaXMucGFuZWxFbmFibGVyVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuUGFuZWxFbmFibGVyVmll
dygicmVzb3VyY2VzIiwgcGFuZWxFbmFibGVySGVhZGluZywgcGFuZWxFbmFibGVyRGlzY2xhaW1l
ciwgcGFuZWxFbmFibGVyQnV0dG9uKTsKLSAgICB0aGlzLnBhbmVsRW5hYmxlclZpZXcuYWRkRXZl
bnRMaXN0ZW5lcigiZW5hYmxlIGNsaWNrZWQiLCB0aGlzLl9lbmFibGVSZXNvdXJjZVRyYWNraW5n
LCB0aGlzKTsKKyAgICBnZXQgdG9vbGJhckl0ZW1MYWJlbCgpCisgICAgeworICAgICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXNvdXJjZXMiKTsKKyAgICB9LAogCi0gICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGFuZWxFbmFibGVyVmlldy5lbGVtZW50KTsKKyAg
ICBnZXQgc3RhdHVzQmFySXRlbXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFt0aGlzLmVuYWJs
ZVRvZ2dsZUJ1dHRvbi5lbGVtZW50LCB0aGlzLmxhcmdlclJlc291cmNlc0J1dHRvbi5lbGVtZW50
LCB0aGlzLnNvcnRpbmdTZWxlY3RFbGVtZW50XTsKKyAgICB9LAogCi0gICAgdGhpcy5lbmFibGVU
b2dnbGVCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgImVuYWJs
ZS10b2dnbGUtc3RhdHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24u
YWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90b2dnbGVSZXNvdXJjZVRyYWNraW5nLmJp
bmQodGhpcyksIGZhbHNlKTsKKyAgICBnZXQgY2F0ZWdvcmllcygpCisgICAgeworICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLnJlc291cmNlQ2F0ZWdvcmllczsKKyAgICB9LAogCi0gICAgdGhp
cy5sYXJnZXJSZXNvdXJjZXNCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRv
bihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlVzZSBzbWFsbCByZXNvdXJjZSByb3dzLiIpLCAicmVz
b3VyY2VzLWxhcmdlci1yZXNvdXJjZXMtc3RhdHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5sYXJn
ZXJSZXNvdXJjZXNCdXR0b24udG9nZ2xlZCA9IFByZWZlcmVuY2VzLnJlc291cmNlc0xhcmdlUm93
czsKLSAgICB0aGlzLmxhcmdlclJlc291cmNlc0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlj
ayIsIHRoaXMuX3RvZ2dsZUxhcmdlclJlc291cmNlcy5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAg
aWYgKCFQcmVmZXJlbmNlcy5yZXNvdXJjZXNMYXJnZVJvd3MpIHsKLSAgICAgICAgUHJlZmVyZW5j
ZXMucmVzb3VyY2VzTGFyZ2VSb3dzID0gIVByZWZlcmVuY2VzLnJlc291cmNlc0xhcmdlUm93czsK
LSAgICAgICAgdGhpcy5fdG9nZ2xlTGFyZ2VyUmVzb3VyY2VzKCk7IC8vIHRoaXMgd2lsbCB0b2dn
bGUgdGhlIHByZWZlcmVuY2UgYmFjayB0byB0aGUgb3JpZ2luYWwKLSAgICB9CisgICAgc2hvd0Nh
dGVnb3J5OiBmdW5jdGlvbihjYXRlZ29yeSkKKyAgICB7CisgICAgICAgIHZhciBmaWx0ZXJDbGFz
cyA9ICJmaWx0ZXItIiArIGNhdGVnb3J5LnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHRoaXMucmVz
b3VyY2VzR3JhcGhzRWxlbWVudC5hZGRTdHlsZUNsYXNzKGZpbHRlckNsYXNzKTsKKyAgICAgICAg
dGhpcy5yZXNvdXJjZXNUcmVlRWxlbWVudC5jaGlsZHJlbkxpc3RFbGVtZW50LmFkZFN0eWxlQ2xh
c3MoZmlsdGVyQ2xhc3MpOworICAgIH0sCisgICAgCisgICAgaGlkZUNhdGVnb3J5OiBmdW5jdGlv
bihjYXRlZ29yeSkKKyAgICB7CisgICAgICAgIHZhciBmaWx0ZXJDbGFzcyA9ICJmaWx0ZXItIiAr
IGNhdGVnb3J5LnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHRoaXMucmVzb3VyY2VzR3JhcGhzRWxl
bWVudC5yZW1vdmVTdHlsZUNsYXNzKGZpbHRlckNsYXNzKTsKKyAgICAgICAgdGhpcy5yZXNvdXJj
ZXNUcmVlRWxlbWVudC5jaGlsZHJlbkxpc3RFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoZmlsdGVy
Q2xhc3MpOworICAgIH0sCiAKLSAgICB0aGlzLnNvcnRpbmdTZWxlY3RFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgdGhpcy5zb3J0aW5nU2VsZWN0RWxlbWVu
dC5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtIjsKLSAgICB0aGlzLnNvcnRpbmdTZWxlY3RF
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuX2NoYW5nZVNvcnRpbmdGdW5j
dGlvbi5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgaXNDYXRlZ29yeVZpc2libGU6IGZ1bmN0aW9u
KGNhdGVnb3J5TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiAodGhpcy5yZXNvdXJjZXNHcmFw
aHNFbGVtZW50Lmhhc1N0eWxlQ2xhc3MoImZpbHRlci1hbGwiKSB8fCB0aGlzLnJlc291cmNlc0dy
YXBoc0VsZW1lbnQuaGFzU3R5bGVDbGFzcygiZmlsdGVyLSIgKyBjYXRlZ29yeU5hbWUudG9Mb3dl
ckNhc2UoKSkpOworICAgIH0sCiAKLSAgICBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJFbGVtZW50KGNh
dGVnb3J5KQorICAgIHBvcHVsYXRlU2lkZWJhcjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
aWYgKGNhdGVnb3J5ID09PSAiYWxsIikKLSAgICAgICAgICAgIHZhciBsYWJlbCA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiQWxsIik7Ci0gICAgICAgIGVsc2UgaWYgKFdlYkluc3BlY3Rvci5yZXNv
dXJjZUNhdGVnb3JpZXNbY2F0ZWdvcnldKQotICAgICAgICAgICAgdmFyIGxhYmVsID0gV2ViSW5z
cGVjdG9yLnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0udGl0bGU7CisgICAgICAgIHZhciB0
aW1lR3JhcGhJdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQoInJlc291
cmNlcy10aW1lLWdyYXBoLXNpZGViYXItaXRlbSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGlt
ZSIpKTsKKyAgICAgICAgdGltZUdyYXBoSXRlbS5vbnNlbGVjdCA9IHRoaXMuX2dyYXBoU2VsZWN0
ZWQuYmluZCh0aGlzKTsKIAotICAgICAgICB2YXIgY2F0ZWdvcnlFbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgibGkiKTsKLSAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmNhdGVnb3J5ID0g
Y2F0ZWdvcnk7Ci0gICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRTdHlsZUNsYXNzKGNhdGVnb3J5
KTsKLSAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKGxhYmVsKSk7Ci0gICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIHRoaXMuX3VwZGF0ZUZpbHRlci5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgICAg
IHRoaXMuZmlsdGVyQmFyRWxlbWVudC5hcHBlbmRDaGlsZChjYXRlZ29yeUVsZW1lbnQpOworICAg
ICAgICB2YXIgdHJhbnNmZXJUaW1lQ2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VUcmFuc2ZlclRpbWVDYWxjdWxhdG9yKCk7CisgICAgICAgIHZhciB0cmFuc2ZlckR1cmF0aW9u
Q2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmFuc2ZlckR1cmF0aW9uQ2Fs
Y3VsYXRvcigpOwogCi0gICAgICAgIHJldHVybiBjYXRlZ29yeUVsZW1lbnQ7Ci0gICAgfQorICAg
ICAgICB0aW1lR3JhcGhJdGVtLnNvcnRpbmdPcHRpb25zID0gWworICAgICAgICAgICAgeyBuYW1l
OiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNvcnQgYnkgU3RhcnQgVGltZSIpLCBzb3J0aW5nRnVu
Y3Rpb246IFdlYkluc3BlY3Rvci5SZXNvdXJjZVNpZGViYXJUcmVlRWxlbWVudC5Db21wYXJlQnlB
c2NlbmRpbmdTdGFydFRpbWUsIGNhbGN1bGF0b3I6IHRyYW5zZmVyVGltZUNhbGN1bGF0b3IgfSwK
KyAgICAgICAgICAgIHsgbmFtZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTb3J0IGJ5IFJlc3Bv
bnNlIFRpbWUiKSwgc29ydGluZ0Z1bmN0aW9uOiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTaWRlYmFy
VHJlZUVsZW1lbnQuQ29tcGFyZUJ5QXNjZW5kaW5nUmVzcG9uc2VSZWNlaXZlZFRpbWUsIGNhbGN1
bGF0b3I6IHRyYW5zZmVyVGltZUNhbGN1bGF0b3IgfSwKKyAgICAgICAgICAgIHsgbmFtZTogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJTb3J0IGJ5IEVuZCBUaW1lIiksIHNvcnRpbmdGdW5jdGlvbjog
V2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBhcmVCeUFzY2VuZGlu
Z0VuZFRpbWUsIGNhbGN1bGF0b3I6IHRyYW5zZmVyVGltZUNhbGN1bGF0b3IgfSwKKyAgICAgICAg
ICAgIHsgbmFtZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTb3J0IGJ5IER1cmF0aW9uIiksIHNv
cnRpbmdGdW5jdGlvbjogV2ViSW5zcGVjdG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNv
bXBhcmVCeURlc2NlbmRpbmdEdXJhdGlvbiwgY2FsY3VsYXRvcjogdHJhbnNmZXJEdXJhdGlvbkNh
bGN1bGF0b3IgfSwKKyAgICAgICAgICAgIHsgbmFtZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJT
b3J0IGJ5IExhdGVuY3kiKSwgc29ydGluZ0Z1bmN0aW9uOiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VT
aWRlYmFyVHJlZUVsZW1lbnQuQ29tcGFyZUJ5RGVzY2VuZGluZ0xhdGVuY3ksIGNhbGN1bGF0b3I6
IHRyYW5zZmVyRHVyYXRpb25DYWxjdWxhdG9yIH0sCisgICAgICAgIF07CiAKLSAgICB0aGlzLmFs
bEVsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgImFsbCIpOworICAgICAg
ICB0aW1lR3JhcGhJdGVtLnNlbGVjdGVkU29ydGluZ09wdGlvbkluZGV4ID0gMTsKIAotICAgIC8v
IEFkZCBhIGRpdmlkZXIKLSAgICB2YXIgZGl2aWRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICBkaXZpZGVyRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJkaXZpZGVy
Iik7Ci0gICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50LmFwcGVuZENoaWxkKGRpdmlkZXJFbGVtZW50
KTsKKyAgICAgICAgdmFyIHNpemVHcmFwaEl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGViYXJU
cmVlRWxlbWVudCgicmVzb3VyY2VzLXNpemUtZ3JhcGgtc2lkZWJhci1pdGVtIiwgV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJTaXplIikpOworICAgICAgICBzaXplR3JhcGhJdGVtLm9uc2VsZWN0ID0g
dGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpOwogCi0gICAgZm9yICh2YXIgY2F0ZWdvcnkg
aW4gdGhpcy5jYXRlZ29yaWVzKQotICAgICAgICBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhp
cywgY2F0ZWdvcnkpOworICAgICAgICB2YXIgdHJhbnNmZXJTaXplQ2FsY3VsYXRvciA9IG5ldyBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmFuc2ZlclNpemVDYWxjdWxhdG9yKCk7CisgICAgICAgIHNp
emVHcmFwaEl0ZW0uc29ydGluZ09wdGlvbnMgPSBbCisgICAgICAgICAgICB7IG5hbWU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiU29ydCBieSBTaXplIiksIHNvcnRpbmdGdW5jdGlvbjogV2ViSW5z
cGVjdG9yLlJlc291cmNlU2lkZWJhclRyZWVFbGVtZW50LkNvbXBhcmVCeURlc2NlbmRpbmdTaXpl
LCBjYWxjdWxhdG9yOiB0cmFuc2ZlclNpemVDYWxjdWxhdG9yIH0sCisgICAgICAgIF07CiAKLSAg
ICB0aGlzLmZpbHRlcih0aGlzLmFsbEVsZW1lbnQsIGZhbHNlKTsKKyAgICAgICAgc2l6ZUdyYXBo
SXRlbS5zZWxlY3RlZFNvcnRpbmdPcHRpb25JbmRleCA9IDA7CiAKLSAgICB0aGlzLnJlc2V0KCk7
CisgICAgICAgIHRoaXMuZ3JhcGhzVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlNpZGVi
YXJTZWN0aW9uVHJlZUVsZW1lbnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJHUkFQSFMiKSwge30s
IHRydWUpOworICAgICAgICB0aGlzLnNpZGViYXJUcmVlLmFwcGVuZENoaWxkKHRoaXMuZ3JhcGhz
VHJlZUVsZW1lbnQpOwogCi0gICAgdGltZUdyYXBoSXRlbS5zZWxlY3QoKTsKLX0KKyAgICAgICAg
dGhpcy5ncmFwaHNUcmVlRWxlbWVudC5hcHBlbmRDaGlsZCh0aW1lR3JhcGhJdGVtKTsKKyAgICAg
ICAgdGhpcy5ncmFwaHNUcmVlRWxlbWVudC5hcHBlbmRDaGlsZChzaXplR3JhcGhJdGVtKTsKKyAg
ICAgICAgdGhpcy5ncmFwaHNUcmVlRWxlbWVudC5leHBhbmQoKTsKIAotV2ViSW5zcGVjdG9yLlJl
c291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKLSAgICB0b29sYmFySXRlbUNsYXNzOiAicmVzb3Vy
Y2VzIiwKLQotICAgIGdldCBjYXRlZ29yaWVzKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5f
Y2F0ZWdvcmllcykgewotICAgICAgICAgICAgdGhpcy5fY2F0ZWdvcmllcyA9IHtkb2N1bWVudHM6
IHtjb2xvcjoge3I6IDQ3LCBnOiAxMDIsIGI6IDIzNn19LCBzdHlsZXNoZWV0czoge2NvbG9yOiB7
cjogMTU3LCBnOiAyMzEsIGI6IDExOX19LCBpbWFnZXM6IHtjb2xvcjoge3I6IDE2NCwgZzogNjAs
IGI6IDI1NX19LCBzY3JpcHRzOiB7Y29sb3I6IHtyOiAyNTUsIGc6IDEyMSwgYjogMH19LCB4aHI6
IHtjb2xvcjoge3I6IDIzMSwgZzogMjMxLCBiOiAxMH19LCBmb250czoge2NvbG9yOiB7cjogMjU1
LCBnOiA4MiwgYjogNjJ9fSwgb3RoZXI6IHtjb2xvcjoge3I6IDE4NiwgZzogMTg2LCBiOiAxODZ9
fX07Ci0gICAgICAgICAgICBmb3IgKHZhciBjYXRlZ29yeSBpbiB0aGlzLl9jYXRlZ29yaWVzKQot
ICAgICAgICAgICAgICAgIHRoaXMuX2NhdGVnb3JpZXNbY2F0ZWdvcnldLnRpdGxlID0gV2ViSW5z
cGVjdG9yLnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0udGl0bGU7Ci0gICAgICAgIH0KKyAg
ICAgICAgdGhpcy5yZXNvdXJjZXNUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU2lkZWJh
clNlY3Rpb25UcmVlRWxlbWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJFU09VUkNFUyIpLCB7
fSwgdHJ1ZSk7CisgICAgICAgIHRoaXMuc2lkZWJhclRyZWUuYXBwZW5kQ2hpbGQodGhpcy5yZXNv
dXJjZXNUcmVlRWxlbWVudCk7CiAKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NhdGVnb3JpZXM7IAor
ICAgICAgICB0aGlzLnJlc291cmNlc1RyZWVFbGVtZW50LmV4cGFuZCgpOwogICAgIH0sCiAKLSAg
ICBmaWx0ZXI6IGZ1bmN0aW9uKHRhcmdldCwgc2VsZWN0TXVsdGlwbGUpCisgICAgX2NyZWF0ZVBh
bmVsRW5hYmxlcjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RB
bGwoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmls
dGVyQmFyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGNoaWxkID0gdGhpcy5maWx0ZXJCYXJFbGVtZW50LmNoaWxkTm9kZXNbaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjaGlsZC5jYXRlZ29yeSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlU3R5bGVD
bGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2YXIg
ZmlsdGVyQ2xhc3MgPSAiZmlsdGVyLSIgKyBjaGlsZC5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpOwot
ICAgICAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzR3JhcGhzRWxlbWVudC5yZW1vdmVTdHlsZUNs
YXNzKGZpbHRlckNsYXNzKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlc1RyZWVFbGVt
ZW50LmNoaWxkcmVuTGlzdEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhmaWx0ZXJDbGFzcyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZhciB0YXJnZXRGaWx0
ZXJDbGFzcyA9ICJmaWx0ZXItIiArIHRhcmdldC5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpOworICAg
ICAgICB2YXIgcGFuZWxFbmFibGVySGVhZGluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiWW91
IG5lZWQgdG8gZW5hYmxlIHJlc291cmNlIHRyYWNraW5nIHRvIHVzZSB0aGlzIHBhbmVsLiIpOwor
ICAgICAgICB2YXIgcGFuZWxFbmFibGVyRGlzY2xhaW1lciA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiRW5hYmxpbmcgcmVzb3VyY2UgdHJhY2tpbmcgd2lsbCByZWxvYWQgdGhlIHBhZ2UgYW5kIG1h
a2UgcGFnZSBsb2FkaW5nIHNsb3dlci4iKTsKKyAgICAgICAgdmFyIHBhbmVsRW5hYmxlckJ1dHRv
biA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRW5hYmxlIHJlc291cmNlIHRyYWNraW5nIik7CiAK
LSAgICAgICAgaWYgKHRhcmdldCA9PT0gdGhpcy5hbGxFbGVtZW50KSB7Ci0gICAgICAgICAgICBp
ZiAodGFyZ2V0Lmhhc1N0eWxlQ2xhc3MoInNlbGVjdGVkIikpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBjYW4ndCB1bnNlbGVjdCBBbGwsIHNvIHdlIGJyZWFrIGVhcmx5IGhlcmUKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIHRoaXMucGFuZWxFbmFibGVy
VmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuUGFuZWxFbmFibGVyVmlldygicmVzb3VyY2VzIiwgcGFu
ZWxFbmFibGVySGVhZGluZywgcGFuZWxFbmFibGVyRGlzY2xhaW1lciwgcGFuZWxFbmFibGVyQnV0
dG9uKTsKKyAgICAgICAgdGhpcy5wYW5lbEVuYWJsZXJWaWV3LmFkZEV2ZW50TGlzdGVuZXIoImVu
YWJsZSBjbGlja2VkIiwgdGhpcy5fZW5hYmxlUmVzb3VyY2VUcmFja2luZywgdGhpcyk7CiAKLSAg
ICAgICAgICAgIC8vIElmIEFsbCB3YXNuJ3Qgc2VsZWN0ZWQsIGFuZCBub3cgaXMsIHVuc2VsZWN0
IGV2ZXJ5dGhpbmcgZWxzZS4KLSAgICAgICAgICAgIHVuc2VsZWN0QWxsLmNhbGwodGhpcyk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBTb21ldGhpbmcgb3RoZXIgdGhhbiBBbGwg
aXMgYmVpbmcgc2VsZWN0ZWQsIHNvIHdlIHdhbnQgdG8gdW5zZWxlY3QgQWxsLgotICAgICAgICAg
ICAgaWYgKHRoaXMuYWxsRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5hbGxFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7
Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50LnJlbW92ZVN0eWxl
Q2xhc3MoImZpbHRlci1hbGwiKTsKLSAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlc1RyZWVF
bGVtZW50LmNoaWxkcmVuTGlzdEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZmlsdGVyLWFsbCIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNlbGVj
dE11bHRpcGxlKSB7Ci0gICAgICAgICAgICAvLyBJZiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgb2Zm
LCB3ZSB3YW50IHRvIHVuc2VsZWN0IGV2ZXJ5dGhpbmcgZWxzZQotICAgICAgICAgICAgLy8gYW5k
IGp1c3Qgc2VsZWN0IG91cnNlbHZlcy4KLSAgICAgICAgICAgIHVuc2VsZWN0QWxsLmNhbGwodGhp
cyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRhcmdldC5hZGRTdHlsZUNsYXNzKCJzZWxl
Y3RlZCIpOwotICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50LmFkZFN0eWxl
Q2xhc3ModGFyZ2V0RmlsdGVyQ2xhc3MpOwotICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNUcmVl
RWxlbWVudC5jaGlsZHJlbkxpc3RFbGVtZW50LmFkZFN0eWxlQ2xhc3ModGFyZ2V0RmlsdGVyQ2xh
c3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodGFyZ2V0Lmhhc1N0eWxlQ2xhc3MoInNlbGVjdGVkIikpIHsKLSAgICAgICAgICAg
IC8vIElmIHNlbGVjdE11bHRpcGxlIGlzIHR1cm5lZCBvbiwgYW5kIHdlIHdlcmUgc2VsZWN0ZWQs
IHdlIGp1c3QKLSAgICAgICAgICAgIC8vIHdhbnQgdG8gdW5zZWxlY3Qgb3Vyc2VsdmVzLgotICAg
ICAgICAgICAgdGFyZ2V0LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0KLSAgICAgICAg
ICAgIHRoaXMucmVzb3VyY2VzR3JhcGhzRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKHRhcmdldEZp
bHRlckNsYXNzKTsKLSAgICAgICAgICAgIHRoaXMucmVzb3VyY2VzVHJlZUVsZW1lbnQuY2hpbGRy
ZW5MaXN0RWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKHRhcmdldEZpbHRlckNsYXNzKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHNlbGVjdE11bHRpcGxlIGlzIHR1cm5lZCBv
biwgYW5kIHdlIHdlcmVuJ3Qgc2VsZWN0ZWQsIHdlIGp1c3QKLSAgICAgICAgICAgIC8vIHdhbnQg
dG8gc2VsZWN0IG91cnNlbHZlcy4KLSAgICAgICAgICAgIHRhcmdldC5hZGRTdHlsZUNsYXNzKCJz
ZWxlY3RlZCIpOworICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wYW5lbEVu
YWJsZXJWaWV3LmVsZW1lbnQpOwogCi0gICAgICAgICAgICB0aGlzLnJlc291cmNlc0dyYXBoc0Vs
ZW1lbnQuYWRkU3R5bGVDbGFzcyh0YXJnZXRGaWx0ZXJDbGFzcyk7Ci0gICAgICAgICAgICB0aGlz
LnJlc291cmNlc1RyZWVFbGVtZW50LmNoaWxkcmVuTGlzdEVsZW1lbnQuYWRkU3R5bGVDbGFzcyh0
YXJnZXRGaWx0ZXJDbGFzcyk7Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy5lbmFibGVUb2dnbGVC
dXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgImVuYWJsZS10b2dn
bGUtc3RhdHVzLWJhci1pdGVtIik7CisgICAgICAgIHRoaXMuZW5hYmxlVG9nZ2xlQnV0dG9uLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdG9nZ2xlUmVzb3VyY2VUcmFja2luZy5iaW5k
KHRoaXMpLCBmYWxzZSk7CiAgICAgfSwKIAotICAgIGlzQ2F0ZWdvcnlWaXNpYmxlOiBmdW5jdGlv
bihjYXRlZ29yeU5hbWUpCisgICAgX2NyZWF0ZVN0YXR1c2JhckJ1dHRvbnM6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAodGhpcy5yZXNvdXJjZXNHcmFwaHNFbGVtZW50Lmhhc1N0
eWxlQ2xhc3MoImZpbHRlci1hbGwiKSB8fCB0aGlzLnJlc291cmNlc0dyYXBoc0VsZW1lbnQuaGFz
U3R5bGVDbGFzcygiZmlsdGVyLSIgKyBjYXRlZ29yeU5hbWUudG9Mb3dlckNhc2UoKSkpOwotICAg
IH0sCisgICAgICAgIHRoaXMubGFyZ2VyUmVzb3VyY2VzQnV0dG9uID0gbmV3IFdlYkluc3BlY3Rv
ci5TdGF0dXNCYXJCdXR0b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJVc2Ugc21hbGwgcmVzb3Vy
Y2Ugcm93cy4iKSwgInJlc291cmNlcy1sYXJnZXItcmVzb3VyY2VzLXN0YXR1cy1iYXItaXRlbSIp
OworICAgICAgICB0aGlzLmxhcmdlclJlc291cmNlc0J1dHRvbi50b2dnbGVkID0gUHJlZmVyZW5j
ZXMucmVzb3VyY2VzTGFyZ2VSb3dzOworICAgICAgICB0aGlzLmxhcmdlclJlc291cmNlc0J1dHRv
bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZUxhcmdlclJlc291cmNlcy5i
aW5kKHRoaXMpLCBmYWxzZSk7CisgICAgICAgIGlmICghUHJlZmVyZW5jZXMucmVzb3VyY2VzTGFy
Z2VSb3dzKSB7CisgICAgICAgICAgICBQcmVmZXJlbmNlcy5yZXNvdXJjZXNMYXJnZVJvd3MgPSAh
UHJlZmVyZW5jZXMucmVzb3VyY2VzTGFyZ2VSb3dzOworICAgICAgICAgICAgdGhpcy5fdG9nZ2xl
TGFyZ2VyUmVzb3VyY2VzKCk7IC8vIHRoaXMgd2lsbCB0b2dnbGUgdGhlIHByZWZlcmVuY2UgYmFj
ayB0byB0aGUgb3JpZ2luYWwKKyAgICAgICAgfQogCi0gICAgX3VwZGF0ZUZpbHRlcjogZnVuY3Rp
b24oZSkKLSAgICB7Ci0gICAgICAgIHZhciBpc01hYyA9IEluc3BlY3RvckNvbnRyb2xsZXIucGxh
dGZvcm0oKS5pbmRleE9mKCJtYWMtIikgPT09IDA7Ci0gICAgICAgIHZhciBzZWxlY3RNdWx0aXBs
ZSA9IGZhbHNlOwotICAgICAgICBpZiAoaXNNYWMgJiYgZS5tZXRhS2V5ICYmICFlLmN0cmxLZXkg
JiYgIWUuYWx0S2V5ICYmICFlLnNoaWZ0S2V5KQotICAgICAgICAgICAgc2VsZWN0TXVsdGlwbGUg
PSB0cnVlOwotICAgICAgICBpZiAoIWlzTWFjICYmIGUuY3RybEtleSAmJiAhZS5tZXRhS2V5ICYm
ICFlLmFsdEtleSAmJiAhZS5zaGlmdEtleSkKLSAgICAgICAgICAgIHNlbGVjdE11bHRpcGxlID0g
dHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHRoaXMuZmlsdGVyKGUudGFyZ2V0LCBzZWxlY3RNdWx0
aXBsZSk7CisgICAgICAgIHRoaXMuc29ydGluZ1NlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzZWxlY3QiKTsKKyAgICAgICAgdGhpcy5zb3J0aW5nU2VsZWN0RWxlbWVudC5j
bGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtIjsKKyAgICAgICAgdGhpcy5zb3J0aW5nU2VsZWN0
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9jaGFuZ2VTb3J0aW5nRnVu
Y3Rpb24uYmluZCh0aGlzKSwgZmFsc2UpOwogICAgIH0sCiAKLSAgICBnZXQgdG9vbGJhckl0ZW1M
YWJlbCgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXNv
dXJjZXMiKTsKLSAgICB9LAotICAgIAogICAgIGdldCBtYWluUmVzb3VyY2VMb2FkVGltZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbWFpblJlc291cmNlTG9hZFRpbWUgfHwgLTE7CkBA
IC0yODUsNyArMTY4LDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5fbWFpblJlc291cmNlTG9hZFRpbWUgPSB4OwogICAgICAgICAKICAg
ICAgICAgLy8gVXBkYXRlIHRoZSBkaXZpZGVycyB0byBkcmF3IHRoZSBuZXcgbGluZQotICAgICAg
ICB0aGlzLl91cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQodHJ1ZSk7CisgICAgICAgIHRoaXMu
dXBkYXRlR3JhcGhEaXZpZGVyc0lmTmVlZGVkKHRydWUpOwogICAgIH0sCiAgICAgCiAgICAgZ2V0
IG1haW5SZXNvdXJjZURPTUNvbnRlbnRUaW1lKCkKQEAgLTMwMCwyMCArMTgzLDEyIEBAIFdlYklu
c3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIAogICAgICAgICB0
aGlzLl9tYWluUmVzb3VyY2VET01Db250ZW50VGltZSA9IHg7CiAgICAgICAgIAotICAgICAgICB0
aGlzLl91cGRhdGVHcmFwaERpdmlkZXJzSWZOZWVkZWQodHJ1ZSk7Ci0gICAgfSwKLQotICAgIGdl
dCBzdGF0dXNCYXJJdGVtcygpCi0gICAgewotICAgICAgICByZXR1cm4gW3RoaXMuZW5hYmxlVG9n
Z2xlQnV0dG9uLmVsZW1lbnQsIHRoaXMubGFyZ2VyUmVzb3VyY2VzQnV0dG9uLmVsZW1lbnQsIHRo
aXMuc29ydGluZ1NlbGVjdEVsZW1lbnRdOworICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoRGl2aWRl
cnNJZk5lZWRlZCh0cnVlKTsKICAgICB9LAogCiAgICAgc2hvdzogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5zaG93LmNhbGwodGhpcyk7Ci0K
LSAgICAgICAgdGhpcy5fdXBkYXRlRGl2aWRlcnNMYWJlbEJhclBvc2l0aW9uKCk7Ci0gICAgICAg
IHRoaXMucmVmcmVzaElmTmVlZGVkKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5BYnN0cmFjdFRp
bWVsaW5lUGFuZWwucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzKTsKIAogICAgICAgICB2YXIgdmlz
aWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3OwogICAgICAgICBpZiAodmlzaWJsZVZpZXcpIHsK
QEAgLTMzNiw3ICsyMTEsNyBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBl
ID0gewogCiAgICAgcmVzaXplOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl91cGRh
dGVHcmFwaERpdmlkZXJzSWZOZWVkZWQoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkFic3RyYWN0
VGltZWxpbmVQYW5lbC5wcm90b3R5cGUucmVzaXplLmNhbGwodGhpcyk7CiAKICAgICAgICAgdmFy
IHZpc2libGVWaWV3ID0gdGhpcy52aXNpYmxlVmlldzsKICAgICAgICAgaWYgKHZpc2libGVWaWV3
ICYmICJyZXNpemUiIGluIHZpc2libGVWaWV3KQpAQCAtNDQyLDM1ICszMTcsNiBAQCBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zb3J0UmVz
b3VyY2VzSWZOZWVkZWQoKTsKICAgICB9LAogCi0gICAgZ2V0IG5lZWRzUmVmcmVzaCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fbmVlZHNSZWZyZXNoOwotICAgIH0sCi0KLSAgICBzZXQg
bmVlZHNSZWZyZXNoKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbmVlZHNSZWZyZXNoID09
PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX25lZWRzUmVmcmVzaCA9
IHg7Ci0KLSAgICAgICAgaWYgKHgpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUgJiYg
ISgiX3JlZnJlc2hUaW1lb3V0IiBpbiB0aGlzKSkKLSAgICAgICAgICAgICAgICB0aGlzLl9yZWZy
ZXNoVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5yZWZyZXNoLmJpbmQodGhpcyksIDUwMCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIl9yZWZyZXNoVGltZW91dCIgaW4gdGhp
cykgewotICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWZyZXNoVGltZW91dCk7
Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JlZnJlc2hUaW1lb3V0OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHJlZnJlc2hJZk5lZWRlZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKQotICAgICAgICAgICAgdGhp
cy5yZWZyZXNoKCk7Ci0gICAgfSwKLQogICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHRoaXMubmVlZHNSZWZyZXNoID0gZmFsc2U7CkBAIC01MDYsNyArMzUyLDcgQEAgV2Vi
SW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9z
dGFsZVJlc291cmNlcyA9IFtdOwogCi0gICAgICAgIHRoaXMuX3VwZGF0ZUdyYXBoRGl2aWRlcnNJ
Zk5lZWRlZCgpOworICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZCgpOwog
ICAgICAgICB0aGlzLl9zb3J0UmVzb3VyY2VzSWZOZWVkZWQoKTsKICAgICAgICAgdGhpcy5fdXBk
YXRlU3VtbWFyeUdyYXBoKCk7CiAgICAgfSwKQEAgLTU1Nyw3ICs0MDMsNyBAQCBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlc291cmNlc0dy
YXBoc0VsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgdGhpcy5zdW1tYXJ5QmFyLnJl
c2V0KCk7CiAKLSAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhEaXZpZGVyc0lmTmVlZGVkKHRydWUp
OworICAgICAgICB0aGlzLnVwZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZCh0cnVlKTsKIAogICAg
ICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlci5yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpKSB7
CiAgICAgICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiUmVzb3VyY2UgdHJhY2tpbmcgZW5hYmxlZC4gQ2xpY2sgdG8gZGlzYWJsZS4i
KTsKQEAgLTc3Niw0OCArNjIyLDEzIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgX3VwZGF0ZUdyYXBoRGl2aWRlcnNJ
Zk5lZWRlZDogZnVuY3Rpb24oZm9yY2UpCisgICAgdXBkYXRlR3JhcGhEaXZpZGVyc0lmTmVlZGVk
OiBmdW5jdGlvbihmb3JjZSkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7Ci0g
ICAgICAgICAgICB0aGlzLm5lZWRzUmVmcmVzaCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCA8PSAw
KSB7Ci0gICAgICAgICAgICAvLyBUaGUgc3R5bGVzaGVldCBoYXNuJ3QgbG9hZGVkIHlldCBvciB0
aGUgd2luZG93IGlzIGNsb3NlZCwKLSAgICAgICAgICAgIC8vIHNvIHdlIGNhbid0IGNhbGN1bGF0
ZSB3aGF0IGlzIG5lZWQuIFJldHVybiBlYXJseS4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBkaXZpZGVyQ291bnQgPSBNYXRoLnJvdW5kKHRoaXMuZGl2aWRl
cnNFbGVtZW50Lm9mZnNldFdpZHRoIC8gNjQpOwotICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLmNh
bGN1bGF0b3IuYm91bmRhcnlTcGFuIC8gZGl2aWRlckNvdW50OwotICAgICAgICBpZiAoIWZvcmNl
ICYmIHRoaXMuX2N1cnJlbnREaXZpZGVyU2xpY2UgPT09IHNsaWNlKQorICAgICAgICB2YXIgcHJv
Y2VlZCA9IFdlYkluc3BlY3Rvci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlLnVwZGF0
ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZC5jYWxsKHRoaXMsIGZvcmNlKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghcHJvY2VlZCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLl9j
dXJyZW50RGl2aWRlclNsaWNlID0gc2xpY2U7Ci0KLSAgICAgICAgdGhpcy5kaXZpZGVyc0VsZW1l
bnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5ldmVudERpdmlkZXJzRWxlbWVudC5y
ZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLmRpdmlkZXJzTGFiZWxCYXJFbGVtZW50LnJl
bW92ZUNoaWxkcmVuKCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gZGl2aWRlckNv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIHZhciBkaXZpZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBkaXZpZGVyLmNsYXNzTmFtZSA9ICJyZXNvdXJjZXMt
ZGl2aWRlciI7Ci0gICAgICAgICAgICBpZiAoaSA9PT0gZGl2aWRlckNvdW50KQotICAgICAgICAg
ICAgICAgIGRpdmlkZXIuYWRkU3R5bGVDbGFzcygibGFzdCIpOwotICAgICAgICAgICAgZGl2aWRl
ci5zdHlsZS5sZWZ0ID0gKChpIC8gZGl2aWRlckNvdW50KSAqIDEwMCkgKyAiJSI7Ci0KLSAgICAg
ICAgICAgIHRoaXMuZGl2aWRlcnNFbGVtZW50LmFwcGVuZENoaWxkKGRpdmlkZXIuY2xvbmVOb2Rl
KCkpOwotCi0gICAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgICAgIGxhYmVsLmNsYXNzTmFtZSA9ICJyZXNvdXJjZXMtZGl2aWRlci1s
YWJlbCI7Ci0gICAgICAgICAgICBpZiAoIWlzTmFOKHNsaWNlKSkKLSAgICAgICAgICAgICAgICBs
YWJlbC50ZXh0Q29udGVudCA9IHRoaXMuY2FsY3VsYXRvci5mb3JtYXRWYWx1ZShzbGljZSAqIGkp
OwotICAgICAgICAgICAgZGl2aWRlci5hcHBlbmRDaGlsZChsYWJlbCk7Ci0KLSAgICAgICAgICAg
IHRoaXMuZGl2aWRlcnNMYWJlbEJhckVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2aWRlcik7Ci0gICAg
ICAgIH0KLQogICAgICAgICBpZiAodGhpcy5jYWxjdWxhdG9yLnN0YXJ0QXRaZXJvIHx8ICF0aGlz
LmNhbGN1bGF0b3IuY29tcHV0ZVBlcmNlbnRhZ2VGcm9tRXZlbnRUaW1lKSB7CiAgICAgICAgICAg
ICAvLyBJZiBvdXIgY3VycmVudCBzb3J0aW5nIG1ldGhvZCBzdGFydHMgYXQgemVybywgdGhhdCBt
ZWFucyBpdCBzaG93cyBhbGwKICAgICAgICAgICAgIC8vIHJlc291cmNlcyBzdGFydGluZyBhdCB0
aGUgc2FtZSBwb2ludCwgYW5kIHNvIG9uTG9hZCBldmVudCBhbmQgRE9NQ29udGVudApAQCAtODU5
LDIwICs2NzAsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAgICAgfSwKIAotICAgIF91cGRhdGVTdW1tYXJ5R3JhcGg6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHRoaXMuc3VtbWFyeUJhci51cGRhdGUodGhpcy5fcmVzb3VyY2VzKTsK
LSAgICB9LAotCi0gICAgX3VwZGF0ZURpdmlkZXJzTGFiZWxCYXJQb3NpdGlvbjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuY29udGFpbmVyRWxlbWVudC5z
Y3JvbGxUb3A7Ci0gICAgICAgIHZhciBkaXZpZGVyc1RvcCA9IChzY3JvbGxUb3AgPCB0aGlzLnN1
bW1hcnlCYXIuZWxlbWVudC5vZmZzZXRIZWlnaHQgPyB0aGlzLnN1bW1hcnlCYXIuZWxlbWVudC5v
ZmZzZXRIZWlnaHQgOiBzY3JvbGxUb3ApOwotICAgICAgICB0aGlzLmRpdmlkZXJzRWxlbWVudC5z
dHlsZS50b3AgPSBzY3JvbGxUb3AgKyAicHgiOwotICAgICAgICB0aGlzLmV2ZW50RGl2aWRlcnNF
bGVtZW50LnN0eWxlLnRvcCA9IHNjcm9sbFRvcCArICJweCI7Ci0gICAgICAgIHRoaXMuZGl2aWRl
cnNMYWJlbEJhckVsZW1lbnQuc3R5bGUudG9wID0gZGl2aWRlcnNUb3AgKyAicHgiOwotICAgIH0s
Ci0KICAgICBfZ3JhcGhTZWxlY3RlZDogZnVuY3Rpb24odHJlZUVsZW1lbnQpCiAgICAgewogICAg
ICAgICBpZiAodGhpcy5fbGFzdFNlbGVjdGVkR3JhcGhUcmVlRWxlbWVudCkKQEAgLTk2NCwxMCAr
NzYxLDggQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAg
IHVwZGF0ZU1haW5WaWV3V2lkdGg6IGZ1bmN0aW9uKHdpZHRoKQogICAgIHsKLSAgICAgICAgdGhp
cy5jb250YWluZXJDb250ZW50RWxlbWVudC5zdHlsZS5sZWZ0ID0gd2lkdGggKyAicHgiOworICAg
ICAgICBXZWJJbnNwZWN0b3IuQWJzdHJhY3RUaW1lbGluZVBhbmVsLnByb3RvdHlwZS51cGRhdGVN
YWluVmlld1dpZHRoLmNhbGwodGhpcywgd2lkdGgpOwogICAgICAgICB0aGlzLnZpZXdzQ29udGFp
bmVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gd2lkdGggKyAicHgiOwotCi0gICAgICAgIHRoaXMuX3Vw
ZGF0ZUdyYXBoRGl2aWRlcnNJZk5lZWRlZCgpOwogICAgIH0sCiAKICAgICBfZW5hYmxlUmVzb3Vy
Y2VUcmFja2luZzogZnVuY3Rpb24oKQpAQCAtOTkxLDg1ICs3ODYsMTEgQEAgV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnBy
b3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLlJlc291cmNlQ2FsY3VsYXRvciA9IGZ1bmN0aW9uKCkK
LXsKLX0KLQotV2ViSW5zcGVjdG9yLlJlc291cmNlQ2FsY3VsYXRvci5wcm90b3R5cGUgPSB7Ci0g
ICAgY29tcHV0ZVN1bW1hcnlWYWx1ZXM6IGZ1bmN0aW9uKHJlc291cmNlcykKLSAgICB7Ci0gICAg
ICAgIHZhciB0b3RhbCA9IDA7Ci0gICAgICAgIHZhciBjYXRlZ29yeVZhbHVlcyA9IHt9OwotCi0g
ICAgICAgIHZhciByZXNvdXJjZXNMZW5ndGggPSByZXNvdXJjZXMubGVuZ3RoOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2
YXIgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlz
Ll92YWx1ZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAidW5k
ZWZpbmVkIikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghKHJl
c291cmNlLmNhdGVnb3J5Lm5hbWUgaW4gY2F0ZWdvcnlWYWx1ZXMpKQotICAgICAgICAgICAgICAg
IGNhdGVnb3J5VmFsdWVzW3Jlc291cmNlLmNhdGVnb3J5Lm5hbWVdID0gMDsKLSAgICAgICAgICAg
IGNhdGVnb3J5VmFsdWVzW3Jlc291cmNlLmNhdGVnb3J5Lm5hbWVdICs9IHZhbHVlOwotICAgICAg
ICAgICAgdG90YWwgKz0gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4ge2NhdGVn
b3J5VmFsdWVzOiBjYXRlZ29yeVZhbHVlcywgdG90YWw6IHRvdGFsfTsKLSAgICB9LAotCi0gICAg
Y29tcHV0ZUJhckdyYXBoUGVyY2VudGFnZXM6IGZ1bmN0aW9uKHJlc291cmNlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHtzdGFydDogMCwgbWlkZGxlOiAwLCBlbmQ6ICh0aGlzLl92YWx1ZShyZXNv
dXJjZSkgLyB0aGlzLmJvdW5kYXJ5U3BhbikgKiAxMDB9OwotICAgIH0sCi0KLSAgICBjb21wdXRl
QmFyR3JhcGhMYWJlbHM6IGZ1bmN0aW9uKHJlc291cmNlKQotICAgIHsKLSAgICAgICAgY29uc3Qg
bGFiZWwgPSB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3ZhbHVlKHJlc291cmNlKSk7Ci0gICAgICAg
IHZhciB0b29sdGlwID0gbGFiZWw7Ci0gICAgICAgIGlmIChyZXNvdXJjZS5jYWNoZWQpCi0gICAg
ICAgICAgICB0b29sdGlwID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyAoZnJvbSBjYWNoZSki
LCB0b29sdGlwKTsKLSAgICAgICAgcmV0dXJuIHtsZWZ0OiBsYWJlbCwgcmlnaHQ6IGxhYmVsLCB0
b29sdGlwOiB0b29sdGlwfTsKLSAgICB9LAotCi0gICAgZ2V0IGJvdW5kYXJ5U3BhbigpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5tYXhpbXVtQm91bmRhcnkgLSB0aGlzLm1pbmltdW1Cb3Vu
ZGFyeTsKLSAgICB9LAotCi0gICAgdXBkYXRlQm91bmRhcmllczogZnVuY3Rpb24ocmVzb3VyY2Up
Ci0gICAgewotICAgICAgICB0aGlzLm1pbmltdW1Cb3VuZGFyeSA9IDA7Ci0KLSAgICAgICAgdmFy
IHZhbHVlID0gdGhpcy5fdmFsdWUocmVzb3VyY2UpOwotICAgICAgICBpZiAodHlwZW9mIHRoaXMu
bWF4aW11bUJvdW5kYXJ5ID09PSAidW5kZWZpbmVkIiB8fCB2YWx1ZSA+IHRoaXMubWF4aW11bUJv
dW5kYXJ5KSB7Ci0gICAgICAgICAgICB0aGlzLm1heGltdW1Cb3VuZGFyeSA9IHZhbHVlOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxldGUg
dGhpcy5taW5pbXVtQm91bmRhcnk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLm1heGltdW1Cb3VuZGFy
eTsKLSAgICB9LAotCi0gICAgX3ZhbHVlOiBmdW5jdGlvbihyZXNvdXJjZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0sCi0KLSAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24odmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKLSAgICB9Ci19CitXZWJJ
bnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rv
ci5BYnN0cmFjdFRpbWVsaW5lUGFuZWwucHJvdG90eXBlOwogCiBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VUaW1lQ2FsY3VsYXRvciA9IGZ1bmN0aW9uKHN0YXJ0QXRaZXJvKQogewotICAgIFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZUNhbGN1bGF0b3IuY2FsbCh0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuVGlt
ZWxpbmVDYWxjdWxhdG9yLmNhbGwodGhpcyk7CiAgICAgdGhpcy5zdGFydEF0WmVybyA9IHN0YXJ0
QXRaZXJvOwogfQogCkBAIC0xMjMwLDcgKzk1MSw3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZVRp
bWVDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKICAgICB9LAogfQogCi1XZWJJbnNwZWN0b3IuUmVz
b3VyY2VUaW1lQ2FsY3VsYXRvci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlJl
c291cmNlQ2FsY3VsYXRvci5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1lQ2Fs
Y3VsYXRvci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2FsY3Vs
YXRvci5wcm90b3R5cGU7CiAKIFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyYW5zZmVyVGltZUNhbGN1
bGF0b3IgPSBmdW5jdGlvbigpCiB7CkBAIC0xMjc3LDEwICs5OTgsMTkgQEAgV2ViSW5zcGVjdG9y
LlJlc291cmNlVHJhbnNmZXJEdXJhdGlvbkNhbGN1bGF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3QKIAogV2ViSW5zcGVjdG9yLlJlc291cmNlVHJhbnNmZXJTaXplQ2FsY3VsYXRv
ciA9IGZ1bmN0aW9uKCkKIHsKLSAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYWxjdWxhdG9yLmNh
bGwodGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lQ2FsY3VsYXRvci5jYWxsKHRoaXMp
OwogfQogCiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmFuc2ZlclNpemVDYWxjdWxhdG9yLnByb3Rv
dHlwZSA9IHsKKyAgICBjb21wdXRlQmFyR3JhcGhMYWJlbHM6IGZ1bmN0aW9uKHJlc291cmNlKQor
ICAgIHsKKyAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmZvcm1hdFZhbHVlKHRoaXMuX3ZhbHVl
KHJlc291cmNlKSk7CisgICAgICAgIHZhciB0b29sdGlwID0gbGFiZWw7CisgICAgICAgIGlmIChy
ZXNvdXJjZS5jYWNoZWQpCisgICAgICAgICAgICB0b29sdGlwID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCIlcyAoZnJvbSBjYWNoZSkiLCB0b29sdGlwKTsKKyAgICAgICAgcmV0dXJuIHtsZWZ0OiBs
YWJlbCwgcmlnaHQ6IGxhYmVsLCB0b29sdGlwOiB0b29sdGlwfTsKKyAgICB9LAorCiAgICAgX3Zh
bHVlOiBmdW5jdGlvbihyZXNvdXJjZSkKICAgICB7CiAgICAgICAgIHJldHVybiByZXNvdXJjZS5j
b250ZW50TGVuZ3RoOwpAQCAtMTI5Miw3ICsxMDIyLDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNl
VHJhbnNmZXJTaXplQ2FsY3VsYXRvci5wcm90b3R5cGUgPSB7CiAgICAgfQogfQogCi1XZWJJbnNw
ZWN0b3IuUmVzb3VyY2VUcmFuc2ZlclNpemVDYWxjdWxhdG9yLnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYWxjdWxhdG9yLnByb3RvdHlwZTsKK1dlYkluc3BlY3Rv
ci5SZXNvdXJjZVRyYW5zZmVyU2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdl
Ykluc3BlY3Rvci5UaW1lbGluZUNhbGN1bGF0b3IucHJvdG90eXBlOwogCiBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VTaWRlYmFyVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihyZXNvdXJjZSkKIHsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdW1tYXJ5QmFyLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N1bW1hcnlCYXIuanMKaW5kZXggYmJmMmIxYS4uMWMzMTQ0
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N1bW1hcnlCYXIuanMK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N1bW1hcnlCYXIuanMKQEAgLTc0LDgg
Kzc0LDcgQEAgV2ViSW5zcGVjdG9yLlN1bW1hcnlCYXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgaWYgKCFzaXplKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICB2
YXIgY29sb3IgPSB0aGlzLmNhdGVnb3JpZXNbY2F0ZWdvcnldLmNvbG9yOwotICAgICAgICAgICAg
dmFyIGNvbG9yU3RyaW5nID0gInJnYigiICsgY29sb3IuciArICIsICIgKyBjb2xvci5nICsgIiwg
IiArIGNvbG9yLmIgKyAiKSI7CisgICAgICAgICAgICB2YXIgY29sb3JTdHJpbmcgPSB0aGlzLmNh
dGVnb3JpZXNbY2F0ZWdvcnldLmNvbG9yOwogCiAgICAgICAgICAgICB2YXIgZmlsbFNlZ21lbnQg
PSB7Y29sb3I6IGNvbG9yU3RyaW5nLCB2YWx1ZTogc2l6ZX07CiAgICAgICAgICAgICBmaWxsU2Vn
bWVudHMucHVzaChmaWxsU2VnbWVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV2ViS2l0LnFyYyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCmluZGV4IDg5OGJkNGMuLmExZDY3MWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjCkBAIC0xLDYgKzEsNyBAQAogPCFET0NUWVBFIFJDQz48UkNDIHZlcnNpb249IjEu
MCI+CiA8cXJlc291cmNlIHByZWZpeD0iL3dlYmtpdC9pbnNwZWN0b3IiPgogICAgIDxmaWxlPmlu
c3BlY3Rvci5odG1sPC9maWxlPgorICAgIDxmaWxlPkFic3RyYWN0VGltZWxpbmVQYW5lbC5qczwv
ZmlsZT4KICAgICA8ZmlsZT5Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRyZWUuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+QnJlYWtwb2ludC5qczwvZmlsZT4KICAgICA8ZmlsZT5CcmVha3BvaW50c1NpZGVi
YXJQYW5lLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5o
dG1sCmluZGV4IDM2MzUxYjcuLmRlZTAzZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmh0bWwKQEAgLTc0LDYgKzc0LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdGF0dXNCYXJCdXR0b24uanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN1bW1hcnlCYXIuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkVsZW1l
bnRzUGFuZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IkFic3RyYWN0VGltZWxpbmVQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VzUGFuZWwuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNjcmlwdHNQYW5lbC5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU3RvcmFn
ZVBhbmVsLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCmluZGV4IDE2MWZkM2UuLjU2OTFhYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcwpAQCAtMzg0LDEzICszODQsMTMgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9
IGZ1bmN0aW9uKCkKICAgICB0aGlzLmRvbUFnZW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01BZ2Vu
dCgpOwogCiAgICAgdGhpcy5yZXNvdXJjZUNhdGVnb3JpZXMgPSB7Ci0gICAgICAgIGRvY3VtZW50
czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiRG9jdW1lbnRzIiksICJkb2N1bWVudHMiKSwKLSAgICAgICAgc3R5bGVzaGVldHM6IG5ldyBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0eWxl
c2hlZXRzIiksICJzdHlsZXNoZWV0cyIpLAotICAgICAgICBpbWFnZXM6IG5ldyBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VDYXRlZ29yeShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkltYWdlcyIpLCAiaW1h
Z2VzIiksCi0gICAgICAgIHNjcmlwdHM6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29y
eShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNjcmlwdHMiKSwgInNjcmlwdHMiKSwKLSAgICAgICAg
eGhyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJYSFIiKSwgInhociIpLAotICAgICAgICBmb250czogbmV3IFdlYkluc3BlY3Rvci5SZXNv
dXJjZUNhdGVnb3J5KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRm9udHMiKSwgImZvbnRzIiksCi0g
ICAgICAgIG90aGVyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJPdGhlciIpLCAib3RoZXIiKQorICAgICAgICBkb2N1bWVudHM6IG5ldyBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgiZG9jdW1lbnRzIiwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJEb2N1bWVudHMiKSwgInJnYig0NywxMDIsMjM2KSIpLAorICAgICAgICBzdHlsZXNo
ZWV0czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJzdHlsZXNoZWV0cyIsIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiU3R5bGVzaGVldHMiKSwgInJnYigxNTcsMjMxLDExOSkiKSwK
KyAgICAgICAgaW1hZ2VzOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoImltYWdl
cyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW1hZ2VzIiksICJyZ2IoMTY0LDYwLDI1NSkiKSwK
KyAgICAgICAgc2NyaXB0czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJzY3Jp
cHRzIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTY3JpcHRzIiksICJyZ2IoMjU1LDEyMSwwKSIp
LAorICAgICAgICB4aHI6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgieGhyIiwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJYSFIiKSwgInJnYigyMzEsMjMxLDEwKSIpLAorICAgICAg
ICBmb250czogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJmb250cyIsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRm9udHMiKSwgInJnYigyNTUsODIsNjIpIiksCisgICAgICAgIG90
aGVyOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoIm90aGVyIiwgV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJPdGhlciIpLCAicmdiKDE4NiwxODYsMTg2KSIpCiAgICAgfTsKIAogICAg
IHRoaXMucGFuZWxzID0ge307Cg==
</data>
<flag name="review"
          id="23347"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>