<?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>200456</bug_id>
          
          <creation_ts>2019-08-05 16:32:06 -0700</creation_ts>
          <short_desc>[results.webkit.org Timeline] Performance improvement - Skip render offscreen canvas</short_desc>
          <delta_ts>2019-08-15 00:03:12 -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>Tools / Tests</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhifei Fang">zhifei_fang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-feeder</cc>
    
    <cc>jbedard</cc>
    
    <cc>magidx69</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1558619</commentid>
    <comment_count>0</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-05 16:32:06 -0700</bug_when>
    <thetext>Using intersection observer to observe if a series on display on viewport, if it is, we do the render, if not, we just skip the render.

This limited the number of frame we requested for rendering, save huge resources for nested expand series as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559724</commentid>
    <comment_count>1</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-08 16:44:33 -0700</bug_when>
    <thetext>Get rid of the offscreen canvas cache, optimize the memory usage, so that webkit won&apos;t get into a &quot;low memory&quot; mode, this will loss a lot of performance than the benefit we gain from it.

Create a new way to batch all context state machine command by color, so that it will fill/stoke same color elements all at once, this will improve the render speed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559728</commentid>
    <comment_count>2</comment_count>
      <attachid>375860</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-08 16:49:34 -0700</bug_when>
    <thetext>Created attachment 375860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559745</commentid>
    <comment_count>3</comment_count>
      <attachid>375860</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-08 17:26:24 -0700</bug_when>
    <thetext>Comment on attachment 375860
Patch

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

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:121
&gt; +class ColorBatchRender {

While you are generally rendering things by color, I don&apos;t see this class actually setting colors. It&apos;s more accurately a generic render batch map that you happen to be using colors as a key. I also don&apos;t get why you need to pass colors in.

With that in mind, I think that you need to pick. Either this class batches together renders by color (and so should set colors, but does not need to pass them to the callbacks) or, this is a generic batch mapping which maps any object to a set of associated render callbacks. In that case, it would seem that the very first function provided would define what sort of context you were defining (ie, is this about filling with a specific color, drawing lines with a specific color, using a specific font, etc)

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:208
&gt;                  context.fillStyle = color;

I&apos;m surprised to see you setting the fillStyle in this function, I would have expected it to be set in the ColorBatchRender class

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:375
&gt; +                // Clean the canvas, free its memory

Do we really need to do this? It feels like a WebKit bug if we do.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:639
&gt; +            context.strokeStyle = usedLineColor;

Shouldn&apos;t this be color instead of usedLineColor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560576</commentid>
    <comment_count>4</comment_count>
      <attachid>376100</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-12 15:31:39 -0700</bug_when>
    <thetext>Created attachment 376100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560578</commentid>
    <comment_count>5</comment_count>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-12 15:40:04 -0700</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #3)
&gt; Comment on attachment 375860 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=375860&amp;action=review
&gt; 
&gt; &gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:121
&gt; &gt; +class ColorBatchRender {
&gt; 
&gt; While you are generally rendering things by color, I don&apos;t see this class
&gt; actually setting colors. It&apos;s more accurately a generic render batch map
&gt; that you happen to be using colors as a key. I also don&apos;t get why you need
&gt; to pass colors in.
&gt; 
&gt; With that in mind, I think that you need to pick. Either this class batches
&gt; together renders by color (and so should set colors, but does not need to
&gt; pass them to the callbacks) or, this is a generic batch mapping which maps
&gt; any object to a set of associated render callbacks. In that case, it would
&gt; seem that the very first function provided would define what sort of context
&gt; you were defining (ie, is this about filling with a specific color, drawing
&gt; lines with a specific color, using a specific font, etc)
&gt; 
&gt; &gt;

The operation can be fill color or stroke color or do those together, so the user of this class should define the start operation and end operation, in which they can set strokeStyle, fillStyle or both of them. I don&apos;t want to do this for user, because setting all of them together, and what&apos;s more, there are more styles should be set like lineWidth/ and beginPath, we should provide a hook for user to define their operation at the beginning and the end of the batch. 
 Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:208
&gt; &gt;                  context.fillStyle = color;
&gt; 
&gt; I&apos;m surprised to see you setting the fillStyle in this function, I would
&gt; have expected it to be set in the ColorBatchRender class

This is because we have fillStyle and also strokeStyle
&gt; 
&gt; &gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:375
&gt; &gt; +                // Clean the canvas, free its memory
&gt; 
&gt; Do we really need to do this? It feels like a WebKit bug if we do.
&gt; 
&gt; &gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:639
&gt; &gt; +            context.strokeStyle = usedLineColor;
&gt; 
&gt; Shouldn&apos;t this be color instead of usedLineColor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560779</commentid>
    <comment_count>6</comment_count>
      <attachid>376100</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-13 07:59:24 -0700</bug_when>
    <thetext>Comment on attachment 376100
Patch

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

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:53
&gt; +* Detact if point right ray have a collision with a line segment

Should be: &apos;Detect a collision between a right-pointing ray and a line segment

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:60
&gt; +function pointRightRayLineSegmentCollisionDetect(point, lineStart, lineEnd) {

I like the first ray-intersecting point comment, the rest seem unhelpful. Especially if we can reduce this entire function by using point-slope.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:67
&gt; +        return false;

What if the point y position matches the line y position?

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:102
&gt; +}

Feels like we have more if statements here than we need. I think if you just use the inverse of point-slope, we&apos;ll have everything we need.

Equations:
m = (y1 - y0) / (x1 - x0)
y = m * (x - x1) + y1

m^(-1) = (x1 - x0) / (y1 - y0)
x = m^(-1) * (y - y1) + x1

Code:

if (lineEnd.y - lineStart.y == 0)
    return lineEnd.y == point.y &amp;&amp; (lineStart.x &gt;= point.x || lineEnd.x &gt;= point.x);
const invertedSlope = (lineEnd.x - lineStart.x) / (lineEnd.y - lineStart.y);
const xForY = invertedSlope * (point.y - lineStart.y) + lineStart.x;
return xForY &gt;= point.x;

That code is totally untested, but I think we&apos;re looking for something closer to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560853</commentid>
    <comment_count>7</comment_count>
      <attachid>376182</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-13 11:07:09 -0700</bug_when>
    <thetext>Created attachment 376182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560878</commentid>
    <comment_count>8</comment_count>
      <attachid>376182</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-08-13 11:42:11 -0700</bug_when>
    <thetext>Comment on attachment 376182
Patch

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

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:66
&gt; +    */

Not quite sure what the point you&apos;re trying to get across with this comment is.

&gt; Tools/resultsdbpy/resultsdbpy/view/static/library/js/components/TimelineComponents.js:78
&gt; +        return false;

We don&apos;t need the else because of early return (it&apos;s a WebKit code style policy buried somewhere in https://webkit.org/code-style-guidelines/, I think)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560881</commentid>
    <comment_count>9</comment_count>
      <attachid>376188</attachid>
    <who name="Zhifei Fang">zhifei_fang</who>
    <bug_when>2019-08-13 11:46:06 -0700</bug_when>
    <thetext>Created attachment 376188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560962</commentid>
    <comment_count>10</comment_count>
      <attachid>376188</attachid>
    <who name="EWS">ews-feeder</who>
    <bug_when>2019-08-13 14:38:00 -0700</bug_when>
    <thetext>Comment on attachment 376188
Patch

Rejecting attachment 376188 from commit-queue.

zhifei_fang@apple.com does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560978</commentid>
    <comment_count>11</comment_count>
      <attachid>376188</attachid>
    <who name="EWS">ews-feeder</who>
    <bug_when>2019-08-13 15:14:55 -0700</bug_when>
    <thetext>Comment on attachment 376188
Patch

Rejecting attachment 376188 from commit-queue.

zhifei_fang@apple.com does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560980</commentid>
    <comment_count>12</comment_count>
      <attachid>376188</attachid>
    <who name="EWS">ews-feeder</who>
    <bug_when>2019-08-13 15:17:08 -0700</bug_when>
    <thetext>Comment on attachment 376188
Patch

Rejecting attachment 376188 from commit-queue.

zhifei_fang@apple.com does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561022</commentid>
    <comment_count>13</comment_count>
      <attachid>376188</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-13 18:03:15 -0700</bug_when>
    <thetext>Comment on attachment 376188
Patch

Clearing flags on attachment: 376188

Committed r248649: &lt;https://trac.webkit.org/changeset/248649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561023</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-13 18:03:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561024</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-13 18:04:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/54282947&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375860</attachid>
            <date>2019-08-08 16:49:34 -0700</date>
            <delta_ts>2019-08-12 15:31:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200456-20190808164933.patch</filename>
            <type>text/plain</type>
            <size>28657</size>
            <attacher name="Zhifei Fang">zhifei_fang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDAxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmY2ZThmMWMyMGQyZGRhZjNlZDVhNGVkYTJlNzA4ZDE1
MzNmNDViOS4uMTA1YTlmM2IyZmU0MDgwODY0MDliNGQ0MDY2NmYwZmRhNGM1MmRiNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDE5LTA4LTA4ICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbcmVzdWx0cy53ZWJraXQub3JnIFRpbWVsaW5lXSBQZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCAtIFNraXAgcmVuZGVyIG9mZnNjcmVlbiBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDQ1NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgdGhlIG9mZnNjcmVlbiBjYW52
YXMgY2FjaGUsIG9wdGltaXplIHRoZSBtZW1vcnkgdXNhZ2UsIHNvIHRoYXQgd2Via2l0IHdvbid0
IGdldCBpbnRvIGEgImxvdyBtZW1vcnkiIG1vZGUsIHRoaXMgd2lsbCBsb3NlIGEgbG90IG9mIHBl
cmZvcm1hbmNlIHRoYW4gdGhlIGJlbmVmaXQgd2UgZ2FpbiBmcm9tIGl0LgorICAgICAgICBDcmVh
dGUgYSBuZXcgd2F5IHRvIGJhdGNoIGFsbCBjb250ZXh0IHN0YXRlIG1hY2hpbmUgY29tbWFuZCBi
eSBjb2xvciwgc28gdGhhdCBpdCB3aWxsIGZpbGwvc3Rva2Ugc2FtZSBjb2xvciBlbGVtZW50cyBh
bGwgYXQgb25jZSwgdGhpcyB3aWxsIGltcHJvdmUgdGhlIHJlbmRlciBzcGVlZC4KKworICAgICAg
ICAqIHJlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMvVXRpbHMu
anM6CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFy
eS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50cy5qczoKKyAgICAgICAgKENvbG9yQmF0
Y2hSZW5kZXIpOgorICAgICAgICAoQ29sb3JCYXRjaFJlbmRlci5wcm90b3R5cGUubGF6eUNyZWF0
ZUNvbG9yU2Vxcyk6CisgICAgICAgIChDb2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5hZGRTZXEp
OgorICAgICAgICAoQ29sb3JCYXRjaFJlbmRlci5wcm90b3R5cGUuYmF0Y2hSZW5kZXIpOgorICAg
ICAgICAoQ29sb3JCYXRjaFJlbmRlci5wcm90b3R5cGUuY2xlYXIpOgorICAgICAgICAoeFNjcm9s
bFN0cmVhbVJlbmRlckZhY3RvcnkpOgorICAgICAgICAoVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29t
cG9uZW50KToKKyAgICAgICAgKG9mZnNjcmVlbkNhY2hlZFJlbmRlckZhY3RvcnkpOiBEZWxldGVk
LgorCiAyMDE5LTA4LTA3ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgogCiAgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBBZGQga2V5IGFjY2VsZXJhdG9ycyBmb3Ig
cmVsb2FkIGFuZCBjbG9zZSB3aW5kb3cKZGlmZiAtLWdpdCBhL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jl
c3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMvVXRpbHMuanMgYi9Ub29scy9yZXN1bHRz
ZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2pzL1V0aWxzLmpzCmluZGV4IDk4
MzJmNTdlY2MzMDRmZTFiODdjZGI0NmY1YmEyOTNkNDczY2Y0NzMuLjg3OTZiMTA4Y2MzM2E4NmVk
MWMzNmFiZDNiYzJiYTMzMDFiY2Y5OTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jl
c3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMvVXRpbHMuanMKKysrIGIvVG9vbHMvcmVz
dWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9VdGlscy5qcwpAQCAt
NzAsNyArNzAsNyBAQCBmdW5jdGlvbiBpc0RhcmtNb2RlICgpIHsKIGZ1bmN0aW9uIGNyZWF0ZUlu
c2VydGlvbk9ic2VydmVycyhlbGVtZW50LCBjYWxsYmFjaz0oKT0+e30sIHN0YXJ0VGhyZXNob2xk
PTAuMCwgZW5kVHJlc2hvbGQ9MS4wLCBzdGVwPTAuMSwgb3B0aW9uPXt9KSB7CiAgICAgY29uc3Qg
dXNlT3B0aW9uID0ge307CiAgICAgdXNlT3B0aW9uLnJvb3QgPSBvcHRpb24ucm9vdCBpbnN0YW5j
ZW9mIEhUTUxFbGVtZW50ID8gb3B0aW9uLnJvb3QgOiBudWxsOwotICAgIHVzZU9wdGlvbi5yb290
TWFyZ2luID0gb3B0aW9uLnJvb3RNYXJnaW4gPyBvcHRpb24ucm9vdE1hcmdpbiA6ICIwIjsKKyAg
ICB1c2VPcHRpb24ucm9vdE1hcmdpbiA9IG9wdGlvbi5yb290TWFyZ2luID8gb3B0aW9uLnJvb3RN
YXJnaW4gOiAiMCUiOwogICAgIGNvbnN0IHRocmVzaG9sZEFycmF5ID0gW107CiAgICAgZm9yIChs
ZXQgaSA9IHN0YXJ0VGhyZXNob2xkOyBpIDw9IGVuZFRyZXNob2xkOyBpKz0gc3RlcCkgewogICAg
ICAgICB0aHJlc2hvbGRBcnJheS5wdXNoKGkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvcmVzdWx0c2Ri
cHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9jb21wb25lbnRzL1RpbWVsaW5l
Q29tcG9uZW50cy5qcyBiL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGlj
L2xpYnJhcnkvanMvY29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMKaW5kZXggNTA1OWYw
ZmI5ZGVlNDRiNmZiNWU5YjQ2OGRlZTM5NDdlNzBjM2ZiYi4uNzQzODE3NzAzMDAyODQ2MTNlY2Zi
NTdiNWEzMjg5M2QxZGIxNjBiZiAxMDA2NDQKLS0tIGEvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0
c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50
cy5qcworKysgYi9Ub29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9saWJy
YXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzCkBAIC0xMTgsNTUgKzExOCw1
NCBAQCBmdW5jdGlvbiBYU2Nyb2xsYWJsZUNhbnZhc1Byb3ZpZGVyKGV4cG9ydGVyLCAuLi5jaGls
ZHJlbkZ1bmN0aW9ucykgewogICAgIDwvZGl2PmA7CiB9CiAKLWZ1bmN0aW9uIG9mZnNjcmVlbkNh
Y2hlZFJlbmRlckZhY3RvcnkocGFkZGluZywgaGVpZ2h0KSB7Ci0gICAgbGV0IGNhY2hlZFNjcm9s
bExlZnQgPSAwOwotICAgIGxldCBvZmZzY3JlZW5DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdjYW52YXMnKTsKLSAgICAvLyBEb3VibGUgYnVmZmVyaW5nCi0gICAgY29uc3Qgb2Zmc2Ny
ZWVuQ2FudmFzQnVmZmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Ci0KLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCByZWRyYXdDYWNoZSB0byByZW5kZXIgYSBvZmZz
Y3JlZW4gY2FjaGUKLSAgICAvLyBhbmQgY29weSB0aGUgdmlld3BvcnQgYXJlYSBmcm9tIG9mIGl0
Ci0gICAgLy8gSXQgd2lsbCB0cmlnZ2VyIHJlZHJhd0NhY2hlIHdoZW4gY2FjaGUgZG9uJ3QgaGF2
ZSBlbm91Z2ggc3BhY2UKLSAgICByZXR1cm4gKHJlZHJhd0NhY2hlLCBlbGVtZW50LCBzdGF0ZURp
ZmYsIHN0YXRlLCBmb3JjZVJlZHJhd0NhY2hlID0gZmFsc2UpID0+IHsKLSAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlIGNhbnZhcyBkaXNwbGF5IG9uIHRoZSBzY3JlZW4gb3Igbm90LAotICAgICAgICAv
LyBUaGlzIHdpbGwgc2F2ZSByZW5kZXIgdGltZQorY2xhc3MgQ29sb3JCYXRjaFJlbmRlciB7Cisg
ICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgIHRoaXMuY29sb3JTZXFzTWFwID0gbmV3IE1hcCgp
OworICAgIH0KKworICAgIGxhenlDcmVhdGVDb2xvclNlcXMoY29sb3IsIHN0YXJ0QWN0aW9uLCBm
aW5hbEFjdGlvbikgeworICAgICAgICBpZiAoIXRoaXMuY29sb3JTZXFzTWFwLmhhcyhjb2xvcikp
CisgICAgICAgICAgICB0aGlzLmNvbG9yU2Vxc01hcC5zZXQoY29sb3IsIFtzdGFydEFjdGlvbiwg
ZmluYWxBY3Rpb25dKTsKKyAgICB9CisKKyAgICBhZGRTZXEoY29sb3IsIHNlcUFjdGlvbikgewor
ICAgICAgICB0aGlzLmNvbG9yU2Vxc01hcC5nZXQoY29sb3IpLnB1c2goc2VxQWN0aW9uKTsKKyAg
ICB9CisKKyAgICBiYXRjaFJlbmRlcihjb250ZXh0KSB7CisgICAgICAgIGZvciAobGV0IGNvbG9y
IG9mIHRoaXMuY29sb3JTZXFzTWFwLmtleXMoKSkgeworICAgICAgICAgICAgY29uc3Qgc2VxcyA9
IHRoaXMuY29sb3JTZXFzTWFwLmdldChjb2xvcik7CisgICAgICAgICAgICBzZXFzWzBdKGNvbnRl
eHQsIGNvbG9yKTsKKyAgICAgICAgICAgIGZvcihsZXQgaSA9IDI7IGkgPCBzZXFzLmxlbmd0aDsg
aSsrKQorICAgICAgICAgICAgICAgIHNlcXNbaV0oY29udGV4dCwgY29sb3IpOworICAgICAgICAg
ICAgc2Vxc1sxXShjb250ZXh0LCBjb2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xlYXIo
KSB7CisgICAgICAgIHRoaXMuY29sb3JTZXFzTWFwID0gbmV3IE1hcCgpOworICAgIH0KK30KKwor
ZnVuY3Rpb24geFNjcm9sbFN0cmVhbVJlbmRlckZhY3RvcnkoaGVpZ2h0KSB7CisgICAgcmV0dXJu
IChyZWRyYXcsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUpID0+IHsKICAgICAgICAgY29uc3Qg
d2lkdGggPSB0eXBlb2Ygc3RhdGVEaWZmLndpZHRoID09PSAnbnVtYmVyJyA/IHN0YXRlRGlmZi53
aWR0aCA6IHN0YXRlLndpZHRoOwogICAgICAgICBpZiAod2lkdGggPD0gMCkKICAgICAgICAgICAg
IC8vIE5vdGhpbmcgdG8gcmVuZGVyCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29u
c3QgdG90YWxXaWR0aCA9IHdpZHRoICsgMiAqIHBhZGRpbmc7Ci0gICAgICAgIGNvbnN0IHNjcm9s
bExlZnQgPSB0eXBlb2Ygc3RhdGVEaWZmLnNjcm9sbExlZnQgPT09ICdudW1iZXInID8gc3RhdGVE
aWZmLnNjcm9sbExlZnQgOiBzdGF0ZS5zY3JvbGxMZWZ0OwotICAgICAgICBjb25zdCBjb250ZXh0
ID0gZWxlbWVudC5nZXRDb250ZXh0KCcyZCcpOwotICAgICAgICBsZXQgY2FjaGVQb3NMZWZ0ID0g
c2Nyb2xsTGVmdCAtIGNhY2hlZFNjcm9sbExlZnQ7Ci0gICAgICAgIGxldCBuZWVkVG9SZWRyYXdD
YWNoZSA9IGZvcmNlUmVkcmF3Q2FjaGU7Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQubG9naWNXaWR0
aCAhPSB3aWR0aCkgewotICAgICAgICAgICAgLy8gU2V0dXAgdGhlIGRwciBpbiBjYXNlIG9mIGJs
dXIKLSAgICAgICAgICAgIHNldHVwQ2FudmFzV2lkdGhXaXRoRHByKGVsZW1lbnQsIHdpZHRoKTsK
LSAgICAgICAgICAgIG5lZWRUb1JlZHJhd0NhY2hlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlm
IChjYWNoZVBvc0xlZnQgPCAwIHx8IGNhY2hlUG9zTGVmdCArIHdpZHRoID4gdG90YWxXaWR0aCkg
ewotICAgICAgICAgICAgaWYgKHNjcm9sbExlZnQgPCAwICkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBuZWVkVG9SZWRyYXdDYWNoZSA9IHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobmVlZFRvUmVkcmF3Q2FjaGUpIHsKLSAgICAgICAgICAgIC8vIFdlIGRyYXcg
ZXZlcnl0aGluZyBvbiBjYWNoZQotICAgICAgICAgICAgIHJlZHJhd0NhY2hlKG9mZnNjcmVlbkNh
bnZhcywgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgKCkgPT4gewotICAgICAgICAgICAgICAg
IGNhY2hlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0IDwgcGFkZGluZyA/IHNjcm9sbExlZnQgOiBz
Y3JvbGxMZWZ0IC0gcGFkZGluZzsKLSAgICAgICAgICAgICAgICBjYWNoZVBvc0xlZnQgPSBzY3Jv
bGxMZWZ0IC0gY2FjaGVkU2Nyb2xsTGVmdDsKLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVQb3NM
ZWZ0IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVQb3NMZWZ0ID0gMDsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCBlbGVtZW50LndpZHRoLCBlbGVtZW50Lmhl
aWdodCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uob2Zmc2NyZWVuQ2FudmFz
LCBjYWNoZVBvc0xlZnQgKiBnZXREZXZpY2VQaXhlbFJhdGlvKCksIDAsICAgIGVsZW1lbnQud2lk
dGgsIGVsZW1lbnQuaGVpZ2h0LCAwLCAwLCB3aWR0aCAqIGdldERldmljZVBpeGVsUmF0aW8oKSwg
ZWxlbWVudC5oZWlnaHQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoY2FjaGVQb3NMZWZ0IDwgMCkKLSAgICAgICAgICAgICAgICBjYWNoZVBvc0xl
ZnQgPSAwOwotICAgICAgICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgZWxlbWVudC53aWR0
aCwgZWxlbWVudC5oZWlnaHQpOwotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uob2Zmc2Ny
ZWVuQ2FudmFzLCBjYWNoZVBvc0xlZnQgKiBnZXREZXZpY2VQaXhlbFJhdGlvKCksIDAsICAgIGVs
ZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLCAwLCB3aWR0aCAqIGdldERldmljZVBpeGVs
UmF0aW8oKSwgZWxlbWVudC5oZWlnaHQpOwotICAgICAgICB9CisgICAgICAgIGxldCBzdGFydFgg
PSAwOworICAgICAgICBsZXQgcmVuZGVyV2lkdGggPSB3aWR0aDsKKyAgICAgICAgcmVxdWVzdEFu
aW1hdGlvbkZyYW1lKCgpID0+IHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LmxvZ2ljV2lkdGgg
IT09IHdpZHRoKSB7CisgICAgICAgICAgICAgICAgc2V0dXBDYW52YXNXaWR0aFdpdGhEcHIoZWxl
bWVudCwgd2lkdGgpOworICAgICAgICAgICAgICAgIHNldHVwQ2FudmFzQ29udGV4dFNjYWxlKGVs
ZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVsZW1lbnQubG9naWNIZWln
aHQgIT09IGhlaWdodCkgeworICAgICAgICAgICAgICAgIHNldHVwQ2FudmFzSGVpZ2h0V2l0aERw
cihlbGVtZW50LCBoZWlnaHQpOworICAgICAgICAgICAgICAgIHNldHVwQ2FudmFzQ29udGV4dFNj
YWxlKGVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxlbWVudC5nZXRDb250
ZXh0KCIyZCIsIHthbHBoYTogZmFsc2V9KS5jbGVhclJlY3Qoc3RhcnRYLCAwLCByZW5kZXJXaWR0
aCwgZWxlbWVudC5sb2dpY0hlaWdodCk7CisgICAgICAgICAgICByZWRyYXcoc3RhcnRYLCByZW5k
ZXJXaWR0aCwgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSk7CisgICAgICAgIH0pOwogICAgIH0K
IH0KIApAQCAtMTk0LDMyICsxOTMsNDcgQEAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50
ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9uID0ge30pID0+IHsKICAgICBjb25zdCBvbkRvdEhvdmVy
ID0gdHlwZW9mIG9wdGlvbi5vbkRvdEhvdmVyID09PSAiZnVuY3Rpb24iID8gb3B0aW9uLm9uRG90
SG92ZXIgOiBudWxsOwogICAgIGNvbnN0IHRhZ0hlaWdodCA9IGRlZmF1bHRGb250U2l6ZTsKICAg
ICBjb25zdCBoZWlnaHQgPSBvcHRpb24uaGVpZ2h0ID8gb3B0aW9uLmhlaWdodCA6IDIgKiByYWRp
dXMgKyB0YWdIZWlnaHQ7Ci0KKyAgICBjb25zdCBjb2xvckJhdGNoUmVuZGVyID0gbmV3IENvbG9y
QmF0Y2hSZW5kZXIoKTsKIAogICAgIC8vIERyYXcgZG90IGFwaSBjYW4gYmUgdXNlZCBpbiB1c2Vy
IGRlZmluZWQgcmVuZGVyIGZ1bmN0aW9uCiAgICAgY29uc3QgZHJhd0RvdCA9IChjb250ZXh0LCB4
LCB5LCBpc0VtcHR5LCB0YWcgPSBudWxsLCB1c2VSYWRpdXMsIGNvbG9yLCBlbXB0eWxpbmVDb2xv
cikgPT4gewogICAgICAgICB1c2VSYWRpdXMgPSB1c2VSYWRpdXMgPyB1c2VSYWRpdXMgOiByYWRp
dXM7CiAgICAgICAgIGNvbG9yID0gY29sb3IgPyBjb2xvciA6IGRlZmF1bHREb3RDb2xvcjsKICAg
ICAgICAgZW1wdHlsaW5lQ29sb3IgPSBlbXB0eWxpbmVDb2xvciA/IGVtcHR5bGluZUNvbG9yIDog
ZGVmYXVsdEVtcHR5TGluZUNvbG9yOwotICAgICAgICAgICAgaWYgKCFpc0VtcHR5KSB7Ci0gICAg
ICAgICAgICAgICAgLy9EcmF3IHRoZSBkb3QKKyAgICAgICAgaWYgKCFpc0VtcHR5KSB7CisgICAg
ICAgICAgICAvLyBEcmF3IHRoZSBkb3QKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIubGF6
eUNyZWF0ZUNvbG9yU2Vxcyhjb2xvciwgKGNvbnRleHQpID0+IHsKICAgICAgICAgICAgICAgICBj
b250ZXh0LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuYXJjKHggKyBkb3RN
YXJnaW4gKyByYWRpdXMsIHksIHJhZGl1cywgMCwgMiAqIE1hdGguUEkpOworICAgICAgICAgICAg
fSwgKGNvbnRleHQsIGNvbG9yKSA9PiB7CiAgICAgICAgICAgICAgICAgY29udGV4dC5maWxsU3R5
bGUgPSBjb2xvcjsKICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGwoKTsKLSAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIHRhZyA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHRhZyA9PT0gInN0cmlu
ZyIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5mb250ID0gYCR7Zm9udEZhbWlseX0g
JHtkZWZhdWx0Rm9udFNpemV9cHhgOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWdTaXpl
ID0gY29udGV4dC5tZWFzdXJlVGV4dCh0YWcpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmZpbGxUZXh0KHRhZywgeCArIGRvdE1hcmdpbiArIHJhZGl1cyAtIHRhZ1NpemUud2lkdGggLyAy
LCByYWRpdXMgKiAyICsgdGFnU2l6ZS5lbUhlaWdodEFzY2VudCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29s
b3JCYXRjaFJlbmRlci5hZGRTZXEoY29sb3IsIChjb250ZXh0LCBjb2xvcikgPT4geworICAgICAg
ICAgICAgICAgIGNvbnRleHQuYXJjKHggKyBkb3RNYXJnaW4gKyByYWRpdXMsIHksIHJhZGl1cywg
MCwgMiAqIE1hdGguUEkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIERyYXcgdGhlIGVtcHR5CisgICAgICAgICAgICBjb2xvckJhdGNoUmVuZGVy
LmxhenlDcmVhdGVDb2xvclNlcXMoZW1wdHlsaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7CiAgICAg
ICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgICAgIH0sIChjb250ZXh0
LCBjb2xvcikgPT4geworICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBlbXB0
eWxpbmVDb2xvcjsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmFkZFNlcShlbXB0eWxpbmVDb2xv
ciwgKGNvbnRleHQpID0+IHsKICAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4ICsgZG90
TWFyZ2luLCB5KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgZG90TWFyZ2lu
ICsgMiAqIHJhZGl1cywgeSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSAx
OwotICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkZWZhdWx0RW1wdHlMaW5l
Q29sb3I7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRHJhdyB0aGUgdGFnCisg
ICAgICAgIGlmICh0eXBlb2YgdGFnID09PSAibnVtYmVyIiB8fCB0eXBlb2YgdGFnID09PSAic3Ry
aW5nIikgeworICAgICAgICAgICAgY29udGV4dC5mb250ID0gYCR7Zm9udEZhbWlseX0gJHtkZWZh
dWx0Rm9udFNpemV9cHhgOworICAgICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBjb2xvcjsK
KyAgICAgICAgICAgIGNvbnN0IHRhZ1NpemUgPSBjb250ZXh0Lm1lYXN1cmVUZXh0KHRhZyk7Cisg
ICAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KHRhZywgeCArIGRvdE1hcmdpbiArIHJhZGl1cyAt
IHRhZ1NpemUud2lkdGggLyAyLCByYWRpdXMgKiAyICsgdGFnU2l6ZS5lbUhlaWdodEFzY2VudCk7
CisgICAgICAgIH0KICAgICB9OwogICAgIGNvbnN0IHJlbmRlciA9IHR5cGVvZiBvcHRpb24ucmVu
ZGVyRmFjdG9yeSA9PT0gImZ1bmN0aW9uIiA/IG9wdGlvbi5yZW5kZXJGYWN0b3J5KGRyYXdEb3Qp
IDogKGRvdCwgY29udGV4dCwgeCwgeSkgPT4gZHJhd0RvdChjb250ZXh0LCB4LCB5LCAhZG90KTsK
ICAgICBjb25zdCBzb3J0RGF0YSA9IG9wdGlvbi5zb3J0RGF0YSA9PT0gdHJ1ZSA/IG9wdGlvbi5z
b3J0RGF0YSA6IGZhbHNlOwpAQCAtMjQ1LDQ5ICsyNTksMzcgQEAgVGltZWxpbmUuQ2FudmFzU2Vy
aWVzQ29tcG9uZW50ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9uID0ge30pID0+IHsKIAogICAgIGNv
bnN0IGRvdFdpZHRoID0gMiAqIChyYWRpdXMgKyBkb3RNYXJnaW4pOwogICAgIGNvbnN0IHBhZGRp
bmcgPSAxMDAgKiBkb3RXaWR0aCAvIGdldERldmljZVBpeGVsUmF0aW8oKTsKLSAgICBjb25zdCBv
ZmZzY3JlZW5DYWNoZWRSZW5kZXIgPSBvZmZzY3JlZW5DYWNoZWRSZW5kZXJGYWN0b3J5KHBhZGRp
bmcsIGhlaWdodCk7CisgICAgY29uc3QgeFNjcm9sbFN0cmVhbVJlbmRlciA9IHhTY3JvbGxTdHJl
YW1SZW5kZXJGYWN0b3J5KGhlaWdodCk7CiAKLSAgICAvLyBHZW5lcmF0ZSB0aGUgZG90IGNhY2hl
Ci0gICAgY29uc3QgcmVkcmF3Q2FjaGUgPSAob2Zmc2NyZWVuQ2FudmFzLCBlbGVtZW50LCBzdGF0
ZURpZmYsIHN0YXRlLCBub3RpZnlUb1JlbmRlcikgPT4geworICAgIGNvbnN0IHJlZHJhdyA9IChz
dGFydFgsIHJlbmRlcldpZHRoLCBlbGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlKSA9PiB7CiAgICAg
ICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0eXBlb2Ygc3RhdGVEaWZmLnNjcm9sbExlZnQgPT09ICdu
dW1iZXInID8gc3RhdGVEaWZmLnNjcm9sbExlZnQgOiBzdGF0ZS5zY3JvbGxMZWZ0OwotICAgICAg
ICBjb25zdCB3aWR0aCA9IHR5cGVvZiBzdGF0ZURpZmYud2lkdGggPT09ICdudW1iZXInID8gc3Rh
dGVEaWZmLndpZHRoIDogc3RhdGUud2lkdGg7Ci0gICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSB3
aWR0aCArIDIgKiBwYWRkaW5nOwogICAgICAgICBjb25zdCBzY2FsZXMgPSBzdGF0ZURpZmYuc2Nh
bGVzID8gc3RhdGVEaWZmLnNjYWxlcyA6IHN0YXRlLnNjYWxlczsKICAgICAgICAgY29uc3QgZG90
cyA9IHN0YXRlRGlmZi5kb3RzID8gc3RhdGVEaWZmLmRvdHMgOiBzdGF0ZS5kb3RzOwogICAgICAg
ICAvLyBUaGlzIGNvbG9yIG1heWJlIGNoYW5nZSB3aGVuIHN3aXRjaCBkYXJrL2xpZ2h0IG1vZGUK
ICAgICAgICAgY29uc3QgZGVmYXVsdExpbmVDb2xvciA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1l
bnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ib3JkZXJDb2xvcklubGluZUVsZW1lbnQnKTsK
LSAgICAgICAgaWYgKG9mZnNjcmVlbkNhbnZhcy5sb2dpY1dpZHRoICE9PSB0b3RhbFdpZHRoKSB7
Ci0gICAgICAgICAgICBzZXR1cENhbnZhc1dpZHRoV2l0aERwcihvZmZzY3JlZW5DYW52YXMsIHRv
dGFsV2lkdGgpOwotICAgICAgICAgICAgc2V0dXBDYW52YXNDb250ZXh0U2NhbGUob2Zmc2NyZWVu
Q2FudmFzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2NyZWVuQ2FudmFzLmxvZ2ljSGVp
Z2h0ICE9PSBlbGVtZW50LmxvZ2ljSGVpZ2h0KSB7Ci0gICAgICAgICAgICBzZXR1cENhbnZhc0hl
aWdodFdpdGhEcHIob2Zmc2NyZWVuQ2FudmFzLCBlbGVtZW50LmxvZ2ljSGVpZ2h0KTsKLSAgICAg
ICAgICAgIHNldHVwQ2FudmFzQ29udGV4dFNjYWxlKG9mZnNjcmVlbkNhbnZhcyk7Ci0gICAgICAg
IH0KIAotICAgICAgICBjb25zdCBjb250ZXh0ID0gb2Zmc2NyZWVuQ2FudmFzLmdldENvbnRleHQo
IjJkIik7Ci0gICAgICAgIC8vIENsZWFyIHRoZSBjYWNoZQotICAgICAgICBjb250ZXh0LmNsZWFy
UmVjdCgwLCAwLCBvZmZzY3JlZW5DYW52YXMud2lkdGgsIG9mZnNjcmVlbkNhbnZhcy5oZWlnaHQp
OworICAgICAgICBjb25zdCBjb250ZXh0ID0gZWxlbWVudC5nZXRDb250ZXh0KCIyZCIsIHsgYWxw
aGE6IGZhbHNlIH0pOworICAgICAgICAvLyBDbGVhciBwZXJ2aW91cyBiYXRjaFJlbmRlcgorICAg
ICAgICBjb2xvckJhdGNoUmVuZGVyLmNsZWFyKCk7CiAgICAgICAgIC8vIERyYXcgdGhlIHRpbWUg
bGluZQotICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOwotICAgICAgICBjb250ZXh0Lm1vdmVU
bygwLCByYWRpdXMpOwotICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7Ci0gICAgICAgIGNv
bnRleHQuc3Ryb2tlU3R5bGUgPSBkZWZhdWx0TGluZUNvbG9yOwotICAgICAgICBjb250ZXh0Lmxp
bmVUbyh0b3RhbFdpZHRoLCByYWRpdXMpOwotICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAg
ICAgICBjb2xvckJhdGNoUmVuZGVyLmxhenlDcmVhdGVDb2xvclNlcXMoZGVmYXVsdExpbmVDb2xv
ciwgKGNvbnRleHQpID0+IHsKKyAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAg
ICAgIH0sIChjb250ZXh0LCBjb2xvcikgPT4geworICAgICAgICAgICAgY29udGV4dC5saW5lV2lk
dGggPSAxOworICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yOworICAgICAg
ICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNvbG9yQmF0Y2hS
ZW5kZXIuYWRkU2VxKGRlZmF1bHRMaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7CisgICAgICAgICAg
ICBjb250ZXh0Lm1vdmVUbyhzdGFydFgsIHJhZGl1cyk7CisgICAgICAgICAgICBjb250ZXh0Lmxp
bmVUbyhzdGFydFggKyByZW5kZXJXaWR0aCwgcmFkaXVzKTsKKyAgICAgICAgfSk7CiAKICAgICAg
ICAgLy8gRHJhdyB0aGUgZG90cwogICAgICAgICAvLyBGaXJzdCwgQ2FsY3VsYXRlIHRoZSByZW5k
ZXIgcmFuZ2U6Ci0gICAgICAgIGxldCBzdGFydFNjYWxlc0luZGV4ID0gTWF0aC5mbG9vcigoc2Ny
b2xsTGVmdCAtIHBhZGRpbmcpIC8gZG90V2lkdGgpOworICAgICAgICBsZXQgc3RhcnRTY2FsZXNJ
bmRleCA9IE1hdGguZmxvb3IoKHNjcm9sbExlZnQgKyBzdGFydFgpIC8gZG90V2lkdGgpOwogICAg
ICAgICBpZiAoc3RhcnRTY2FsZXNJbmRleCA8IDApCiAgICAgICAgICAgICBzdGFydFNjYWxlc0lu
ZGV4ID0gMDsKLSAgICAgICAgbGV0IHZpZXdwb3J0U3RhcnRTY2FsZUluZGV4ID0gTWF0aC5mbG9v
cigoc2Nyb2xsTGVmdCkgLyBkb3RXaWR0aCk7Ci0gICAgICAgIGlmICh2aWV3cG9ydFN0YXJ0U2Nh
bGVJbmRleCA8IDApCi0gICAgICAgICAgICB2aWV3cG9ydFN0YXJ0U2NhbGVJbmRleCA9IDA7Ci0g
ICAgICAgIGxldCB2aWV3cG9ydEVuZFNjYWxlSW5kZXggPSB2aWV3cG9ydFN0YXJ0U2NhbGVJbmRl
eCArIE1hdGguZmxvb3IoKHdpZHRoKSAvIGRvdFdpZHRoKTsKLSAgICAgICAgaWYgKHZpZXdwb3J0
RW5kU2NhbGVJbmRleCA+PSBzY2FsZXMubGVuZ3RoKQotICAgICAgICAgICAgdmlld3BvcnRFbmRT
Y2FsZUluZGV4ID0gc2NhbGVzLmxlbmd0aCAtIDE7Ci0gICAgICAgIGxldCBlbmRTY2FsZXNJbmRl
eCA9IHN0YXJ0U2NhbGVzSW5kZXggKyBNYXRoLmNlaWwoKHRvdGFsV2lkdGgpIC8gZG90V2lkdGgp
OworICAgICAgICBsZXQgZW5kU2NhbGVzSW5kZXggPSBzdGFydFNjYWxlc0luZGV4ICsgTWF0aC5j
ZWlsKChyZW5kZXJXaWR0aCkgLyBkb3RXaWR0aCk7CiAgICAgICAgIGlmIChlbmRTY2FsZXNJbmRl
eCA+PSBzY2FsZXMubGVuZ3RoKQogICAgICAgICAgICAgZW5kU2NhbGVzSW5kZXggPSBzY2FsZXMu
bGVuZ3RoIC0gMTsKICAgICAgICAgbGV0IGN1cnJlbnREb3RJbmRleCA9IHN0YXJ0U2NhbGVzSW5k
ZXggLSAoc2NhbGVzLmxlbmd0aCAtIGRvdHMubGVuZ3RoKTsKQEAgLTMxMCwyMyArMzEyLDE4IEBA
IFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudCA9IChkb3RzLCBzY2FsZXMsIG9wdGlvbiA9
IHt9KSA9PiB7CiAKICAgICAgICAgLy8gVXNlIHRoaXMgdG8gZGVjcmVhc2UgY29saXNpb24gc2Vh
cmNoIHNjb3BlCiAgICAgICAgIGluQ2FjaGVEb3RzID0gW107Ci0KLSAgICAgICAgLy8gRHJhdyB0
aGUgZG90cyBvbiBjYWNoZQogICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRTY2FsZXNJbmRleDsg
aSA8PSBlbmRTY2FsZXNJbmRleDsgaSsrKSB7Ci0gICAgICAgICAgICBsZXQgeCA9IGkgKiBkb3RX
aWR0aCAtIChzY3JvbGxMZWZ0IDwgcGFkZGluZyA/IHNjcm9sbExlZnQgOiBzY3JvbGxMZWZ0IC0g
cGFkZGluZyk7CisgICAgICAgICAgICBsZXQgeCA9IGkgKiBkb3RXaWR0aCAtIHNjcm9sbExlZnQ7
CiAgICAgICAgICAgICBpZiAoY3VycmVudERvdEluZGV4IDwgZG90cy5sZW5ndGggJiYgY29tcChz
Y2FsZXNbaV0sIGdldFNjYWxlKGRvdHNbY3VycmVudERvdEluZGV4XSkpID09PSAwKSB7CiAgICAg
ICAgICAgICAgICAgcmVuZGVyKGRvdHNbY3VycmVudERvdEluZGV4XSwgY29udGV4dCwgeCwgcmFk
aXVzKTsKICAgICAgICAgICAgICAgICBkb3RzW2N1cnJlbnREb3RJbmRleF0uX2RvdENlbnRlciA9
IHt4OiB4ICsgZG90TWFyZ2luICsgcmFkaXVzLCB5OiByYWRpdXN9OwotICAgICAgICAgICAgICAg
IGRvdHNbY3VycmVudERvdEluZGV4XS5fY2FjaGVkU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgPCBw
YWRkaW5nID8gc2Nyb2xsTGVmdCA6IHNjcm9sbExlZnQgLSBwYWRkaW5nOworICAgICAgICAgICAg
ICAgIGRvdHNbY3VycmVudERvdEluZGV4XS5fY2FjaGVkU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7
CiAgICAgICAgICAgICAgICAgaW5DYWNoZURvdHMucHVzaChkb3RzW2N1cnJlbnREb3RJbmRleF0p
OwogICAgICAgICAgICAgICAgIGN1cnJlbnREb3RJbmRleCArPSAxOwogICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgcmVuZGVyKG51bGwsIGNvbnRleHQsIHgsIHJhZGl1cyk7Ci0g
ICAgICAgICAgICAvLyBXZSBhbHJlYWR5IGRyYXdlZCB2aWV3cG9ydCBuZWVkZWQsIGNhbGwgbm90
aWZ5VG9SZW5kZXIgdG8gYnJpbmcgdGhlbSB0byBzY3JlZW4gbm93Ci0gICAgICAgICAgICAvLyB0
aGlzIHdpbGwgaGVscCB0byBlbGVtYXRlIGJsaW5rCi0gICAgICAgICAgICBpZiAoaSA9PT0gdmll
d3BvcnRFbmRTY2FsZUluZGV4KQotICAgICAgICAgICAgICAgIG5vdGlmeVRvUmVuZGVyKCk7CiAg
ICAgICAgIH0KKyAgICAgICAgY29sb3JCYXRjaFJlbmRlci5iYXRjaFJlbmRlcihjb250ZXh0KTsK
ICAgICB9OwogCiAgICAgcmV0dXJuIExpc3RQcm92aWRlclJlY2VpdmVyKCh1cGRhdGVDb250YWlu
ZXJXaWR0aCwgb25Db250YWluZXJTY3JvbGwsIG9uUmVzaXplKSA9PiB7CkBAIC0zNDMsNyArMzQw
LDcgQEAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50ID0gKGRvdHMsIHNjYWxlcywgb3B0
aW9uID0ge30pID0+IHsKICAgICAgICAgICAgICAgICBzY2FsZXM6IGluaXRTY2FsZXMsCiAgICAg
ICAgICAgICAgICAgc2Nyb2xsTGVmdDogMCwKICAgICAgICAgICAgICAgICB3aWR0aDogMCwKLSAg
ICAgICAgICAgICAgICBvblNjcmVlbjogdHJ1ZSwKKyAgICAgICAgICAgICAgICBvblNjcmVlbjog
ZmFsc2UsCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgb25FbGVtZW50TW91bnQ6IChlbGVt
ZW50KSA9PiB7CiAgICAgICAgICAgICAgICAgc2V0dXBDYW52YXNIZWlnaHRXaXRoRHByKGVsZW1l
bnQsIGhlaWdodCk7CkBAIC0zNzUsMjQgKzM3MiwyMiBAQCBUaW1lbGluZS5DYW52YXNTZXJpZXND
b21wb25lbnQgPSAoZG90cywgc2NhbGVzLCBvcHRpb24gPSB7fSkgPT4gewogICAgICAgICAgICAg
b25FbGVtZW50VW5tb3VudDogKGVsZW1lbnQpID0+IHsKICAgICAgICAgICAgICAgICBvbkNvbnRh
aW5lclNjcm9sbC5zdG9wQWN0aW9uKG9uU2Nyb2xsQWN0aW9uKTsKICAgICAgICAgICAgICAgICBv
blJlc2l6ZS5zdG9wQWN0aW9uKG9uUmVzaXplQWN0aW9uKTsKKyAgICAgICAgICAgICAgICAvLyBD
bGVhbiB0aGUgY2FudmFzLCBmcmVlIGl0cyBtZW1vcnkKKyAgICAgICAgICAgICAgICBlbGVtZW50
LndpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmhlaWdodCA9IDA7CiAgICAgICAg
ICAgICB9LAogICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIHN0YXRlRGlmZiwg
c3RhdGUpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gZWxlbWVudC5nZXRD
b250ZXh0KCIyZCIpOwotICAgICAgICAgICAgICAgIGxldCBmb3JjZVJlZHJhd0NhY2hlID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5vblNjcmVlbiAmJiAhc3RhdGVEaWZmLm9u
U2NyZWVuKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGVEaWZmLnNjYWxlcyB8fCBzdGF0ZURpZmYuZG90cyB8fCB0eXBlb2Ygc3RhdGVEaWZm
LnNjcm9sbExlZnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzdGF0ZURpZmYud2lkdGggPT09ICdu
dW1iZXInIHx8IHN0YXRlRGlmZi5vblNjcmVlbikgewogCiAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGF0ZURpZmYuc2NhbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZURpZmYu
c2NhbGVzID0gc3RhdGVEaWZmLnNjYWxlcy5tYXAoeCA9PiB4KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcmNlUmVkcmF3Q2FjaGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZURpZmYuZG90cykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVEaWZmLmRvdHMgPSBzdGF0ZURpZmYuZG90cy5tYXAoeCA9PiB4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcmNlUmVkcmF3Q2FjaGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgo
KSA9PiBvZmZzY3JlZW5DYWNoZWRSZW5kZXIocmVkcmF3Q2FjaGUsIGVsZW1lbnQsIHN0YXRlRGlm
Ziwgc3RhdGUsIGZvcmNlUmVkcmF3Q2FjaGUpKTsKKyAgICAgICAgICAgICAgICAgICAgeFNjcm9s
bFN0cmVhbVJlbmRlcihyZWRyYXcsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CkBAIC00MTAsNyArNDA1LDcg
QEAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9u
ID0ge30pID0+IHsKICAgICAgICAgb25Db250YWluZXJTY3JvbGwuYWN0aW9uKG9uU2Nyb2xsQWN0
aW9uKTsKICAgICAgICAgb25SZXNpemUuYWN0aW9uKG9uUmVzaXplQWN0aW9uKTsKICAgICAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJzZXJpZXMiPgotICAgICAgICAgICAgPGNhbnZhcyByZWY9IiR7
Y2FudmFzUmVmfSI+CisgICAgICAgICAgICA8Y2FudmFzIHJlZj0iJHtjYW52YXNSZWZ9IiB3aWR0
aD0iMCIgaGVpZ2h0PSIwIj4KICAgICAgICAgPC9kaXY+YDsKICAgICB9KTsKIH0KQEAgLTUyOSw2
ICs1MjQsNyBAQCBUaW1lbGluZS5DYW52YXNYQXhpc0NvbXBvbmVudCA9IChzY2FsZXMsIG9wdGlv
biA9IHt9KSA9PiB7CiAgICAgY29uc3QgbWF4aW51bVRleHRIZWlnaHQgPSBzY2FsZVdpZHRoICog
NC41OwogICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IHR5cGVvZiBvcHRpb24uaGVpZ2h0ID09PSAi
bnVtYmVyIiA/IG9wdGlvbi5oZWlnaHQgOiBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3Bl
cnR5VmFsdWUoJy0tc21hbGxTaXplJykpICogNTsKICAgICBjb25zdCBzcXJ0MyA9IE1hdGguc3Fy
dCgzKTsKKyAgICBjb25zdCBjb2xvckJhdGNoUmVuZGVyID0gbmV3IENvbG9yQmF0Y2hSZW5kZXIo
KTsKIAogICAgIGNvbnN0IGRyYXdTY2FsZSA9IChzY2FsZUxhYmVsLCBncm91cCwgY29udGV4dCwg
eCwgeSwgaXNIb3ZlcmFibGUsIGxpbmVDb2xvciwgZ3JvdXBDb2xvcikgPT4gewogICAgICAgICBj
b25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTsKQEAg
LTUzNiw0NCArNTMyLDQ1IEBAIFRpbWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9uZW50ID0gKHNjYWxl
cywgb3B0aW9uID0ge30pID0+IHsKICAgICAgICAgY29uc3QgdXNlZEdyb3VwQ29sb3IgPSBncm91
cENvbG9yID8gZ3JvdXBDb2xvciA6IGlzRGFya01vZGUoKSA/IGNvbXB1dGVkU3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZSgnLS13aGl0ZScpIDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCct
LWJsYWNrJyk7CiAgICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSBncm91cCAqIHNjYWxlV2lkdGg7
CiAgICAgICAgIGNvbnN0IGJhc2VMaW5lWSA9IGlzVG9wID8geSArIGNhbnZhc0hlaWdodCAtIHNj
YWxlQnJvYWRMaW5lSGVpZ2h0IDogeSArIHNjYWxlQnJvYWRMaW5lSGVpZ2h0OwotICAgICAgICBp
ZiAoZ3JvdXAgPiAxKSB7Ci0gICAgICAgICAgICAvLyBEcmF3IGdyb3VwIGxhYmVsCi0gICAgICAg
ICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgY29udGV4dC5saW5lV2lkdGgg
PSAxOwotICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHVzZWRHcm91cENvbG9yOwot
ICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCArIGNvbnRleHQubGluZVdpZHRoLCBpc1RvcCA/
IGNhbnZhc0hlaWdodCA6IHkpOwotICAgICAgICAgICAgY29udGV4dC5saW5lVG8oeCArIGNvbnRl
eHQubGluZVdpZHRoLCBiYXNlTGluZVkpOwotICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIERyYXcgdGFnIGxpbmUKICAgICAgICAgY29uc3QgbWlk
ZGxlUG9pbnRYID0geCArIHRvdGFsV2lkdGggLyAyOwotICAgICAgICBjb250ZXh0LmJlZ2luUGF0
aCgpOwotICAgICAgICBjb250ZXh0Lm1vdmVUbyhtaWRkbGVQb2ludFgsIGJhc2VMaW5lWSk7Ci0g
ICAgICAgIGlmICghaXNUb3ApCi0gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhtaWRkbGVQb2lu
dFgsIGJhc2VMaW5lWSArIHNjYWxlVGFnTGluZUhlaWdodCAtIHNjYWxlVGFnTGluZVBhZGRpbmcp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhtaWRkbGVQb2ludFgs
IGJhc2VMaW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCArIHNjYWxlVGFnTGluZVBhZGRpbmcpOwot
ICAgICAgICBpZiAoZ3JvdXAgPiAxKQotICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9
IHVzZWRHcm91cENvbG9yOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZXh0LnN0cm9r
ZVN0eWxlID0gdXNlZExpbmVDb2xvcjsKLSAgICAgICAgY29udGV4dC5zdHJva2UoKTsKLQogICAg
ICAgICBpZiAoZ3JvdXAgPiAxKSB7Ci0gICAgICAgICAgICAgICAgLy8gRHJhdyB0aGUgZ3JvdXAg
bGluZQorICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5sYXp5Q3JlYXRlQ29sb3JTZXFzKHVz
ZWRHcm91cENvbG9yLCAoY29udGV4dCkgPT4gewogICAgICAgICAgICAgICAgIGNvbnRleHQuYmVn
aW5QYXRoKCk7CisgICAgICAgICAgICB9LCAoY29udGV4dCwgY29sb3IpID0+IHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7CisgICAgICAgICAgICAgICAgY29udGV4dC5z
dHJva2VTdHlsZSA9IHVzZWRHcm91cENvbG9yOworICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ry
b2tlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuYWRk
U2VxKHVzZWRHcm91cENvbG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAgICAgICAgIGNvbnRl
eHQubW92ZVRvKHggKyBjb250ZXh0LmxpbmVXaWR0aCwgaXNUb3AgPyBjYW52YXNIZWlnaHQgOiB5
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgY29udGV4dC5saW5lV2lkdGgs
IGJhc2VMaW5lWSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgYmFzZUxpbmVZ
KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgdG90YWxXaWR0aCwgYmFzZUxp
bmVZKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNlZEdyb3VwQ29s
b3I7CisgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCArIHRvdGFsV2lkdGgsIGlzVG9w
ID8gY2FudmFzSGVpZ2h0IDogeSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oeCAr
IHRvdGFsV2lkdGgsIGJhc2VMaW5lWSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8o
bWlkZGxlUG9pbnRYLCBiYXNlTGluZVkpOworICAgICAgICAgICAgICAgIGlmICghaXNUb3ApCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZ
ICsgc2NhbGVUYWdMaW5lSGVpZ2h0IC0gc2NhbGVUYWdMaW5lUGFkZGluZyk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhtaWRkbGVQb2lu
dFgsIGJhc2VMaW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCArIHNjYWxlVGFnTGluZVBhZGRpbmcp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb2xvckJh
dGNoUmVuZGVyLmxhenlDcmVhdGVDb2xvclNlcXModXNlZExpbmVDb2xvciwgKGNvbnRleHQpID0+
IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgfSwg
KGNvbnRleHQsIGNvbG9yKSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5saW5lV2lkdGgg
PSAxOworICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB1c2VkTGluZUNvbG9y
OwogICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuYWRkU2VxKHVzZWRMaW5lQ29sb3IsIChjb250ZXh0
KSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8obWlkZGxlUG9pbnRYLCBiYXNl
TGluZVkpOworICAgICAgICAgICAgICAgIGlmICghaXNUb3ApCisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQubGluZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZICsgc2NhbGVUYWdMaW5lSGVp
Z2h0IC0gc2NhbGVUYWdMaW5lUGFkZGluZyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhtaWRkbGVQb2ludFgsIGJhc2VMaW5lWSAtIHNj
YWxlVGFnTGluZUhlaWdodCArIHNjYWxlVGFnTGluZVBhZGRpbmcpOworICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KLQotICAgICAgICAvLyBEcmF3IHRhZwotICAgICAgICBpZiAoIWlzVG9wKQot
ICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgKyBzY2Fs
ZVRhZ0xpbmVIZWlnaHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZXh0Lm1vdmVU
byhtaWRkbGVQb2ludFgsIGJhc2VMaW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCk7CisgICAgICAg
IC8vIERyYXcgVGFnCiAgICAgICAgIGNvbnRleHQuZm9udCA9IGAke2ZvbnRTaXplfSAke2ZvbnRG
YW1pbHl9YDsKICAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBmb250Q29sb3I7CiAgICAgICAg
IGNvbnRleHQuc2F2ZSgpOwpAQCAtNTg5LDIxICs1ODYsMTEgQEAgVGltZWxpbmUuQ2FudmFzWEF4
aXNDb21wb25lbnQgPSAoc2NhbGVzLCBvcHRpb24gPSB7fSkgPT4gewogICAgICAgICAgICAgY29u
dGV4dC5maWxsVGV4dChnZXRMYWJlbChzY2FsZUxhYmVsKSwgbWlkZGxlUG9pbnRYLCBiYXNlTGlu
ZVkgLSBzY2FsZVRhZ0xpbmVIZWlnaHQpOwogICAgICAgICB9CiAgICAgICAgIGNvbnRleHQucmVz
dG9yZSgpOwotCi0gICAgICAgIGlmIChncm91cCA+IDEpIHsKLSAgICAgICAgICAgIC8vIERyYXcg
Z3JvdXAgbGFiZWwKLSAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7Ci0gICAgICAgICAg
ICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7Ci0gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxl
ID0gdXNlZEdyb3VwQ29sb3I7Ci0gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4ICsgdG90YWxX
aWR0aCwgaXNUb3AgPyBjYW52YXNIZWlnaHQgOiB5KTsKLSAgICAgICAgICAgIGNvbnRleHQubGlu
ZVRvKHggKyB0b3RhbFdpZHRoLCBiYXNlTGluZVkpOwotICAgICAgICAgICAgY29udGV4dC5zdHJv
a2UoKTsKLSAgICAgICAgfQogICAgIH07CiAgICAgY29uc3QgcmVuZGVyID0gdHlwZW9mIG9wdGlv
bi5yZW5kZXJGYWN0b3J5ID09PSAiZnVuY3Rpb24iID8gb3B0aW9uLnJlbmRlckZhY3RvcnkoZHJh
d1NjYWxlKSA6IChzY2FsZUxhYmVsLCBzY2FsZUdyb3VwLCBjb250ZXh0LCB4LCB5KSA9PiBkcmF3
U2NhbGUoc2NhbGVMYWJlbCwgc2NhbGVHcm91cCwgY29udGV4dCwgeCwgeSk7CiAKICAgICBjb25z
dCBwYWRkaW5nID0gMTAwICogc2NhbGVXaWR0aCAvIGdldERldmljZVBpeGVsUmF0aW8oKTsKLSAg
ICBjb25zdCBvZmZzY3JlZW5DYWNoZWRSZW5kZXIgPSBvZmZzY3JlZW5DYWNoZWRSZW5kZXJGYWN0
b3J5KHBhZGRpbmcsIGNhbnZhc0hlaWdodCk7CisgICAgY29uc3QgeFNjcm9sbFN0cmVhbVJlbmRl
ciA9IHhTY3JvbGxTdHJlYW1SZW5kZXJGYWN0b3J5KGNhbnZhc0hlaWdodCk7CiAgICAgbGV0IGlu
Q2FjaGVTY2FsZXMgPSBbXTsKIAogICAgIGNvbnN0IGdldE1vdXNlRXZlbnRUaXJnZ2VyU2NhbGVz
ID0gKGUsIHNjcm9sbExlZnQsIGVsZW1lbnQpID0+IHsKQEAgLTYxNSw2MiArNjAyLDU4IEBAIFRp
bWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9uZW50ID0gKHNjYWxlcywgb3B0aW9uID0ge30pID0+IHsK
ICAgICAgICAgICAgIGNvbnN0IGRldGFjdEJveFdpZHRoID0gZm9udFNpemVOdW1iZXIgKiBzcXJ0
MyAvIDIgKyBzY2FsZS5sYWJlbC50b1N0cmluZygpLmxlbmd0aCAqIGZvbnRTaXplTnVtYmVyIC8g
MjsKICAgICAgICAgICAgIGNvbnN0IGRldGFjdEJveEhlaWdodCA9IGZvbnRTaXplTnVtYmVyIC8g
MiArIHNjYWxlLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoICogZm9udFNpemVOdW1iZXIgLyAyICog
c3FydDM7CiAgICAgICAgICAgICByZXR1cm4gcG9pbnRSZWN0Q29sbGlzaW9uRGV0ZWN0KHt4LCB5
fSwgewotICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0WDogZGV0YWN0Qm94VG9wWCwKLSAgICAg
ICAgICAgICAgICAgICAgdG9wTGVmdFk6IGlzVG9wID8gZGV0YWN0Qm94VG9wWSAtIGRldGFjdEJv
eEhlaWdodCA6IGRldGFjdEJveFRvcFksCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBkZXRh
Y3RCb3hXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBkZXRhY3RCb3hIZWlnaHQK
LSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0b3BMZWZ0WDogZGV0YWN0Qm94
VG9wWCwKKyAgICAgICAgICAgICAgICB0b3BMZWZ0WTogaXNUb3AgPyBkZXRhY3RCb3hUb3BZIC0g
ZGV0YWN0Qm94SGVpZ2h0IDogZGV0YWN0Qm94VG9wWSwKKyAgICAgICAgICAgICAgICB3aWR0aDog
ZGV0YWN0Qm94V2lkdGgsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiBkZXRhY3RCb3hIZWlnaHQK
KyAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICB9OwotICAgIGNvbnN0IHJlZHJhd0Nh
Y2hlID0gKG9mZnNjcmVlbkNhbnZhcywgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgbm90aWZ5
VG9SZW5kZXIpID0+IHsKKyAgICBjb25zdCByZWRyYXcgPSAoc3RhcnRYLCByZW5kZXJXaWR0aCwg
ZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSkgPT4gewogICAgICAgICBjb25zdCBzY3JvbGxMZWZ0
ID0gdHlwZW9mIHN0YXRlRGlmZi5zY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyA/IHN0YXRlRGlmZi5z
Y3JvbGxMZWZ0IDogc3RhdGUuc2Nyb2xsTGVmdDsKICAgICAgICAgY29uc3Qgc2NhbGVzID0gc3Rh
dGVEaWZmLnNjYWxlcyA/IHN0YXRlRGlmZi5zY2FsZXMgOiBzdGF0ZS5zY2FsZXM7CiAgICAgICAg
IGNvbnN0IHNjYWxlc01hcExpbmtMaXN0ID0gc3RhdGVEaWZmLnNjYWxlc01hcExpbmtMaXN0ID8g
c3RhdGVEaWZmLnNjYWxlc01hcExpbmtMaXN0IDogc3RhdGUuc2NhbGVzTWFwTGlua0xpc3Q7CiAg
ICAgICAgIGNvbnN0IHdpZHRoID0gdHlwZW9mIHN0YXRlRGlmZi53aWR0aCA9PT0gJ251bWJlcicg
PyBzdGF0ZURpZmYud2lkdGggOiBzdGF0ZS53aWR0aDsKICAgICAgICAgY29uc3QgdXNlZExpbmVD
b2xvciA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ib3JkZXJDb2xvcklubGlu
ZUVsZW1lbnQnKTsKLSAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IDIgKiBwYWRkaW5nICsgd2lk
dGg7CiAgICAgICAgIGNvbnN0IGJhc2VMaW5lWSA9IGlzVG9wID8gY2FudmFzSGVpZ2h0IC0gc2Nh
bGVCcm9hZExpbmVIZWlnaHQgOiBzY2FsZUJyb2FkTGluZUhlaWdodDsKLSAgICAgICAgaWYgKG9m
ZnNjcmVlbkNhbnZhcy5sb2dpY1dpZHRoICE9PSB0b3RhbFdpZHRoKSB7Ci0gICAgICAgICAgICBz
ZXR1cENhbnZhc1dpZHRoV2l0aERwcihvZmZzY3JlZW5DYW52YXMsIHRvdGFsV2lkdGgpOwotICAg
ICAgICAgICAgc2V0dXBDYW52YXNDb250ZXh0U2NhbGUob2Zmc2NyZWVuQ2FudmFzKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAob2Zmc2NyZWVuQ2FudmFzLmxvZ2ljSGVpZ2h0ICE9PSBlbGVtZW50
LmxvZ2ljSGVpZ2h0KSB7Ci0gICAgICAgICAgICBzZXR1cENhbnZhc0hlaWdodFdpdGhEcHIob2Zm
c2NyZWVuQ2FudmFzLCBlbGVtZW50LmxvZ2ljSGVpZ2h0KTsKLSAgICAgICAgICAgIHNldHVwQ2Fu
dmFzQ29udGV4dFNjYWxlKG9mZnNjcmVlbkNhbnZhcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29u
c3QgY29udGV4dCA9IG9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwotICAgICAgICBj
b25zdCByZWFsU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgPiBwYWRkaW5nID8gc2Nyb2xsTGVmdCAt
IHBhZGRpbmcgOiBzY3JvbGxMZWZ0OwotICAgICAgICBjb25zdCBjdXJyZW50U3RhcnRTY2FsZUlu
ZGV4ID0gTWF0aC5mbG9vcihyZWFsU2Nyb2xsTGVmdCAvIHNjYWxlV2lkdGgpOworICAgICAgICBj
b25zdCBjb250ZXh0ID0gZWxlbWVudC5nZXRDb250ZXh0KCIyZCIsIHsgYWxwaGE6IGZhbHNlIH0p
OworICAgICAgICBsZXQgY3VycmVudFN0YXJ0U2NhbGVJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xs
TGVmdCAvIHNjYWxlV2lkdGgpOworICAgICAgICBpZiAoY3VycmVudFN0YXJ0U2NhbGVJbmRleCA8
IDApCisgICAgICAgICAgICBjdXJyZW50U3RhcnRTY2FsZUluZGV4ID0gMDsKICAgICAgICAgY29u
c3QgY3VycmVudFN0YXJ0U2NhbGVLZXkgPSBnZXRTY2FsZUtleShzY2FsZXNbY3VycmVudFN0YXJ0
U2NhbGVJbmRleF0pOwotICAgICAgICBsZXQgY3VycmVudEVuZFNjYWxlSW5kZXggPSBNYXRoLmNl
aWwoKHJlYWxTY3JvbGxMZWZ0ICsgdG90YWxXaWR0aCkgLyBzY2FsZVdpZHRoKTsKLSAgICAgICAg
Y3VycmVudEVuZFNjYWxlSW5kZXggPSBjdXJyZW50RW5kU2NhbGVJbmRleCA+IHNjYWxlcy5sZW5n
dGggPyBzY2FsZXMubGVuZ3RoIC0gMSA6IGN1cnJlbnRFbmRTY2FsZUluZGV4OworICAgICAgICBs
ZXQgY3VycmVudEVuZFNjYWxlSW5kZXggPSBNYXRoLmNlaWwoKHNjcm9sbExlZnQgKyByZW5kZXJX
aWR0aCkgLyBzY2FsZVdpZHRoKTsKKyAgICAgICAgY3VycmVudEVuZFNjYWxlSW5kZXggPSBjdXJy
ZW50RW5kU2NhbGVJbmRleCA+PSBzY2FsZXMubGVuZ3RoID8gc2NhbGVzLmxlbmd0aCAtIDEgOiBj
dXJyZW50RW5kU2NhbGVJbmRleDsKICAgICAgICAgY29uc3QgY3VycmVudEVuZFNjYWxlS2V5ID0g
Z2V0U2NhbGVLZXkoc2NhbGVzW2N1cnJlbnRFbmRTY2FsZUluZGV4XSk7Ci0gICAgICAgIGxldCB2
aWV3UG9ydEVuZFNjYWxlSW5kZXggPSBNYXRoLmNlaWwoKHJlYWxTY3JvbGxMZWZ0ICsgd2lkdGgp
IC8gc2NhbGVXaWR0aCk7Ci0gICAgICAgIHZpZXdQb3J0RW5kU2NhbGVJbmRleCA9IHZpZXdQb3J0
RW5kU2NhbGVJbmRleCA+IHNjYWxlcy5sZW5ndGggPyBzY2FsZXMubGVuZ3RoIC0gMSA6IHZpZXdQ
b3J0RW5kU2NhbGVJbmRleDsKLSAgICAgICAgY29uc3Qgdmlld1BvcnRFbmRTY2FsZUtleSA9IGdl
dFNjYWxlS2V5KHNjYWxlc1t2aWV3UG9ydEVuZFNjYWxlSW5kZXhdKTsKICAgICAgICAgY29uc3Qg
Y3VycmVudFN0YXJ0Tm9kZSA9IHNjYWxlc01hcExpbmtMaXN0Lm1hcC5nZXQoY3VycmVudFN0YXJ0
U2NhbGVLZXkpOwogICAgICAgICBjb25zdCBjdXJyZW50RW5kTm9kZSA9IHNjYWxlc01hcExpbmtM
aXN0Lm1hcC5nZXQoY3VycmVudEVuZFNjYWxlS2V5KTsKLSAgICAgICAgY29uc3Qgdmlld1BvcnRF
bmROb2RlID0gc2NhbGVzTWFwTGlua0xpc3QubWFwLmdldCh2aWV3UG9ydEVuZFNjYWxlS2V5KTsK
KyAgICAgICAgaWYgKCFjdXJyZW50RW5kTm9kZSkgeworICAgICAgICAgICAgY29uc29sZS5lcnJv
cihjdXJyZW50RW5kU2NhbGVLZXkpOworICAgICAgICB9CiAgICAgICAgIGxldCBub3cgPSBjdXJy
ZW50U3RhcnROb2RlOwotICAgICAgICAvLyBDbGVhciB0aGUgY2FjaGUKLSAgICAgICAgY29udGV4
dC5jbGVhclJlY3QoMCwgMCwgb2Zmc2NyZWVuQ2FudmFzLndpZHRoLCBvZmZzY3JlZW5DYW52YXMu
aGVpZ2h0KTsKLSAgICAgICAgY29udGV4dC5tb3ZlVG8oMCwgYmFzZUxpbmVZKTsKLSAgICAgICAg
Y29udGV4dC5saW5lV2lkdGggPSAxOwotICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNl
ZExpbmVDb2xvcjsKLSAgICAgICAgY29udGV4dC5saW5lVG8ob2Zmc2NyZWVuQ2FudmFzLmxvZ2lj
V2lkdGgsIGJhc2VMaW5lWSk7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAgIC8v
IENsZWFyIHBlcnZpb3VzIGJhdGNoIHJlbmRlcgorICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmNs
ZWFyKCk7CisgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIubGF6eUNyZWF0ZUNvbG9yU2Vxcyh1c2Vk
TGluZUNvbG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgo
KTsKKyAgICAgICAgfSwgKGNvbnRleHQsIGNvbG9yKSA9PiB7CisgICAgICAgICAgICBjb250ZXh0
LmxpbmVXaWR0aCA9IDE7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNlZExp
bmVDb2xvcjsKKyAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAgIH0pOworICAg
ICAgICBjb2xvckJhdGNoUmVuZGVyLmFkZFNlcSh1c2VkTGluZUNvbG9yLCAoY29udGV4dCkgPT4g
eworICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oMCwgYmFzZUxpbmVZKTsKKyAgICAgICAgICAg
IGNvbnRleHQubGluZVRvKGVsZW1lbnQubG9naWNXaWR0aCwgYmFzZUxpbmVZKTsKKyAgICAgICAg
fSk7CiAKICAgICAgICAgaW5DYWNoZVNjYWxlcyA9IFtdOwogICAgICAgICB3aGlsZSAobm93ICE9
IGN1cnJlbnRFbmROb2RlLm5leHQpIHsKICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gbm93Lmxh
YmVsOwogICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBub3cuZ3JvdXA7Ci0gICAgICAgICAgICBy
ZW5kZXIobGFiZWwsIGdyb3VwLCBjb250ZXh0LCBub3cueCAtIHJlYWxTY3JvbGxMZWZ0LCAwKTsK
LSAgICAgICAgICAgIGlmIChub3cgPT09IHZpZXdQb3J0RW5kTm9kZSkKLSAgICAgICAgICAgICAg
ICBub3RpZnlUb1JlbmRlcigpOworICAgICAgICAgICAgcmVuZGVyKGxhYmVsLCBncm91cCwgY29u
dGV4dCwgbm93LnggLSBzY3JvbGxMZWZ0LCAwKTsKICAgICAgICAgICAgIG5vdy5fdGFnVG9wID0g
e3g6IG5vdy54ICsgZ3JvdXAgKiBzY2FsZVdpZHRoIC8gMiwgeTogaXNUb3AgPyBjYW52YXNIZWln
aHQgLSBzY2FsZUJyb2FkTGluZUhlaWdodCA6IHNjYWxlQnJvYWRMaW5lSGVpZ2h0fTsKICAgICAg
ICAgICAgIGluQ2FjaGVTY2FsZXMucHVzaChub3cpOwogICAgICAgICAgICAgbm93ID0gbm93Lm5l
eHQ7CiAgICAgICAgIH0KKyAgICAgICAgY29sb3JCYXRjaFJlbmRlci5iYXRjaFJlbmRlcihjb250
ZXh0KTsKICAgICB9OwogCiAgICAgLy8gSW5pdGlhbGl6ZQpAQCAtNzQ3LDE4ICs3MzAsMTIgQEAg
VGltZWxpbmUuQ2FudmFzWEF4aXNDb21wb25lbnQgPSAoc2NhbGVzLCBvcHRpb24gPSB7fSkgPT4g
ewogICAgICAgICAgICAgICAgICAgICBvblJlc2l6ZS5zdG9wQWN0aW9uKG9uUmVzaXplQWN0aW9u
KTsKICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIG9uU3RhdGVVcGRhdGU6IChl
bGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBm
b3JjZVJlZHJhd0NhY2hlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZURp
ZmYuc2NhbGVzIHx8IHR5cGVvZiBzdGF0ZURpZmYuc2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgfHwg
dHlwZW9mIHN0YXRlRGlmZi53aWR0aCA9PT0gJ251bWJlcicpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZURpZmYuc2NhbGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcmNlUmVkcmF3Q2FjaGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz
Y3JlZW5DYWNoZWRSZW5kZXIocmVkcmF3Q2FjaGUsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUs
IGZvcmNlUmVkcmF3Q2FjaGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHhTY3JvbGxTdHJlYW1SZW5kZXIocmVkcmF3LCBlbGVtZW50LCBzdGF0
ZURpZmYsIHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0pOwogCi0KICAgICAgICAgICAgIHVwZGF0ZUNvbnRhaW5lcldpZHRoKHNj
YWxlcy5sZW5ndGggKiBzY2FsZVdpZHRoICogZ2V0RGV2aWNlUGl4ZWxSYXRpbygpKTsKICAgICAg
ICAgICAgIGNvbnN0IHVwZGF0ZURhdGEgPSAoc2NhbGVzKSA9PiB7CiAgICAgICAgICAgICAgICAg
Ly8gSW4gY2FzZSBvZiBtb2RpZmljYXRpb24gd2hpbGUgcmVuZGVyaW5nCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376100</attachid>
            <date>2019-08-12 15:31:39 -0700</date>
            <delta_ts>2019-08-13 11:07:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200456-20190812153139.patch</filename>
            <type>text/plain</type>
            <size>31671</size>
            <attacher name="Zhifei Fang">zhifei_fang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDAxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmY2ZThmMWMyMGQyZGRhZjNlZDVhNGVkYTJlNzA4ZDE1
MzNmNDViOS4uNTU4ZWZhYzA1ZDVjMWFkMDFiOGY4MWUyMGI0ZjhiMDA1NGVlMjU0MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDE5LTA4LTEyICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbcmVzdWx0cy53ZWJraXQub3JnIFRpbWVsaW5lXSBQZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCAtIFNraXAgcmVuZGVyIG9mZnNjcmVlbiBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDQ1NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZGlzYWJsZSB1c2UgdGhlIG5l
dyBiYXRjaCBkcmF3IG1ldGhvZCB0byByZW5kZXIgY2FudmFzIGRpcmVjdGx5IHdpdGhvdXQgYW55
IGNhY2hlcywgdGhpcyB3aWxsIHNhdmUgYSBsb3Qgb2YgbWVtb3J5LCBzbyB0aGF0IHdlIHdvbid0
IGdvIGludG8gdGhlICJsb3cgbWVtb3J5IG1vZGUiLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBjaGFuZ2UgdGhlIGF4aXMgbGFiZWwgY29sbGlzaW9uIGRldGFjdCBib3ggZnJvbSBhIHJlY3Qg
dG8gcG9seWdvbiwgc28gdGhhdCB3ZSBjYW4gZGVjdGFjdCBjbGljayBtb3JlIGFjY3VyYXRlLgor
CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9q
cy9VdGlscy5qczoKKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRp
Yy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzOgorICAgICAgICAo
cG9pbnRQb2x5Z29uQ29sbGlzaW9uRGV0ZWN0KTogRGV0YWN0CisgICAgICAgIChwb2ludFJpZ2h0
UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRlY3QpOgorICAgICAgICAoQ29sb3JCYXRjaFJlbmRl
cik6CisgICAgICAgIChDb2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5sYXp5Q3JlYXRlQ29sb3JT
ZXFzKToKKyAgICAgICAgKENvbG9yQmF0Y2hSZW5kZXIucHJvdG90eXBlLmFkZFNlcSk6CisgICAg
ICAgIChDb2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5iYXRjaFJlbmRlcik6CisgICAgICAgIChD
b2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5jbGVhcik6CisgICAgICAgICh4U2Nyb2xsU3RyZWFt
UmVuZGVyRmFjdG9yeSk6CisgICAgICAgIChUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQp
OgorICAgICAgICAob2Zmc2NyZWVuQ2FjaGVkUmVuZGVyRmFjdG9yeSk6IERlbGV0ZWQuCisKIDIw
MTktMDgtMDcgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAg
ICAgICAgW1dpbl1bTWluaUJyb3dzZXJdIEFkZCBrZXkgYWNjZWxlcmF0b3JzIGZvciByZWxvYWQg
YW5kIGNsb3NlIHdpbmRvdwpkaWZmIC0tZ2l0IGEvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9VdGlscy5qcyBiL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jl
c3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMvVXRpbHMuanMKaW5kZXggOTgzMmY1N2Vj
YzMwNGZlMWI4N2NkYjQ2ZjViYTI5M2Q0NzNjZjQ3My4uODc5NmIxMDhjYzMzYTg2ZWQxYzM2YWJk
M2JjMmJhMzMwMWJjZjk5MCAxMDA2NDQKLS0tIGEvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9VdGlscy5qcworKysgYi9Ub29scy9yZXN1bHRzZGJw
eS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2pzL1V0aWxzLmpzCkBAIC03MCw3ICs3
MCw3IEBAIGZ1bmN0aW9uIGlzRGFya01vZGUgKCkgewogZnVuY3Rpb24gY3JlYXRlSW5zZXJ0aW9u
T2JzZXJ2ZXJzKGVsZW1lbnQsIGNhbGxiYWNrPSgpPT57fSwgc3RhcnRUaHJlc2hvbGQ9MC4wLCBl
bmRUcmVzaG9sZD0xLjAsIHN0ZXA9MC4xLCBvcHRpb249e30pIHsKICAgICBjb25zdCB1c2VPcHRp
b24gPSB7fTsKICAgICB1c2VPcHRpb24ucm9vdCA9IG9wdGlvbi5yb290IGluc3RhbmNlb2YgSFRN
TEVsZW1lbnQgPyBvcHRpb24ucm9vdCA6IG51bGw7Ci0gICAgdXNlT3B0aW9uLnJvb3RNYXJnaW4g
PSBvcHRpb24ucm9vdE1hcmdpbiA/IG9wdGlvbi5yb290TWFyZ2luIDogIjAiOworICAgIHVzZU9w
dGlvbi5yb290TWFyZ2luID0gb3B0aW9uLnJvb3RNYXJnaW4gPyBvcHRpb24ucm9vdE1hcmdpbiA6
ICIwJSI7CiAgICAgY29uc3QgdGhyZXNob2xkQXJyYXkgPSBbXTsKICAgICBmb3IgKGxldCBpID0g
c3RhcnRUaHJlc2hvbGQ7IGkgPD0gZW5kVHJlc2hvbGQ7IGkrPSBzdGVwKSB7CiAgICAgICAgIHRo
cmVzaG9sZEFycmF5LnB1c2goaSk7CmRpZmYgLS1naXQgYS9Ub29scy9yZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25l
bnRzLmpzIGIvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFy
eS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50cy5qcwppbmRleCA1MDU5ZjBmYjlkZWU0
NGI2ZmI1ZTliNDY4ZGVlMzk0N2U3MGMzZmJiLi42MjMyMjVlYjc2ZWJhMjhlOWRiZDAxMzk1MTY0
NTg2MmQ4MWJiZmMzIDEwMDY0NAotLS0gYS9Ub29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3N0YXRpYy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzCisr
KyBiL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMv
Y29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMKQEAgLTM4LDYgKzM4LDY5IEBAIGZ1bmN0
aW9uIHBvaW50UmVjdENvbGxpc2lvbkRldGVjdChwb2ludCwgcmVjdCkgewogICAgIHJldHVybiBk
aWZmWCA8PSByZWN0LndpZHRoICYmIGRpZmZZIDw9IHJlY3QuaGVpZ2h0ICYmIGRpZmZYID49IDAg
JiYgZGlmZlkgPj0gMDsKIH0KIAorZnVuY3Rpb24gcG9pbnRQb2x5Z29uQ29sbGlzaW9uRGV0ZWN0
KHBvaW50LCBwb2x5Z29uKSB7CisgICAgbGV0IHJlcyA9IGZhbHNlOworICAgIGZvciAobGV0IGkg
PSAwLCBqID0gMTsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpKyssIGogPSBpICsgMSkgeworICAgICAg
ICBpZiAoaiA9PT0gcG9seWdvbi5sZW5ndGggKQorICAgICAgICAgICAgaiA9IDA7CisgICAgICAg
IGlmIChwb2ludFJpZ2h0UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRlY3QocG9pbnQsIHBvbHln
b25baV0sIHBvbHlnb25bal0pKQorICAgICAgICAgICAgcmVzID0gIXJlczsKKyAgICB9CisgICAg
cmV0dXJuIHJlczsKK30KKworLyoKKyogRGV0YWN0IGlmIHBvaW50IHJpZ2h0IHJheSBoYXZlIGEg
Y29sbGlzaW9uIHdpdGggYSBsaW5lIHNlZ21lbnQKKyogICAgICAgICAgICAgICAgKgorKiAgICAg
ICAgICAgICAgIC8KKyogICAgICAgICotLS0+IC8KKyogICAgICAgICAgICAgLworKiAgICAgICAg
ICAgICoKKyovCitmdW5jdGlvbiBwb2ludFJpZ2h0UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRl
Y3QocG9pbnQsIGxpbmVTdGFydCwgbGluZUVuZCkgeworCisgICAgLyoKKyAgICAqICAgICAgKi0t
LS0+CisgICAgKiAgICAgICogLS0gKgorICAgICovCisgICAgaWYgKGxpbmVTdGFydC55ID09PSBs
aW5lRW5kLnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvKgorICAgICogICAgICAqLS0t
LT4KKyAgICAqICAgICAgICAgICoKKyAgICAqICAgICAgICAgLworICAgICogICAgICAgICoKKyAg
ICAqLworICAgIGlmIChsaW5lU3RhcnQueSA8IHBvaW50LnkgJiYgbGluZUVuZC55IDwgcG9pbnQu
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8qCisgICAgKiAgICAgICAgICAqCisgICAg
KiAgICAgICAgIC8KKyAgICAqICAgICAgICAqCisgICAgKiAgICAgICotLS0tPgorICAgICovCisg
ICAgaWYgKGxpbmVTdGFydC55ID4gcG9pbnQueSAmJiBsaW5lRW5kLnkgPiBwb2ludC55KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvKgorICAgICogICAgICAgICAgKgorICAgICogICAg
ICAgICAvICAgICAqLS0tLT4KKyAgICAqICAgICAgICAqCisgICAgKi8KKyAgICBpZiAocG9pbnQu
eCA+IGxpbmVTdGFydC54ICYmIHBvaW50LnkgPiBsaW5lRW5kLngpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAvKgorICAgICogICAgICAgICAgKgorICAgICogICAgICAgICAvCisgICAgKiAg
ICAgKi0tKi0tPgorICAgICovCisgICAgaWYgKHBvaW50LnkgPT09IGxpbmVTdGFydC55ICYmIHBv
aW50LnkgPCBsaW5lRW5kLnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocG9pbnQu
eSA9PT0gbGluZUVuZC55ICYmIHBvaW50LnkgPCBsaW5lU3RhcnQueSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBwb2ludC54IDwgbGluZUVuZC54IC0gKGxpbmVFbmQueCAtIGxp
bmVTdGFydC54KSAvIChsaW5lRW5kLnkgLSBsaW5lU3RhcnQueSkgKiAobGluZUVuZC55IC0gcG9p
bnQueSk7Cit9CisKIGZ1bmN0aW9uIGdldE1vdXNlUG9zSW5DYW52YXMoZXZlbnQsIGNhbnZhcykg
ewogICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAg
cmV0dXJuIHsKQEAgLTExOCw1NSArMTgxLDU0IEBAIGZ1bmN0aW9uIFhTY3JvbGxhYmxlQ2FudmFz
UHJvdmlkZXIoZXhwb3J0ZXIsIC4uLmNoaWxkcmVuRnVuY3Rpb25zKSB7CiAgICAgPC9kaXY+YDsK
IH0KIAotZnVuY3Rpb24gb2Zmc2NyZWVuQ2FjaGVkUmVuZGVyRmFjdG9yeShwYWRkaW5nLCBoZWln
aHQpIHsKLSAgICBsZXQgY2FjaGVkU2Nyb2xsTGVmdCA9IDA7Ci0gICAgbGV0IG9mZnNjcmVlbkNh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwotICAgIC8vIERvdWJsZSBi
dWZmZXJpbmcKLSAgICBjb25zdCBvZmZzY3JlZW5DYW52YXNCdWZmZXIgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdjYW52YXMnKTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjYWxsIHJl
ZHJhd0NhY2hlIHRvIHJlbmRlciBhIG9mZnNjcmVlbiBjYWNoZQotICAgIC8vIGFuZCBjb3B5IHRo
ZSB2aWV3cG9ydCBhcmVhIGZyb20gb2YgaXQKLSAgICAvLyBJdCB3aWxsIHRyaWdnZXIgcmVkcmF3
Q2FjaGUgd2hlbiBjYWNoZSBkb24ndCBoYXZlIGVub3VnaCBzcGFjZQotICAgIHJldHVybiAocmVk
cmF3Q2FjaGUsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUsIGZvcmNlUmVkcmF3Q2FjaGUgPSBm
YWxzZSkgPT4gewotICAgICAgICAvLyBDaGVjayBpZiB0aGUgY2FudmFzIGRpc3BsYXkgb24gdGhl
IHNjcmVlbiBvciBub3QsCi0gICAgICAgIC8vIFRoaXMgd2lsbCBzYXZlIHJlbmRlciB0aW1lCitj
bGFzcyBDb2xvckJhdGNoUmVuZGVyIHsKKyAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgdGhp
cy5jb2xvclNlcXNNYXAgPSB7fTsKKyAgICB9CisKKyAgICBsYXp5Q3JlYXRlQ29sb3JTZXFzKGNv
bG9yLCBzdGFydEFjdGlvbiwgZmluYWxBY3Rpb24pIHsKKyAgICAgICAgaWYgKGZhbHNlID09PSBj
b2xvciBpbiB0aGlzLmNvbG9yU2Vxc01hcCkKKyAgICAgICAgICAgIHRoaXMuY29sb3JTZXFzTWFw
W2NvbG9yXSA9IFtzdGFydEFjdGlvbiwgZmluYWxBY3Rpb25dOworICAgIH0KKworICAgIGFkZFNl
cShjb2xvciwgc2VxQWN0aW9uKSB7CisgICAgICAgIHRoaXMuY29sb3JTZXFzTWFwW2NvbG9yXS5w
dXNoKHNlcUFjdGlvbik7CisgICAgfQorCisgICAgYmF0Y2hSZW5kZXIoY29udGV4dCkgeworICAg
ICAgICBmb3IgKGxldCBjb2xvciBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbG9yU2Vxc01hcCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IHNlcXMgPSB0aGlzLmNvbG9yU2Vxc01hcFtjb2xvcl07CisgICAg
ICAgICAgICBzZXFzWzBdKGNvbnRleHQsIGNvbG9yKTsKKyAgICAgICAgICAgIGZvcihsZXQgaSA9
IDI7IGkgPCBzZXFzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHNlcXNbaV0oY29udGV4
dCwgY29sb3IpOworICAgICAgICAgICAgc2Vxc1sxXShjb250ZXh0LCBjb2xvcik7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2xlYXIoKSB7CisgICAgICAgIHRoaXMuY29sb3JTZXFzTWFwID0gbmV3
IE1hcCgpOworICAgIH0KK30KKworZnVuY3Rpb24geFNjcm9sbFN0cmVhbVJlbmRlckZhY3Rvcnko
aGVpZ2h0KSB7CisgICAgcmV0dXJuIChyZWRyYXcsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUp
ID0+IHsKICAgICAgICAgY29uc3Qgd2lkdGggPSB0eXBlb2Ygc3RhdGVEaWZmLndpZHRoID09PSAn
bnVtYmVyJyA/IHN0YXRlRGlmZi53aWR0aCA6IHN0YXRlLndpZHRoOwogICAgICAgICBpZiAod2lk
dGggPD0gMCkKICAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gcmVuZGVyCiAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IHdpZHRoICsgMiAqIHBhZGRpbmc7
Ci0gICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0eXBlb2Ygc3RhdGVEaWZmLnNjcm9sbExlZnQg
PT09ICdudW1iZXInID8gc3RhdGVEaWZmLnNjcm9sbExlZnQgOiBzdGF0ZS5zY3JvbGxMZWZ0Owot
ICAgICAgICBjb25zdCBjb250ZXh0ID0gZWxlbWVudC5nZXRDb250ZXh0KCcyZCcpOwotICAgICAg
ICBsZXQgY2FjaGVQb3NMZWZ0ID0gc2Nyb2xsTGVmdCAtIGNhY2hlZFNjcm9sbExlZnQ7Ci0gICAg
ICAgIGxldCBuZWVkVG9SZWRyYXdDYWNoZSA9IGZvcmNlUmVkcmF3Q2FjaGU7Ci0KLSAgICAgICAg
aWYgKGVsZW1lbnQubG9naWNXaWR0aCAhPSB3aWR0aCkgewotICAgICAgICAgICAgLy8gU2V0dXAg
dGhlIGRwciBpbiBjYXNlIG9mIGJsdXIKLSAgICAgICAgICAgIHNldHVwQ2FudmFzV2lkdGhXaXRo
RHByKGVsZW1lbnQsIHdpZHRoKTsKLSAgICAgICAgICAgIG5lZWRUb1JlZHJhd0NhY2hlID0gdHJ1
ZTsKLSAgICAgICAgfSBlbHNlIGlmIChjYWNoZVBvc0xlZnQgPCAwIHx8IGNhY2hlUG9zTGVmdCAr
IHdpZHRoID4gdG90YWxXaWR0aCkgewotICAgICAgICAgICAgaWYgKHNjcm9sbExlZnQgPCAwICkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBuZWVkVG9SZWRyYXdDYWNoZSA9
IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmVlZFRvUmVkcmF3Q2FjaGUpIHsKLSAg
ICAgICAgICAgIC8vIFdlIGRyYXcgZXZlcnl0aGluZyBvbiBjYWNoZQotICAgICAgICAgICAgIHJl
ZHJhd0NhY2hlKG9mZnNjcmVlbkNhbnZhcywgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgKCkg
PT4gewotICAgICAgICAgICAgICAgIGNhY2hlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0IDwgcGFk
ZGluZyA/IHNjcm9sbExlZnQgOiBzY3JvbGxMZWZ0IC0gcGFkZGluZzsKLSAgICAgICAgICAgICAg
ICBjYWNoZVBvc0xlZnQgPSBzY3JvbGxMZWZ0IC0gY2FjaGVkU2Nyb2xsTGVmdDsKLSAgICAgICAg
ICAgICAgICBpZiAoY2FjaGVQb3NMZWZ0IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgY2FjaGVQ
b3NMZWZ0ID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCBlbGVt
ZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2Uob2Zmc2NyZWVuQ2FudmFzLCBjYWNoZVBvc0xlZnQgKiBnZXREZXZpY2VQaXhlbFJhdGlv
KCksIDAsICAgIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLCAwLCB3aWR0aCAqIGdl
dERldmljZVBpeGVsUmF0aW8oKSwgZWxlbWVudC5oZWlnaHQpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2FjaGVQb3NMZWZ0IDwgMCkKLSAgICAg
ICAgICAgICAgICBjYWNoZVBvc0xlZnQgPSAwOwotICAgICAgICAgICAgY29udGV4dC5jbGVhclJl
Y3QoMCwgMCwgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQpOwotICAgICAgICAgICAgY29u
dGV4dC5kcmF3SW1hZ2Uob2Zmc2NyZWVuQ2FudmFzLCBjYWNoZVBvc0xlZnQgKiBnZXREZXZpY2VQ
aXhlbFJhdGlvKCksIDAsICAgIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0LCAwLCAwLCB3
aWR0aCAqIGdldERldmljZVBpeGVsUmF0aW8oKSwgZWxlbWVudC5oZWlnaHQpOwotICAgICAgICB9
CisgICAgICAgIGxldCBzdGFydFggPSAwOworICAgICAgICBsZXQgcmVuZGVyV2lkdGggPSB3aWR0
aDsKKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKKyAgICAgICAgICAgIGlm
IChlbGVtZW50LmxvZ2ljV2lkdGggIT09IHdpZHRoKSB7CisgICAgICAgICAgICAgICAgc2V0dXBD
YW52YXNXaWR0aFdpdGhEcHIoZWxlbWVudCwgd2lkdGgpOworICAgICAgICAgICAgICAgIHNldHVw
Q2FudmFzQ29udGV4dFNjYWxlKGVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGVsZW1lbnQubG9naWNIZWlnaHQgIT09IGhlaWdodCkgeworICAgICAgICAgICAgICAgIHNl
dHVwQ2FudmFzSGVpZ2h0V2l0aERwcihlbGVtZW50LCBoZWlnaHQpOworICAgICAgICAgICAgICAg
IHNldHVwQ2FudmFzQ29udGV4dFNjYWxlKGVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxlbWVudC5nZXRDb250ZXh0KCIyZCIsIHthbHBoYTogZmFsc2V9KS5jbGVhclJlY3Qo
c3RhcnRYLCAwLCByZW5kZXJXaWR0aCwgZWxlbWVudC5sb2dpY0hlaWdodCk7CisgICAgICAgICAg
ICByZWRyYXcoc3RhcnRYLCByZW5kZXJXaWR0aCwgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSk7
CisgICAgICAgIH0pOwogICAgIH0KIH0KIApAQCAtMTk0LDMyICsyNTYsNDcgQEAgVGltZWxpbmUu
Q2FudmFzU2VyaWVzQ29tcG9uZW50ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9uID0ge30pID0+IHsK
ICAgICBjb25zdCBvbkRvdEhvdmVyID0gdHlwZW9mIG9wdGlvbi5vbkRvdEhvdmVyID09PSAiZnVu
Y3Rpb24iID8gb3B0aW9uLm9uRG90SG92ZXIgOiBudWxsOwogICAgIGNvbnN0IHRhZ0hlaWdodCA9
IGRlZmF1bHRGb250U2l6ZTsKICAgICBjb25zdCBoZWlnaHQgPSBvcHRpb24uaGVpZ2h0ID8gb3B0
aW9uLmhlaWdodCA6IDIgKiByYWRpdXMgKyB0YWdIZWlnaHQ7Ci0KKyAgICBjb25zdCBjb2xvckJh
dGNoUmVuZGVyID0gbmV3IENvbG9yQmF0Y2hSZW5kZXIoKTsKIAogICAgIC8vIERyYXcgZG90IGFw
aSBjYW4gYmUgdXNlZCBpbiB1c2VyIGRlZmluZWQgcmVuZGVyIGZ1bmN0aW9uCiAgICAgY29uc3Qg
ZHJhd0RvdCA9IChjb250ZXh0LCB4LCB5LCBpc0VtcHR5LCB0YWcgPSBudWxsLCB1c2VSYWRpdXMs
IGNvbG9yLCBlbXB0eWxpbmVDb2xvcikgPT4gewogICAgICAgICB1c2VSYWRpdXMgPSB1c2VSYWRp
dXMgPyB1c2VSYWRpdXMgOiByYWRpdXM7CiAgICAgICAgIGNvbG9yID0gY29sb3IgPyBjb2xvciA6
IGRlZmF1bHREb3RDb2xvcjsKICAgICAgICAgZW1wdHlsaW5lQ29sb3IgPSBlbXB0eWxpbmVDb2xv
ciA/IGVtcHR5bGluZUNvbG9yIDogZGVmYXVsdEVtcHR5TGluZUNvbG9yOwotICAgICAgICAgICAg
aWYgKCFpc0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgLy9EcmF3IHRoZSBkb3QKKyAgICAgICAg
aWYgKCFpc0VtcHR5KSB7CisgICAgICAgICAgICAvLyBEcmF3IHRoZSBkb3QKKyAgICAgICAgICAg
IGNvbG9yQmF0Y2hSZW5kZXIubGF6eUNyZWF0ZUNvbG9yU2Vxcyhjb2xvciwgKGNvbnRleHQpID0+
IHsKICAgICAgICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQuYXJjKHggKyBkb3RNYXJnaW4gKyByYWRpdXMsIHksIHJhZGl1cywgMCwgMiAqIE1h
dGguUEkpOworICAgICAgICAgICAgfSwgKGNvbnRleHQsIGNvbG9yKSA9PiB7CiAgICAgICAgICAg
ICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBjb2xvcjsKICAgICAgICAgICAgICAgICBjb250ZXh0
LmZpbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhZyA9PT0gIm51bWJlciIgfHwg
dHlwZW9mIHRhZyA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5m
b250ID0gYCR7Zm9udEZhbWlseX0gJHtkZWZhdWx0Rm9udFNpemV9cHhgOwotICAgICAgICAgICAg
ICAgICAgICBjb25zdCB0YWdTaXplID0gY29udGV4dC5tZWFzdXJlVGV4dCh0YWcpOwotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KHRhZywgeCArIGRvdE1hcmdpbiArIHJhZGl1
cyAtIHRhZ1NpemUud2lkdGggLyAyLCByYWRpdXMgKiAyICsgdGFnU2l6ZS5lbUhlaWdodEFzY2Vu
dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5hZGRTZXEoY29sb3IsIChjb250ZXh0
LCBjb2xvcikgPT4geworICAgICAgICAgICAgICAgIGNvbnRleHQuYXJjKHggKyBkb3RNYXJnaW4g
KyByYWRpdXMsIHksIHJhZGl1cywgMCwgMiAqIE1hdGguUEkpOworICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIERyYXcgdGhlIGVtcHR5CisgICAgICAg
ICAgICBjb2xvckJhdGNoUmVuZGVyLmxhenlDcmVhdGVDb2xvclNlcXMoZW1wdHlsaW5lQ29sb3Is
IChjb250ZXh0KSA9PiB7CiAgICAgICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKKyAg
ICAgICAgICAgIH0sIChjb250ZXh0LCBjb2xvcikgPT4geworICAgICAgICAgICAgICAgIGNvbnRl
eHQuc3Ryb2tlU3R5bGUgPSBjb2xvcjsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmFkZFNlcShl
bXB0eWxpbmVDb2xvciwgKGNvbnRleHQpID0+IHsKICAgICAgICAgICAgICAgICBjb250ZXh0Lm1v
dmVUbyh4ICsgZG90TWFyZ2luLCB5KTsKICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4
ICsgZG90TWFyZ2luICsgMiAqIHJhZGl1cywgeSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC5s
aW5lV2lkdGggPSAxOwotICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkZWZh
dWx0RW1wdHlMaW5lQ29sb3I7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRHJh
dyB0aGUgdGFnCisgICAgICAgIGlmICh0eXBlb2YgdGFnID09PSAibnVtYmVyIiB8fCB0eXBlb2Yg
dGFnID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgY29udGV4dC5mb250ID0gYCR7Zm9udEZh
bWlseX0gJHtkZWZhdWx0Rm9udFNpemV9cHhgOworICAgICAgICAgICAgY29udGV4dC5maWxsU3R5
bGUgPSBjb2xvcjsKKyAgICAgICAgICAgIGNvbnN0IHRhZ1NpemUgPSBjb250ZXh0Lm1lYXN1cmVU
ZXh0KHRhZyk7CisgICAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KHRhZywgeCArIGRvdE1hcmdp
biArIHJhZGl1cyAtIHRhZ1NpemUud2lkdGggLyAyLCByYWRpdXMgKiAyICsgdGFnU2l6ZS5lbUhl
aWdodEFzY2VudCk7CisgICAgICAgIH0KICAgICB9OwogICAgIGNvbnN0IHJlbmRlciA9IHR5cGVv
ZiBvcHRpb24ucmVuZGVyRmFjdG9yeSA9PT0gImZ1bmN0aW9uIiA/IG9wdGlvbi5yZW5kZXJGYWN0
b3J5KGRyYXdEb3QpIDogKGRvdCwgY29udGV4dCwgeCwgeSkgPT4gZHJhd0RvdChjb250ZXh0LCB4
LCB5LCAhZG90KTsKICAgICBjb25zdCBzb3J0RGF0YSA9IG9wdGlvbi5zb3J0RGF0YSA9PT0gdHJ1
ZSA/IG9wdGlvbi5zb3J0RGF0YSA6IGZhbHNlOwpAQCAtMjQ1LDQ5ICszMjIsMzcgQEAgVGltZWxp
bmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9uID0ge30pID0+
IHsKIAogICAgIGNvbnN0IGRvdFdpZHRoID0gMiAqIChyYWRpdXMgKyBkb3RNYXJnaW4pOwogICAg
IGNvbnN0IHBhZGRpbmcgPSAxMDAgKiBkb3RXaWR0aCAvIGdldERldmljZVBpeGVsUmF0aW8oKTsK
LSAgICBjb25zdCBvZmZzY3JlZW5DYWNoZWRSZW5kZXIgPSBvZmZzY3JlZW5DYWNoZWRSZW5kZXJG
YWN0b3J5KHBhZGRpbmcsIGhlaWdodCk7CisgICAgY29uc3QgeFNjcm9sbFN0cmVhbVJlbmRlciA9
IHhTY3JvbGxTdHJlYW1SZW5kZXJGYWN0b3J5KGhlaWdodCk7CiAKLSAgICAvLyBHZW5lcmF0ZSB0
aGUgZG90IGNhY2hlCi0gICAgY29uc3QgcmVkcmF3Q2FjaGUgPSAob2Zmc2NyZWVuQ2FudmFzLCBl
bGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlLCBub3RpZnlUb1JlbmRlcikgPT4geworICAgIGNvbnN0
IHJlZHJhdyA9IChzdGFydFgsIHJlbmRlcldpZHRoLCBlbGVtZW50LCBzdGF0ZURpZmYsIHN0YXRl
KSA9PiB7CiAgICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0eXBlb2Ygc3RhdGVEaWZmLnNjcm9s
bExlZnQgPT09ICdudW1iZXInID8gc3RhdGVEaWZmLnNjcm9sbExlZnQgOiBzdGF0ZS5zY3JvbGxM
ZWZ0OwotICAgICAgICBjb25zdCB3aWR0aCA9IHR5cGVvZiBzdGF0ZURpZmYud2lkdGggPT09ICdu
dW1iZXInID8gc3RhdGVEaWZmLndpZHRoIDogc3RhdGUud2lkdGg7Ci0gICAgICAgIGNvbnN0IHRv
dGFsV2lkdGggPSB3aWR0aCArIDIgKiBwYWRkaW5nOwogICAgICAgICBjb25zdCBzY2FsZXMgPSBz
dGF0ZURpZmYuc2NhbGVzID8gc3RhdGVEaWZmLnNjYWxlcyA6IHN0YXRlLnNjYWxlczsKICAgICAg
ICAgY29uc3QgZG90cyA9IHN0YXRlRGlmZi5kb3RzID8gc3RhdGVEaWZmLmRvdHMgOiBzdGF0ZS5k
b3RzOwogICAgICAgICAvLyBUaGlzIGNvbG9yIG1heWJlIGNoYW5nZSB3aGVuIHN3aXRjaCBkYXJr
L2xpZ2h0IG1vZGUKICAgICAgICAgY29uc3QgZGVmYXVsdExpbmVDb2xvciA9IGdldENvbXB1dGVk
U3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ib3JkZXJDb2xvcklubGlu
ZUVsZW1lbnQnKTsKLSAgICAgICAgaWYgKG9mZnNjcmVlbkNhbnZhcy5sb2dpY1dpZHRoICE9PSB0
b3RhbFdpZHRoKSB7Ci0gICAgICAgICAgICBzZXR1cENhbnZhc1dpZHRoV2l0aERwcihvZmZzY3Jl
ZW5DYW52YXMsIHRvdGFsV2lkdGgpOwotICAgICAgICAgICAgc2V0dXBDYW52YXNDb250ZXh0U2Nh
bGUob2Zmc2NyZWVuQ2FudmFzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2NyZWVuQ2Fu
dmFzLmxvZ2ljSGVpZ2h0ICE9PSBlbGVtZW50LmxvZ2ljSGVpZ2h0KSB7Ci0gICAgICAgICAgICBz
ZXR1cENhbnZhc0hlaWdodFdpdGhEcHIob2Zmc2NyZWVuQ2FudmFzLCBlbGVtZW50LmxvZ2ljSGVp
Z2h0KTsKLSAgICAgICAgICAgIHNldHVwQ2FudmFzQ29udGV4dFNjYWxlKG9mZnNjcmVlbkNhbnZh
cyk7Ci0gICAgICAgIH0KIAotICAgICAgICBjb25zdCBjb250ZXh0ID0gb2Zmc2NyZWVuQ2FudmFz
LmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgIC8vIENsZWFyIHRoZSBjYWNoZQotICAgICAgICBj
b250ZXh0LmNsZWFyUmVjdCgwLCAwLCBvZmZzY3JlZW5DYW52YXMud2lkdGgsIG9mZnNjcmVlbkNh
bnZhcy5oZWlnaHQpOworICAgICAgICBjb25zdCBjb250ZXh0ID0gZWxlbWVudC5nZXRDb250ZXh0
KCIyZCIsIHsgYWxwaGE6IGZhbHNlIH0pOworICAgICAgICAvLyBDbGVhciBwZXJ2aW91cyBiYXRj
aFJlbmRlcgorICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmNsZWFyKCk7CiAgICAgICAgIC8vIERy
YXcgdGhlIHRpbWUgbGluZQotICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOwotICAgICAgICBj
b250ZXh0Lm1vdmVUbygwLCByYWRpdXMpOwotICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7
Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBkZWZhdWx0TGluZUNvbG9yOwotICAgICAg
ICBjb250ZXh0LmxpbmVUbyh0b3RhbFdpZHRoLCByYWRpdXMpOwotICAgICAgICBjb250ZXh0LnN0
cm9rZSgpOworICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmxhenlDcmVhdGVDb2xvclNlcXMoZGVm
YXVsdExpbmVDb2xvciwgKGNvbnRleHQpID0+IHsKKyAgICAgICAgICAgIGNvbnRleHQuYmVnaW5Q
YXRoKCk7CisgICAgICAgIH0sIChjb250ZXh0LCBjb2xvcikgPT4geworICAgICAgICAgICAgY29u
dGV4dC5saW5lV2lkdGggPSAxOworICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNv
bG9yOworICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGNvbG9yQmF0Y2hSZW5kZXIuYWRkU2VxKGRlZmF1bHRMaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7
CisgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhzdGFydFgsIHJhZGl1cyk7CisgICAgICAgICAg
ICBjb250ZXh0LmxpbmVUbyhzdGFydFggKyByZW5kZXJXaWR0aCwgcmFkaXVzKTsKKyAgICAgICAg
fSk7CiAKICAgICAgICAgLy8gRHJhdyB0aGUgZG90cwogICAgICAgICAvLyBGaXJzdCwgQ2FsY3Vs
YXRlIHRoZSByZW5kZXIgcmFuZ2U6Ci0gICAgICAgIGxldCBzdGFydFNjYWxlc0luZGV4ID0gTWF0
aC5mbG9vcigoc2Nyb2xsTGVmdCAtIHBhZGRpbmcpIC8gZG90V2lkdGgpOworICAgICAgICBsZXQg
c3RhcnRTY2FsZXNJbmRleCA9IE1hdGguZmxvb3IoKHNjcm9sbExlZnQgKyBzdGFydFgpIC8gZG90
V2lkdGgpOwogICAgICAgICBpZiAoc3RhcnRTY2FsZXNJbmRleCA8IDApCiAgICAgICAgICAgICBz
dGFydFNjYWxlc0luZGV4ID0gMDsKLSAgICAgICAgbGV0IHZpZXdwb3J0U3RhcnRTY2FsZUluZGV4
ID0gTWF0aC5mbG9vcigoc2Nyb2xsTGVmdCkgLyBkb3RXaWR0aCk7Ci0gICAgICAgIGlmICh2aWV3
cG9ydFN0YXJ0U2NhbGVJbmRleCA8IDApCi0gICAgICAgICAgICB2aWV3cG9ydFN0YXJ0U2NhbGVJ
bmRleCA9IDA7Ci0gICAgICAgIGxldCB2aWV3cG9ydEVuZFNjYWxlSW5kZXggPSB2aWV3cG9ydFN0
YXJ0U2NhbGVJbmRleCArIE1hdGguZmxvb3IoKHdpZHRoKSAvIGRvdFdpZHRoKTsKLSAgICAgICAg
aWYgKHZpZXdwb3J0RW5kU2NhbGVJbmRleCA+PSBzY2FsZXMubGVuZ3RoKQotICAgICAgICAgICAg
dmlld3BvcnRFbmRTY2FsZUluZGV4ID0gc2NhbGVzLmxlbmd0aCAtIDE7Ci0gICAgICAgIGxldCBl
bmRTY2FsZXNJbmRleCA9IHN0YXJ0U2NhbGVzSW5kZXggKyBNYXRoLmNlaWwoKHRvdGFsV2lkdGgp
IC8gZG90V2lkdGgpOworICAgICAgICBsZXQgZW5kU2NhbGVzSW5kZXggPSBzdGFydFNjYWxlc0lu
ZGV4ICsgTWF0aC5jZWlsKChyZW5kZXJXaWR0aCkgLyBkb3RXaWR0aCk7CiAgICAgICAgIGlmIChl
bmRTY2FsZXNJbmRleCA+PSBzY2FsZXMubGVuZ3RoKQogICAgICAgICAgICAgZW5kU2NhbGVzSW5k
ZXggPSBzY2FsZXMubGVuZ3RoIC0gMTsKICAgICAgICAgbGV0IGN1cnJlbnREb3RJbmRleCA9IHN0
YXJ0U2NhbGVzSW5kZXggLSAoc2NhbGVzLmxlbmd0aCAtIGRvdHMubGVuZ3RoKTsKQEAgLTMxMCwy
MyArMzc1LDE4IEBAIFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudCA9IChkb3RzLCBzY2Fs
ZXMsIG9wdGlvbiA9IHt9KSA9PiB7CiAKICAgICAgICAgLy8gVXNlIHRoaXMgdG8gZGVjcmVhc2Ug
Y29saXNpb24gc2VhcmNoIHNjb3BlCiAgICAgICAgIGluQ2FjaGVEb3RzID0gW107Ci0KLSAgICAg
ICAgLy8gRHJhdyB0aGUgZG90cyBvbiBjYWNoZQogICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRT
Y2FsZXNJbmRleDsgaSA8PSBlbmRTY2FsZXNJbmRleDsgaSsrKSB7Ci0gICAgICAgICAgICBsZXQg
eCA9IGkgKiBkb3RXaWR0aCAtIChzY3JvbGxMZWZ0IDwgcGFkZGluZyA/IHNjcm9sbExlZnQgOiBz
Y3JvbGxMZWZ0IC0gcGFkZGluZyk7CisgICAgICAgICAgICBsZXQgeCA9IGkgKiBkb3RXaWR0aCAt
IHNjcm9sbExlZnQ7CiAgICAgICAgICAgICBpZiAoY3VycmVudERvdEluZGV4IDwgZG90cy5sZW5n
dGggJiYgY29tcChzY2FsZXNbaV0sIGdldFNjYWxlKGRvdHNbY3VycmVudERvdEluZGV4XSkpID09
PSAwKSB7CiAgICAgICAgICAgICAgICAgcmVuZGVyKGRvdHNbY3VycmVudERvdEluZGV4XSwgY29u
dGV4dCwgeCwgcmFkaXVzKTsKICAgICAgICAgICAgICAgICBkb3RzW2N1cnJlbnREb3RJbmRleF0u
X2RvdENlbnRlciA9IHt4OiB4ICsgZG90TWFyZ2luICsgcmFkaXVzLCB5OiByYWRpdXN9OwotICAg
ICAgICAgICAgICAgIGRvdHNbY3VycmVudERvdEluZGV4XS5fY2FjaGVkU2Nyb2xsTGVmdCA9IHNj
cm9sbExlZnQgPCBwYWRkaW5nID8gc2Nyb2xsTGVmdCA6IHNjcm9sbExlZnQgLSBwYWRkaW5nOwor
ICAgICAgICAgICAgICAgIGRvdHNbY3VycmVudERvdEluZGV4XS5fY2FjaGVkU2Nyb2xsTGVmdCA9
IHNjcm9sbExlZnQ7CiAgICAgICAgICAgICAgICAgaW5DYWNoZURvdHMucHVzaChkb3RzW2N1cnJl
bnREb3RJbmRleF0pOwogICAgICAgICAgICAgICAgIGN1cnJlbnREb3RJbmRleCArPSAxOwogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmVuZGVyKG51bGwsIGNvbnRleHQsIHgs
IHJhZGl1cyk7Ci0gICAgICAgICAgICAvLyBXZSBhbHJlYWR5IGRyYXdlZCB2aWV3cG9ydCBuZWVk
ZWQsIGNhbGwgbm90aWZ5VG9SZW5kZXIgdG8gYnJpbmcgdGhlbSB0byBzY3JlZW4gbm93Ci0gICAg
ICAgICAgICAvLyB0aGlzIHdpbGwgaGVscCB0byBlbGVtYXRlIGJsaW5rCi0gICAgICAgICAgICBp
ZiAoaSA9PT0gdmlld3BvcnRFbmRTY2FsZUluZGV4KQotICAgICAgICAgICAgICAgIG5vdGlmeVRv
UmVuZGVyKCk7CiAgICAgICAgIH0KKyAgICAgICAgY29sb3JCYXRjaFJlbmRlci5iYXRjaFJlbmRl
cihjb250ZXh0KTsKICAgICB9OwogCiAgICAgcmV0dXJuIExpc3RQcm92aWRlclJlY2VpdmVyKCh1
cGRhdGVDb250YWluZXJXaWR0aCwgb25Db250YWluZXJTY3JvbGwsIG9uUmVzaXplKSA9PiB7CkBA
IC0zNDMsNyArNDAzLDcgQEAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50ID0gKGRvdHMs
IHNjYWxlcywgb3B0aW9uID0ge30pID0+IHsKICAgICAgICAgICAgICAgICBzY2FsZXM6IGluaXRT
Y2FsZXMsCiAgICAgICAgICAgICAgICAgc2Nyb2xsTGVmdDogMCwKICAgICAgICAgICAgICAgICB3
aWR0aDogMCwKLSAgICAgICAgICAgICAgICBvblNjcmVlbjogdHJ1ZSwKKyAgICAgICAgICAgICAg
ICBvblNjcmVlbjogZmFsc2UsCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgb25FbGVtZW50
TW91bnQ6IChlbGVtZW50KSA9PiB7CiAgICAgICAgICAgICAgICAgc2V0dXBDYW52YXNIZWlnaHRX
aXRoRHByKGVsZW1lbnQsIGhlaWdodCk7CkBAIC0zNzUsMjQgKzQzNSwyMyBAQCBUaW1lbGluZS5D
YW52YXNTZXJpZXNDb21wb25lbnQgPSAoZG90cywgc2NhbGVzLCBvcHRpb24gPSB7fSkgPT4gewog
ICAgICAgICAgICAgb25FbGVtZW50VW5tb3VudDogKGVsZW1lbnQpID0+IHsKICAgICAgICAgICAg
ICAgICBvbkNvbnRhaW5lclNjcm9sbC5zdG9wQWN0aW9uKG9uU2Nyb2xsQWN0aW9uKTsKICAgICAg
ICAgICAgICAgICBvblJlc2l6ZS5zdG9wQWN0aW9uKG9uUmVzaXplQWN0aW9uKTsKKyAgICAgICAg
ICAgICAgICAvLyBDbGVhbiB0aGUgY2FudmFzLCBmcmVlIGl0cyBtZW1vcnkKKyAgICAgICAgICAg
ICAgICBlbGVtZW50LndpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmhlaWdodCA9
IDA7CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQs
IHN0YXRlRGlmZiwgc3RhdGUpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0g
ZWxlbWVudC5nZXRDb250ZXh0KCIyZCIpOwotICAgICAgICAgICAgICAgIGxldCBmb3JjZVJlZHJh
d0NhY2hlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbGV0IGZvcmNlUmVkcmF3QWxsID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5vblNjcmVlbiAmJiAhc3RhdGVEaWZmLm9u
U2NyZWVuKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGVEaWZmLnNjYWxlcyB8fCBzdGF0ZURpZmYuZG90cyB8fCB0eXBlb2Ygc3RhdGVEaWZm
LnNjcm9sbExlZnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzdGF0ZURpZmYud2lkdGggPT09ICdu
dW1iZXInIHx8IHN0YXRlRGlmZi5vblNjcmVlbikgewogCiAgICAgICAgICAgICAgICAgICAgIGlm
IChzdGF0ZURpZmYuc2NhbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZURpZmYu
c2NhbGVzID0gc3RhdGVEaWZmLnNjYWxlcy5tYXAoeCA9PiB4KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcmNlUmVkcmF3Q2FjaGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZURpZmYuZG90cykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVEaWZmLmRvdHMgPSBzdGF0ZURpZmYuZG90cy5tYXAoeCA9PiB4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcmNlUmVkcmF3Q2FjaGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgo
KSA9PiBvZmZzY3JlZW5DYWNoZWRSZW5kZXIocmVkcmF3Q2FjaGUsIGVsZW1lbnQsIHN0YXRlRGlm
Ziwgc3RhdGUsIGZvcmNlUmVkcmF3Q2FjaGUpKTsKKyAgICAgICAgICAgICAgICAgICAgeFNjcm9s
bFN0cmVhbVJlbmRlcihyZWRyYXcsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CkBAIC00MTAsNyArNDY5LDcg
QEAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9u
ID0ge30pID0+IHsKICAgICAgICAgb25Db250YWluZXJTY3JvbGwuYWN0aW9uKG9uU2Nyb2xsQWN0
aW9uKTsKICAgICAgICAgb25SZXNpemUuYWN0aW9uKG9uUmVzaXplQWN0aW9uKTsKICAgICAgICAg
cmV0dXJuIGA8ZGl2IGNsYXNzPSJzZXJpZXMiPgotICAgICAgICAgICAgPGNhbnZhcyByZWY9IiR7
Y2FudmFzUmVmfSI+CisgICAgICAgICAgICA8Y2FudmFzIHJlZj0iJHtjYW52YXNSZWZ9IiB3aWR0
aD0iMCIgaGVpZ2h0PSIwIj4KICAgICAgICAgPC9kaXY+YDsKICAgICB9KTsKIH0KQEAgLTUyOSw2
ICs1ODgsNyBAQCBUaW1lbGluZS5DYW52YXNYQXhpc0NvbXBvbmVudCA9IChzY2FsZXMsIG9wdGlv
biA9IHt9KSA9PiB7CiAgICAgY29uc3QgbWF4aW51bVRleHRIZWlnaHQgPSBzY2FsZVdpZHRoICog
NC41OwogICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IHR5cGVvZiBvcHRpb24uaGVpZ2h0ID09PSAi
bnVtYmVyIiA/IG9wdGlvbi5oZWlnaHQgOiBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3Bl
cnR5VmFsdWUoJy0tc21hbGxTaXplJykpICogNTsKICAgICBjb25zdCBzcXJ0MyA9IE1hdGguc3Fy
dCgzKTsKKyAgICBjb25zdCBjb2xvckJhdGNoUmVuZGVyID0gbmV3IENvbG9yQmF0Y2hSZW5kZXIo
KTsKIAogICAgIGNvbnN0IGRyYXdTY2FsZSA9IChzY2FsZUxhYmVsLCBncm91cCwgY29udGV4dCwg
eCwgeSwgaXNIb3ZlcmFibGUsIGxpbmVDb2xvciwgZ3JvdXBDb2xvcikgPT4gewogICAgICAgICBj
b25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTsKQEAg
LTUzNiw0NCArNTk2LDQ1IEBAIFRpbWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9uZW50ID0gKHNjYWxl
cywgb3B0aW9uID0ge30pID0+IHsKICAgICAgICAgY29uc3QgdXNlZEdyb3VwQ29sb3IgPSBncm91
cENvbG9yID8gZ3JvdXBDb2xvciA6IGlzRGFya01vZGUoKSA/IGNvbXB1dGVkU3R5bGUuZ2V0UHJv
cGVydHlWYWx1ZSgnLS13aGl0ZScpIDogY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCct
LWJsYWNrJyk7CiAgICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSBncm91cCAqIHNjYWxlV2lkdGg7
CiAgICAgICAgIGNvbnN0IGJhc2VMaW5lWSA9IGlzVG9wID8geSArIGNhbnZhc0hlaWdodCAtIHNj
YWxlQnJvYWRMaW5lSGVpZ2h0IDogeSArIHNjYWxlQnJvYWRMaW5lSGVpZ2h0OwotICAgICAgICBp
ZiAoZ3JvdXAgPiAxKSB7Ci0gICAgICAgICAgICAvLyBEcmF3IGdyb3VwIGxhYmVsCi0gICAgICAg
ICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgY29udGV4dC5saW5lV2lkdGgg
PSAxOwotICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHVzZWRHcm91cENvbG9yOwot
ICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCArIGNvbnRleHQubGluZVdpZHRoLCBpc1RvcCA/
IGNhbnZhc0hlaWdodCA6IHkpOwotICAgICAgICAgICAgY29udGV4dC5saW5lVG8oeCArIGNvbnRl
eHQubGluZVdpZHRoLCBiYXNlTGluZVkpOwotICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIERyYXcgdGFnIGxpbmUKICAgICAgICAgY29uc3QgbWlk
ZGxlUG9pbnRYID0geCArIHRvdGFsV2lkdGggLyAyOwotICAgICAgICBjb250ZXh0LmJlZ2luUGF0
aCgpOwotICAgICAgICBjb250ZXh0Lm1vdmVUbyhtaWRkbGVQb2ludFgsIGJhc2VMaW5lWSk7Ci0g
ICAgICAgIGlmICghaXNUb3ApCi0gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhtaWRkbGVQb2lu
dFgsIGJhc2VMaW5lWSArIHNjYWxlVGFnTGluZUhlaWdodCAtIHNjYWxlVGFnTGluZVBhZGRpbmcp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhtaWRkbGVQb2ludFgs
IGJhc2VMaW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCArIHNjYWxlVGFnTGluZVBhZGRpbmcpOwot
ICAgICAgICBpZiAoZ3JvdXAgPiAxKQotICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9
IHVzZWRHcm91cENvbG9yOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZXh0LnN0cm9r
ZVN0eWxlID0gdXNlZExpbmVDb2xvcjsKLSAgICAgICAgY29udGV4dC5zdHJva2UoKTsKLQogICAg
ICAgICBpZiAoZ3JvdXAgPiAxKSB7Ci0gICAgICAgICAgICAgICAgLy8gRHJhdyB0aGUgZ3JvdXAg
bGluZQorICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5sYXp5Q3JlYXRlQ29sb3JTZXFzKHVz
ZWRHcm91cENvbG9yLCAoY29udGV4dCkgPT4gewogICAgICAgICAgICAgICAgIGNvbnRleHQuYmVn
aW5QYXRoKCk7CisgICAgICAgICAgICB9LCAoY29udGV4dCwgY29sb3IpID0+IHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7CisgICAgICAgICAgICAgICAgY29udGV4dC5z
dHJva2VTdHlsZSA9IGNvbG9yOworICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuYWRkU2VxKHVzZWRH
cm91cENvbG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAgICAgICAgIGNvbnRleHQubW92ZVRv
KHggKyBjb250ZXh0LmxpbmVXaWR0aCwgaXNUb3AgPyBjYW52YXNIZWlnaHQgOiB5KTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgY29udGV4dC5saW5lV2lkdGgsIGJhc2VMaW5l
WSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCwgYmFzZUxpbmVZKTsKICAgICAg
ICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgdG90YWxXaWR0aCwgYmFzZUxpbmVZKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNlZEdyb3VwQ29sb3I7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCArIHRvdGFsV2lkdGgsIGlzVG9wID8gY2FudmFz
SGVpZ2h0IDogeSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oeCArIHRvdGFsV2lk
dGgsIGJhc2VMaW5lWSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8obWlkZGxlUG9p
bnRYLCBiYXNlTGluZVkpOworICAgICAgICAgICAgICAgIGlmICghaXNUb3ApCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQubGluZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZICsgc2NhbGVU
YWdMaW5lSGVpZ2h0IC0gc2NhbGVUYWdMaW5lUGFkZGluZyk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyhtaWRkbGVQb2ludFgsIGJhc2VM
aW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCArIHNjYWxlVGFnTGluZVBhZGRpbmcpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb2xvckJhdGNoUmVuZGVy
LmxhenlDcmVhdGVDb2xvclNlcXModXNlZExpbmVDb2xvciwgKGNvbnRleHQpID0+IHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAgICAgfSwgKGNvbnRleHQs
IGNvbG9yKSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxOworICAg
ICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjb2xvcjsKICAgICAgICAgICAgICAg
ICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb2xvckJh
dGNoUmVuZGVyLmFkZFNlcSh1c2VkTGluZUNvbG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAg
ICAgICAgIGNvbnRleHQubW92ZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzVG9wKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyht
aWRkbGVQb2ludFgsIGJhc2VMaW5lWSArIHNjYWxlVGFnTGluZUhlaWdodCAtIHNjYWxlVGFnTGlu
ZVBhZGRpbmcpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5saW5lVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgLSBzY2FsZVRhZ0xpbmVIZWlnaHQg
KyBzY2FsZVRhZ0xpbmVQYWRkaW5nKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRHJhdyB0YWcKLSAgICAgICAgaWYgKCFpc1RvcCkKLSAgICAgICAgICAgIGNvbnRl
eHQubW92ZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZICsgc2NhbGVUYWdMaW5lSGVpZ2h0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8obWlkZGxlUG9pbnRYLCBi
YXNlTGluZVkgLSBzY2FsZVRhZ0xpbmVIZWlnaHQpOworICAgICAgICAvLyBEcmF3IFRhZwogICAg
ICAgICBjb250ZXh0LmZvbnQgPSBgJHtmb250U2l6ZX0gJHtmb250RmFtaWx5fWA7CiAgICAgICAg
IGNvbnRleHQuZmlsbFN0eWxlID0gZm9udENvbG9yOwogICAgICAgICBjb250ZXh0LnNhdmUoKTsK
QEAgLTU4OSw4OCArNjUwLDgyIEBAIFRpbWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9uZW50ID0gKHNj
YWxlcywgb3B0aW9uID0ge30pID0+IHsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQoZ2V0
TGFiZWwoc2NhbGVMYWJlbCksIG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZIC0gc2NhbGVUYWdMaW5l
SGVpZ2h0KTsKICAgICAgICAgfQogICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgICAg
ICBpZiAoZ3JvdXAgPiAxKSB7Ci0gICAgICAgICAgICAvLyBEcmF3IGdyb3VwIGxhYmVsCi0gICAg
ICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOwotICAgICAgICAgICAgY29udGV4dC5saW5lV2lk
dGggPSAxOwotICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHVzZWRHcm91cENvbG9y
OwotICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCArIHRvdGFsV2lkdGgsIGlzVG9wID8gY2Fu
dmFzSGVpZ2h0IDogeSk7Ci0gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgdG90YWxXaWR0
aCwgYmFzZUxpbmVZKTsKLSAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7Ci0gICAgICAgIH0K
ICAgICB9OwogICAgIGNvbnN0IHJlbmRlciA9IHR5cGVvZiBvcHRpb24ucmVuZGVyRmFjdG9yeSA9
PT0gImZ1bmN0aW9uIiA/IG9wdGlvbi5yZW5kZXJGYWN0b3J5KGRyYXdTY2FsZSkgOiAoc2NhbGVM
YWJlbCwgc2NhbGVHcm91cCwgY29udGV4dCwgeCwgeSkgPT4gZHJhd1NjYWxlKHNjYWxlTGFiZWws
IHNjYWxlR3JvdXAsIGNvbnRleHQsIHgsIHkpOwogCiAgICAgY29uc3QgcGFkZGluZyA9IDEwMCAq
IHNjYWxlV2lkdGggLyBnZXREZXZpY2VQaXhlbFJhdGlvKCk7Ci0gICAgY29uc3Qgb2Zmc2NyZWVu
Q2FjaGVkUmVuZGVyID0gb2Zmc2NyZWVuQ2FjaGVkUmVuZGVyRmFjdG9yeShwYWRkaW5nLCBjYW52
YXNIZWlnaHQpOwotICAgIGxldCBpbkNhY2hlU2NhbGVzID0gW107CisgICAgY29uc3QgeFNjcm9s
bFN0cmVhbVJlbmRlciA9IHhTY3JvbGxTdHJlYW1SZW5kZXJGYWN0b3J5KGNhbnZhc0hlaWdodCk7
CisgICAgbGV0IG9uU2NyZWVuU2NhbGVzID0gW107CiAKICAgICBjb25zdCBnZXRNb3VzZUV2ZW50
VGlyZ2dlclNjYWxlcyA9IChlLCBzY3JvbGxMZWZ0LCBlbGVtZW50KSA9PiB7CiAgICAgICAgIGNv
bnN0IHt4LCB5fSA9IGdldE1vdXNlUG9zSW5DYW52YXMoZSwgZWxlbWVudCk7Ci0gICAgICAgIHJl
dHVybiBpbkNhY2hlU2NhbGVzLmZpbHRlcihzY2FsZSA9PiB7Ci0gICAgICAgICAgICBjb25zdCBk
ZXRhY3RCb3hUb3BYID0gc2NhbGUuX3RhZ1RvcC54IC0gc2Nyb2xsTGVmdCAtIGZvbnRTaXplTnVt
YmVyICogc3FydDMgLyAyOwotICAgICAgICAgICAgaWYgKGRldGFjdEJveFRvcFggPCAwKSByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBkZXRhY3RCb3hUb3BZID0gc2NhbGUuX3RhZ1Rv
cC55OwotICAgICAgICAgICAgY29uc3QgZGV0YWN0Qm94V2lkdGggPSBmb250U2l6ZU51bWJlciAq
IHNxcnQzIC8gMiArIHNjYWxlLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoICogZm9udFNpemVOdW1i
ZXIgLyAyOwotICAgICAgICAgICAgY29uc3QgZGV0YWN0Qm94SGVpZ2h0ID0gZm9udFNpemVOdW1i
ZXIgLyAyICsgc2NhbGUubGFiZWwudG9TdHJpbmcoKS5sZW5ndGggKiBmb250U2l6ZU51bWJlciAv
IDIgKiBzcXJ0MzsKLSAgICAgICAgICAgIHJldHVybiBwb2ludFJlY3RDb2xsaXNpb25EZXRlY3Qo
e3gsIHl9LCB7Ci0gICAgICAgICAgICAgICAgICAgIHRvcExlZnRYOiBkZXRhY3RCb3hUb3BYLAot
ICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0WTogaXNUb3AgPyBkZXRhY3RCb3hUb3BZIC0gZGV0
YWN0Qm94SGVpZ2h0IDogZGV0YWN0Qm94VG9wWSwKLSAgICAgICAgICAgICAgICAgICAgd2lkdGg6
IGRldGFjdEJveFdpZHRoLAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRldGFjdEJveEhl
aWdodAotICAgICAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gb25TY3JlZW5TY2FsZXMu
ZmlsdGVyKHNjYWxlID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gc2NhbGUubGFiZWwu
dG9TdHJpbmcoKS5sZW5ndGggKiBmb250U2l6ZU51bWJlciAvIDI7CisgICAgICAgICAgICBjb25z
dCBoZWlnaHQgPSBzY2FsZS5sYWJlbC50b1N0cmluZygpLmxlbmd0aCAqIGZvbnRTaXplTnVtYmVy
IC8gMiAqIHNxcnQzOworICAgICAgICAgICAgY29uc3QgcG9pbnQxID0geworICAgICAgICAgICAg
ICAgIHg6IHNjYWxlLl90YWdUb3AueCAtIHNjcm9sbExlZnQgLSAoaXNUb3AgPyBmb250U2l6ZU51
bWJlciAvIDIgKiBzcXJ0MyA6IDApLAorICAgICAgICAgICAgICAgIHk6IHNjYWxlLl90YWdUb3Au
eSArIChmb250U2l6ZU51bWJlciAvIDIgKyBzY2FsZVRhZ0xpbmVIZWlnaHQpICogKGlzVG9wID8g
LTEgOiAxKSwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb25zdCBwb2ludDIgPSB7Cisg
ICAgICAgICAgICAgICAgeDogcG9pbnQxLnggKyBmb250U2l6ZU51bWJlciAvIDIgKiBzcXJ0MywK
KyAgICAgICAgICAgICAgICB5OiBzY2FsZS5fdGFnVG9wLnkgKyBzY2FsZVRhZ0xpbmVIZWlnaHQg
ICogKGlzVG9wID8gLTEgOiAxKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGNvbnN0IHBv
aW50MyA9IHsKKyAgICAgICAgICAgICAgICB4OiBwb2ludDIueCArIHdpZHRoLAorICAgICAgICAg
ICAgICAgIHk6IHBvaW50Mi55ICsgaGVpZ2h0ICogKGlzVG9wID8gLTEgOiAxKSwKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBjb25zdCBwb2ludDQgPSB7CisgICAgICAgICAgICAgICAgeDog
cG9pbnQxLnggKyB3aWR0aCwKKyAgICAgICAgICAgICAgICB5OiBwb2ludDEueSArIGhlaWdodCAq
IChpc1RvcCA/IC0xIDogMSksCisgICAgICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJuIHBv
aW50UG9seWdvbkNvbGxpc2lvbkRldGVjdCh7eCwgeX0sIFtwb2ludDEsIHBvaW50MiwgcG9pbnQz
LCBwb2ludDRdKTsKICAgICAgICAgfSk7CiAgICAgfTsKLSAgICBjb25zdCByZWRyYXdDYWNoZSA9
IChvZmZzY3JlZW5DYW52YXMsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUsIG5vdGlmeVRvUmVu
ZGVyKSA9PiB7CisgICAgY29uc3QgcmVkcmF3ID0gKHN0YXJ0WCwgcmVuZGVyV2lkdGgsIGVsZW1l
bnQsIHN0YXRlRGlmZiwgc3RhdGUpID0+IHsKICAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHR5
cGVvZiBzdGF0ZURpZmYuc2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgPyBzdGF0ZURpZmYuc2Nyb2xs
TGVmdCA6IHN0YXRlLnNjcm9sbExlZnQ7CiAgICAgICAgIGNvbnN0IHNjYWxlcyA9IHN0YXRlRGlm
Zi5zY2FsZXMgPyBzdGF0ZURpZmYuc2NhbGVzIDogc3RhdGUuc2NhbGVzOwogICAgICAgICBjb25z
dCBzY2FsZXNNYXBMaW5rTGlzdCA9IHN0YXRlRGlmZi5zY2FsZXNNYXBMaW5rTGlzdCA/IHN0YXRl
RGlmZi5zY2FsZXNNYXBMaW5rTGlzdCA6IHN0YXRlLnNjYWxlc01hcExpbmtMaXN0OwogICAgICAg
ICBjb25zdCB3aWR0aCA9IHR5cGVvZiBzdGF0ZURpZmYud2lkdGggPT09ICdudW1iZXInID8gc3Rh
dGVEaWZmLndpZHRoIDogc3RhdGUud2lkdGg7CiAgICAgICAgIGNvbnN0IHVzZWRMaW5lQ29sb3Ig
PSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tYm9yZGVyQ29sb3JJbmxpbmVFbGVt
ZW50Jyk7Ci0gICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSAyICogcGFkZGluZyArIHdpZHRoOwog
ICAgICAgICBjb25zdCBiYXNlTGluZVkgPSBpc1RvcCA/IGNhbnZhc0hlaWdodCAtIHNjYWxlQnJv
YWRMaW5lSGVpZ2h0IDogc2NhbGVCcm9hZExpbmVIZWlnaHQ7Ci0gICAgICAgIGlmIChvZmZzY3Jl
ZW5DYW52YXMubG9naWNXaWR0aCAhPT0gdG90YWxXaWR0aCkgewotICAgICAgICAgICAgc2V0dXBD
YW52YXNXaWR0aFdpdGhEcHIob2Zmc2NyZWVuQ2FudmFzLCB0b3RhbFdpZHRoKTsKLSAgICAgICAg
ICAgIHNldHVwQ2FudmFzQ29udGV4dFNjYWxlKG9mZnNjcmVlbkNhbnZhcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG9mZnNjcmVlbkNhbnZhcy5sb2dpY0hlaWdodCAhPT0gZWxlbWVudC5sb2dp
Y0hlaWdodCkgewotICAgICAgICAgICAgc2V0dXBDYW52YXNIZWlnaHRXaXRoRHByKG9mZnNjcmVl
bkNhbnZhcywgZWxlbWVudC5sb2dpY0hlaWdodCk7Ci0gICAgICAgICAgICBzZXR1cENhbnZhc0Nv
bnRleHRTY2FsZShvZmZzY3JlZW5DYW52YXMpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IGNv
bnRleHQgPSBvZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKLSAgICAgICAgY29uc3Qg
cmVhbFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0ID4gcGFkZGluZyA/IHNjcm9sbExlZnQgLSBwYWRk
aW5nIDogc2Nyb2xsTGVmdDsKLSAgICAgICAgY29uc3QgY3VycmVudFN0YXJ0U2NhbGVJbmRleCA9
IE1hdGguZmxvb3IocmVhbFNjcm9sbExlZnQgLyBzY2FsZVdpZHRoKTsKKyAgICAgICAgY29uc3Qg
Y29udGV4dCA9IGVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiLCB7IGFscGhhOiBmYWxzZSB9KTsKKyAg
ICAgICAgbGV0IGN1cnJlbnRTdGFydFNjYWxlSW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbExlZnQg
LyBzY2FsZVdpZHRoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRTdGFydFNjYWxlSW5kZXggPCAwKQor
ICAgICAgICAgICAgY3VycmVudFN0YXJ0U2NhbGVJbmRleCA9IDA7CiAgICAgICAgIGNvbnN0IGN1
cnJlbnRTdGFydFNjYWxlS2V5ID0gZ2V0U2NhbGVLZXkoc2NhbGVzW2N1cnJlbnRTdGFydFNjYWxl
SW5kZXhdKTsKLSAgICAgICAgbGV0IGN1cnJlbnRFbmRTY2FsZUluZGV4ID0gTWF0aC5jZWlsKChy
ZWFsU2Nyb2xsTGVmdCArIHRvdGFsV2lkdGgpIC8gc2NhbGVXaWR0aCk7Ci0gICAgICAgIGN1cnJl
bnRFbmRTY2FsZUluZGV4ID0gY3VycmVudEVuZFNjYWxlSW5kZXggPiBzY2FsZXMubGVuZ3RoID8g
c2NhbGVzLmxlbmd0aCAtIDEgOiBjdXJyZW50RW5kU2NhbGVJbmRleDsKKyAgICAgICAgbGV0IGN1
cnJlbnRFbmRTY2FsZUluZGV4ID0gTWF0aC5jZWlsKChzY3JvbGxMZWZ0ICsgcmVuZGVyV2lkdGgp
IC8gc2NhbGVXaWR0aCk7CisgICAgICAgIGN1cnJlbnRFbmRTY2FsZUluZGV4ID0gY3VycmVudEVu
ZFNjYWxlSW5kZXggPj0gc2NhbGVzLmxlbmd0aCA/IHNjYWxlcy5sZW5ndGggLSAxIDogY3VycmVu
dEVuZFNjYWxlSW5kZXg7CiAgICAgICAgIGNvbnN0IGN1cnJlbnRFbmRTY2FsZUtleSA9IGdldFNj
YWxlS2V5KHNjYWxlc1tjdXJyZW50RW5kU2NhbGVJbmRleF0pOwotICAgICAgICBsZXQgdmlld1Bv
cnRFbmRTY2FsZUluZGV4ID0gTWF0aC5jZWlsKChyZWFsU2Nyb2xsTGVmdCArIHdpZHRoKSAvIHNj
YWxlV2lkdGgpOwotICAgICAgICB2aWV3UG9ydEVuZFNjYWxlSW5kZXggPSB2aWV3UG9ydEVuZFNj
YWxlSW5kZXggPiBzY2FsZXMubGVuZ3RoID8gc2NhbGVzLmxlbmd0aCAtIDEgOiB2aWV3UG9ydEVu
ZFNjYWxlSW5kZXg7Ci0gICAgICAgIGNvbnN0IHZpZXdQb3J0RW5kU2NhbGVLZXkgPSBnZXRTY2Fs
ZUtleShzY2FsZXNbdmlld1BvcnRFbmRTY2FsZUluZGV4XSk7CiAgICAgICAgIGNvbnN0IGN1cnJl
bnRTdGFydE5vZGUgPSBzY2FsZXNNYXBMaW5rTGlzdC5tYXAuZ2V0KGN1cnJlbnRTdGFydFNjYWxl
S2V5KTsKICAgICAgICAgY29uc3QgY3VycmVudEVuZE5vZGUgPSBzY2FsZXNNYXBMaW5rTGlzdC5t
YXAuZ2V0KGN1cnJlbnRFbmRTY2FsZUtleSk7Ci0gICAgICAgIGNvbnN0IHZpZXdQb3J0RW5kTm9k
ZSA9IHNjYWxlc01hcExpbmtMaXN0Lm1hcC5nZXQodmlld1BvcnRFbmRTY2FsZUtleSk7CisgICAg
ICAgIGlmICghY3VycmVudEVuZE5vZGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY3Vy
cmVudEVuZFNjYWxlS2V5KTsKKyAgICAgICAgfQogICAgICAgICBsZXQgbm93ID0gY3VycmVudFN0
YXJ0Tm9kZTsKLSAgICAgICAgLy8gQ2xlYXIgdGhlIGNhY2hlCi0gICAgICAgIGNvbnRleHQuY2xl
YXJSZWN0KDAsIDAsIG9mZnNjcmVlbkNhbnZhcy53aWR0aCwgb2Zmc2NyZWVuQ2FudmFzLmhlaWdo
dCk7Ci0gICAgICAgIGNvbnRleHQubW92ZVRvKDAsIGJhc2VMaW5lWSk7Ci0gICAgICAgIGNvbnRl
eHQubGluZVdpZHRoID0gMTsKLSAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHVzZWRMaW5l
Q29sb3I7Ci0gICAgICAgIGNvbnRleHQubGluZVRvKG9mZnNjcmVlbkNhbnZhcy5sb2dpY1dpZHRo
LCBiYXNlTGluZVkpOwotICAgICAgICBjb250ZXh0LnN0cm9rZSgpOwotCi0gICAgICAgIGluQ2Fj
aGVTY2FsZXMgPSBbXTsKKyAgICAgICAgLy8gQ2xlYXIgcGVydmlvdXMgYmF0Y2ggcmVuZGVyCisg
ICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuY2xlYXIoKTsKKyAgICAgICAgY29sb3JCYXRjaFJlbmRl
ci5sYXp5Q3JlYXRlQ29sb3JTZXFzKHVzZWRMaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7CisgICAg
ICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICB9LCAoY29udGV4dCwgY29sb3Ip
ID0+IHsKKyAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTsKKyAgICAgICAgICAgIGNv
bnRleHQuc3Ryb2tlU3R5bGUgPSBjb2xvcjsKKyAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7
CisgICAgICAgIH0pOworICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmFkZFNlcSh1c2VkTGluZUNv
bG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oMCwgYmFzZUxp
bmVZKTsKKyAgICAgICAgICAgIGNvbnRleHQubGluZVRvKGVsZW1lbnQubG9naWNXaWR0aCwgYmFz
ZUxpbmVZKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb25TY3JlZW5TY2FsZXMgPSBbXTsKICAg
ICAgICAgd2hpbGUgKG5vdyAhPSBjdXJyZW50RW5kTm9kZS5uZXh0KSB7CiAgICAgICAgICAgICBj
b25zdCBsYWJlbCA9IG5vdy5sYWJlbDsKICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gbm93Lmdy
b3VwOwotICAgICAgICAgICAgcmVuZGVyKGxhYmVsLCBncm91cCwgY29udGV4dCwgbm93LnggLSBy
ZWFsU2Nyb2xsTGVmdCwgMCk7Ci0gICAgICAgICAgICBpZiAobm93ID09PSB2aWV3UG9ydEVuZE5v
ZGUpCi0gICAgICAgICAgICAgICAgbm90aWZ5VG9SZW5kZXIoKTsKKyAgICAgICAgICAgIHJlbmRl
cihsYWJlbCwgZ3JvdXAsIGNvbnRleHQsIG5vdy54IC0gc2Nyb2xsTGVmdCwgMCk7CiAgICAgICAg
ICAgICBub3cuX3RhZ1RvcCA9IHt4OiBub3cueCArIGdyb3VwICogc2NhbGVXaWR0aCAvIDIsIHk6
IGlzVG9wID8gY2FudmFzSGVpZ2h0IC0gc2NhbGVCcm9hZExpbmVIZWlnaHQgOiBzY2FsZUJyb2Fk
TGluZUhlaWdodH07Ci0gICAgICAgICAgICBpbkNhY2hlU2NhbGVzLnB1c2gobm93KTsKKyAgICAg
ICAgICAgIG9uU2NyZWVuU2NhbGVzLnB1c2gobm93KTsKICAgICAgICAgICAgIG5vdyA9IG5vdy5u
ZXh0OwogICAgICAgICB9CisgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuYmF0Y2hSZW5kZXIoY29u
dGV4dCk7CiAgICAgfTsKIAogICAgIC8vIEluaXRpYWxpemUKQEAgLTc0NywxOCArODAyLDEzIEBA
IFRpbWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9uZW50ID0gKHNjYWxlcywgb3B0aW9uID0ge30pID0+
IHsKICAgICAgICAgICAgICAgICAgICAgb25SZXNpemUuc3RvcEFjdGlvbihvblJlc2l6ZUFjdGlv
bik7CiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICBvblN0YXRlVXBkYXRlOiAo
ZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSkgPT4gewotICAgICAgICAgICAgICAgICAgICBsZXQg
Zm9yY2VSZWRyYXdDYWNoZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBsZXQgZm9yY2VS
ZWRyYXdBbGwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlRGlmZi5zY2Fs
ZXMgfHwgdHlwZW9mIHN0YXRlRGlmZi5zY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Yg
c3RhdGVEaWZmLndpZHRoID09PSAnbnVtYmVyJykgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YXRlRGlmZi5zY2FsZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VS
ZWRyYXdDYWNoZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoKCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbkNh
Y2hlZFJlbmRlcihyZWRyYXdDYWNoZSwgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgZm9yY2VS
ZWRyYXdDYWNoZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgeFNjcm9sbFN0cmVhbVJlbmRlcihyZWRyYXcsIGVsZW1lbnQsIHN0YXRlRGlmZiwg
c3RhdGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSk7CiAKLQogICAgICAgICAgICAgdXBkYXRlQ29udGFpbmVyV2lkdGgoc2NhbGVzLmxl
bmd0aCAqIHNjYWxlV2lkdGggKiBnZXREZXZpY2VQaXhlbFJhdGlvKCkpOwogICAgICAgICAgICAg
Y29uc3QgdXBkYXRlRGF0YSA9IChzY2FsZXMpID0+IHsKICAgICAgICAgICAgICAgICAvLyBJbiBj
YXNlIG9mIG1vZGlmaWNhdGlvbiB3aGlsZSByZW5kZXJpbmcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376182</attachid>
            <date>2019-08-13 11:07:09 -0700</date>
            <delta_ts>2019-08-13 11:46:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200456-20190813110708.patch</filename>
            <type>text/plain</type>
            <size>31447</size>
            <attacher name="Zhifei Fang">zhifei_fang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDAxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmY2ZThmMWMyMGQyZGRhZjNlZDVhNGVkYTJlNzA4ZDE1
MzNmNDViOS4uNTU4ZWZhYzA1ZDVjMWFkMDFiOGY4MWUyMGI0ZjhiMDA1NGVlMjU0MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDE5LTA4LTEyICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbcmVzdWx0cy53ZWJraXQub3JnIFRpbWVsaW5lXSBQZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCAtIFNraXAgcmVuZGVyIG9mZnNjcmVlbiBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDQ1NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZGlzYWJsZSB1c2UgdGhlIG5l
dyBiYXRjaCBkcmF3IG1ldGhvZCB0byByZW5kZXIgY2FudmFzIGRpcmVjdGx5IHdpdGhvdXQgYW55
IGNhY2hlcywgdGhpcyB3aWxsIHNhdmUgYSBsb3Qgb2YgbWVtb3J5LCBzbyB0aGF0IHdlIHdvbid0
IGdvIGludG8gdGhlICJsb3cgbWVtb3J5IG1vZGUiLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBjaGFuZ2UgdGhlIGF4aXMgbGFiZWwgY29sbGlzaW9uIGRldGFjdCBib3ggZnJvbSBhIHJlY3Qg
dG8gcG9seWdvbiwgc28gdGhhdCB3ZSBjYW4gZGVjdGFjdCBjbGljayBtb3JlIGFjY3VyYXRlLgor
CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9q
cy9VdGlscy5qczoKKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRp
Yy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzOgorICAgICAgICAo
cG9pbnRQb2x5Z29uQ29sbGlzaW9uRGV0ZWN0KTogRGV0YWN0CisgICAgICAgIChwb2ludFJpZ2h0
UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRlY3QpOgorICAgICAgICAoQ29sb3JCYXRjaFJlbmRl
cik6CisgICAgICAgIChDb2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5sYXp5Q3JlYXRlQ29sb3JT
ZXFzKToKKyAgICAgICAgKENvbG9yQmF0Y2hSZW5kZXIucHJvdG90eXBlLmFkZFNlcSk6CisgICAg
ICAgIChDb2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5iYXRjaFJlbmRlcik6CisgICAgICAgIChD
b2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5jbGVhcik6CisgICAgICAgICh4U2Nyb2xsU3RyZWFt
UmVuZGVyRmFjdG9yeSk6CisgICAgICAgIChUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQp
OgorICAgICAgICAob2Zmc2NyZWVuQ2FjaGVkUmVuZGVyRmFjdG9yeSk6IERlbGV0ZWQuCisKIDIw
MTktMDgtMDcgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAg
ICAgICAgW1dpbl1bTWluaUJyb3dzZXJdIEFkZCBrZXkgYWNjZWxlcmF0b3JzIGZvciByZWxvYWQg
YW5kIGNsb3NlIHdpbmRvdwpkaWZmIC0tZ2l0IGEvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9VdGlscy5qcyBiL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jl
c3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMvVXRpbHMuanMKaW5kZXggOTgzMmY1N2Vj
YzMwNGZlMWI4N2NkYjQ2ZjViYTI5M2Q0NzNjZjQ3My4uODc5NmIxMDhjYzMzYTg2ZWQxYzM2YWJk
M2JjMmJhMzMwMWJjZjk5MCAxMDA2NDQKLS0tIGEvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9VdGlscy5qcworKysgYi9Ub29scy9yZXN1bHRzZGJw
eS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2pzL1V0aWxzLmpzCkBAIC03MCw3ICs3
MCw3IEBAIGZ1bmN0aW9uIGlzRGFya01vZGUgKCkgewogZnVuY3Rpb24gY3JlYXRlSW5zZXJ0aW9u
T2JzZXJ2ZXJzKGVsZW1lbnQsIGNhbGxiYWNrPSgpPT57fSwgc3RhcnRUaHJlc2hvbGQ9MC4wLCBl
bmRUcmVzaG9sZD0xLjAsIHN0ZXA9MC4xLCBvcHRpb249e30pIHsKICAgICBjb25zdCB1c2VPcHRp
b24gPSB7fTsKICAgICB1c2VPcHRpb24ucm9vdCA9IG9wdGlvbi5yb290IGluc3RhbmNlb2YgSFRN
TEVsZW1lbnQgPyBvcHRpb24ucm9vdCA6IG51bGw7Ci0gICAgdXNlT3B0aW9uLnJvb3RNYXJnaW4g
PSBvcHRpb24ucm9vdE1hcmdpbiA/IG9wdGlvbi5yb290TWFyZ2luIDogIjAiOworICAgIHVzZU9w
dGlvbi5yb290TWFyZ2luID0gb3B0aW9uLnJvb3RNYXJnaW4gPyBvcHRpb24ucm9vdE1hcmdpbiA6
ICIwJSI7CiAgICAgY29uc3QgdGhyZXNob2xkQXJyYXkgPSBbXTsKICAgICBmb3IgKGxldCBpID0g
c3RhcnRUaHJlc2hvbGQ7IGkgPD0gZW5kVHJlc2hvbGQ7IGkrPSBzdGVwKSB7CiAgICAgICAgIHRo
cmVzaG9sZEFycmF5LnB1c2goaSk7CmRpZmYgLS1naXQgYS9Ub29scy9yZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25l
bnRzLmpzIGIvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFy
eS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50cy5qcwppbmRleCA1MDU5ZjBmYjlkZWU0
NGI2ZmI1ZTliNDY4ZGVlMzk0N2U3MGMzZmJiLi5iNDc5ZDNiN2I5MDc4NGE0YTU1OWY1N2MwOTY0
YjE0NTY5N2MwOTg0IDEwMDY0NAotLS0gYS9Ub29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3N0YXRpYy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzCisr
KyBiL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMv
Y29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMKQEAgLTM4LDYgKzM4LDQ2IEBAIGZ1bmN0
aW9uIHBvaW50UmVjdENvbGxpc2lvbkRldGVjdChwb2ludCwgcmVjdCkgewogICAgIHJldHVybiBk
aWZmWCA8PSByZWN0LndpZHRoICYmIGRpZmZZIDw9IHJlY3QuaGVpZ2h0ICYmIGRpZmZYID49IDAg
JiYgZGlmZlkgPj0gMDsKIH0KIAorZnVuY3Rpb24gcG9pbnRQb2x5Z29uQ29sbGlzaW9uRGV0ZWN0
KHBvaW50LCBwb2x5Z29uKSB7CisgICAgbGV0IHJlcyA9IGZhbHNlOworICAgIGZvciAobGV0IGkg
PSAwLCBqID0gMTsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpKyssIGogPSBpICsgMSkgeworICAgICAg
ICBpZiAoaiA9PT0gcG9seWdvbi5sZW5ndGggKQorICAgICAgICAgICAgaiA9IDA7CisgICAgICAg
IGlmIChwb2ludFJpZ2h0UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRlY3QocG9pbnQsIHBvbHln
b25baV0sIHBvbHlnb25bal0pKQorICAgICAgICAgICAgcmVzID0gIXJlczsKKyAgICB9CisgICAg
cmV0dXJuIHJlczsKK30KKworLyoKKyogRGV0YWN0IGlmIHBvaW50IHJpZ2h0IHJheSBoYXZlIGEg
Y29sbGlzaW9uIHdpdGggYSBsaW5lIHNlZ21lbnQKKyogICAgICAgICAgICAgICAgKgorKiAgICAg
ICAgICAgICAgIC8KKyogICAgICAgICotLS0+IC8KKyogICAgICAgICAgICAgLworKiAgICAgICAg
ICAgICoKKyovCitmdW5jdGlvbiBwb2ludFJpZ2h0UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRl
Y3QocG9pbnQsIGxpbmVTdGFydCwgbGluZUVuZCkgeworICAgIC8qCisgICAgKiAgICAgICAgICAg
KiAgICAgICAgICAgICAgICAgICAgKgorICAgICogICAgICAgICAgLyAgICAgICAgICAgICAgICAg
ICAgLworICAgICogICAgICAgICAvLSotLS0tPiAgICAgICAgICotLS0vLS0+CisgICAgKiAgICAg
ICAgKiAgICAgICAgICAgICAgICAgICAgKgorICAgICovCisgICAgY29uc3QgbWF4WCA9IE1hdGgu
bWF4KGxpbmVTdGFydC54LCBsaW5lRW5kLngpOworICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihs
aW5lU3RhcnQueCwgbGluZUVuZC54KTsKKyAgICBjb25zdCBtYXhZID0gTWF0aC5tYXgobGluZVN0
YXJ0LnksIGxpbmVFbmQueSk7CisgICAgY29uc3QgbWluWSA9IE1hdGgubWluKGxpbmVTdGFydC55
LCBsaW5lRW5kLnkpOworICAgIGlmICgocG9pbnQueCA8PSBtYXhYICYmIHBvaW50LnggPj0gbWlu
WCB8fCBwb2ludC54IDwgbWluWCkgJiYKKyAgICAgICAgcG9pbnQueSA8IG1heFkgJiYgcG9pbnQu
eSA+IG1pblkgJiYKKyAgICAgICAgbGluZVN0YXJ0LnkgIT09IGxpbmVFbmQueSkgeworICAgICAg
ICBjb25zdCB0YW5Ub3BBbmdsZSA9IChsaW5lRW5kLnggLSBsaW5lU3RhcnQueCkgLyAobGluZUVu
ZC55IC0gbGluZVN0YXJ0LnkpOworICAgICAgICByZXR1cm4gcG9pbnQueCA8IGxpbmVFbmQueCAt
IHRhblRvcEFuZ2xlICogKGxpbmVFbmQueSAtIHBvaW50LnkpOworICAgIH0KKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiBmYWxzZTsKK30KKwogZnVuY3Rpb24gZ2V0TW91c2VQb3NJbkNhbnZhcyhl
dmVudCwgY2FudmFzKSB7CiAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKICAgICByZXR1cm4gewpAQCAtMTE4LDU1ICsxNTgsNTQgQEAgZnVuY3Rpb24gWFNj
cm9sbGFibGVDYW52YXNQcm92aWRlcihleHBvcnRlciwgLi4uY2hpbGRyZW5GdW5jdGlvbnMpIHsK
ICAgICA8L2Rpdj5gOwogfQogCi1mdW5jdGlvbiBvZmZzY3JlZW5DYWNoZWRSZW5kZXJGYWN0b3J5
KHBhZGRpbmcsIGhlaWdodCkgewotICAgIGxldCBjYWNoZWRTY3JvbGxMZWZ0ID0gMDsKLSAgICBs
ZXQgb2Zmc2NyZWVuQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Ci0g
ICAgLy8gRG91YmxlIGJ1ZmZlcmluZwotICAgIGNvbnN0IG9mZnNjcmVlbkNhbnZhc0J1ZmZlciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwotCi0gICAgLy8gVGhpcyBmdW5jdGlv
biB3aWxsIGNhbGwgcmVkcmF3Q2FjaGUgdG8gcmVuZGVyIGEgb2Zmc2NyZWVuIGNhY2hlCi0gICAg
Ly8gYW5kIGNvcHkgdGhlIHZpZXdwb3J0IGFyZWEgZnJvbSBvZiBpdAotICAgIC8vIEl0IHdpbGwg
dHJpZ2dlciByZWRyYXdDYWNoZSB3aGVuIGNhY2hlIGRvbid0IGhhdmUgZW5vdWdoIHNwYWNlCi0g
ICAgcmV0dXJuIChyZWRyYXdDYWNoZSwgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgZm9yY2VS
ZWRyYXdDYWNoZSA9IGZhbHNlKSA9PiB7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjYW52YXMg
ZGlzcGxheSBvbiB0aGUgc2NyZWVuIG9yIG5vdCwKLSAgICAgICAgLy8gVGhpcyB3aWxsIHNhdmUg
cmVuZGVyIHRpbWUKK2NsYXNzIENvbG9yQmF0Y2hSZW5kZXIgeworICAgIGNvbnN0cnVjdG9yKCkg
eworICAgICAgICB0aGlzLmNvbG9yU2Vxc01hcCA9IHt9OworICAgIH0KKworICAgIGxhenlDcmVh
dGVDb2xvclNlcXMoY29sb3IsIHN0YXJ0QWN0aW9uLCBmaW5hbEFjdGlvbikgeworICAgICAgICBp
ZiAoZmFsc2UgPT09IGNvbG9yIGluIHRoaXMuY29sb3JTZXFzTWFwKQorICAgICAgICAgICAgdGhp
cy5jb2xvclNlcXNNYXBbY29sb3JdID0gW3N0YXJ0QWN0aW9uLCBmaW5hbEFjdGlvbl07CisgICAg
fQorCisgICAgYWRkU2VxKGNvbG9yLCBzZXFBY3Rpb24pIHsKKyAgICAgICAgdGhpcy5jb2xvclNl
cXNNYXBbY29sb3JdLnB1c2goc2VxQWN0aW9uKTsKKyAgICB9CisKKyAgICBiYXRjaFJlbmRlcihj
b250ZXh0KSB7CisgICAgICAgIGZvciAobGV0IGNvbG9yIG9mIE9iamVjdC5rZXlzKHRoaXMuY29s
b3JTZXFzTWFwKSkgeworICAgICAgICAgICAgY29uc3Qgc2VxcyA9IHRoaXMuY29sb3JTZXFzTWFw
W2NvbG9yXTsKKyAgICAgICAgICAgIHNlcXNbMF0oY29udGV4dCwgY29sb3IpOworICAgICAgICAg
ICAgZm9yKGxldCBpID0gMjsgaSA8IHNlcXMubGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAg
c2Vxc1tpXShjb250ZXh0LCBjb2xvcik7CisgICAgICAgICAgICBzZXFzWzFdKGNvbnRleHQsIGNv
bG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbGVhcigpIHsKKyAgICAgICAgdGhpcy5jb2xv
clNlcXNNYXAgPSBuZXcgTWFwKCk7CisgICAgfQorfQorCitmdW5jdGlvbiB4U2Nyb2xsU3RyZWFt
UmVuZGVyRmFjdG9yeShoZWlnaHQpIHsKKyAgICByZXR1cm4gKHJlZHJhdywgZWxlbWVudCwgc3Rh
dGVEaWZmLCBzdGF0ZSkgPT4gewogICAgICAgICBjb25zdCB3aWR0aCA9IHR5cGVvZiBzdGF0ZURp
ZmYud2lkdGggPT09ICdudW1iZXInID8gc3RhdGVEaWZmLndpZHRoIDogc3RhdGUud2lkdGg7CiAg
ICAgICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAgICAgICAgLy8gTm90aGluZyB0byByZW5kZXIK
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjb25zdCB0b3RhbFdpZHRoID0gd2lkdGgg
KyAyICogcGFkZGluZzsKLSAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHR5cGVvZiBzdGF0ZURp
ZmYuc2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgPyBzdGF0ZURpZmYuc2Nyb2xsTGVmdCA6IHN0YXRl
LnNjcm9sbExlZnQ7Ci0gICAgICAgIGNvbnN0IGNvbnRleHQgPSBlbGVtZW50LmdldENvbnRleHQo
JzJkJyk7Ci0gICAgICAgIGxldCBjYWNoZVBvc0xlZnQgPSBzY3JvbGxMZWZ0IC0gY2FjaGVkU2Ny
b2xsTGVmdDsKLSAgICAgICAgbGV0IG5lZWRUb1JlZHJhd0NhY2hlID0gZm9yY2VSZWRyYXdDYWNo
ZTsKLQotICAgICAgICBpZiAoZWxlbWVudC5sb2dpY1dpZHRoICE9IHdpZHRoKSB7Ci0gICAgICAg
ICAgICAvLyBTZXR1cCB0aGUgZHByIGluIGNhc2Ugb2YgYmx1cgotICAgICAgICAgICAgc2V0dXBD
YW52YXNXaWR0aFdpdGhEcHIoZWxlbWVudCwgd2lkdGgpOwotICAgICAgICAgICAgbmVlZFRvUmVk
cmF3Q2FjaGUgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGNhY2hlUG9zTGVmdCA8IDAgfHwg
Y2FjaGVQb3NMZWZ0ICsgd2lkdGggPiB0b3RhbFdpZHRoKSB7Ci0gICAgICAgICAgICBpZiAoc2Ny
b2xsTGVmdCA8IDAgKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG5lZWRU
b1JlZHJhd0NhY2hlID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZWVkVG9SZWRy
YXdDYWNoZSkgewotICAgICAgICAgICAgLy8gV2UgZHJhdyBldmVyeXRoaW5nIG9uIGNhY2hlCi0g
ICAgICAgICAgICAgcmVkcmF3Q2FjaGUob2Zmc2NyZWVuQ2FudmFzLCBlbGVtZW50LCBzdGF0ZURp
ZmYsIHN0YXRlLCAoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY2FjaGVkU2Nyb2xsTGVmdCA9IHNj
cm9sbExlZnQgPCBwYWRkaW5nID8gc2Nyb2xsTGVmdCA6IHNjcm9sbExlZnQgLSBwYWRkaW5nOwot
ICAgICAgICAgICAgICAgIGNhY2hlUG9zTGVmdCA9IHNjcm9sbExlZnQgLSBjYWNoZWRTY3JvbGxM
ZWZ0OwotICAgICAgICAgICAgICAgIGlmIChjYWNoZVBvc0xlZnQgPCAwKQotICAgICAgICAgICAg
ICAgICAgICBjYWNoZVBvc0xlZnQgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQuY2xlYXJS
ZWN0KDAsIDAsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0KTsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LmRyYXdJbWFnZShvZmZzY3JlZW5DYW52YXMsIGNhY2hlUG9zTGVmdCAqIGdldERl
dmljZVBpeGVsUmF0aW8oKSwgMCwgICAgZWxlbWVudC53aWR0aCwgZWxlbWVudC5oZWlnaHQsIDAs
IDAsIHdpZHRoICogZ2V0RGV2aWNlUGl4ZWxSYXRpbygpLCBlbGVtZW50LmhlaWdodCk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjYWNoZVBvc0xl
ZnQgPCAwKQotICAgICAgICAgICAgICAgIGNhY2hlUG9zTGVmdCA9IDA7Ci0gICAgICAgICAgICBj
b250ZXh0LmNsZWFyUmVjdCgwLCAwLCBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCk7Ci0g
ICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShvZmZzY3JlZW5DYW52YXMsIGNhY2hlUG9zTGVm
dCAqIGdldERldmljZVBpeGVsUmF0aW8oKSwgMCwgICAgZWxlbWVudC53aWR0aCwgZWxlbWVudC5o
ZWlnaHQsIDAsIDAsIHdpZHRoICogZ2V0RGV2aWNlUGl4ZWxSYXRpbygpLCBlbGVtZW50LmhlaWdo
dCk7Ci0gICAgICAgIH0KKyAgICAgICAgbGV0IHN0YXJ0WCA9IDA7CisgICAgICAgIGxldCByZW5k
ZXJXaWR0aCA9IHdpZHRoOworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewor
ICAgICAgICAgICAgaWYgKGVsZW1lbnQubG9naWNXaWR0aCAhPT0gd2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBzZXR1cENhbnZhc1dpZHRoV2l0aERwcihlbGVtZW50LCB3aWR0aCk7CisgICAgICAg
ICAgICAgICAgc2V0dXBDYW52YXNDb250ZXh0U2NhbGUoZWxlbWVudCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5sb2dpY0hlaWdodCAhPT0gaGVpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgc2V0dXBDYW52YXNIZWlnaHRXaXRoRHByKGVsZW1lbnQsIGhlaWdodCk7Cisg
ICAgICAgICAgICAgICAgc2V0dXBDYW52YXNDb250ZXh0U2NhbGUoZWxlbWVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbGVtZW50LmdldENvbnRleHQoIjJkIiwge2FscGhhOiBmYWxz
ZX0pLmNsZWFyUmVjdChzdGFydFgsIDAsIHJlbmRlcldpZHRoLCBlbGVtZW50LmxvZ2ljSGVpZ2h0
KTsKKyAgICAgICAgICAgIHJlZHJhdyhzdGFydFgsIHJlbmRlcldpZHRoLCBlbGVtZW50LCBzdGF0
ZURpZmYsIHN0YXRlKTsKKyAgICAgICAgfSk7CiAgICAgfQogfQogCkBAIC0xOTQsMzIgKzIzMyw0
NyBAQCBUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQgPSAoZG90cywgc2NhbGVzLCBvcHRp
b24gPSB7fSkgPT4gewogICAgIGNvbnN0IG9uRG90SG92ZXIgPSB0eXBlb2Ygb3B0aW9uLm9uRG90
SG92ZXIgPT09ICJmdW5jdGlvbiIgPyBvcHRpb24ub25Eb3RIb3ZlciA6IG51bGw7CiAgICAgY29u
c3QgdGFnSGVpZ2h0ID0gZGVmYXVsdEZvbnRTaXplOwogICAgIGNvbnN0IGhlaWdodCA9IG9wdGlv
bi5oZWlnaHQgPyBvcHRpb24uaGVpZ2h0IDogMiAqIHJhZGl1cyArIHRhZ0hlaWdodDsKLQorICAg
IGNvbnN0IGNvbG9yQmF0Y2hSZW5kZXIgPSBuZXcgQ29sb3JCYXRjaFJlbmRlcigpOwogCiAgICAg
Ly8gRHJhdyBkb3QgYXBpIGNhbiBiZSB1c2VkIGluIHVzZXIgZGVmaW5lZCByZW5kZXIgZnVuY3Rp
b24KICAgICBjb25zdCBkcmF3RG90ID0gKGNvbnRleHQsIHgsIHksIGlzRW1wdHksIHRhZyA9IG51
bGwsIHVzZVJhZGl1cywgY29sb3IsIGVtcHR5bGluZUNvbG9yKSA9PiB7CiAgICAgICAgIHVzZVJh
ZGl1cyA9IHVzZVJhZGl1cyA/IHVzZVJhZGl1cyA6IHJhZGl1czsKICAgICAgICAgY29sb3IgPSBj
b2xvciA/IGNvbG9yIDogZGVmYXVsdERvdENvbG9yOwogICAgICAgICBlbXB0eWxpbmVDb2xvciA9
IGVtcHR5bGluZUNvbG9yID8gZW1wdHlsaW5lQ29sb3IgOiBkZWZhdWx0RW1wdHlMaW5lQ29sb3I7
Ci0gICAgICAgICAgICBpZiAoIWlzRW1wdHkpIHsKLSAgICAgICAgICAgICAgICAvL0RyYXcgdGhl
IGRvdAorICAgICAgICBpZiAoIWlzRW1wdHkpIHsKKyAgICAgICAgICAgIC8vIERyYXcgdGhlIGRv
dAorICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5sYXp5Q3JlYXRlQ29sb3JTZXFzKGNvbG9y
LCAoY29udGV4dCkgPT4gewogICAgICAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7Ci0g
ICAgICAgICAgICAgICAgY29udGV4dC5hcmMoeCArIGRvdE1hcmdpbiArIHJhZGl1cywgeSwgcmFk
aXVzLCAwLCAyICogTWF0aC5QSSk7CisgICAgICAgICAgICB9LCAoY29udGV4dCwgY29sb3IpID0+
IHsKICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNvbG9yOwogICAgICAgICAg
ICAgICAgIGNvbnRleHQuZmlsbCgpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFnID09
PSAibnVtYmVyIiB8fCB0eXBlb2YgdGFnID09PSAic3RyaW5nIikgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmZvbnQgPSBgJHtmb250RmFtaWx5fSAke2RlZmF1bHRGb250U2l6ZX1weGA7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ1NpemUgPSBjb250ZXh0Lm1lYXN1cmVUZXh0
KHRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQodGFnLCB4ICsgZG90
TWFyZ2luICsgcmFkaXVzIC0gdGFnU2l6ZS53aWR0aCAvIDIsIHJhZGl1cyAqIDIgKyB0YWdTaXpl
LmVtSGVpZ2h0QXNjZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmFkZFNlcShj
b2xvciwgKGNvbnRleHQsIGNvbG9yKSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5hcmMo
eCArIGRvdE1hcmdpbiArIHJhZGl1cywgeSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRHJhdyB0aGUg
ZW1wdHkKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIubGF6eUNyZWF0ZUNvbG9yU2Vxcyhl
bXB0eWxpbmVDb2xvciwgKGNvbnRleHQpID0+IHsKICAgICAgICAgICAgICAgICBjb250ZXh0LmJl
Z2luUGF0aCgpOworICAgICAgICAgICAgfSwgKGNvbnRleHQsIGNvbG9yKSA9PiB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yOworICAgICAgICAgICAgICAgIGNv
bnRleHQuc3Ryb2tlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hS
ZW5kZXIuYWRkU2VxKGVtcHR5bGluZUNvbG9yLCAoY29udGV4dCkgPT4gewogICAgICAgICAgICAg
ICAgIGNvbnRleHQubW92ZVRvKHggKyBkb3RNYXJnaW4sIHkpOwogICAgICAgICAgICAgICAgIGNv
bnRleHQubGluZVRvKHggKyBkb3RNYXJnaW4gKyAyICogcmFkaXVzLCB5KTsKICAgICAgICAgICAg
ICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5zdHJv
a2VTdHlsZSA9IGRlZmF1bHRFbXB0eUxpbmVDb2xvcjsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnN0cm9rZSgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBEcmF3IHRoZSB0YWcKKyAgICAgICAgaWYgKHR5cGVvZiB0YWcgPT09ICJudW1i
ZXIiIHx8IHR5cGVvZiB0YWcgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBjb250ZXh0LmZv
bnQgPSBgJHtmb250RmFtaWx5fSAke2RlZmF1bHRGb250U2l6ZX1weGA7CisgICAgICAgICAgICBj
b250ZXh0LmZpbGxTdHlsZSA9IGNvbG9yOworICAgICAgICAgICAgY29uc3QgdGFnU2l6ZSA9IGNv
bnRleHQubWVhc3VyZVRleHQodGFnKTsKKyAgICAgICAgICAgIGNvbnRleHQuZmlsbFRleHQodGFn
LCB4ICsgZG90TWFyZ2luICsgcmFkaXVzIC0gdGFnU2l6ZS53aWR0aCAvIDIsIHJhZGl1cyAqIDIg
KyB0YWdTaXplLmVtSGVpZ2h0QXNjZW50KTsKKyAgICAgICAgfQogICAgIH07CiAgICAgY29uc3Qg
cmVuZGVyID0gdHlwZW9mIG9wdGlvbi5yZW5kZXJGYWN0b3J5ID09PSAiZnVuY3Rpb24iID8gb3B0
aW9uLnJlbmRlckZhY3RvcnkoZHJhd0RvdCkgOiAoZG90LCBjb250ZXh0LCB4LCB5KSA9PiBkcmF3
RG90KGNvbnRleHQsIHgsIHksICFkb3QpOwogICAgIGNvbnN0IHNvcnREYXRhID0gb3B0aW9uLnNv
cnREYXRhID09PSB0cnVlID8gb3B0aW9uLnNvcnREYXRhIDogZmFsc2U7CkBAIC0yNDUsNDkgKzI5
OSwzNyBAQCBUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQgPSAoZG90cywgc2NhbGVzLCBv
cHRpb24gPSB7fSkgPT4gewogCiAgICAgY29uc3QgZG90V2lkdGggPSAyICogKHJhZGl1cyArIGRv
dE1hcmdpbik7CiAgICAgY29uc3QgcGFkZGluZyA9IDEwMCAqIGRvdFdpZHRoIC8gZ2V0RGV2aWNl
UGl4ZWxSYXRpbygpOwotICAgIGNvbnN0IG9mZnNjcmVlbkNhY2hlZFJlbmRlciA9IG9mZnNjcmVl
bkNhY2hlZFJlbmRlckZhY3RvcnkocGFkZGluZywgaGVpZ2h0KTsKKyAgICBjb25zdCB4U2Nyb2xs
U3RyZWFtUmVuZGVyID0geFNjcm9sbFN0cmVhbVJlbmRlckZhY3RvcnkoaGVpZ2h0KTsKIAotICAg
IC8vIEdlbmVyYXRlIHRoZSBkb3QgY2FjaGUKLSAgICBjb25zdCByZWRyYXdDYWNoZSA9IChvZmZz
Y3JlZW5DYW52YXMsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUsIG5vdGlmeVRvUmVuZGVyKSA9
PiB7CisgICAgY29uc3QgcmVkcmF3ID0gKHN0YXJ0WCwgcmVuZGVyV2lkdGgsIGVsZW1lbnQsIHN0
YXRlRGlmZiwgc3RhdGUpID0+IHsKICAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHR5cGVvZiBz
dGF0ZURpZmYuc2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgPyBzdGF0ZURpZmYuc2Nyb2xsTGVmdCA6
IHN0YXRlLnNjcm9sbExlZnQ7Ci0gICAgICAgIGNvbnN0IHdpZHRoID0gdHlwZW9mIHN0YXRlRGlm
Zi53aWR0aCA9PT0gJ251bWJlcicgPyBzdGF0ZURpZmYud2lkdGggOiBzdGF0ZS53aWR0aDsKLSAg
ICAgICAgY29uc3QgdG90YWxXaWR0aCA9IHdpZHRoICsgMiAqIHBhZGRpbmc7CiAgICAgICAgIGNv
bnN0IHNjYWxlcyA9IHN0YXRlRGlmZi5zY2FsZXMgPyBzdGF0ZURpZmYuc2NhbGVzIDogc3RhdGUu
c2NhbGVzOwogICAgICAgICBjb25zdCBkb3RzID0gc3RhdGVEaWZmLmRvdHMgPyBzdGF0ZURpZmYu
ZG90cyA6IHN0YXRlLmRvdHM7CiAgICAgICAgIC8vIFRoaXMgY29sb3IgbWF5YmUgY2hhbmdlIHdo
ZW4gc3dpdGNoIGRhcmsvbGlnaHQgbW9kZQogICAgICAgICBjb25zdCBkZWZhdWx0TGluZUNvbG9y
ID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJv
cmRlckNvbG9ySW5saW5lRWxlbWVudCcpOwotICAgICAgICBpZiAob2Zmc2NyZWVuQ2FudmFzLmxv
Z2ljV2lkdGggIT09IHRvdGFsV2lkdGgpIHsKLSAgICAgICAgICAgIHNldHVwQ2FudmFzV2lkdGhX
aXRoRHByKG9mZnNjcmVlbkNhbnZhcywgdG90YWxXaWR0aCk7Ci0gICAgICAgICAgICBzZXR1cENh
bnZhc0NvbnRleHRTY2FsZShvZmZzY3JlZW5DYW52YXMpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChvZmZzY3JlZW5DYW52YXMubG9naWNIZWlnaHQgIT09IGVsZW1lbnQubG9naWNIZWlnaHQpIHsK
LSAgICAgICAgICAgIHNldHVwQ2FudmFzSGVpZ2h0V2l0aERwcihvZmZzY3JlZW5DYW52YXMsIGVs
ZW1lbnQubG9naWNIZWlnaHQpOwotICAgICAgICAgICAgc2V0dXBDYW52YXNDb250ZXh0U2NhbGUo
b2Zmc2NyZWVuQ2FudmFzKTsKLSAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IGNvbnRleHQgPSBv
ZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKLSAgICAgICAgLy8gQ2xlYXIgdGhlIGNh
Y2hlCi0gICAgICAgIGNvbnRleHQuY2xlYXJSZWN0KDAsIDAsIG9mZnNjcmVlbkNhbnZhcy53aWR0
aCwgb2Zmc2NyZWVuQ2FudmFzLmhlaWdodCk7CisgICAgICAgIGNvbnN0IGNvbnRleHQgPSBlbGVt
ZW50LmdldENvbnRleHQoIjJkIiwgeyBhbHBoYTogZmFsc2UgfSk7CisgICAgICAgIC8vIENsZWFy
IHBlcnZpb3VzIGJhdGNoUmVuZGVyCisgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuY2xlYXIoKTsK
ICAgICAgICAgLy8gRHJhdyB0aGUgdGltZSBsaW5lCi0gICAgICAgIGNvbnRleHQuYmVnaW5QYXRo
KCk7Ci0gICAgICAgIGNvbnRleHQubW92ZVRvKDAsIHJhZGl1cyk7Ci0gICAgICAgIGNvbnRleHQu
bGluZVdpZHRoID0gMTsKLSAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGRlZmF1bHRMaW5l
Q29sb3I7Ci0gICAgICAgIGNvbnRleHQubGluZVRvKHRvdGFsV2lkdGgsIHJhZGl1cyk7Ci0gICAg
ICAgIGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIubGF6eUNyZWF0
ZUNvbG9yU2VxcyhkZWZhdWx0TGluZUNvbG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAgICAg
Y29udGV4dC5iZWdpblBhdGgoKTsKKyAgICAgICAgfSwgKGNvbnRleHQsIGNvbG9yKSA9PiB7Cisg
ICAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7CisgICAgICAgICAgICBjb250ZXh0LnN0
cm9rZVN0eWxlID0gY29sb3I7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAg
ICB9KTsKKyAgICAgICAgY29sb3JCYXRjaFJlbmRlci5hZGRTZXEoZGVmYXVsdExpbmVDb2xvciwg
KGNvbnRleHQpID0+IHsKKyAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKHN0YXJ0WCwgcmFkaXVz
KTsKKyAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHN0YXJ0WCArIHJlbmRlcldpZHRoLCByYWRp
dXMpOworICAgICAgICB9KTsKIAogICAgICAgICAvLyBEcmF3IHRoZSBkb3RzCiAgICAgICAgIC8v
IEZpcnN0LCBDYWxjdWxhdGUgdGhlIHJlbmRlciByYW5nZToKLSAgICAgICAgbGV0IHN0YXJ0U2Nh
bGVzSW5kZXggPSBNYXRoLmZsb29yKChzY3JvbGxMZWZ0IC0gcGFkZGluZykgLyBkb3RXaWR0aCk7
CisgICAgICAgIGxldCBzdGFydFNjYWxlc0luZGV4ID0gTWF0aC5mbG9vcigoc2Nyb2xsTGVmdCAr
IHN0YXJ0WCkgLyBkb3RXaWR0aCk7CiAgICAgICAgIGlmIChzdGFydFNjYWxlc0luZGV4IDwgMCkK
ICAgICAgICAgICAgIHN0YXJ0U2NhbGVzSW5kZXggPSAwOwotICAgICAgICBsZXQgdmlld3BvcnRT
dGFydFNjYWxlSW5kZXggPSBNYXRoLmZsb29yKChzY3JvbGxMZWZ0KSAvIGRvdFdpZHRoKTsKLSAg
ICAgICAgaWYgKHZpZXdwb3J0U3RhcnRTY2FsZUluZGV4IDwgMCkKLSAgICAgICAgICAgIHZpZXdw
b3J0U3RhcnRTY2FsZUluZGV4ID0gMDsKLSAgICAgICAgbGV0IHZpZXdwb3J0RW5kU2NhbGVJbmRl
eCA9IHZpZXdwb3J0U3RhcnRTY2FsZUluZGV4ICsgTWF0aC5mbG9vcigod2lkdGgpIC8gZG90V2lk
dGgpOwotICAgICAgICBpZiAodmlld3BvcnRFbmRTY2FsZUluZGV4ID49IHNjYWxlcy5sZW5ndGgp
Ci0gICAgICAgICAgICB2aWV3cG9ydEVuZFNjYWxlSW5kZXggPSBzY2FsZXMubGVuZ3RoIC0gMTsK
LSAgICAgICAgbGV0IGVuZFNjYWxlc0luZGV4ID0gc3RhcnRTY2FsZXNJbmRleCArIE1hdGguY2Vp
bCgodG90YWxXaWR0aCkgLyBkb3RXaWR0aCk7CisgICAgICAgIGxldCBlbmRTY2FsZXNJbmRleCA9
IHN0YXJ0U2NhbGVzSW5kZXggKyBNYXRoLmNlaWwoKHJlbmRlcldpZHRoKSAvIGRvdFdpZHRoKTsK
ICAgICAgICAgaWYgKGVuZFNjYWxlc0luZGV4ID49IHNjYWxlcy5sZW5ndGgpCiAgICAgICAgICAg
ICBlbmRTY2FsZXNJbmRleCA9IHNjYWxlcy5sZW5ndGggLSAxOwogICAgICAgICBsZXQgY3VycmVu
dERvdEluZGV4ID0gc3RhcnRTY2FsZXNJbmRleCAtIChzY2FsZXMubGVuZ3RoIC0gZG90cy5sZW5n
dGgpOwpAQCAtMzEwLDIzICszNTIsMTggQEAgVGltZWxpbmUuQ2FudmFzU2VyaWVzQ29tcG9uZW50
ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9uID0ge30pID0+IHsKIAogICAgICAgICAvLyBVc2UgdGhp
cyB0byBkZWNyZWFzZSBjb2xpc2lvbiBzZWFyY2ggc2NvcGUKICAgICAgICAgaW5DYWNoZURvdHMg
PSBbXTsKLQotICAgICAgICAvLyBEcmF3IHRoZSBkb3RzIG9uIGNhY2hlCiAgICAgICAgIGZvciAo
bGV0IGkgPSBzdGFydFNjYWxlc0luZGV4OyBpIDw9IGVuZFNjYWxlc0luZGV4OyBpKyspIHsKLSAg
ICAgICAgICAgIGxldCB4ID0gaSAqIGRvdFdpZHRoIC0gKHNjcm9sbExlZnQgPCBwYWRkaW5nID8g
c2Nyb2xsTGVmdCA6IHNjcm9sbExlZnQgLSBwYWRkaW5nKTsKKyAgICAgICAgICAgIGxldCB4ID0g
aSAqIGRvdFdpZHRoIC0gc2Nyb2xsTGVmdDsKICAgICAgICAgICAgIGlmIChjdXJyZW50RG90SW5k
ZXggPCBkb3RzLmxlbmd0aCAmJiBjb21wKHNjYWxlc1tpXSwgZ2V0U2NhbGUoZG90c1tjdXJyZW50
RG90SW5kZXhdKSkgPT09IDApIHsKICAgICAgICAgICAgICAgICByZW5kZXIoZG90c1tjdXJyZW50
RG90SW5kZXhdLCBjb250ZXh0LCB4LCByYWRpdXMpOwogICAgICAgICAgICAgICAgIGRvdHNbY3Vy
cmVudERvdEluZGV4XS5fZG90Q2VudGVyID0ge3g6IHggKyBkb3RNYXJnaW4gKyByYWRpdXMsIHk6
IHJhZGl1c307Ci0gICAgICAgICAgICAgICAgZG90c1tjdXJyZW50RG90SW5kZXhdLl9jYWNoZWRT
Y3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdCA8IHBhZGRpbmcgPyBzY3JvbGxMZWZ0IDogc2Nyb2xsTGVm
dCAtIHBhZGRpbmc7CisgICAgICAgICAgICAgICAgZG90c1tjdXJyZW50RG90SW5kZXhdLl9jYWNo
ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKICAgICAgICAgICAgICAgICBpbkNhY2hlRG90cy5w
dXNoKGRvdHNbY3VycmVudERvdEluZGV4XSk7CiAgICAgICAgICAgICAgICAgY3VycmVudERvdElu
ZGV4ICs9IDE7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZW5kZXIobnVs
bCwgY29udGV4dCwgeCwgcmFkaXVzKTsKLSAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgZHJhd2Vk
IHZpZXdwb3J0IG5lZWRlZCwgY2FsbCBub3RpZnlUb1JlbmRlciB0byBicmluZyB0aGVtIHRvIHNj
cmVlbiBub3cKLSAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBoZWxwIHRvIGVsZW1hdGUgYmxpbmsK
LSAgICAgICAgICAgIGlmIChpID09PSB2aWV3cG9ydEVuZFNjYWxlSW5kZXgpCi0gICAgICAgICAg
ICAgICAgbm90aWZ5VG9SZW5kZXIoKTsKICAgICAgICAgfQorICAgICAgICBjb2xvckJhdGNoUmVu
ZGVyLmJhdGNoUmVuZGVyKGNvbnRleHQpOwogICAgIH07CiAKICAgICByZXR1cm4gTGlzdFByb3Zp
ZGVyUmVjZWl2ZXIoKHVwZGF0ZUNvbnRhaW5lcldpZHRoLCBvbkNvbnRhaW5lclNjcm9sbCwgb25S
ZXNpemUpID0+IHsKQEAgLTM0Myw3ICszODAsNyBAQCBUaW1lbGluZS5DYW52YXNTZXJpZXNDb21w
b25lbnQgPSAoZG90cywgc2NhbGVzLCBvcHRpb24gPSB7fSkgPT4gewogICAgICAgICAgICAgICAg
IHNjYWxlczogaW5pdFNjYWxlcywKICAgICAgICAgICAgICAgICBzY3JvbGxMZWZ0OiAwLAogICAg
ICAgICAgICAgICAgIHdpZHRoOiAwLAotICAgICAgICAgICAgICAgIG9uU2NyZWVuOiB0cnVlLAor
ICAgICAgICAgICAgICAgIG9uU2NyZWVuOiBmYWxzZSwKICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICBvbkVsZW1lbnRNb3VudDogKGVsZW1lbnQpID0+IHsKICAgICAgICAgICAgICAgICBzZXR1
cENhbnZhc0hlaWdodFdpdGhEcHIoZWxlbWVudCwgaGVpZ2h0KTsKQEAgLTM3NSwyNCArNDEyLDE5
IEBAIFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudCA9IChkb3RzLCBzY2FsZXMsIG9wdGlv
biA9IHt9KSA9PiB7CiAgICAgICAgICAgICBvbkVsZW1lbnRVbm1vdW50OiAoZWxlbWVudCkgPT4g
ewogICAgICAgICAgICAgICAgIG9uQ29udGFpbmVyU2Nyb2xsLnN0b3BBY3Rpb24ob25TY3JvbGxB
Y3Rpb24pOwogICAgICAgICAgICAgICAgIG9uUmVzaXplLnN0b3BBY3Rpb24ob25SZXNpemVBY3Rp
b24pOworICAgICAgICAgICAgICAgIC8vIENsZWFuIHRoZSBjYW52YXMsIGZyZWUgaXRzIG1lbW9y
eQorICAgICAgICAgICAgICAgIGVsZW1lbnQud2lkdGggPSAwOworICAgICAgICAgICAgICAgIGVs
ZW1lbnQuaGVpZ2h0ID0gMDsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBvblN0YXRlVXBk
YXRlOiAoZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSkgPT4gewotICAgICAgICAgICAgICAgIGNv
bnN0IGNvbnRleHQgPSBlbGVtZW50LmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgICAgICAgICAg
bGV0IGZvcmNlUmVkcmF3Q2FjaGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoIXN0YXRl
Lm9uU2NyZWVuICYmICFzdGF0ZURpZmYub25TY3JlZW4pCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLQogICAgICAgICAgICAgICAgIGlmIChzdGF0ZURpZmYuc2NhbGVzIHx8IHN0YXRlRGlm
Zi5kb3RzIHx8IHR5cGVvZiBzdGF0ZURpZmYuc2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgfHwgdHlw
ZW9mIHN0YXRlRGlmZi53aWR0aCA9PT0gJ251bWJlcicgfHwgc3RhdGVEaWZmLm9uU2NyZWVuKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlRGlmZi5zY2FsZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YXRlRGlmZi5zY2FsZXMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZURpZmYuc2NhbGVzID0gc3RhdGVEaWZmLnNjYWxlcy5tYXAoeCA9PiB4KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcmNlUmVkcmF3Q2FjaGUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZURpZmYuZG90cykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGVEaWZmLmRvdHMpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZURpZmYuZG90cyA9IHN0YXRlRGlmZi5kb3RzLm1hcCh4ID0+IHgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yY2VSZWRyYXdDYWNoZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+
IG9mZnNjcmVlbkNhY2hlZFJlbmRlcihyZWRyYXdDYWNoZSwgZWxlbWVudCwgc3RhdGVEaWZmLCBz
dGF0ZSwgZm9yY2VSZWRyYXdDYWNoZSkpOworICAgICAgICAgICAgICAgICAgICB4U2Nyb2xsU3Ry
ZWFtUmVuZGVyKHJlZHJhdywgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9KTsKQEAgLTQxMCw3ICs0NDIsNyBAQCBU
aW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQgPSAoZG90cywgc2NhbGVzLCBvcHRpb24gPSB7
fSkgPT4gewogICAgICAgICBvbkNvbnRhaW5lclNjcm9sbC5hY3Rpb24ob25TY3JvbGxBY3Rpb24p
OwogICAgICAgICBvblJlc2l6ZS5hY3Rpb24ob25SZXNpemVBY3Rpb24pOwogICAgICAgICByZXR1
cm4gYDxkaXYgY2xhc3M9InNlcmllcyI+Ci0gICAgICAgICAgICA8Y2FudmFzIHJlZj0iJHtjYW52
YXNSZWZ9Ij4KKyAgICAgICAgICAgIDxjYW52YXMgcmVmPSIke2NhbnZhc1JlZn0iIHdpZHRoPSIw
IiBoZWlnaHQ9IjAiPgogICAgICAgICA8L2Rpdj5gOwogICAgIH0pOwogfQpAQCAtNTI5LDYgKzU2
MSw3IEBAIFRpbWVsaW5lLkNhbnZhc1hBeGlzQ29tcG9uZW50ID0gKHNjYWxlcywgb3B0aW9uID0g
e30pID0+IHsKICAgICBjb25zdCBtYXhpbnVtVGV4dEhlaWdodCA9IHNjYWxlV2lkdGggKiA0LjU7
CiAgICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdHlwZW9mIG9wdGlvbi5oZWlnaHQgPT09ICJudW1i
ZXIiID8gb3B0aW9uLmhlaWdodCA6IHBhcnNlSW50KGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlW
YWx1ZSgnLS1zbWFsbFNpemUnKSkgKiA1OwogICAgIGNvbnN0IHNxcnQzID0gTWF0aC5zcXJ0KDMp
OworICAgIGNvbnN0IGNvbG9yQmF0Y2hSZW5kZXIgPSBuZXcgQ29sb3JCYXRjaFJlbmRlcigpOwog
CiAgICAgY29uc3QgZHJhd1NjYWxlID0gKHNjYWxlTGFiZWwsIGdyb3VwLCBjb250ZXh0LCB4LCB5
LCBpc0hvdmVyYWJsZSwgbGluZUNvbG9yLCBncm91cENvbG9yKSA9PiB7CiAgICAgICAgIGNvbnN0
IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpOwpAQCAtNTM2
LDQ0ICs1NjksNDUgQEAgVGltZWxpbmUuQ2FudmFzWEF4aXNDb21wb25lbnQgPSAoc2NhbGVzLCBv
cHRpb24gPSB7fSkgPT4gewogICAgICAgICBjb25zdCB1c2VkR3JvdXBDb2xvciA9IGdyb3VwQ29s
b3IgPyBncm91cENvbG9yIDogaXNEYXJrTW9kZSgpID8gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0
eVZhbHVlKCctLXdoaXRlJykgOiBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0tYmxh
Y2snKTsKICAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IGdyb3VwICogc2NhbGVXaWR0aDsKICAg
ICAgICAgY29uc3QgYmFzZUxpbmVZID0gaXNUb3AgPyB5ICsgY2FudmFzSGVpZ2h0IC0gc2NhbGVC
cm9hZExpbmVIZWlnaHQgOiB5ICsgc2NhbGVCcm9hZExpbmVIZWlnaHQ7Ci0gICAgICAgIGlmIChn
cm91cCA+IDEpIHsKLSAgICAgICAgICAgIC8vIERyYXcgZ3JvdXAgbGFiZWwKLSAgICAgICAgICAg
IGNvbnRleHQuYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7
Ci0gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNlZEdyb3VwQ29sb3I7Ci0gICAg
ICAgICAgICBjb250ZXh0Lm1vdmVUbyh4ICsgY29udGV4dC5saW5lV2lkdGgsIGlzVG9wID8gY2Fu
dmFzSGVpZ2h0IDogeSk7Ci0gICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgY29udGV4dC5s
aW5lV2lkdGgsIGJhc2VMaW5lWSk7Ci0gICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gRHJhdyB0YWcgbGluZQogICAgICAgICBjb25zdCBtaWRkbGVQ
b2ludFggPSB4ICsgdG90YWxXaWR0aCAvIDI7Ci0gICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7
Ci0gICAgICAgIGNvbnRleHQubW92ZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZKTsKLSAgICAg
ICAgaWYgKCFpc1RvcCkKLSAgICAgICAgICAgIGNvbnRleHQubGluZVRvKG1pZGRsZVBvaW50WCwg
YmFzZUxpbmVZICsgc2NhbGVUYWdMaW5lSGVpZ2h0IC0gc2NhbGVUYWdMaW5lUGFkZGluZyk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRleHQubGluZVRvKG1pZGRsZVBvaW50WCwgYmFz
ZUxpbmVZIC0gc2NhbGVUYWdMaW5lSGVpZ2h0ICsgc2NhbGVUYWdMaW5lUGFkZGluZyk7Ci0gICAg
ICAgIGlmIChncm91cCA+IDEpCi0gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNl
ZEdyb3VwQ29sb3I7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5
bGUgPSB1c2VkTGluZUNvbG9yOwotICAgICAgICBjb250ZXh0LnN0cm9rZSgpOwotCiAgICAgICAg
IGlmIChncm91cCA+IDEpIHsKLSAgICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBncm91cCBsaW5l
CisgICAgICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmxhenlDcmVhdGVDb2xvclNlcXModXNlZEdy
b3VwQ29sb3IsIChjb250ZXh0KSA9PiB7CiAgICAgICAgICAgICAgICAgY29udGV4dC5iZWdpblBh
dGgoKTsKKyAgICAgICAgICAgIH0sIChjb250ZXh0LCBjb2xvcikgPT4geworICAgICAgICAgICAg
ICAgIGNvbnRleHQubGluZVdpZHRoID0gMTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9r
ZVN0eWxlID0gY29sb3I7CisgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5hZGRTZXEodXNlZEdyb3Vw
Q29sb3IsIChjb250ZXh0KSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCAr
IGNvbnRleHQubGluZVdpZHRoLCBpc1RvcCA/IGNhbnZhc0hlaWdodCA6IHkpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQubGluZVRvKHggKyBjb250ZXh0LmxpbmVXaWR0aCwgYmFzZUxpbmVZKTsK
ICAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4LCBiYXNlTGluZVkpOwogICAgICAgICAg
ICAgICAgIGNvbnRleHQubGluZVRvKHggKyB0b3RhbFdpZHRoLCBiYXNlTGluZVkpOwotICAgICAg
ICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB1c2VkR3JvdXBDb2xvcjsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0Lm1vdmVUbyh4ICsgdG90YWxXaWR0aCwgaXNUb3AgPyBjYW52YXNIZWln
aHQgOiB5KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVUbyh4ICsgdG90YWxXaWR0aCwg
YmFzZUxpbmVZKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhtaWRkbGVQb2ludFgs
IGJhc2VMaW5lWSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1RvcCkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5saW5lVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgKyBzY2FsZVRhZ0xp
bmVIZWlnaHQgLSBzY2FsZVRhZ0xpbmVQYWRkaW5nKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZ
IC0gc2NhbGVUYWdMaW5lSGVpZ2h0ICsgc2NhbGVUYWdMaW5lUGFkZGluZyk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIubGF6
eUNyZWF0ZUNvbG9yU2Vxcyh1c2VkTGluZUNvbG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAg
ICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgICAgICB9LCAoY29udGV4dCwgY29s
b3IpID0+IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNvbG9yOwogICAgICAgICAgICAgICAgIGNv
bnRleHQuc3Ryb2tlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hS
ZW5kZXIuYWRkU2VxKHVzZWRMaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC5tb3ZlVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkpOworICAgICAgICAgICAg
ICAgIGlmICghaXNUb3ApCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKG1pZGRs
ZVBvaW50WCwgYmFzZUxpbmVZICsgc2NhbGVUYWdMaW5lSGVpZ2h0IC0gc2NhbGVUYWdMaW5lUGFk
ZGluZyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmxpbmVUbyhtaWRkbGVQb2ludFgsIGJhc2VMaW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCArIHNj
YWxlVGFnTGluZVBhZGRpbmcpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLQotICAgICAg
ICAvLyBEcmF3IHRhZwotICAgICAgICBpZiAoIWlzVG9wKQotICAgICAgICAgICAgY29udGV4dC5t
b3ZlVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgKyBzY2FsZVRhZ0xpbmVIZWlnaHQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhtaWRkbGVQb2ludFgsIGJhc2VM
aW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCk7CisgICAgICAgIC8vIERyYXcgVGFnCiAgICAgICAg
IGNvbnRleHQuZm9udCA9IGAke2ZvbnRTaXplfSAke2ZvbnRGYW1pbHl9YDsKICAgICAgICAgY29u
dGV4dC5maWxsU3R5bGUgPSBmb250Q29sb3I7CiAgICAgICAgIGNvbnRleHQuc2F2ZSgpOwpAQCAt
NTg5LDg4ICs2MjMsODIgQEAgVGltZWxpbmUuQ2FudmFzWEF4aXNDb21wb25lbnQgPSAoc2NhbGVz
LCBvcHRpb24gPSB7fSkgPT4gewogICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dChnZXRMYWJl
bChzY2FsZUxhYmVsKSwgbWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgLSBzY2FsZVRhZ0xpbmVIZWln
aHQpOwogICAgICAgICB9CiAgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAgICAgIGlm
IChncm91cCA+IDEpIHsKLSAgICAgICAgICAgIC8vIERyYXcgZ3JvdXAgbGFiZWwKLSAgICAgICAg
ICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7Ci0gICAgICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9
IDE7Ci0gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNlZEdyb3VwQ29sb3I7Ci0g
ICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4ICsgdG90YWxXaWR0aCwgaXNUb3AgPyBjYW52YXNI
ZWlnaHQgOiB5KTsKLSAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHggKyB0b3RhbFdpZHRoLCBi
YXNlTGluZVkpOwotICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKLSAgICAgICAgfQogICAg
IH07CiAgICAgY29uc3QgcmVuZGVyID0gdHlwZW9mIG9wdGlvbi5yZW5kZXJGYWN0b3J5ID09PSAi
ZnVuY3Rpb24iID8gb3B0aW9uLnJlbmRlckZhY3RvcnkoZHJhd1NjYWxlKSA6IChzY2FsZUxhYmVs
LCBzY2FsZUdyb3VwLCBjb250ZXh0LCB4LCB5KSA9PiBkcmF3U2NhbGUoc2NhbGVMYWJlbCwgc2Nh
bGVHcm91cCwgY29udGV4dCwgeCwgeSk7CiAKICAgICBjb25zdCBwYWRkaW5nID0gMTAwICogc2Nh
bGVXaWR0aCAvIGdldERldmljZVBpeGVsUmF0aW8oKTsKLSAgICBjb25zdCBvZmZzY3JlZW5DYWNo
ZWRSZW5kZXIgPSBvZmZzY3JlZW5DYWNoZWRSZW5kZXJGYWN0b3J5KHBhZGRpbmcsIGNhbnZhc0hl
aWdodCk7Ci0gICAgbGV0IGluQ2FjaGVTY2FsZXMgPSBbXTsKKyAgICBjb25zdCB4U2Nyb2xsU3Ry
ZWFtUmVuZGVyID0geFNjcm9sbFN0cmVhbVJlbmRlckZhY3RvcnkoY2FudmFzSGVpZ2h0KTsKKyAg
ICBsZXQgb25TY3JlZW5TY2FsZXMgPSBbXTsKIAogICAgIGNvbnN0IGdldE1vdXNlRXZlbnRUaXJn
Z2VyU2NhbGVzID0gKGUsIHNjcm9sbExlZnQsIGVsZW1lbnQpID0+IHsKICAgICAgICAgY29uc3Qg
e3gsIHl9ID0gZ2V0TW91c2VQb3NJbkNhbnZhcyhlLCBlbGVtZW50KTsKLSAgICAgICAgcmV0dXJu
IGluQ2FjaGVTY2FsZXMuZmlsdGVyKHNjYWxlID0+IHsKLSAgICAgICAgICAgIGNvbnN0IGRldGFj
dEJveFRvcFggPSBzY2FsZS5fdGFnVG9wLnggLSBzY3JvbGxMZWZ0IC0gZm9udFNpemVOdW1iZXIg
KiBzcXJ0MyAvIDI7Ci0gICAgICAgICAgICBpZiAoZGV0YWN0Qm94VG9wWCA8IDApIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGNvbnN0IGRldGFjdEJveFRvcFkgPSBzY2FsZS5fdGFnVG9wLnk7
Ci0gICAgICAgICAgICBjb25zdCBkZXRhY3RCb3hXaWR0aCA9IGZvbnRTaXplTnVtYmVyICogc3Fy
dDMgLyAyICsgc2NhbGUubGFiZWwudG9TdHJpbmcoKS5sZW5ndGggKiBmb250U2l6ZU51bWJlciAv
IDI7Ci0gICAgICAgICAgICBjb25zdCBkZXRhY3RCb3hIZWlnaHQgPSBmb250U2l6ZU51bWJlciAv
IDIgKyBzY2FsZS5sYWJlbC50b1N0cmluZygpLmxlbmd0aCAqIGZvbnRTaXplTnVtYmVyIC8gMiAq
IHNxcnQzOwotICAgICAgICAgICAgcmV0dXJuIHBvaW50UmVjdENvbGxpc2lvbkRldGVjdCh7eCwg
eX0sIHsKLSAgICAgICAgICAgICAgICAgICAgdG9wTGVmdFg6IGRldGFjdEJveFRvcFgsCi0gICAg
ICAgICAgICAgICAgICAgIHRvcExlZnRZOiBpc1RvcCA/IGRldGFjdEJveFRvcFkgLSBkZXRhY3RC
b3hIZWlnaHQgOiBkZXRhY3RCb3hUb3BZLAotICAgICAgICAgICAgICAgICAgICB3aWR0aDogZGV0
YWN0Qm94V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZGV0YWN0Qm94SGVpZ2h0
Ci0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBvblNjcmVlblNjYWxlcy5maWx0
ZXIoc2NhbGUgPT4geworICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBzY2FsZS5sYWJlbC50b1N0
cmluZygpLmxlbmd0aCAqIGZvbnRTaXplTnVtYmVyIC8gMjsKKyAgICAgICAgICAgIGNvbnN0IGhl
aWdodCA9IHNjYWxlLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoICogZm9udFNpemVOdW1iZXIgLyAy
ICogc3FydDM7CisgICAgICAgICAgICBjb25zdCBwb2ludDEgPSB7CisgICAgICAgICAgICAgICAg
eDogc2NhbGUuX3RhZ1RvcC54IC0gc2Nyb2xsTGVmdCAtIChpc1RvcCA/IGZvbnRTaXplTnVtYmVy
IC8gMiAqIHNxcnQzIDogMCksCisgICAgICAgICAgICAgICAgeTogc2NhbGUuX3RhZ1RvcC55ICsg
KGZvbnRTaXplTnVtYmVyIC8gMiArIHNjYWxlVGFnTGluZUhlaWdodCkgKiAoaXNUb3AgPyAtMSA6
IDEpLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGNvbnN0IHBvaW50MiA9IHsKKyAgICAg
ICAgICAgICAgICB4OiBwb2ludDEueCArIGZvbnRTaXplTnVtYmVyIC8gMiAqIHNxcnQzLAorICAg
ICAgICAgICAgICAgIHk6IHNjYWxlLl90YWdUb3AueSArIHNjYWxlVGFnTGluZUhlaWdodCAgKiAo
aXNUb3AgPyAtMSA6IDEpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29uc3QgcG9pbnQz
ID0geworICAgICAgICAgICAgICAgIHg6IHBvaW50Mi54ICsgd2lkdGgsCisgICAgICAgICAgICAg
ICAgeTogcG9pbnQyLnkgKyBoZWlnaHQgKiAoaXNUb3AgPyAtMSA6IDEpLAorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGNvbnN0IHBvaW50NCA9IHsKKyAgICAgICAgICAgICAgICB4OiBwb2lu
dDEueCArIHdpZHRoLAorICAgICAgICAgICAgICAgIHk6IHBvaW50MS55ICsgaGVpZ2h0ICogKGlz
VG9wID8gLTEgOiAxKSwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gcG9pbnRQ
b2x5Z29uQ29sbGlzaW9uRGV0ZWN0KHt4LCB5fSwgW3BvaW50MSwgcG9pbnQyLCBwb2ludDMsIHBv
aW50NF0pOwogICAgICAgICB9KTsKICAgICB9OwotICAgIGNvbnN0IHJlZHJhd0NhY2hlID0gKG9m
ZnNjcmVlbkNhbnZhcywgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgbm90aWZ5VG9SZW5kZXIp
ID0+IHsKKyAgICBjb25zdCByZWRyYXcgPSAoc3RhcnRYLCByZW5kZXJXaWR0aCwgZWxlbWVudCwg
c3RhdGVEaWZmLCBzdGF0ZSkgPT4gewogICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdHlwZW9m
IHN0YXRlRGlmZi5zY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyA/IHN0YXRlRGlmZi5zY3JvbGxMZWZ0
IDogc3RhdGUuc2Nyb2xsTGVmdDsKICAgICAgICAgY29uc3Qgc2NhbGVzID0gc3RhdGVEaWZmLnNj
YWxlcyA/IHN0YXRlRGlmZi5zY2FsZXMgOiBzdGF0ZS5zY2FsZXM7CiAgICAgICAgIGNvbnN0IHNj
YWxlc01hcExpbmtMaXN0ID0gc3RhdGVEaWZmLnNjYWxlc01hcExpbmtMaXN0ID8gc3RhdGVEaWZm
LnNjYWxlc01hcExpbmtMaXN0IDogc3RhdGUuc2NhbGVzTWFwTGlua0xpc3Q7CiAgICAgICAgIGNv
bnN0IHdpZHRoID0gdHlwZW9mIHN0YXRlRGlmZi53aWR0aCA9PT0gJ251bWJlcicgPyBzdGF0ZURp
ZmYud2lkdGggOiBzdGF0ZS53aWR0aDsKICAgICAgICAgY29uc3QgdXNlZExpbmVDb2xvciA9IGNv
bXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ib3JkZXJDb2xvcklubGluZUVsZW1lbnQn
KTsKLSAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IDIgKiBwYWRkaW5nICsgd2lkdGg7CiAgICAg
ICAgIGNvbnN0IGJhc2VMaW5lWSA9IGlzVG9wID8gY2FudmFzSGVpZ2h0IC0gc2NhbGVCcm9hZExp
bmVIZWlnaHQgOiBzY2FsZUJyb2FkTGluZUhlaWdodDsKLSAgICAgICAgaWYgKG9mZnNjcmVlbkNh
bnZhcy5sb2dpY1dpZHRoICE9PSB0b3RhbFdpZHRoKSB7Ci0gICAgICAgICAgICBzZXR1cENhbnZh
c1dpZHRoV2l0aERwcihvZmZzY3JlZW5DYW52YXMsIHRvdGFsV2lkdGgpOwotICAgICAgICAgICAg
c2V0dXBDYW52YXNDb250ZXh0U2NhbGUob2Zmc2NyZWVuQ2FudmFzKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAob2Zmc2NyZWVuQ2FudmFzLmxvZ2ljSGVpZ2h0ICE9PSBlbGVtZW50LmxvZ2ljSGVp
Z2h0KSB7Ci0gICAgICAgICAgICBzZXR1cENhbnZhc0hlaWdodFdpdGhEcHIob2Zmc2NyZWVuQ2Fu
dmFzLCBlbGVtZW50LmxvZ2ljSGVpZ2h0KTsKLSAgICAgICAgICAgIHNldHVwQ2FudmFzQ29udGV4
dFNjYWxlKG9mZnNjcmVlbkNhbnZhcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgY29udGV4
dCA9IG9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwotICAgICAgICBjb25zdCByZWFs
U2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgPiBwYWRkaW5nID8gc2Nyb2xsTGVmdCAtIHBhZGRpbmcg
OiBzY3JvbGxMZWZ0OwotICAgICAgICBjb25zdCBjdXJyZW50U3RhcnRTY2FsZUluZGV4ID0gTWF0
aC5mbG9vcihyZWFsU2Nyb2xsTGVmdCAvIHNjYWxlV2lkdGgpOworICAgICAgICBjb25zdCBjb250
ZXh0ID0gZWxlbWVudC5nZXRDb250ZXh0KCIyZCIsIHsgYWxwaGE6IGZhbHNlIH0pOworICAgICAg
ICBsZXQgY3VycmVudFN0YXJ0U2NhbGVJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsTGVmdCAvIHNj
YWxlV2lkdGgpOworICAgICAgICBpZiAoY3VycmVudFN0YXJ0U2NhbGVJbmRleCA8IDApCisgICAg
ICAgICAgICBjdXJyZW50U3RhcnRTY2FsZUluZGV4ID0gMDsKICAgICAgICAgY29uc3QgY3VycmVu
dFN0YXJ0U2NhbGVLZXkgPSBnZXRTY2FsZUtleShzY2FsZXNbY3VycmVudFN0YXJ0U2NhbGVJbmRl
eF0pOwotICAgICAgICBsZXQgY3VycmVudEVuZFNjYWxlSW5kZXggPSBNYXRoLmNlaWwoKHJlYWxT
Y3JvbGxMZWZ0ICsgdG90YWxXaWR0aCkgLyBzY2FsZVdpZHRoKTsKLSAgICAgICAgY3VycmVudEVu
ZFNjYWxlSW5kZXggPSBjdXJyZW50RW5kU2NhbGVJbmRleCA+IHNjYWxlcy5sZW5ndGggPyBzY2Fs
ZXMubGVuZ3RoIC0gMSA6IGN1cnJlbnRFbmRTY2FsZUluZGV4OworICAgICAgICBsZXQgY3VycmVu
dEVuZFNjYWxlSW5kZXggPSBNYXRoLmNlaWwoKHNjcm9sbExlZnQgKyByZW5kZXJXaWR0aCkgLyBz
Y2FsZVdpZHRoKTsKKyAgICAgICAgY3VycmVudEVuZFNjYWxlSW5kZXggPSBjdXJyZW50RW5kU2Nh
bGVJbmRleCA+PSBzY2FsZXMubGVuZ3RoID8gc2NhbGVzLmxlbmd0aCAtIDEgOiBjdXJyZW50RW5k
U2NhbGVJbmRleDsKICAgICAgICAgY29uc3QgY3VycmVudEVuZFNjYWxlS2V5ID0gZ2V0U2NhbGVL
ZXkoc2NhbGVzW2N1cnJlbnRFbmRTY2FsZUluZGV4XSk7Ci0gICAgICAgIGxldCB2aWV3UG9ydEVu
ZFNjYWxlSW5kZXggPSBNYXRoLmNlaWwoKHJlYWxTY3JvbGxMZWZ0ICsgd2lkdGgpIC8gc2NhbGVX
aWR0aCk7Ci0gICAgICAgIHZpZXdQb3J0RW5kU2NhbGVJbmRleCA9IHZpZXdQb3J0RW5kU2NhbGVJ
bmRleCA+IHNjYWxlcy5sZW5ndGggPyBzY2FsZXMubGVuZ3RoIC0gMSA6IHZpZXdQb3J0RW5kU2Nh
bGVJbmRleDsKLSAgICAgICAgY29uc3Qgdmlld1BvcnRFbmRTY2FsZUtleSA9IGdldFNjYWxlS2V5
KHNjYWxlc1t2aWV3UG9ydEVuZFNjYWxlSW5kZXhdKTsKICAgICAgICAgY29uc3QgY3VycmVudFN0
YXJ0Tm9kZSA9IHNjYWxlc01hcExpbmtMaXN0Lm1hcC5nZXQoY3VycmVudFN0YXJ0U2NhbGVLZXkp
OwogICAgICAgICBjb25zdCBjdXJyZW50RW5kTm9kZSA9IHNjYWxlc01hcExpbmtMaXN0Lm1hcC5n
ZXQoY3VycmVudEVuZFNjYWxlS2V5KTsKLSAgICAgICAgY29uc3Qgdmlld1BvcnRFbmROb2RlID0g
c2NhbGVzTWFwTGlua0xpc3QubWFwLmdldCh2aWV3UG9ydEVuZFNjYWxlS2V5KTsKKyAgICAgICAg
aWYgKCFjdXJyZW50RW5kTm9kZSkgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcihjdXJyZW50
RW5kU2NhbGVLZXkpOworICAgICAgICB9CiAgICAgICAgIGxldCBub3cgPSBjdXJyZW50U3RhcnRO
b2RlOwotICAgICAgICAvLyBDbGVhciB0aGUgY2FjaGUKLSAgICAgICAgY29udGV4dC5jbGVhclJl
Y3QoMCwgMCwgb2Zmc2NyZWVuQ2FudmFzLndpZHRoLCBvZmZzY3JlZW5DYW52YXMuaGVpZ2h0KTsK
LSAgICAgICAgY29udGV4dC5tb3ZlVG8oMCwgYmFzZUxpbmVZKTsKLSAgICAgICAgY29udGV4dC5s
aW5lV2lkdGggPSAxOwotICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gdXNlZExpbmVDb2xv
cjsKLSAgICAgICAgY29udGV4dC5saW5lVG8ob2Zmc2NyZWVuQ2FudmFzLmxvZ2ljV2lkdGgsIGJh
c2VMaW5lWSk7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7Ci0KLSAgICAgICAgaW5DYWNoZVNj
YWxlcyA9IFtdOworICAgICAgICAvLyBDbGVhciBwZXJ2aW91cyBiYXRjaCByZW5kZXIKKyAgICAg
ICAgY29sb3JCYXRjaFJlbmRlci5jbGVhcigpOworICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmxh
enlDcmVhdGVDb2xvclNlcXModXNlZExpbmVDb2xvciwgKGNvbnRleHQpID0+IHsKKyAgICAgICAg
ICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAgICAgIH0sIChjb250ZXh0LCBjb2xvcikgPT4g
eworICAgICAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxOworICAgICAgICAgICAgY29udGV4
dC5zdHJva2VTdHlsZSA9IGNvbG9yOworICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuYWRkU2VxKHVzZWRMaW5lQ29sb3Is
IChjb250ZXh0KSA9PiB7CisgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbygwLCBiYXNlTGluZVkp
OworICAgICAgICAgICAgY29udGV4dC5saW5lVG8oZWxlbWVudC5sb2dpY1dpZHRoLCBiYXNlTGlu
ZVkpOworICAgICAgICB9KTsKKworICAgICAgICBvblNjcmVlblNjYWxlcyA9IFtdOwogICAgICAg
ICB3aGlsZSAobm93ICE9IGN1cnJlbnRFbmROb2RlLm5leHQpIHsKICAgICAgICAgICAgIGNvbnN0
IGxhYmVsID0gbm93LmxhYmVsOwogICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBub3cuZ3JvdXA7
Ci0gICAgICAgICAgICByZW5kZXIobGFiZWwsIGdyb3VwLCBjb250ZXh0LCBub3cueCAtIHJlYWxT
Y3JvbGxMZWZ0LCAwKTsKLSAgICAgICAgICAgIGlmIChub3cgPT09IHZpZXdQb3J0RW5kTm9kZSkK
LSAgICAgICAgICAgICAgICBub3RpZnlUb1JlbmRlcigpOworICAgICAgICAgICAgcmVuZGVyKGxh
YmVsLCBncm91cCwgY29udGV4dCwgbm93LnggLSBzY3JvbGxMZWZ0LCAwKTsKICAgICAgICAgICAg
IG5vdy5fdGFnVG9wID0ge3g6IG5vdy54ICsgZ3JvdXAgKiBzY2FsZVdpZHRoIC8gMiwgeTogaXNU
b3AgPyBjYW52YXNIZWlnaHQgLSBzY2FsZUJyb2FkTGluZUhlaWdodCA6IHNjYWxlQnJvYWRMaW5l
SGVpZ2h0fTsKLSAgICAgICAgICAgIGluQ2FjaGVTY2FsZXMucHVzaChub3cpOworICAgICAgICAg
ICAgb25TY3JlZW5TY2FsZXMucHVzaChub3cpOwogICAgICAgICAgICAgbm93ID0gbm93Lm5leHQ7
CiAgICAgICAgIH0KKyAgICAgICAgY29sb3JCYXRjaFJlbmRlci5iYXRjaFJlbmRlcihjb250ZXh0
KTsKICAgICB9OwogCiAgICAgLy8gSW5pdGlhbGl6ZQpAQCAtNzQ3LDE4ICs3NzUsMTIgQEAgVGlt
ZWxpbmUuQ2FudmFzWEF4aXNDb21wb25lbnQgPSAoc2NhbGVzLCBvcHRpb24gPSB7fSkgPT4gewog
ICAgICAgICAgICAgICAgICAgICBvblJlc2l6ZS5zdG9wQWN0aW9uKG9uUmVzaXplQWN0aW9uKTsK
ICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIG9uU3RhdGVVcGRhdGU6IChlbGVt
ZW50LCBzdGF0ZURpZmYsIHN0YXRlKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBmb3Jj
ZVJlZHJhd0NhY2hlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZURpZmYu
c2NhbGVzIHx8IHR5cGVvZiBzdGF0ZURpZmYuc2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgfHwgdHlw
ZW9mIHN0YXRlRGlmZi53aWR0aCA9PT0gJ251bWJlcicpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGF0ZURpZmYuc2NhbGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cmNlUmVkcmF3Q2FjaGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFu
aW1hdGlvbkZyYW1lKCgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzY3Jl
ZW5DYWNoZWRSZW5kZXIocmVkcmF3Q2FjaGUsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUsIGZv
cmNlUmVkcmF3Q2FjaGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHhTY3JvbGxTdHJlYW1SZW5kZXIocmVkcmF3LCBlbGVtZW50LCBzdGF0ZURp
ZmYsIHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0pOwogCi0KICAgICAgICAgICAgIHVwZGF0ZUNvbnRhaW5lcldpZHRoKHNjYWxl
cy5sZW5ndGggKiBzY2FsZVdpZHRoICogZ2V0RGV2aWNlUGl4ZWxSYXRpbygpKTsKICAgICAgICAg
ICAgIGNvbnN0IHVwZGF0ZURhdGEgPSAoc2NhbGVzKSA9PiB7CiAgICAgICAgICAgICAgICAgLy8g
SW4gY2FzZSBvZiBtb2RpZmljYXRpb24gd2hpbGUgcmVuZGVyaW5nCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376188</attachid>
            <date>2019-08-13 11:46:06 -0700</date>
            <delta_ts>2019-08-13 18:03:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200456-20190813114605.patch</filename>
            <type>text/plain</type>
            <size>31260</size>
            <attacher name="Zhifei Fang">zhifei_fang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDAxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmY2ZThmMWMyMGQyZGRhZjNlZDVhNGVkYTJlNzA4ZDE1
MzNmNDViOS4uNTU4ZWZhYzA1ZDVjMWFkMDFiOGY4MWUyMGI0ZjhiMDA1NGVlMjU0MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDE5LTA4LTEyICBaaGlmZWkgRmFuZyAgPHpoaWZlaV9mYW5nQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbcmVzdWx0cy53ZWJraXQub3JnIFRpbWVsaW5lXSBQZXJmb3JtYW5jZSBpbXByb3Zl
bWVudCAtIFNraXAgcmVuZGVyIG9mZnNjcmVlbiBjYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDQ1NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZGlzYWJsZSB1c2UgdGhlIG5l
dyBiYXRjaCBkcmF3IG1ldGhvZCB0byByZW5kZXIgY2FudmFzIGRpcmVjdGx5IHdpdGhvdXQgYW55
IGNhY2hlcywgdGhpcyB3aWxsIHNhdmUgYSBsb3Qgb2YgbWVtb3J5LCBzbyB0aGF0IHdlIHdvbid0
IGdvIGludG8gdGhlICJsb3cgbWVtb3J5IG1vZGUiLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxz
byBjaGFuZ2UgdGhlIGF4aXMgbGFiZWwgY29sbGlzaW9uIGRldGFjdCBib3ggZnJvbSBhIHJlY3Qg
dG8gcG9seWdvbiwgc28gdGhhdCB3ZSBjYW4gZGVjdGFjdCBjbGljayBtb3JlIGFjY3VyYXRlLgor
CisgICAgICAgICogcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFyeS9q
cy9VdGlscy5qczoKKyAgICAgICAgKiByZXN1bHRzZGJweS9yZXN1bHRzZGJweS92aWV3L3N0YXRp
Yy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzOgorICAgICAgICAo
cG9pbnRQb2x5Z29uQ29sbGlzaW9uRGV0ZWN0KTogRGV0YWN0CisgICAgICAgIChwb2ludFJpZ2h0
UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRlY3QpOgorICAgICAgICAoQ29sb3JCYXRjaFJlbmRl
cik6CisgICAgICAgIChDb2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5sYXp5Q3JlYXRlQ29sb3JT
ZXFzKToKKyAgICAgICAgKENvbG9yQmF0Y2hSZW5kZXIucHJvdG90eXBlLmFkZFNlcSk6CisgICAg
ICAgIChDb2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5iYXRjaFJlbmRlcik6CisgICAgICAgIChD
b2xvckJhdGNoUmVuZGVyLnByb3RvdHlwZS5jbGVhcik6CisgICAgICAgICh4U2Nyb2xsU3RyZWFt
UmVuZGVyRmFjdG9yeSk6CisgICAgICAgIChUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQp
OgorICAgICAgICAob2Zmc2NyZWVuQ2FjaGVkUmVuZGVyRmFjdG9yeSk6IERlbGV0ZWQuCisKIDIw
MTktMDgtMDcgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAg
ICAgICAgW1dpbl1bTWluaUJyb3dzZXJdIEFkZCBrZXkgYWNjZWxlcmF0b3JzIGZvciByZWxvYWQg
YW5kIGNsb3NlIHdpbmRvdwpkaWZmIC0tZ2l0IGEvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9VdGlscy5qcyBiL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jl
c3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMvVXRpbHMuanMKaW5kZXggOTgzMmY1N2Vj
YzMwNGZlMWI4N2NkYjQ2ZjViYTI5M2Q0NzNjZjQ3My4uODc5NmIxMDhjYzMzYTg2ZWQxYzM2YWJk
M2JjMmJhMzMwMWJjZjk5MCAxMDA2NDQKLS0tIGEvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2Ri
cHkvdmlldy9zdGF0aWMvbGlicmFyeS9qcy9VdGlscy5qcworKysgYi9Ub29scy9yZXN1bHRzZGJw
eS9yZXN1bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2pzL1V0aWxzLmpzCkBAIC03MCw3ICs3
MCw3IEBAIGZ1bmN0aW9uIGlzRGFya01vZGUgKCkgewogZnVuY3Rpb24gY3JlYXRlSW5zZXJ0aW9u
T2JzZXJ2ZXJzKGVsZW1lbnQsIGNhbGxiYWNrPSgpPT57fSwgc3RhcnRUaHJlc2hvbGQ9MC4wLCBl
bmRUcmVzaG9sZD0xLjAsIHN0ZXA9MC4xLCBvcHRpb249e30pIHsKICAgICBjb25zdCB1c2VPcHRp
b24gPSB7fTsKICAgICB1c2VPcHRpb24ucm9vdCA9IG9wdGlvbi5yb290IGluc3RhbmNlb2YgSFRN
TEVsZW1lbnQgPyBvcHRpb24ucm9vdCA6IG51bGw7Ci0gICAgdXNlT3B0aW9uLnJvb3RNYXJnaW4g
PSBvcHRpb24ucm9vdE1hcmdpbiA/IG9wdGlvbi5yb290TWFyZ2luIDogIjAiOworICAgIHVzZU9w
dGlvbi5yb290TWFyZ2luID0gb3B0aW9uLnJvb3RNYXJnaW4gPyBvcHRpb24ucm9vdE1hcmdpbiA6
ICIwJSI7CiAgICAgY29uc3QgdGhyZXNob2xkQXJyYXkgPSBbXTsKICAgICBmb3IgKGxldCBpID0g
c3RhcnRUaHJlc2hvbGQ7IGkgPD0gZW5kVHJlc2hvbGQ7IGkrPSBzdGVwKSB7CiAgICAgICAgIHRo
cmVzaG9sZEFycmF5LnB1c2goaSk7CmRpZmYgLS1naXQgYS9Ub29scy9yZXN1bHRzZGJweS9yZXN1
bHRzZGJweS92aWV3L3N0YXRpYy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25l
bnRzLmpzIGIvVG9vbHMvcmVzdWx0c2RicHkvcmVzdWx0c2RicHkvdmlldy9zdGF0aWMvbGlicmFy
eS9qcy9jb21wb25lbnRzL1RpbWVsaW5lQ29tcG9uZW50cy5qcwppbmRleCA1MDU5ZjBmYjlkZWU0
NGI2ZmI1ZTliNDY4ZGVlMzk0N2U3MGMzZmJiLi5hNDZmOTRjZGIzYjdlMThiZDMwYjJjNTFkZDUx
MjI3OTcwNzBkZWFmIDEwMDY0NAotLS0gYS9Ub29scy9yZXN1bHRzZGJweS9yZXN1bHRzZGJweS92
aWV3L3N0YXRpYy9saWJyYXJ5L2pzL2NvbXBvbmVudHMvVGltZWxpbmVDb21wb25lbnRzLmpzCisr
KyBiL1Rvb2xzL3Jlc3VsdHNkYnB5L3Jlc3VsdHNkYnB5L3ZpZXcvc3RhdGljL2xpYnJhcnkvanMv
Y29tcG9uZW50cy9UaW1lbGluZUNvbXBvbmVudHMuanMKQEAgLTM4LDYgKzM4LDM5IEBAIGZ1bmN0
aW9uIHBvaW50UmVjdENvbGxpc2lvbkRldGVjdChwb2ludCwgcmVjdCkgewogICAgIHJldHVybiBk
aWZmWCA8PSByZWN0LndpZHRoICYmIGRpZmZZIDw9IHJlY3QuaGVpZ2h0ICYmIGRpZmZYID49IDAg
JiYgZGlmZlkgPj0gMDsKIH0KIAorZnVuY3Rpb24gcG9pbnRQb2x5Z29uQ29sbGlzaW9uRGV0ZWN0
KHBvaW50LCBwb2x5Z29uKSB7CisgICAgbGV0IHJlcyA9IGZhbHNlOworICAgIGZvciAobGV0IGkg
PSAwLCBqID0gMTsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpKyssIGogPSBpICsgMSkgeworICAgICAg
ICBpZiAoaiA9PT0gcG9seWdvbi5sZW5ndGggKQorICAgICAgICAgICAgaiA9IDA7CisgICAgICAg
IGlmIChwb2ludFJpZ2h0UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRlY3QocG9pbnQsIHBvbHln
b25baV0sIHBvbHlnb25bal0pKQorICAgICAgICAgICAgcmVzID0gIXJlczsKKyAgICB9CisgICAg
cmV0dXJuIHJlczsKK30KKworLyoKKyogRGV0YWN0IGlmIHBvaW50IHJpZ2h0IHJheSBoYXZlIGEg
Y29sbGlzaW9uIHdpdGggYSBsaW5lIHNlZ21lbnQKKyogICAgICAgICAgICAgICAgKgorKiAgICAg
ICAgICAgICAgIC8KKyogICAgICAgICotLS0+IC8KKyogICAgICAgICAgICAgLworKiAgICAgICAg
ICAgICoKKyovCitmdW5jdGlvbiBwb2ludFJpZ2h0UmF5TGluZVNlZ21lbnRDb2xsaXNpb25EZXRl
Y3QocG9pbnQsIGxpbmVTdGFydCwgbGluZUVuZCkgeworICAgIGNvbnN0IG1heFggPSBNYXRoLm1h
eChsaW5lU3RhcnQueCwgbGluZUVuZC54KTsKKyAgICBjb25zdCBtaW5YID0gTWF0aC5taW4obGlu
ZVN0YXJ0LngsIGxpbmVFbmQueCk7CisgICAgY29uc3QgbWF4WSA9IE1hdGgubWF4KGxpbmVTdGFy
dC55LCBsaW5lRW5kLnkpOworICAgIGNvbnN0IG1pblkgPSBNYXRoLm1pbihsaW5lU3RhcnQueSwg
bGluZUVuZC55KTsKKyAgICBpZiAoKHBvaW50LnggPD0gbWF4WCAmJiBwb2ludC54ID49IG1pblgg
fHwgcG9pbnQueCA8IG1pblgpICYmCisgICAgICAgIHBvaW50LnkgPCBtYXhZICYmIHBvaW50Lnkg
PiBtaW5ZICYmCisgICAgICAgIGxpbmVTdGFydC55ICE9PSBsaW5lRW5kLnkpIHsKKyAgICAgICAg
Y29uc3QgdGFuVG9wQW5nbGUgPSAobGluZUVuZC54IC0gbGluZVN0YXJ0LngpIC8gKGxpbmVFbmQu
eSAtIGxpbmVTdGFydC55KTsKKyAgICAgICAgcmV0dXJuIHBvaW50LnggPCBsaW5lRW5kLnggLSB0
YW5Ub3BBbmdsZSAqIChsaW5lRW5kLnkgLSBwb2ludC55KTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiBmdW5jdGlvbiBnZXRNb3VzZVBvc0luQ2FudmFzKGV2ZW50LCBjYW52YXMpIHsK
ICAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgIHJl
dHVybiB7CkBAIC0xMTgsNTUgKzE1MSw1NCBAQCBmdW5jdGlvbiBYU2Nyb2xsYWJsZUNhbnZhc1By
b3ZpZGVyKGV4cG9ydGVyLCAuLi5jaGlsZHJlbkZ1bmN0aW9ucykgewogICAgIDwvZGl2PmA7CiB9
CiAKLWZ1bmN0aW9uIG9mZnNjcmVlbkNhY2hlZFJlbmRlckZhY3RvcnkocGFkZGluZywgaGVpZ2h0
KSB7Ci0gICAgbGV0IGNhY2hlZFNjcm9sbExlZnQgPSAwOwotICAgIGxldCBvZmZzY3JlZW5DYW52
YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKLSAgICAvLyBEb3VibGUgYnVm
ZmVyaW5nCi0gICAgY29uc3Qgb2Zmc2NyZWVuQ2FudmFzQnVmZmVyID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnY2FudmFzJyk7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCByZWRy
YXdDYWNoZSB0byByZW5kZXIgYSBvZmZzY3JlZW4gY2FjaGUKLSAgICAvLyBhbmQgY29weSB0aGUg
dmlld3BvcnQgYXJlYSBmcm9tIG9mIGl0Ci0gICAgLy8gSXQgd2lsbCB0cmlnZ2VyIHJlZHJhd0Nh
Y2hlIHdoZW4gY2FjaGUgZG9uJ3QgaGF2ZSBlbm91Z2ggc3BhY2UKLSAgICByZXR1cm4gKHJlZHJh
d0NhY2hlLCBlbGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlLCBmb3JjZVJlZHJhd0NhY2hlID0gZmFs
c2UpID0+IHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNhbnZhcyBkaXNwbGF5IG9uIHRoZSBz
Y3JlZW4gb3Igbm90LAotICAgICAgICAvLyBUaGlzIHdpbGwgc2F2ZSByZW5kZXIgdGltZQorY2xh
c3MgQ29sb3JCYXRjaFJlbmRlciB7CisgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgIHRoaXMu
Y29sb3JTZXFzTWFwID0ge307CisgICAgfQorCisgICAgbGF6eUNyZWF0ZUNvbG9yU2Vxcyhjb2xv
ciwgc3RhcnRBY3Rpb24sIGZpbmFsQWN0aW9uKSB7CisgICAgICAgIGlmIChmYWxzZSA9PT0gY29s
b3IgaW4gdGhpcy5jb2xvclNlcXNNYXApCisgICAgICAgICAgICB0aGlzLmNvbG9yU2Vxc01hcFtj
b2xvcl0gPSBbc3RhcnRBY3Rpb24sIGZpbmFsQWN0aW9uXTsKKyAgICB9CisKKyAgICBhZGRTZXEo
Y29sb3IsIHNlcUFjdGlvbikgeworICAgICAgICB0aGlzLmNvbG9yU2Vxc01hcFtjb2xvcl0ucHVz
aChzZXFBY3Rpb24pOworICAgIH0KKworICAgIGJhdGNoUmVuZGVyKGNvbnRleHQpIHsKKyAgICAg
ICAgZm9yIChsZXQgY29sb3Igb2YgT2JqZWN0LmtleXModGhpcy5jb2xvclNlcXNNYXApKSB7Cisg
ICAgICAgICAgICBjb25zdCBzZXFzID0gdGhpcy5jb2xvclNlcXNNYXBbY29sb3JdOworICAgICAg
ICAgICAgc2Vxc1swXShjb250ZXh0LCBjb2xvcik7CisgICAgICAgICAgICBmb3IobGV0IGkgPSAy
OyBpIDwgc2Vxcy5sZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICBzZXFzW2ldKGNvbnRleHQs
IGNvbG9yKTsKKyAgICAgICAgICAgIHNlcXNbMV0oY29udGV4dCwgY29sb3IpOworICAgICAgICB9
CisgICAgfQorICAgIGNsZWFyKCkgeworICAgICAgICB0aGlzLmNvbG9yU2Vxc01hcCA9IG5ldyBN
YXAoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHhTY3JvbGxTdHJlYW1SZW5kZXJGYWN0b3J5KGhl
aWdodCkgeworICAgIHJldHVybiAocmVkcmF3LCBlbGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlKSA9
PiB7CiAgICAgICAgIGNvbnN0IHdpZHRoID0gdHlwZW9mIHN0YXRlRGlmZi53aWR0aCA9PT0gJ251
bWJlcicgPyBzdGF0ZURpZmYud2lkdGggOiBzdGF0ZS53aWR0aDsKICAgICAgICAgaWYgKHdpZHRo
IDw9IDApCiAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIHJlbmRlcgogICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSB3aWR0aCArIDIgKiBwYWRkaW5nOwot
ICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdHlwZW9mIHN0YXRlRGlmZi5zY3JvbGxMZWZ0ID09
PSAnbnVtYmVyJyA/IHN0YXRlRGlmZi5zY3JvbGxMZWZ0IDogc3RhdGUuc2Nyb2xsTGVmdDsKLSAg
ICAgICAgY29uc3QgY29udGV4dCA9IGVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTsKLSAgICAgICAg
bGV0IGNhY2hlUG9zTGVmdCA9IHNjcm9sbExlZnQgLSBjYWNoZWRTY3JvbGxMZWZ0OwotICAgICAg
ICBsZXQgbmVlZFRvUmVkcmF3Q2FjaGUgPSBmb3JjZVJlZHJhd0NhY2hlOwotCi0gICAgICAgIGlm
IChlbGVtZW50LmxvZ2ljV2lkdGggIT0gd2lkdGgpIHsKLSAgICAgICAgICAgIC8vIFNldHVwIHRo
ZSBkcHIgaW4gY2FzZSBvZiBibHVyCi0gICAgICAgICAgICBzZXR1cENhbnZhc1dpZHRoV2l0aERw
cihlbGVtZW50LCB3aWR0aCk7Ci0gICAgICAgICAgICBuZWVkVG9SZWRyYXdDYWNoZSA9IHRydWU7
Ci0gICAgICAgIH0gZWxzZSBpZiAoY2FjaGVQb3NMZWZ0IDwgMCB8fCBjYWNoZVBvc0xlZnQgKyB3
aWR0aCA+IHRvdGFsV2lkdGgpIHsKLSAgICAgICAgICAgIGlmIChzY3JvbGxMZWZ0IDwgMCApCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbmVlZFRvUmVkcmF3Q2FjaGUgPSB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRUb1JlZHJhd0NhY2hlKSB7Ci0gICAg
ICAgICAgICAvLyBXZSBkcmF3IGV2ZXJ5dGhpbmcgb24gY2FjaGUKLSAgICAgICAgICAgICByZWRy
YXdDYWNoZShvZmZzY3JlZW5DYW52YXMsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUsICgpID0+
IHsKLSAgICAgICAgICAgICAgICBjYWNoZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdCA8IHBhZGRp
bmcgPyBzY3JvbGxMZWZ0IDogc2Nyb2xsTGVmdCAtIHBhZGRpbmc7Ci0gICAgICAgICAgICAgICAg
Y2FjaGVQb3NMZWZ0ID0gc2Nyb2xsTGVmdCAtIGNhY2hlZFNjcm9sbExlZnQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNhY2hlUG9zTGVmdCA8IDApCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlUG9z
TGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgZWxlbWVu
dC53aWR0aCwgZWxlbWVudC5oZWlnaHQpOwotICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKG9mZnNjcmVlbkNhbnZhcywgY2FjaGVQb3NMZWZ0ICogZ2V0RGV2aWNlUGl4ZWxSYXRpbygp
LCAwLCAgICBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgMCwgMCwgd2lkdGggKiBnZXRE
ZXZpY2VQaXhlbFJhdGlvKCksIGVsZW1lbnQuaGVpZ2h0KTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNhY2hlUG9zTGVmdCA8IDApCi0gICAgICAg
ICAgICAgICAgY2FjaGVQb3NMZWZ0ID0gMDsKLSAgICAgICAgICAgIGNvbnRleHQuY2xlYXJSZWN0
KDAsIDAsIGVsZW1lbnQud2lkdGgsIGVsZW1lbnQuaGVpZ2h0KTsKLSAgICAgICAgICAgIGNvbnRl
eHQuZHJhd0ltYWdlKG9mZnNjcmVlbkNhbnZhcywgY2FjaGVQb3NMZWZ0ICogZ2V0RGV2aWNlUGl4
ZWxSYXRpbygpLCAwLCAgICBlbGVtZW50LndpZHRoLCBlbGVtZW50LmhlaWdodCwgMCwgMCwgd2lk
dGggKiBnZXREZXZpY2VQaXhlbFJhdGlvKCksIGVsZW1lbnQuaGVpZ2h0KTsKLSAgICAgICAgfQor
ICAgICAgICBsZXQgc3RhcnRYID0gMDsKKyAgICAgICAgbGV0IHJlbmRlcldpZHRoID0gd2lkdGg7
CisgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CisgICAgICAgICAgICBpZiAo
ZWxlbWVudC5sb2dpY1dpZHRoICE9PSB3aWR0aCkgeworICAgICAgICAgICAgICAgIHNldHVwQ2Fu
dmFzV2lkdGhXaXRoRHByKGVsZW1lbnQsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICBzZXR1cENh
bnZhc0NvbnRleHRTY2FsZShlbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChlbGVtZW50LmxvZ2ljSGVpZ2h0ICE9PSBoZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBzZXR1
cENhbnZhc0hlaWdodFdpdGhEcHIoZWxlbWVudCwgaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBz
ZXR1cENhbnZhc0NvbnRleHRTY2FsZShlbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiLCB7YWxwaGE6IGZhbHNlfSkuY2xlYXJSZWN0KHN0
YXJ0WCwgMCwgcmVuZGVyV2lkdGgsIGVsZW1lbnQubG9naWNIZWlnaHQpOworICAgICAgICAgICAg
cmVkcmF3KHN0YXJ0WCwgcmVuZGVyV2lkdGgsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUpOwor
ICAgICAgICB9KTsKICAgICB9CiB9CiAKQEAgLTE5NCwzMiArMjI2LDQ3IEBAIFRpbWVsaW5lLkNh
bnZhc1Nlcmllc0NvbXBvbmVudCA9IChkb3RzLCBzY2FsZXMsIG9wdGlvbiA9IHt9KSA9PiB7CiAg
ICAgY29uc3Qgb25Eb3RIb3ZlciA9IHR5cGVvZiBvcHRpb24ub25Eb3RIb3ZlciA9PT0gImZ1bmN0
aW9uIiA/IG9wdGlvbi5vbkRvdEhvdmVyIDogbnVsbDsKICAgICBjb25zdCB0YWdIZWlnaHQgPSBk
ZWZhdWx0Rm9udFNpemU7CiAgICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9uLmhlaWdodCA/IG9wdGlv
bi5oZWlnaHQgOiAyICogcmFkaXVzICsgdGFnSGVpZ2h0OwotCisgICAgY29uc3QgY29sb3JCYXRj
aFJlbmRlciA9IG5ldyBDb2xvckJhdGNoUmVuZGVyKCk7CiAKICAgICAvLyBEcmF3IGRvdCBhcGkg
Y2FuIGJlIHVzZWQgaW4gdXNlciBkZWZpbmVkIHJlbmRlciBmdW5jdGlvbgogICAgIGNvbnN0IGRy
YXdEb3QgPSAoY29udGV4dCwgeCwgeSwgaXNFbXB0eSwgdGFnID0gbnVsbCwgdXNlUmFkaXVzLCBj
b2xvciwgZW1wdHlsaW5lQ29sb3IpID0+IHsKICAgICAgICAgdXNlUmFkaXVzID0gdXNlUmFkaXVz
ID8gdXNlUmFkaXVzIDogcmFkaXVzOwogICAgICAgICBjb2xvciA9IGNvbG9yID8gY29sb3IgOiBk
ZWZhdWx0RG90Q29sb3I7CiAgICAgICAgIGVtcHR5bGluZUNvbG9yID0gZW1wdHlsaW5lQ29sb3Ig
PyBlbXB0eWxpbmVDb2xvciA6IGRlZmF1bHRFbXB0eUxpbmVDb2xvcjsKLSAgICAgICAgICAgIGlm
ICghaXNFbXB0eSkgewotICAgICAgICAgICAgICAgIC8vRHJhdyB0aGUgZG90CisgICAgICAgIGlm
ICghaXNFbXB0eSkgeworICAgICAgICAgICAgLy8gRHJhdyB0aGUgZG90CisgICAgICAgICAgICBj
b2xvckJhdGNoUmVuZGVyLmxhenlDcmVhdGVDb2xvclNlcXMoY29sb3IsIChjb250ZXh0KSA9PiB7
CiAgICAgICAgICAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LmFyYyh4ICsgZG90TWFyZ2luICsgcmFkaXVzLCB5LCByYWRpdXMsIDAsIDIgKiBNYXRo
LlBJKTsKKyAgICAgICAgICAgIH0sIChjb250ZXh0LCBjb2xvcikgPT4gewogICAgICAgICAgICAg
ICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY29sb3I7CiAgICAgICAgICAgICAgICAgY29udGV4dC5m
aWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YWcgPT09ICJudW1iZXIiIHx8IHR5
cGVvZiB0YWcgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZm9u
dCA9IGAke2ZvbnRGYW1pbHl9ICR7ZGVmYXVsdEZvbnRTaXplfXB4YDsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdGFnU2l6ZSA9IGNvbnRleHQubWVhc3VyZVRleHQodGFnKTsKLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dCh0YWcsIHggKyBkb3RNYXJnaW4gKyByYWRpdXMg
LSB0YWdTaXplLndpZHRoIC8gMiwgcmFkaXVzICogMiArIHRhZ1NpemUuZW1IZWlnaHRBc2NlbnQp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuYWRkU2VxKGNvbG9yLCAoY29udGV4dCwg
Y29sb3IpID0+IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmFyYyh4ICsgZG90TWFyZ2luICsg
cmFkaXVzLCB5LCByYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBEcmF3IHRoZSBlbXB0eQorICAgICAgICAg
ICAgY29sb3JCYXRjaFJlbmRlci5sYXp5Q3JlYXRlQ29sb3JTZXFzKGVtcHR5bGluZUNvbG9yLCAo
Y29udGV4dCkgPT4gewogICAgICAgICAgICAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7CisgICAg
ICAgICAgICB9LCAoY29udGV4dCwgY29sb3IpID0+IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LnN0cm9rZVN0eWxlID0gY29sb3I7CisgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5hZGRTZXEoZW1w
dHlsaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7CiAgICAgICAgICAgICAgICAgY29udGV4dC5tb3Zl
VG8oeCArIGRvdE1hcmdpbiwgeSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oeCAr
IGRvdE1hcmdpbiArIDIgKiByYWRpdXMsIHkpOwogICAgICAgICAgICAgICAgIGNvbnRleHQubGlu
ZVdpZHRoID0gMTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZGVmYXVs
dEVtcHR5TGluZUNvbG9yOwotICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcg
dGhlIHRhZworICAgICAgICBpZiAodHlwZW9mIHRhZyA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHRh
ZyA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIGNvbnRleHQuZm9udCA9IGAke2ZvbnRGYW1p
bHl9ICR7ZGVmYXVsdEZvbnRTaXplfXB4YDsKKyAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxl
ID0gY29sb3I7CisgICAgICAgICAgICBjb25zdCB0YWdTaXplID0gY29udGV4dC5tZWFzdXJlVGV4
dCh0YWcpOworICAgICAgICAgICAgY29udGV4dC5maWxsVGV4dCh0YWcsIHggKyBkb3RNYXJnaW4g
KyByYWRpdXMgLSB0YWdTaXplLndpZHRoIC8gMiwgcmFkaXVzICogMiArIHRhZ1NpemUuZW1IZWln
aHRBc2NlbnQpOworICAgICAgICB9CiAgICAgfTsKICAgICBjb25zdCByZW5kZXIgPSB0eXBlb2Yg
b3B0aW9uLnJlbmRlckZhY3RvcnkgPT09ICJmdW5jdGlvbiIgPyBvcHRpb24ucmVuZGVyRmFjdG9y
eShkcmF3RG90KSA6IChkb3QsIGNvbnRleHQsIHgsIHkpID0+IGRyYXdEb3QoY29udGV4dCwgeCwg
eSwgIWRvdCk7CiAgICAgY29uc3Qgc29ydERhdGEgPSBvcHRpb24uc29ydERhdGEgPT09IHRydWUg
PyBvcHRpb24uc29ydERhdGEgOiBmYWxzZTsKQEAgLTI0NSw0OSArMjkyLDM3IEBAIFRpbWVsaW5l
LkNhbnZhc1Nlcmllc0NvbXBvbmVudCA9IChkb3RzLCBzY2FsZXMsIG9wdGlvbiA9IHt9KSA9PiB7
CiAKICAgICBjb25zdCBkb3RXaWR0aCA9IDIgKiAocmFkaXVzICsgZG90TWFyZ2luKTsKICAgICBj
b25zdCBwYWRkaW5nID0gMTAwICogZG90V2lkdGggLyBnZXREZXZpY2VQaXhlbFJhdGlvKCk7Ci0g
ICAgY29uc3Qgb2Zmc2NyZWVuQ2FjaGVkUmVuZGVyID0gb2Zmc2NyZWVuQ2FjaGVkUmVuZGVyRmFj
dG9yeShwYWRkaW5nLCBoZWlnaHQpOworICAgIGNvbnN0IHhTY3JvbGxTdHJlYW1SZW5kZXIgPSB4
U2Nyb2xsU3RyZWFtUmVuZGVyRmFjdG9yeShoZWlnaHQpOwogCi0gICAgLy8gR2VuZXJhdGUgdGhl
IGRvdCBjYWNoZQotICAgIGNvbnN0IHJlZHJhd0NhY2hlID0gKG9mZnNjcmVlbkNhbnZhcywgZWxl
bWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgbm90aWZ5VG9SZW5kZXIpID0+IHsKKyAgICBjb25zdCBy
ZWRyYXcgPSAoc3RhcnRYLCByZW5kZXJXaWR0aCwgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSkg
PT4gewogICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdHlwZW9mIHN0YXRlRGlmZi5zY3JvbGxM
ZWZ0ID09PSAnbnVtYmVyJyA/IHN0YXRlRGlmZi5zY3JvbGxMZWZ0IDogc3RhdGUuc2Nyb2xsTGVm
dDsKLSAgICAgICAgY29uc3Qgd2lkdGggPSB0eXBlb2Ygc3RhdGVEaWZmLndpZHRoID09PSAnbnVt
YmVyJyA/IHN0YXRlRGlmZi53aWR0aCA6IHN0YXRlLndpZHRoOwotICAgICAgICBjb25zdCB0b3Rh
bFdpZHRoID0gd2lkdGggKyAyICogcGFkZGluZzsKICAgICAgICAgY29uc3Qgc2NhbGVzID0gc3Rh
dGVEaWZmLnNjYWxlcyA/IHN0YXRlRGlmZi5zY2FsZXMgOiBzdGF0ZS5zY2FsZXM7CiAgICAgICAg
IGNvbnN0IGRvdHMgPSBzdGF0ZURpZmYuZG90cyA/IHN0YXRlRGlmZi5kb3RzIDogc3RhdGUuZG90
czsKICAgICAgICAgLy8gVGhpcyBjb2xvciBtYXliZSBjaGFuZ2Ugd2hlbiBzd2l0Y2ggZGFyay9s
aWdodCBtb2RlCiAgICAgICAgIGNvbnN0IGRlZmF1bHRMaW5lQ29sb3IgPSBnZXRDb21wdXRlZFN0
eWxlKGRvY3VtZW50LmJvZHkpLmdldFByb3BlcnR5VmFsdWUoJy0tYm9yZGVyQ29sb3JJbmxpbmVF
bGVtZW50Jyk7Ci0gICAgICAgIGlmIChvZmZzY3JlZW5DYW52YXMubG9naWNXaWR0aCAhPT0gdG90
YWxXaWR0aCkgewotICAgICAgICAgICAgc2V0dXBDYW52YXNXaWR0aFdpdGhEcHIob2Zmc2NyZWVu
Q2FudmFzLCB0b3RhbFdpZHRoKTsKLSAgICAgICAgICAgIHNldHVwQ2FudmFzQ29udGV4dFNjYWxl
KG9mZnNjcmVlbkNhbnZhcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNjcmVlbkNhbnZh
cy5sb2dpY0hlaWdodCAhPT0gZWxlbWVudC5sb2dpY0hlaWdodCkgewotICAgICAgICAgICAgc2V0
dXBDYW52YXNIZWlnaHRXaXRoRHByKG9mZnNjcmVlbkNhbnZhcywgZWxlbWVudC5sb2dpY0hlaWdo
dCk7Ci0gICAgICAgICAgICBzZXR1cENhbnZhc0NvbnRleHRTY2FsZShvZmZzY3JlZW5DYW52YXMp
OwotICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgY29udGV4dCA9IG9mZnNjcmVlbkNhbnZhcy5n
ZXRDb250ZXh0KCIyZCIpOwotICAgICAgICAvLyBDbGVhciB0aGUgY2FjaGUKLSAgICAgICAgY29u
dGV4dC5jbGVhclJlY3QoMCwgMCwgb2Zmc2NyZWVuQ2FudmFzLndpZHRoLCBvZmZzY3JlZW5DYW52
YXMuaGVpZ2h0KTsKKyAgICAgICAgY29uc3QgY29udGV4dCA9IGVsZW1lbnQuZ2V0Q29udGV4dCgi
MmQiLCB7IGFscGhhOiBmYWxzZSB9KTsKKyAgICAgICAgLy8gQ2xlYXIgcGVydmlvdXMgYmF0Y2hS
ZW5kZXIKKyAgICAgICAgY29sb3JCYXRjaFJlbmRlci5jbGVhcigpOwogICAgICAgICAvLyBEcmF3
IHRoZSB0aW1lIGxpbmUKLSAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKLSAgICAgICAgY29u
dGV4dC5tb3ZlVG8oMCwgcmFkaXVzKTsKLSAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSAxOwot
ICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZGVmYXVsdExpbmVDb2xvcjsKLSAgICAgICAg
Y29udGV4dC5saW5lVG8odG90YWxXaWR0aCwgcmFkaXVzKTsKLSAgICAgICAgY29udGV4dC5zdHJv
a2UoKTsKKyAgICAgICAgY29sb3JCYXRjaFJlbmRlci5sYXp5Q3JlYXRlQ29sb3JTZXFzKGRlZmF1
bHRMaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7CisgICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0
aCgpOworICAgICAgICB9LCAoY29udGV4dCwgY29sb3IpID0+IHsKKyAgICAgICAgICAgIGNvbnRl
eHQubGluZVdpZHRoID0gMTsKKyAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjb2xv
cjsKKyAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7CisgICAgICAgIH0pOworICAgICAgICBj
b2xvckJhdGNoUmVuZGVyLmFkZFNlcShkZWZhdWx0TGluZUNvbG9yLCAoY29udGV4dCkgPT4gewor
ICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oc3RhcnRYLCByYWRpdXMpOworICAgICAgICAgICAg
Y29udGV4dC5saW5lVG8oc3RhcnRYICsgcmVuZGVyV2lkdGgsIHJhZGl1cyk7CisgICAgICAgIH0p
OwogCiAgICAgICAgIC8vIERyYXcgdGhlIGRvdHMKICAgICAgICAgLy8gRmlyc3QsIENhbGN1bGF0
ZSB0aGUgcmVuZGVyIHJhbmdlOgotICAgICAgICBsZXQgc3RhcnRTY2FsZXNJbmRleCA9IE1hdGgu
Zmxvb3IoKHNjcm9sbExlZnQgLSBwYWRkaW5nKSAvIGRvdFdpZHRoKTsKKyAgICAgICAgbGV0IHN0
YXJ0U2NhbGVzSW5kZXggPSBNYXRoLmZsb29yKChzY3JvbGxMZWZ0ICsgc3RhcnRYKSAvIGRvdFdp
ZHRoKTsKICAgICAgICAgaWYgKHN0YXJ0U2NhbGVzSW5kZXggPCAwKQogICAgICAgICAgICAgc3Rh
cnRTY2FsZXNJbmRleCA9IDA7Ci0gICAgICAgIGxldCB2aWV3cG9ydFN0YXJ0U2NhbGVJbmRleCA9
IE1hdGguZmxvb3IoKHNjcm9sbExlZnQpIC8gZG90V2lkdGgpOwotICAgICAgICBpZiAodmlld3Bv
cnRTdGFydFNjYWxlSW5kZXggPCAwKQotICAgICAgICAgICAgdmlld3BvcnRTdGFydFNjYWxlSW5k
ZXggPSAwOwotICAgICAgICBsZXQgdmlld3BvcnRFbmRTY2FsZUluZGV4ID0gdmlld3BvcnRTdGFy
dFNjYWxlSW5kZXggKyBNYXRoLmZsb29yKCh3aWR0aCkgLyBkb3RXaWR0aCk7Ci0gICAgICAgIGlm
ICh2aWV3cG9ydEVuZFNjYWxlSW5kZXggPj0gc2NhbGVzLmxlbmd0aCkKLSAgICAgICAgICAgIHZp
ZXdwb3J0RW5kU2NhbGVJbmRleCA9IHNjYWxlcy5sZW5ndGggLSAxOwotICAgICAgICBsZXQgZW5k
U2NhbGVzSW5kZXggPSBzdGFydFNjYWxlc0luZGV4ICsgTWF0aC5jZWlsKCh0b3RhbFdpZHRoKSAv
IGRvdFdpZHRoKTsKKyAgICAgICAgbGV0IGVuZFNjYWxlc0luZGV4ID0gc3RhcnRTY2FsZXNJbmRl
eCArIE1hdGguY2VpbCgocmVuZGVyV2lkdGgpIC8gZG90V2lkdGgpOwogICAgICAgICBpZiAoZW5k
U2NhbGVzSW5kZXggPj0gc2NhbGVzLmxlbmd0aCkKICAgICAgICAgICAgIGVuZFNjYWxlc0luZGV4
ID0gc2NhbGVzLmxlbmd0aCAtIDE7CiAgICAgICAgIGxldCBjdXJyZW50RG90SW5kZXggPSBzdGFy
dFNjYWxlc0luZGV4IC0gKHNjYWxlcy5sZW5ndGggLSBkb3RzLmxlbmd0aCk7CkBAIC0zMTAsMjMg
KzM0NSwxOCBAQCBUaW1lbGluZS5DYW52YXNTZXJpZXNDb21wb25lbnQgPSAoZG90cywgc2NhbGVz
LCBvcHRpb24gPSB7fSkgPT4gewogCiAgICAgICAgIC8vIFVzZSB0aGlzIHRvIGRlY3JlYXNlIGNv
bGlzaW9uIHNlYXJjaCBzY29wZQogICAgICAgICBpbkNhY2hlRG90cyA9IFtdOwotCi0gICAgICAg
IC8vIERyYXcgdGhlIGRvdHMgb24gY2FjaGUKICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0U2Nh
bGVzSW5kZXg7IGkgPD0gZW5kU2NhbGVzSW5kZXg7IGkrKykgewotICAgICAgICAgICAgbGV0IHgg
PSBpICogZG90V2lkdGggLSAoc2Nyb2xsTGVmdCA8IHBhZGRpbmcgPyBzY3JvbGxMZWZ0IDogc2Ny
b2xsTGVmdCAtIHBhZGRpbmcpOworICAgICAgICAgICAgbGV0IHggPSBpICogZG90V2lkdGggLSBz
Y3JvbGxMZWZ0OwogICAgICAgICAgICAgaWYgKGN1cnJlbnREb3RJbmRleCA8IGRvdHMubGVuZ3Ro
ICYmIGNvbXAoc2NhbGVzW2ldLCBnZXRTY2FsZShkb3RzW2N1cnJlbnREb3RJbmRleF0pKSA9PT0g
MCkgewogICAgICAgICAgICAgICAgIHJlbmRlcihkb3RzW2N1cnJlbnREb3RJbmRleF0sIGNvbnRl
eHQsIHgsIHJhZGl1cyk7CiAgICAgICAgICAgICAgICAgZG90c1tjdXJyZW50RG90SW5kZXhdLl9k
b3RDZW50ZXIgPSB7eDogeCArIGRvdE1hcmdpbiArIHJhZGl1cywgeTogcmFkaXVzfTsKLSAgICAg
ICAgICAgICAgICBkb3RzW2N1cnJlbnREb3RJbmRleF0uX2NhY2hlZFNjcm9sbExlZnQgPSBzY3Jv
bGxMZWZ0IDwgcGFkZGluZyA/IHNjcm9sbExlZnQgOiBzY3JvbGxMZWZ0IC0gcGFkZGluZzsKKyAg
ICAgICAgICAgICAgICBkb3RzW2N1cnJlbnREb3RJbmRleF0uX2NhY2hlZFNjcm9sbExlZnQgPSBz
Y3JvbGxMZWZ0OwogICAgICAgICAgICAgICAgIGluQ2FjaGVEb3RzLnB1c2goZG90c1tjdXJyZW50
RG90SW5kZXhdKTsKICAgICAgICAgICAgICAgICBjdXJyZW50RG90SW5kZXggKz0gMTsKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlbmRlcihudWxsLCBjb250ZXh0LCB4LCBy
YWRpdXMpOwotICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSBkcmF3ZWQgdmlld3BvcnQgbmVlZGVk
LCBjYWxsIG5vdGlmeVRvUmVuZGVyIHRvIGJyaW5nIHRoZW0gdG8gc2NyZWVuIG5vdwotICAgICAg
ICAgICAgLy8gdGhpcyB3aWxsIGhlbHAgdG8gZWxlbWF0ZSBibGluawotICAgICAgICAgICAgaWYg
KGkgPT09IHZpZXdwb3J0RW5kU2NhbGVJbmRleCkKLSAgICAgICAgICAgICAgICBub3RpZnlUb1Jl
bmRlcigpOwogICAgICAgICB9CisgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIuYmF0Y2hSZW5kZXIo
Y29udGV4dCk7CiAgICAgfTsKIAogICAgIHJldHVybiBMaXN0UHJvdmlkZXJSZWNlaXZlcigodXBk
YXRlQ29udGFpbmVyV2lkdGgsIG9uQ29udGFpbmVyU2Nyb2xsLCBvblJlc2l6ZSkgPT4gewpAQCAt
MzQzLDcgKzM3Myw3IEBAIFRpbWVsaW5lLkNhbnZhc1Nlcmllc0NvbXBvbmVudCA9IChkb3RzLCBz
Y2FsZXMsIG9wdGlvbiA9IHt9KSA9PiB7CiAgICAgICAgICAgICAgICAgc2NhbGVzOiBpbml0U2Nh
bGVzLAogICAgICAgICAgICAgICAgIHNjcm9sbExlZnQ6IDAsCiAgICAgICAgICAgICAgICAgd2lk
dGg6IDAsCi0gICAgICAgICAgICAgICAgb25TY3JlZW46IHRydWUsCisgICAgICAgICAgICAgICAg
b25TY3JlZW46IGZhbHNlLAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIG9uRWxlbWVudE1v
dW50OiAoZWxlbWVudCkgPT4gewogICAgICAgICAgICAgICAgIHNldHVwQ2FudmFzSGVpZ2h0V2l0
aERwcihlbGVtZW50LCBoZWlnaHQpOwpAQCAtMzc1LDI0ICs0MDUsMTkgQEAgVGltZWxpbmUuQ2Fu
dmFzU2VyaWVzQ29tcG9uZW50ID0gKGRvdHMsIHNjYWxlcywgb3B0aW9uID0ge30pID0+IHsKICAg
ICAgICAgICAgIG9uRWxlbWVudFVubW91bnQ6IChlbGVtZW50KSA9PiB7CiAgICAgICAgICAgICAg
ICAgb25Db250YWluZXJTY3JvbGwuc3RvcEFjdGlvbihvblNjcm9sbEFjdGlvbik7CiAgICAgICAg
ICAgICAgICAgb25SZXNpemUuc3RvcEFjdGlvbihvblJlc2l6ZUFjdGlvbik7CisgICAgICAgICAg
ICAgICAgLy8gQ2xlYW4gdGhlIGNhbnZhcywgZnJlZSBpdHMgbWVtb3J5CisgICAgICAgICAgICAg
ICAgZWxlbWVudC53aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgZWxlbWVudC5oZWlnaHQgPSAw
OwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIG9uU3RhdGVVcGRhdGU6IChlbGVtZW50LCBz
dGF0ZURpZmYsIHN0YXRlKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGVs
ZW1lbnQuZ2V0Q29udGV4dCgiMmQiKTsKLSAgICAgICAgICAgICAgICBsZXQgZm9yY2VSZWRyYXdD
YWNoZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICghc3RhdGUub25TY3JlZW4gJiYgIXN0
YXRlRGlmZi5vblNjcmVlbikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCiAgICAgICAg
ICAgICAgICAgaWYgKHN0YXRlRGlmZi5zY2FsZXMgfHwgc3RhdGVEaWZmLmRvdHMgfHwgdHlwZW9m
IHN0YXRlRGlmZi5zY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc3RhdGVEaWZmLndp
ZHRoID09PSAnbnVtYmVyJyB8fCBzdGF0ZURpZmYub25TY3JlZW4pIHsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGVEaWZmLnNjYWxlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhdGVEaWZmLnNjYWxlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlRGlmZi5zY2Fs
ZXMgPSBzdGF0ZURpZmYuc2NhbGVzLm1hcCh4ID0+IHgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yY2VSZWRyYXdDYWNoZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YXRlRGlmZi5kb3RzKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzdGF0ZURpZmYuZG90cykKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlRGlmZi5k
b3RzID0gc3RhdGVEaWZmLmRvdHMubWFwKHggPT4geCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmb3JjZVJlZHJhd0NhY2hlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gb2Zmc2NyZWVuQ2FjaGVk
UmVuZGVyKHJlZHJhd0NhY2hlLCBlbGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlLCBmb3JjZVJlZHJh
d0NhY2hlKSk7CisgICAgICAgICAgICAgICAgICAgIHhTY3JvbGxTdHJlYW1SZW5kZXIocmVkcmF3
LCBlbGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0pOwpAQCAtNDEwLDcgKzQzNSw3IEBAIFRpbWVsaW5lLkNhbnZhc1Nl
cmllc0NvbXBvbmVudCA9IChkb3RzLCBzY2FsZXMsIG9wdGlvbiA9IHt9KSA9PiB7CiAgICAgICAg
IG9uQ29udGFpbmVyU2Nyb2xsLmFjdGlvbihvblNjcm9sbEFjdGlvbik7CiAgICAgICAgIG9uUmVz
aXplLmFjdGlvbihvblJlc2l6ZUFjdGlvbik7CiAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0i
c2VyaWVzIj4KLSAgICAgICAgICAgIDxjYW52YXMgcmVmPSIke2NhbnZhc1JlZn0iPgorICAgICAg
ICAgICAgPGNhbnZhcyByZWY9IiR7Y2FudmFzUmVmfSIgd2lkdGg9IjAiIGhlaWdodD0iMCI+CiAg
ICAgICAgIDwvZGl2PmA7CiAgICAgfSk7CiB9CkBAIC01MjksNiArNTU0LDcgQEAgVGltZWxpbmUu
Q2FudmFzWEF4aXNDb21wb25lbnQgPSAoc2NhbGVzLCBvcHRpb24gPSB7fSkgPT4gewogICAgIGNv
bnN0IG1heGludW1UZXh0SGVpZ2h0ID0gc2NhbGVXaWR0aCAqIDQuNTsKICAgICBjb25zdCBjYW52
YXNIZWlnaHQgPSB0eXBlb2Ygb3B0aW9uLmhlaWdodCA9PT0gIm51bWJlciIgPyBvcHRpb24uaGVp
Z2h0IDogcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXNtYWxsU2l6
ZScpKSAqIDU7CiAgICAgY29uc3Qgc3FydDMgPSBNYXRoLnNxcnQoMyk7CisgICAgY29uc3QgY29s
b3JCYXRjaFJlbmRlciA9IG5ldyBDb2xvckJhdGNoUmVuZGVyKCk7CiAKICAgICBjb25zdCBkcmF3
U2NhbGUgPSAoc2NhbGVMYWJlbCwgZ3JvdXAsIGNvbnRleHQsIHgsIHksIGlzSG92ZXJhYmxlLCBs
aW5lQ29sb3IsIGdyb3VwQ29sb3IpID0+IHsKICAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9
IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSk7CkBAIC01MzYsNDQgKzU2Miw0NSBAQCBU
aW1lbGluZS5DYW52YXNYQXhpc0NvbXBvbmVudCA9IChzY2FsZXMsIG9wdGlvbiA9IHt9KSA9PiB7
CiAgICAgICAgIGNvbnN0IHVzZWRHcm91cENvbG9yID0gZ3JvdXBDb2xvciA/IGdyb3VwQ29sb3Ig
OiBpc0RhcmtNb2RlKCkgPyBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJy0td2hpdGUn
KSA6IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1ibGFjaycpOwogICAgICAgICBj
b25zdCB0b3RhbFdpZHRoID0gZ3JvdXAgKiBzY2FsZVdpZHRoOwogICAgICAgICBjb25zdCBiYXNl
TGluZVkgPSBpc1RvcCA/IHkgKyBjYW52YXNIZWlnaHQgLSBzY2FsZUJyb2FkTGluZUhlaWdodCA6
IHkgKyBzY2FsZUJyb2FkTGluZUhlaWdodDsKLSAgICAgICAgaWYgKGdyb3VwID4gMSkgewotICAg
ICAgICAgICAgLy8gRHJhdyBncm91cCBsYWJlbAotICAgICAgICAgICAgY29udGV4dC5iZWdpblBh
dGgoKTsKLSAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTsKLSAgICAgICAgICAgIGNv
bnRleHQuc3Ryb2tlU3R5bGUgPSB1c2VkR3JvdXBDb2xvcjsKLSAgICAgICAgICAgIGNvbnRleHQu
bW92ZVRvKHggKyBjb250ZXh0LmxpbmVXaWR0aCwgaXNUb3AgPyBjYW52YXNIZWlnaHQgOiB5KTsK
LSAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHggKyBjb250ZXh0LmxpbmVXaWR0aCwgYmFzZUxp
bmVZKTsKLSAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBEcmF3IHRhZyBsaW5lCiAgICAgICAgIGNvbnN0IG1pZGRsZVBvaW50WCA9IHggKyB0b3Rh
bFdpZHRoIC8gMjsKLSAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTsKLSAgICAgICAgY29udGV4
dC5tb3ZlVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkpOwotICAgICAgICBpZiAoIWlzVG9wKQot
ICAgICAgICAgICAgY29udGV4dC5saW5lVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgKyBzY2Fs
ZVRhZ0xpbmVIZWlnaHQgLSBzY2FsZVRhZ0xpbmVQYWRkaW5nKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY29udGV4dC5saW5lVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgLSBzY2FsZVRh
Z0xpbmVIZWlnaHQgKyBzY2FsZVRhZ0xpbmVQYWRkaW5nKTsKLSAgICAgICAgaWYgKGdyb3VwID4g
MSkKLSAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB1c2VkR3JvdXBDb2xvcjsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IHVzZWRMaW5lQ29s
b3I7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7Ci0KICAgICAgICAgaWYgKGdyb3VwID4gMSkg
ewotICAgICAgICAgICAgICAgIC8vIERyYXcgdGhlIGdyb3VwIGxpbmUKKyAgICAgICAgICAgIGNv
bG9yQmF0Y2hSZW5kZXIubGF6eUNyZWF0ZUNvbG9yU2Vxcyh1c2VkR3JvdXBDb2xvciwgKGNvbnRl
eHQpID0+IHsKICAgICAgICAgICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpOworICAgICAgICAg
ICAgfSwgKGNvbnRleHQsIGNvbG9yKSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5saW5l
V2lkdGggPSAxOworICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjb2xvcjsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBjb2xvckJhdGNoUmVuZGVyLmFkZFNlcSh1c2VkR3JvdXBDb2xvciwgKGNvbnRleHQp
ID0+IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyh4ICsgY29udGV4dC5saW5lV2lk
dGgsIGlzVG9wID8gY2FudmFzSGVpZ2h0IDogeSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5s
aW5lVG8oeCArIGNvbnRleHQubGluZVdpZHRoLCBiYXNlTGluZVkpOwogICAgICAgICAgICAgICAg
IGNvbnRleHQubW92ZVRvKHgsIGJhc2VMaW5lWSk7CiAgICAgICAgICAgICAgICAgY29udGV4dC5s
aW5lVG8oeCArIHRvdGFsV2lkdGgsIGJhc2VMaW5lWSk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC5zdHJva2VTdHlsZSA9IHVzZWRHcm91cENvbG9yOworICAgICAgICAgICAgICAgIGNvbnRleHQu
bW92ZVRvKHggKyB0b3RhbFdpZHRoLCBpc1RvcCA/IGNhbnZhc0hlaWdodCA6IHkpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQubGluZVRvKHggKyB0b3RhbFdpZHRoLCBiYXNlTGluZVkpOworICAg
ICAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzVG9wKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lmxp
bmVUbyhtaWRkbGVQb2ludFgsIGJhc2VMaW5lWSArIHNjYWxlVGFnTGluZUhlaWdodCAtIHNjYWxl
VGFnTGluZVBhZGRpbmcpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5saW5lVG8obWlkZGxlUG9pbnRYLCBiYXNlTGluZVkgLSBzY2FsZVRhZ0xpbmVI
ZWlnaHQgKyBzY2FsZVRhZ0xpbmVQYWRkaW5nKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5sYXp5Q3JlYXRlQ29sb3JTZXFz
KHVzZWRMaW5lQ29sb3IsIChjb250ZXh0KSA9PiB7CisgICAgICAgICAgICAgICAgY29udGV4dC5i
ZWdpblBhdGgoKTsKKyAgICAgICAgICAgIH0sIChjb250ZXh0LCBjb2xvcikgPT4geworICAgICAg
ICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LnN0cm9rZVN0eWxlID0gY29sb3I7CiAgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2UoKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29sb3JCYXRjaFJlbmRlci5hZGRTZXEodXNl
ZExpbmVDb2xvciwgKGNvbnRleHQpID0+IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVU
byhtaWRkbGVQb2ludFgsIGJhc2VMaW5lWSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1RvcCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8obWlkZGxlUG9pbnRYLCBiYXNlTGlu
ZVkgKyBzY2FsZVRhZ0xpbmVIZWlnaHQgLSBzY2FsZVRhZ0xpbmVQYWRkaW5nKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKG1pZGRsZVBv
aW50WCwgYmFzZUxpbmVZIC0gc2NhbGVUYWdMaW5lSGVpZ2h0ICsgc2NhbGVUYWdMaW5lUGFkZGlu
Zyk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIERyYXcgdGFnCi0g
ICAgICAgIGlmICghaXNUb3ApCi0gICAgICAgICAgICBjb250ZXh0Lm1vdmVUbyhtaWRkbGVQb2lu
dFgsIGJhc2VMaW5lWSArIHNjYWxlVGFnTGluZUhlaWdodCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbnRleHQubW92ZVRvKG1pZGRsZVBvaW50WCwgYmFzZUxpbmVZIC0gc2NhbGVUYWdM
aW5lSGVpZ2h0KTsKKyAgICAgICAgLy8gRHJhdyBUYWcKICAgICAgICAgY29udGV4dC5mb250ID0g
YCR7Zm9udFNpemV9ICR7Zm9udEZhbWlseX1gOwogICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9
IGZvbnRDb2xvcjsKICAgICAgICAgY29udGV4dC5zYXZlKCk7CkBAIC01ODksODggKzYxNiw4MiBA
QCBUaW1lbGluZS5DYW52YXNYQXhpc0NvbXBvbmVudCA9IChzY2FsZXMsIG9wdGlvbiA9IHt9KSA9
PiB7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxUZXh0KGdldExhYmVsKHNjYWxlTGFiZWwpLCBt
aWRkbGVQb2ludFgsIGJhc2VMaW5lWSAtIHNjYWxlVGFnTGluZUhlaWdodCk7CiAgICAgICAgIH0K
ICAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0KLSAgICAgICAgaWYgKGdyb3VwID4gMSkgewot
ICAgICAgICAgICAgLy8gRHJhdyBncm91cCBsYWJlbAotICAgICAgICAgICAgY29udGV4dC5iZWdp
blBhdGgoKTsKLSAgICAgICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gMTsKLSAgICAgICAgICAg
IGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB1c2VkR3JvdXBDb2xvcjsKLSAgICAgICAgICAgIGNvbnRl
eHQubW92ZVRvKHggKyB0b3RhbFdpZHRoLCBpc1RvcCA/IGNhbnZhc0hlaWdodCA6IHkpOwotICAg
ICAgICAgICAgY29udGV4dC5saW5lVG8oeCArIHRvdGFsV2lkdGgsIGJhc2VMaW5lWSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LnN0cm9rZSgpOwotICAgICAgICB9CiAgICAgfTsKICAgICBjb25zdCBy
ZW5kZXIgPSB0eXBlb2Ygb3B0aW9uLnJlbmRlckZhY3RvcnkgPT09ICJmdW5jdGlvbiIgPyBvcHRp
b24ucmVuZGVyRmFjdG9yeShkcmF3U2NhbGUpIDogKHNjYWxlTGFiZWwsIHNjYWxlR3JvdXAsIGNv
bnRleHQsIHgsIHkpID0+IGRyYXdTY2FsZShzY2FsZUxhYmVsLCBzY2FsZUdyb3VwLCBjb250ZXh0
LCB4LCB5KTsKIAogICAgIGNvbnN0IHBhZGRpbmcgPSAxMDAgKiBzY2FsZVdpZHRoIC8gZ2V0RGV2
aWNlUGl4ZWxSYXRpbygpOwotICAgIGNvbnN0IG9mZnNjcmVlbkNhY2hlZFJlbmRlciA9IG9mZnNj
cmVlbkNhY2hlZFJlbmRlckZhY3RvcnkocGFkZGluZywgY2FudmFzSGVpZ2h0KTsKLSAgICBsZXQg
aW5DYWNoZVNjYWxlcyA9IFtdOworICAgIGNvbnN0IHhTY3JvbGxTdHJlYW1SZW5kZXIgPSB4U2Ny
b2xsU3RyZWFtUmVuZGVyRmFjdG9yeShjYW52YXNIZWlnaHQpOworICAgIGxldCBvblNjcmVlblNj
YWxlcyA9IFtdOwogCiAgICAgY29uc3QgZ2V0TW91c2VFdmVudFRpcmdnZXJTY2FsZXMgPSAoZSwg
c2Nyb2xsTGVmdCwgZWxlbWVudCkgPT4gewogICAgICAgICBjb25zdCB7eCwgeX0gPSBnZXRNb3Vz
ZVBvc0luQ2FudmFzKGUsIGVsZW1lbnQpOwotICAgICAgICByZXR1cm4gaW5DYWNoZVNjYWxlcy5m
aWx0ZXIoc2NhbGUgPT4gewotICAgICAgICAgICAgY29uc3QgZGV0YWN0Qm94VG9wWCA9IHNjYWxl
Ll90YWdUb3AueCAtIHNjcm9sbExlZnQgLSBmb250U2l6ZU51bWJlciAqIHNxcnQzIC8gMjsKLSAg
ICAgICAgICAgIGlmIChkZXRhY3RCb3hUb3BYIDwgMCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgY29uc3QgZGV0YWN0Qm94VG9wWSA9IHNjYWxlLl90YWdUb3AueTsKLSAgICAgICAgICAgIGNv
bnN0IGRldGFjdEJveFdpZHRoID0gZm9udFNpemVOdW1iZXIgKiBzcXJ0MyAvIDIgKyBzY2FsZS5s
YWJlbC50b1N0cmluZygpLmxlbmd0aCAqIGZvbnRTaXplTnVtYmVyIC8gMjsKLSAgICAgICAgICAg
IGNvbnN0IGRldGFjdEJveEhlaWdodCA9IGZvbnRTaXplTnVtYmVyIC8gMiArIHNjYWxlLmxhYmVs
LnRvU3RyaW5nKCkubGVuZ3RoICogZm9udFNpemVOdW1iZXIgLyAyICogc3FydDM7Ci0gICAgICAg
ICAgICByZXR1cm4gcG9pbnRSZWN0Q29sbGlzaW9uRGV0ZWN0KHt4LCB5fSwgewotICAgICAgICAg
ICAgICAgICAgICB0b3BMZWZ0WDogZGV0YWN0Qm94VG9wWCwKLSAgICAgICAgICAgICAgICAgICAg
dG9wTGVmdFk6IGlzVG9wID8gZGV0YWN0Qm94VG9wWSAtIGRldGFjdEJveEhlaWdodCA6IGRldGFj
dEJveFRvcFksCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBkZXRhY3RCb3hXaWR0aCwKLSAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBkZXRhY3RCb3hIZWlnaHQKLSAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIG9uU2NyZWVuU2NhbGVzLmZpbHRlcihzY2FsZSA9PiB7Cisg
ICAgICAgICAgICBjb25zdCB3aWR0aCA9IHNjYWxlLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoICog
Zm9udFNpemVOdW1iZXIgLyAyOworICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gc2NhbGUubGFi
ZWwudG9TdHJpbmcoKS5sZW5ndGggKiBmb250U2l6ZU51bWJlciAvIDIgKiBzcXJ0MzsKKyAgICAg
ICAgICAgIGNvbnN0IHBvaW50MSA9IHsKKyAgICAgICAgICAgICAgICB4OiBzY2FsZS5fdGFnVG9w
LnggLSBzY3JvbGxMZWZ0IC0gKGlzVG9wID8gZm9udFNpemVOdW1iZXIgLyAyICogc3FydDMgOiAw
KSwKKyAgICAgICAgICAgICAgICB5OiBzY2FsZS5fdGFnVG9wLnkgKyAoZm9udFNpemVOdW1iZXIg
LyAyICsgc2NhbGVUYWdMaW5lSGVpZ2h0KSAqIChpc1RvcCA/IC0xIDogMSksCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgY29uc3QgcG9pbnQyID0geworICAgICAgICAgICAgICAgIHg6IHBv
aW50MS54ICsgZm9udFNpemVOdW1iZXIgLyAyICogc3FydDMsCisgICAgICAgICAgICAgICAgeTog
c2NhbGUuX3RhZ1RvcC55ICsgc2NhbGVUYWdMaW5lSGVpZ2h0ICAqIChpc1RvcCA/IC0xIDogMSkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb25zdCBwb2ludDMgPSB7CisgICAgICAgICAg
ICAgICAgeDogcG9pbnQyLnggKyB3aWR0aCwKKyAgICAgICAgICAgICAgICB5OiBwb2ludDIueSAr
IGhlaWdodCAqIChpc1RvcCA/IC0xIDogMSksCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
Y29uc3QgcG9pbnQ0ID0geworICAgICAgICAgICAgICAgIHg6IHBvaW50MS54ICsgd2lkdGgsCisg
ICAgICAgICAgICAgICAgeTogcG9pbnQxLnkgKyBoZWlnaHQgKiAoaXNUb3AgPyAtMSA6IDEpLAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBwb2ludFBvbHlnb25Db2xsaXNpb25E
ZXRlY3Qoe3gsIHl9LCBbcG9pbnQxLCBwb2ludDIsIHBvaW50MywgcG9pbnQ0XSk7CiAgICAgICAg
IH0pOwogICAgIH07Ci0gICAgY29uc3QgcmVkcmF3Q2FjaGUgPSAob2Zmc2NyZWVuQ2FudmFzLCBl
bGVtZW50LCBzdGF0ZURpZmYsIHN0YXRlLCBub3RpZnlUb1JlbmRlcikgPT4geworICAgIGNvbnN0
IHJlZHJhdyA9IChzdGFydFgsIHJlbmRlcldpZHRoLCBlbGVtZW50LCBzdGF0ZURpZmYsIHN0YXRl
KSA9PiB7CiAgICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0eXBlb2Ygc3RhdGVEaWZmLnNjcm9s
bExlZnQgPT09ICdudW1iZXInID8gc3RhdGVEaWZmLnNjcm9sbExlZnQgOiBzdGF0ZS5zY3JvbGxM
ZWZ0OwogICAgICAgICBjb25zdCBzY2FsZXMgPSBzdGF0ZURpZmYuc2NhbGVzID8gc3RhdGVEaWZm
LnNjYWxlcyA6IHN0YXRlLnNjYWxlczsKICAgICAgICAgY29uc3Qgc2NhbGVzTWFwTGlua0xpc3Qg
PSBzdGF0ZURpZmYuc2NhbGVzTWFwTGlua0xpc3QgPyBzdGF0ZURpZmYuc2NhbGVzTWFwTGlua0xp
c3QgOiBzdGF0ZS5zY2FsZXNNYXBMaW5rTGlzdDsKICAgICAgICAgY29uc3Qgd2lkdGggPSB0eXBl
b2Ygc3RhdGVEaWZmLndpZHRoID09PSAnbnVtYmVyJyA/IHN0YXRlRGlmZi53aWR0aCA6IHN0YXRl
LndpZHRoOwogICAgICAgICBjb25zdCB1c2VkTGluZUNvbG9yID0gY29tcHV0ZWRTdHlsZS5nZXRQ
cm9wZXJ0eVZhbHVlKCctLWJvcmRlckNvbG9ySW5saW5lRWxlbWVudCcpOwotICAgICAgICBjb25z
dCB0b3RhbFdpZHRoID0gMiAqIHBhZGRpbmcgKyB3aWR0aDsKICAgICAgICAgY29uc3QgYmFzZUxp
bmVZID0gaXNUb3AgPyBjYW52YXNIZWlnaHQgLSBzY2FsZUJyb2FkTGluZUhlaWdodCA6IHNjYWxl
QnJvYWRMaW5lSGVpZ2h0OwotICAgICAgICBpZiAob2Zmc2NyZWVuQ2FudmFzLmxvZ2ljV2lkdGgg
IT09IHRvdGFsV2lkdGgpIHsKLSAgICAgICAgICAgIHNldHVwQ2FudmFzV2lkdGhXaXRoRHByKG9m
ZnNjcmVlbkNhbnZhcywgdG90YWxXaWR0aCk7Ci0gICAgICAgICAgICBzZXR1cENhbnZhc0NvbnRl
eHRTY2FsZShvZmZzY3JlZW5DYW52YXMpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzY3Jl
ZW5DYW52YXMubG9naWNIZWlnaHQgIT09IGVsZW1lbnQubG9naWNIZWlnaHQpIHsKLSAgICAgICAg
ICAgIHNldHVwQ2FudmFzSGVpZ2h0V2l0aERwcihvZmZzY3JlZW5DYW52YXMsIGVsZW1lbnQubG9n
aWNIZWlnaHQpOwotICAgICAgICAgICAgc2V0dXBDYW52YXNDb250ZXh0U2NhbGUob2Zmc2NyZWVu
Q2FudmFzKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBjb250ZXh0ID0gb2Zmc2NyZWVuQ2Fu
dmFzLmdldENvbnRleHQoIjJkIik7Ci0gICAgICAgIGNvbnN0IHJlYWxTY3JvbGxMZWZ0ID0gc2Ny
b2xsTGVmdCA+IHBhZGRpbmcgPyBzY3JvbGxMZWZ0IC0gcGFkZGluZyA6IHNjcm9sbExlZnQ7Ci0g
ICAgICAgIGNvbnN0IGN1cnJlbnRTdGFydFNjYWxlSW5kZXggPSBNYXRoLmZsb29yKHJlYWxTY3Jv
bGxMZWZ0IC8gc2NhbGVXaWR0aCk7CisgICAgICAgIGNvbnN0IGNvbnRleHQgPSBlbGVtZW50Lmdl
dENvbnRleHQoIjJkIiwgeyBhbHBoYTogZmFsc2UgfSk7CisgICAgICAgIGxldCBjdXJyZW50U3Rh
cnRTY2FsZUluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gc2NhbGVXaWR0aCk7CisgICAg
ICAgIGlmIChjdXJyZW50U3RhcnRTY2FsZUluZGV4IDwgMCkKKyAgICAgICAgICAgIGN1cnJlbnRT
dGFydFNjYWxlSW5kZXggPSAwOwogICAgICAgICBjb25zdCBjdXJyZW50U3RhcnRTY2FsZUtleSA9
IGdldFNjYWxlS2V5KHNjYWxlc1tjdXJyZW50U3RhcnRTY2FsZUluZGV4XSk7Ci0gICAgICAgIGxl
dCBjdXJyZW50RW5kU2NhbGVJbmRleCA9IE1hdGguY2VpbCgocmVhbFNjcm9sbExlZnQgKyB0b3Rh
bFdpZHRoKSAvIHNjYWxlV2lkdGgpOwotICAgICAgICBjdXJyZW50RW5kU2NhbGVJbmRleCA9IGN1
cnJlbnRFbmRTY2FsZUluZGV4ID4gc2NhbGVzLmxlbmd0aCA/IHNjYWxlcy5sZW5ndGggLSAxIDog
Y3VycmVudEVuZFNjYWxlSW5kZXg7CisgICAgICAgIGxldCBjdXJyZW50RW5kU2NhbGVJbmRleCA9
IE1hdGguY2VpbCgoc2Nyb2xsTGVmdCArIHJlbmRlcldpZHRoKSAvIHNjYWxlV2lkdGgpOworICAg
ICAgICBjdXJyZW50RW5kU2NhbGVJbmRleCA9IGN1cnJlbnRFbmRTY2FsZUluZGV4ID49IHNjYWxl
cy5sZW5ndGggPyBzY2FsZXMubGVuZ3RoIC0gMSA6IGN1cnJlbnRFbmRTY2FsZUluZGV4OwogICAg
ICAgICBjb25zdCBjdXJyZW50RW5kU2NhbGVLZXkgPSBnZXRTY2FsZUtleShzY2FsZXNbY3VycmVu
dEVuZFNjYWxlSW5kZXhdKTsKLSAgICAgICAgbGV0IHZpZXdQb3J0RW5kU2NhbGVJbmRleCA9IE1h
dGguY2VpbCgocmVhbFNjcm9sbExlZnQgKyB3aWR0aCkgLyBzY2FsZVdpZHRoKTsKLSAgICAgICAg
dmlld1BvcnRFbmRTY2FsZUluZGV4ID0gdmlld1BvcnRFbmRTY2FsZUluZGV4ID4gc2NhbGVzLmxl
bmd0aCA/IHNjYWxlcy5sZW5ndGggLSAxIDogdmlld1BvcnRFbmRTY2FsZUluZGV4OwotICAgICAg
ICBjb25zdCB2aWV3UG9ydEVuZFNjYWxlS2V5ID0gZ2V0U2NhbGVLZXkoc2NhbGVzW3ZpZXdQb3J0
RW5kU2NhbGVJbmRleF0pOwogICAgICAgICBjb25zdCBjdXJyZW50U3RhcnROb2RlID0gc2NhbGVz
TWFwTGlua0xpc3QubWFwLmdldChjdXJyZW50U3RhcnRTY2FsZUtleSk7CiAgICAgICAgIGNvbnN0
IGN1cnJlbnRFbmROb2RlID0gc2NhbGVzTWFwTGlua0xpc3QubWFwLmdldChjdXJyZW50RW5kU2Nh
bGVLZXkpOwotICAgICAgICBjb25zdCB2aWV3UG9ydEVuZE5vZGUgPSBzY2FsZXNNYXBMaW5rTGlz
dC5tYXAuZ2V0KHZpZXdQb3J0RW5kU2NhbGVLZXkpOworICAgICAgICBpZiAoIWN1cnJlbnRFbmRO
b2RlKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKGN1cnJlbnRFbmRTY2FsZUtleSk7Cisg
ICAgICAgIH0KICAgICAgICAgbGV0IG5vdyA9IGN1cnJlbnRTdGFydE5vZGU7Ci0gICAgICAgIC8v
IENsZWFyIHRoZSBjYWNoZQotICAgICAgICBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCBvZmZzY3Jl
ZW5DYW52YXMud2lkdGgsIG9mZnNjcmVlbkNhbnZhcy5oZWlnaHQpOwotICAgICAgICBjb250ZXh0
Lm1vdmVUbygwLCBiYXNlTGluZVkpOwotICAgICAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDE7Ci0g
ICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSB1c2VkTGluZUNvbG9yOwotICAgICAgICBjb250
ZXh0LmxpbmVUbyhvZmZzY3JlZW5DYW52YXMubG9naWNXaWR0aCwgYmFzZUxpbmVZKTsKLSAgICAg
ICAgY29udGV4dC5zdHJva2UoKTsKLQotICAgICAgICBpbkNhY2hlU2NhbGVzID0gW107CisgICAg
ICAgIC8vIENsZWFyIHBlcnZpb3VzIGJhdGNoIHJlbmRlcgorICAgICAgICBjb2xvckJhdGNoUmVu
ZGVyLmNsZWFyKCk7CisgICAgICAgIGNvbG9yQmF0Y2hSZW5kZXIubGF6eUNyZWF0ZUNvbG9yU2Vx
cyh1c2VkTGluZUNvbG9yLCAoY29udGV4dCkgPT4geworICAgICAgICAgICAgY29udGV4dC5iZWdp
blBhdGgoKTsKKyAgICAgICAgfSwgKGNvbnRleHQsIGNvbG9yKSA9PiB7CisgICAgICAgICAgICBj
b250ZXh0LmxpbmVXaWR0aCA9IDE7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0g
Y29sb3I7CisgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpOworICAgICAgICB9KTsKKyAgICAg
ICAgY29sb3JCYXRjaFJlbmRlci5hZGRTZXEodXNlZExpbmVDb2xvciwgKGNvbnRleHQpID0+IHsK
KyAgICAgICAgICAgIGNvbnRleHQubW92ZVRvKDAsIGJhc2VMaW5lWSk7CisgICAgICAgICAgICBj
b250ZXh0LmxpbmVUbyhlbGVtZW50LmxvZ2ljV2lkdGgsIGJhc2VMaW5lWSk7CisgICAgICAgIH0p
OworCisgICAgICAgIG9uU2NyZWVuU2NhbGVzID0gW107CiAgICAgICAgIHdoaWxlIChub3cgIT0g
Y3VycmVudEVuZE5vZGUubmV4dCkgewogICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBub3cubGFi
ZWw7CiAgICAgICAgICAgICBjb25zdCBncm91cCA9IG5vdy5ncm91cDsKLSAgICAgICAgICAgIHJl
bmRlcihsYWJlbCwgZ3JvdXAsIGNvbnRleHQsIG5vdy54IC0gcmVhbFNjcm9sbExlZnQsIDApOwot
ICAgICAgICAgICAgaWYgKG5vdyA9PT0gdmlld1BvcnRFbmROb2RlKQotICAgICAgICAgICAgICAg
IG5vdGlmeVRvUmVuZGVyKCk7CisgICAgICAgICAgICByZW5kZXIobGFiZWwsIGdyb3VwLCBjb250
ZXh0LCBub3cueCAtIHNjcm9sbExlZnQsIDApOwogICAgICAgICAgICAgbm93Ll90YWdUb3AgPSB7
eDogbm93LnggKyBncm91cCAqIHNjYWxlV2lkdGggLyAyLCB5OiBpc1RvcCA/IGNhbnZhc0hlaWdo
dCAtIHNjYWxlQnJvYWRMaW5lSGVpZ2h0IDogc2NhbGVCcm9hZExpbmVIZWlnaHR9OwotICAgICAg
ICAgICAgaW5DYWNoZVNjYWxlcy5wdXNoKG5vdyk7CisgICAgICAgICAgICBvblNjcmVlblNjYWxl
cy5wdXNoKG5vdyk7CiAgICAgICAgICAgICBub3cgPSBub3cubmV4dDsKICAgICAgICAgfQorICAg
ICAgICBjb2xvckJhdGNoUmVuZGVyLmJhdGNoUmVuZGVyKGNvbnRleHQpOwogICAgIH07CiAKICAg
ICAvLyBJbml0aWFsaXplCkBAIC03NDcsMTggKzc2OCwxMiBAQCBUaW1lbGluZS5DYW52YXNYQXhp
c0NvbXBvbmVudCA9IChzY2FsZXMsIG9wdGlvbiA9IHt9KSA9PiB7CiAgICAgICAgICAgICAgICAg
ICAgIG9uUmVzaXplLnN0b3BBY3Rpb24ob25SZXNpemVBY3Rpb24pOwogICAgICAgICAgICAgICAg
IH0sCiAgICAgICAgICAgICAgICAgb25TdGF0ZVVwZGF0ZTogKGVsZW1lbnQsIHN0YXRlRGlmZiwg
c3RhdGUpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IGZvcmNlUmVkcmF3Q2FjaGUgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlRGlmZi5zY2FsZXMgfHwgdHlwZW9m
IHN0YXRlRGlmZi5zY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc3RhdGVEaWZmLndp
ZHRoID09PSAnbnVtYmVyJykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlRGlm
Zi5zY2FsZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VSZWRyYXdDYWNoZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkg
PT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbkNhY2hlZFJlbmRlcihy
ZWRyYXdDYWNoZSwgZWxlbWVudCwgc3RhdGVEaWZmLCBzdGF0ZSwgZm9yY2VSZWRyYXdDYWNoZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgeFNj
cm9sbFN0cmVhbVJlbmRlcihyZWRyYXcsIGVsZW1lbnQsIHN0YXRlRGlmZiwgc3RhdGUpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAK
LQogICAgICAgICAgICAgdXBkYXRlQ29udGFpbmVyV2lkdGgoc2NhbGVzLmxlbmd0aCAqIHNjYWxl
V2lkdGggKiBnZXREZXZpY2VQaXhlbFJhdGlvKCkpOwogICAgICAgICAgICAgY29uc3QgdXBkYXRl
RGF0YSA9IChzY2FsZXMpID0+IHsKICAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG1vZGlm
aWNhdGlvbiB3aGlsZSByZW5kZXJpbmcK
</data>

          </attachment>
      

    </bug>

</bugzilla>