<?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>142890</bug_id>
          
          <creation_ts>2015-03-19 18:31:43 -0700</creation_ts>
          <short_desc>Web Inspector: Adopt ES6 Class Syntax for all Controller Objects</short_desc>
          <delta_ts>2015-03-22 22:03:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Baker">mattbaker</reporter>
          <assigned_to name="Matt Baker">mattbaker</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>rniwa</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1078706</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2015-03-19 18:31:43 -0700</bug_when>
    <thetext>* SUMMARY
Adopt ES6 Class Syntax for all Controller Objects.

* NOTES
The const keyword isn&apos;t allowed in strict mode, and ES6 class method scope uses strict mode implicitly. Instances of const will need to be replaced with var.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078707</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-19 18:32:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/20233853&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079007</commentid>
    <comment_count>2</comment_count>
      <attachid>249152</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2015-03-20 17:19:26 -0700</bug_when>
    <thetext>Created attachment 249152
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079008</commentid>
    <comment_count>3</comment_count>
      <attachid>249152</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-20 17:21:49 -0700</bug_when>
    <thetext>Comment on attachment 249152
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/BasicBlockAnnotator.js:31
&gt; +        super(this, sourceCodeTextEditor);

This will throw a ReferenceError since it&apos;ll access &quot;this&quot; before calling super()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079009</commentid>
    <comment_count>4</comment_count>
      <attachid>249152</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-03-20 17:26:22 -0700</bug_when>
    <thetext>Comment on attachment 249152
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/CodeMirrorGradientEditingController.js:30
&gt; +        super(this, codeMirror, marker);

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:30
&gt; +        super(this, sourceCodeTextEditor);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079011</commentid>
    <comment_count>5</comment_count>
      <attachid>249152</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-20 17:54:54 -0700</bug_when>
    <thetext>Comment on attachment 249152
[PATCH] Proposed Fix

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

Must fix those super calls.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/BasicBlockAnnotator.js:31
&gt;&gt; +        super(this, sourceCodeTextEditor);
&gt; 
&gt; This will throw a ReferenceError since it&apos;ll access &quot;this&quot; before calling super()

Yes, this is replacing:

    WebInspector.Annotator.call(this, sourceCodeTextEditor);

So the &quot;this&quot; is not needed. This should just be:

    super(sourceCodeTextEditor);

You can test this at runtime by using the Type Profiler.

&gt; Source/WebInspectorUI/UserInterface/Controllers/CodeMirrorColorEditingController.js:30
&gt; +        super(this, codeMirror, marker);

Same.

&gt; Source/WebInspectorUI/UserInterface/Controllers/CodeMirrorDragToAdjustNumberController.js:26
&gt; -WebInspector.CodeMirrorDragToAdjustNumberController = function(codeMirror)
&gt; +WebInspector.CodeMirrorDragToAdjustNumberController = class CodeMirrorDragToAdjustNumberController

Weird that some of our WebInspector.CodeMirrorFoo classes extend WebInspector.Object and others don&apos;t. Maybe they all should.

&gt; Source/WebInspectorUI/UserInterface/Controllers/FormatterSourceMap.js:35
&gt; +    } 

Trailing whitespace!

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:28
&gt; -    get: function()
&gt; +    get()

Very interesting. I wonder if we should avoid this change. For now, I&apos;d prefer this to be &quot;get: function()&quot; as thinking about it at a high level, this is a get property that is a function, not a method. I think it makes more sense to use the old syntax here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079016</commentid>
    <comment_count>6</comment_count>
      <attachid>249155</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2015-03-20 18:53:01 -0700</bug_when>
    <thetext>Created attachment 249155
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079187</commentid>
    <comment_count>7</comment_count>
      <attachid>249211</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2015-03-22 18:26:15 -0700</bug_when>
    <thetext>Created attachment 249211
[PATCH] Proposed Fix

To appease the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079216</commentid>
    <comment_count>8</comment_count>
      <attachid>249211</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-22 21:16:58 -0700</bug_when>
    <thetext>Comment on attachment 249211
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/ChangeLog:6
&gt; +        Reviewed by Joseph Pecoraro.

Since this is already reviewed, you can just set the cq+ flag to get it landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079218</commentid>
    <comment_count>9</comment_count>
      <attachid>249211</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-22 22:03:10 -0700</bug_when>
    <thetext>Comment on attachment 249211
[PATCH] Proposed Fix

Clearing flags on attachment: 249211

Committed r181844: &lt;http://trac.webkit.org/changeset/181844&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079219</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-22 22:03:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249152</attachid>
            <date>2015-03-20 17:19:26 -0700</date>
            <delta_ts>2015-03-20 18:52:55 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>bug-142890-20150320171852.patch</filename>
            <type>text/plain</type>
            <size>249875</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxODE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA4
M2QzYTcyNWRhMDdhMDYxMTZjMGMyYTgxNzY1NDllZGIxNTkzMWVlLi4xZmU4NTliMzQxYTI3NThm
NjQ4OTU2MmQyMDhlMTZlMTg5MGQwMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNS0wMy0yMCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRvcHQgRVM2IENsYXNzIFN5bnRheCBmb3IgYWxs
IENvbnRyb2xsZXIgT2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQyODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBDb252ZXJ0IGFsbCBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzIG9iamVj
dHMgdG8gY2xhc3NlcworICAgICAgICAtIENvbnZlcnQgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRv
IGNvbnN0cnVjdG9yIG1ldGhvZHMKKyAgICAgICAgLSBDb252ZXJ0ICJjb25zdHJ1Y3Rvci5tZXRo
b2QiIHRvIGNsYXNzIHN0YXRpYyBtZXRob2RzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIC0gQ29u
dmVydCBhbGwgbWV0aG9kcyB0byBtZXRob2Qgc3ludGF4LCBlbGltaW5hdGUgY29tbWFzIGJldHdl
ZW4gbWV0aG9kcworICAgICAgICAtIENvbnZlcnQgYWxsIHN1cGVyY2xhc3MgY2FsbHMgaW4gY2xh
c3NlcyB0byB1c2UgInN1cGVyIgorICAgICAgICAtIFJlbW92ZWQgRklYTUUgZnJvbSBXZWJJbnNw
ZWN0b3IuT2JqZWN0IHN1YmNsYXNzZXMsIGFkZGVkIGNhbGxzIHRvIHN1cGVyLgorICAgICAgICAt
IEZpeGVkIHN0cmljdCBtb2RlIGlzc3VlcyBub3cgdGhhdCBjbGFzc2VzIGVuZm9yY2Ugc3RyaWN0
IG1vZGUgKHNlZSBiZWxvdykuCisKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXIuanM6CisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVu
dEJ1aWxkZXIuanM6CisgICAgICAgIFVwZGF0ZWQgdG8gbWF0Y2ggY29ycmVzcG9uZGluZyBmaWxl
cyBpbiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy8qLmpzOgorICAgICAgICBNYW55IGZpbGVzIG1vZGlmaWVkIG1vc3RseSBt
ZWNoYW5pY2FsbHkgKHJlZ2V4IGZpbmQtcmVwbGFjZSkuCisKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpz
OgorICAgICAgICBSZXBsYWNlZCBjb25zdCB1c2FnZSB3aXRoIHZhci4gVXNlIG9mIGNvbnN0IGlz
IHByb2hpYml0ZWQgaW4gc3RyaWN0IG1vZGUsIHdoaWNoIGlzIGltcGxpY2l0IHdpdGhpbiBhIGNs
YXNzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9ET01UcmVlTWFuYWdlci5qczoKKyAgICAgICAgTW92ZWQgZnVuY3Rpb24gZGVjbGFyYXRp
b25zIG91dCBvZiBpZiBzdGF0ZW1lbnRzLiBTdHJpY3QgbW9kZSBkb2VzIG5vdCBhbGxvdyBmdW5j
dGlvbiBkZWNsYXJhdGlvbnMgaW4gYSBsZXhpY2FsbHkgbmVzdGVkIHN0YXRlbWVudC4KKwogMjAx
NS0wMy0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEFkb3B0IEVTNiBDbGFzcyBTeW50YXggZm9yIGFsbCBNb2RlbCBPYmpl
Y3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvRm9ybWF0dGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50
aW5nL0Zvcm1hdHRlci5qcwppbmRleCA1YTdmMmQ4MGEyZjU1NDFlYjM3NWY3OTViZDA0NTllNGVl
MTg1Y2UwLi5iZmE5OThlZmY4MmRiNzM0NWYzY2RiYTgzMDcyNTBlMTBjOGU1N2FiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVy
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXIuanMKQEAgLTIzLDI0ICsyMywyMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLWZ1bmN0aW9uIEZvcm1hdHRlcihjb2RlTWlycm9yLCBidWlsZGVyKQor
Y2xhc3MgRm9ybWF0dGVyCiB7Ci0gICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJvcik7Ci0gICAg
Y29uc29sZS5hc3NlcnQoYnVpbGRlcik7Ci0KLSAgICB0aGlzLl9jb2RlTWlycm9yID0gY29kZU1p
cnJvcjsKLSAgICB0aGlzLl9idWlsZGVyID0gYnVpbGRlcjsKKyAgICBjb25zdHJ1Y3Rvcihjb2Rl
TWlycm9yLCBidWlsZGVyKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJv
cik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJ1aWxkZXIpOwogCi0gICAgdGhpcy5fbGFzdFRv
a2VuID0gbnVsbDsKLSAgICB0aGlzLl9sYXN0Q29udGVudCA9ICIiOwotfQorICAgICAgICB0aGlz
Ll9jb2RlTWlycm9yID0gY29kZU1pcnJvcjsKKyAgICAgICAgdGhpcy5fYnVpbGRlciA9IGJ1aWxk
ZXI7CiAKLUZvcm1hdHRlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IEZvcm1hdHRl
ciwKKyAgICAgICAgdGhpcy5fbGFzdFRva2VuID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbGFzdENv
bnRlbnQgPSAiIjsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAgIGZvcm1hdDogZnVuY3Rp
b24oZnJvbSwgdG8pCisgICAgZm9ybWF0KGZyb20sIHRvKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fYnVpbGRlci5vcmlnaW5hbENvbnRlbnQgPT09IG51bGwpOwogICAgICAg
ICBpZiAodGhpcy5fYnVpbGRlci5vcmlnaW5hbENvbnRlbnQgIT09IG51bGwpCkBAIC03NywxMSAr
NzYsMTEgQEAgRm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRo
aXMuX2J1aWxkZXIuZmluaXNoKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAK
LSAgICBfaGFuZGxlVG9rZW46IGZ1bmN0aW9uKG1vZGUsIHRva2VuLCBzdGF0ZSwgc3RyZWFtLCBv
cmlnaW5hbFBvc2l0aW9uLCBpc1doaXRlU3BhY2UsIHN0YXJ0T2ZOZXdMaW5lLCBmaXJzdFRva2Vu
T25MaW5lKQorICAgIF9oYW5kbGVUb2tlbihtb2RlLCB0b2tlbiwgc3RhdGUsIHN0cmVhbSwgb3Jp
Z2luYWxQb3NpdGlvbiwgaXNXaGl0ZVNwYWNlLCBzdGFydE9mTmV3TGluZSwgZmlyc3RUb2tlbk9u
TGluZSkKICAgICB7CiAgICAgICAgIC8vIFN0cmluZyBjb250ZW50IG9mIHRoZSB0b2tlbi4KICAg
ICAgICAgdmFyIGNvbnRlbnQgPSBzdHJlYW0uY3VycmVudCgpOwpAQCAtMTQ2LDE3ICsxNDUsMTcg
QEAgRm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gUmVjb3JkIHRoaXMgdG9rZW4g
YXMgdGhlIGxhc3QgdG9rZW4uCiAgICAgICAgIHRoaXMuX2xhc3RUb2tlbiA9IHRva2VuOwogICAg
ICAgICB0aGlzLl9sYXN0Q29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
aGFuZGxlRW1wdHlMaW5lOiBmdW5jdGlvbigpCisgICAgX2hhbmRsZUVtcHR5TGluZSgpCiAgICAg
ewogICAgICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCB3aGl0ZXNwYWNlIG9ubHkgbGluZXMgYnkg
YWRkaW5nIGEgbmV3bGluZS4KICAgICAgICAgLy8gSG93ZXZlciwgZG9uJ3QgZG8gdGhpcyBpZiB0
aGUgYnVpbGRlciBqdXN0IGFkZGVkIG11bHRpcGxlIG5ld2xpbmVzLgogICAgICAgICBpZiAoISh0
aGlzLl9idWlsZGVyLmxhc3RUb2tlbldhc05ld2xpbmUgJiYgdGhpcy5fYnVpbGRlci5sYXN0TmV3
bGluZUFwcGVuZFdhc011bHRpcGxlKSkKICAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYXBwZW5k
TmV3bGluZSh0cnVlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVMaW5lRW5kaW5nOiBm
dW5jdGlvbihvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbikKKyAgICBfaGFuZGxlTGluZUVuZGluZyhv
cmlnaW5hbE5ld0xpbmVQb3NpdGlvbikKICAgICB7CiAgICAgICAgIC8vIFJlY29yZCB0aGUgb3Jp
Z2luYWwgbGluZSBlbmRpbmcuCiAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkT3JpZ2luYWxMaW5l
RW5kaW5nKG9yaWdpbmFsTmV3TGluZVBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJD
b250ZW50QnVpbGRlci5qcwppbmRleCAzYzM2YTJiYjNmMzg0NGU4MzdjNmIwYTg2ZmY4YThjOGU1
ZTMwMGI0Li44MjkxYzM0YTQ2MDZmMGE4MDJkYTA2NGE4M2VjM2JhMTMxNDg4YzZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVy
Q29udGVudEJ1aWxkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0
eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCkBAIC0yMyw3MCArMjMsNjkgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1mdW5jdGlvbiBGb3Jt
YXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0
ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxPZmZzZXQsIGZvcm1hdHRlZE9mZnNldCwgaW5kZW50U3Ry
aW5nKQorY2xhc3MgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIKIHsKLSAgICB0aGlzLl9vcmlnaW5h
bENvbnRlbnQgPSBudWxsOwotICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQgPSBbXTsKLSAgICB0
aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoID0gMDsKLQotICAgIHRoaXMuX3N0YXJ0T2ZMaW5l
ID0gdHJ1ZTsKLSAgICB0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgPSBmYWxzZTsKLSAgICB0aGlz
Lmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBmYWxzZTsKLSAgICB0aGlzLmxhc3ROZXdsaW5lQXBw
ZW5kV2FzTXVsdGlwbGUgPSBmYWxzZTsKKyAgICBjb25zdHJ1Y3RvcihtYXBwaW5nLCBvcmlnaW5h
bExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxPZmZzZXQsIGZvcm1h
dHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQorICAgIHsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxD
b250ZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCA9IFtdOworICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoID0gMDsKIAotICAgIHRoaXMuX2luZGVu
dCA9IDA7Ci0gICAgdGhpcy5faW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nOwotICAgIHRoaXMu
X2luZGVudENhY2hlID0gWyIiLCB0aGlzLl9pbmRlbnRTdHJpbmddOworICAgICAgICB0aGlzLl9z
dGFydE9mTGluZSA9IHRydWU7CisgICAgICAgIHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZh
bHNlOworICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7CiAKLSAgICB0aGlz
Ll9tYXBwaW5nID0gbWFwcGluZzsKLSAgICB0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzID0gb3Jp
Z2luYWxMaW5lRW5kaW5ncyB8fCBbXTsKLSAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncyA9
IGZvcm1hdHRlZExpbmVFbmRpbmdzIHx8IFtdOwotICAgIHRoaXMuX29yaWdpbmFsT2Zmc2V0ID0g
b3JpZ2luYWxPZmZzZXQgfHwgMDsKLSAgICB0aGlzLl9mb3JtYXR0ZWRPZmZzZXQgPSBmb3JtYXR0
ZWRPZmZzZXQgfHwgMDsKKyAgICAgICAgdGhpcy5faW5kZW50ID0gMDsKKyAgICAgICAgdGhpcy5f
aW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nOworICAgICAgICB0aGlzLl9pbmRlbnRDYWNoZSA9
IFsiIiwgdGhpcy5faW5kZW50U3RyaW5nXTsKIAotICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0
aW9uID0gMDsKLSAgICB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRpb24gPSAwOwotfQorICAgICAg
ICB0aGlzLl9tYXBwaW5nID0gbWFwcGluZzsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5k
aW5ncyA9IG9yaWdpbmFsTGluZUVuZGluZ3MgfHwgW107CisgICAgICAgIHRoaXMuX2Zvcm1hdHRl
ZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGluZUVuZGluZ3MgfHwgW107CisgICAgICAgIHRoaXMu
X29yaWdpbmFsT2Zmc2V0ID0gb3JpZ2luYWxPZmZzZXQgfHwgMDsKKyAgICAgICAgdGhpcy5fZm9y
bWF0dGVkT2Zmc2V0ID0gZm9ybWF0dGVkT2Zmc2V0IHx8IDA7CiAKLUZvcm1hdHRlckNvbnRlbnRC
dWlsZGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogRm9ybWF0dGVyQ29udGVudEJ1
aWxkZXIsCisgICAgICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID0gMDsKKyAgICAgICAg
dGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gMDsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMK
IAogICAgIGdldCBvcmlnaW5hbENvbnRlbnQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X29yaWdpbmFsQ29udGVudDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBmb3JtYXR0ZWRDb250
ZW50KCkKICAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250
ZW50LmpvaW4oIiIpOwogICAgICAgICBjb25zb2xlLmFzc2VydChmb3JtYXR0ZWQubGVuZ3RoID09
PSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIGZvcm1hdHRl
ZDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBtYXBwaW5nKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9tYXBwaW5nOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IG9yaWdpbmFsTGlu
ZUVuZGluZ3MoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsTGluZUVuZGlu
Z3M7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZm9ybWF0dGVkTGluZUVuZGluZ3MoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzOwotICAgIH0sCisg
ICAgfQogCi0gICAgc2V0T3JpZ2luYWxDb250ZW50OiBmdW5jdGlvbihvcmlnaW5hbENvbnRlbnQp
CisgICAgc2V0T3JpZ2luYWxDb250ZW50KG9yaWdpbmFsQ29udGVudCkKICAgICB7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9vcmlnaW5hbENvbnRlbnQpOwogICAgICAgICB0aGlzLl9v
cmlnaW5hbENvbnRlbnQgPSBvcmlnaW5hbENvbnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBh
cHBlbmRUb2tlbjogZnVuY3Rpb24oc3RyaW5nLCBvcmlnaW5hbFBvc2l0aW9uKQorICAgIGFwcGVu
ZFRva2VuKHN0cmluZywgb3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGlmICh0aGlz
Ll9zdGFydE9mTGluZSkKICAgICAgICAgICAgIHRoaXMuX2FwcGVuZEluZGVudCgpOwpAQCAtOTcs
MTggKzk2LDE4IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fc3RhcnRPZkxpbmUgPSBmYWxzZTsKICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNO
ZXdsaW5lID0gZmFsc2U7CiAgICAgICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZh
bHNlOwotICAgIH0sCisgICAgfQogCi0gICAgYXBwZW5kU3BhY2U6IGZ1bmN0aW9uKCkKKyAgICBh
cHBlbmRTcGFjZSgpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0T2ZMaW5lKSB7CiAg
ICAgICAgICAgICB0aGlzLl9hcHBlbmQoIiAiKTsKICAgICAgICAgICAgIHRoaXMubGFzdFRva2Vu
V2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNw
YWNlID0gdHJ1ZTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgYXBwZW5kTmV3bGlu
ZTogZnVuY3Rpb24oZm9yY2UpCisgICAgYXBwZW5kTmV3bGluZShmb3JjZSkKICAgICB7CiAgICAg
ICAgIGlmICgoIXRoaXMubGFzdFRva2VuV2FzTmV3bGluZSAmJiAhdGhpcy5fc3RhcnRPZkxpbmUp
IHx8IGZvcmNlKSB7CiAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoIlxuIik7CkBAIC0xMTgsOSAr
MTE3LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlz
Lmxhc3ROZXdsaW5lQXBwZW5kV2FzTXVsdGlwbGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0s
CisgICAgfQogCi0gICAgYXBwZW5kTXVsdGlwbGVOZXdsaW5lczogZnVuY3Rpb24obmV3bGluZXMp
CisgICAgYXBwZW5kTXVsdGlwbGVOZXdsaW5lcyhuZXdsaW5lcykKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KG5ld2xpbmVzID4gMCk7CiAKQEAgLTEzMSw5ICsxMzAsOSBAQCBGb3JtYXR0
ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHdhc011bHRpcGxl
KQogICAgICAgICAgICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gdHJ1ZTsK
LSAgICB9LAorICAgIH0KIAotICAgIHJlbW92ZUxhc3ROZXdsaW5lOiBmdW5jdGlvbigpCisgICAg
cmVtb3ZlTGFzdE5ld2xpbmUoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5s
YXN0VG9rZW5XYXNOZXdsaW5lKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fZm9ybWF0
dGVkQ29udGVudC5sYXN0VmFsdWUgPT09ICJcbiIpOwpAQCAtMTQzLDQ4ICsxNDIsNDggQEAgRm9y
bWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5sYXN0
VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1do
aXRlc3BhY2UgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgaW5kZW50
OiBmdW5jdGlvbigpCisgICAgaW5kZW50KCkKICAgICB7CiAgICAgICAgICsrdGhpcy5faW5kZW50
OwotICAgIH0sCisgICAgfQogCi0gICAgZGVkZW50OiBmdW5jdGlvbigpCisgICAgZGVkZW50KCkK
ICAgICB7CiAgICAgICAgIC0tdGhpcy5faW5kZW50OwogCiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRoaXMuX2luZGVudCA+PSAwKTsKICAgICAgICAgaWYgKHRoaXMuX2luZGVudCA8IDApCiAgICAg
ICAgICAgICB0aGlzLl9pbmRlbnQgPSAwOwotICAgIH0sCisgICAgfQogCi0gICAgYWRkT3JpZ2lu
YWxMaW5lRW5kaW5nOiBmdW5jdGlvbihvcmlnaW5hbFBvc2l0aW9uKQorICAgIGFkZE9yaWdpbmFs
TGluZUVuZGluZyhvcmlnaW5hbFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgdGhpcy5fb3JpZ2lu
YWxMaW5lRW5kaW5ncy5wdXNoKG9yaWdpbmFsUG9zaXRpb24pOwotICAgIH0sCisgICAgfQogCi0g
ICAgZmluaXNoOiBmdW5jdGlvbigpCisgICAgZmluaXNoKCkKICAgICB7CiAgICAgICAgIHRoaXMu
YXBwZW5kTmV3bGluZSgpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAg
X3BvcE5ld0xpbmU6IGZ1bmN0aW9uKCkKKyAgICBfcG9wTmV3TGluZSgpCiAgICAgewogICAgICAg
ICB2YXIgcmVtb3ZlZCA9IHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQucG9wKCk7CiAgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZENvbnRlbnRMZW5ndGggLT0gcmVtb3ZlZC5sZW5ndGg7CiAgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLnBvcCgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2Fw
cGVuZDogZnVuY3Rpb24oc3RyKQorICAgIF9hcHBlbmQoc3RyKQogICAgIHsKICAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29udGVudC5wdXNoKHN0cik7CiAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZENv
bnRlbnRMZW5ndGggKz0gc3RyLmxlbmd0aDsKLSAgICB9LAorICAgIH0KIAotICAgIF9hcHBlbmRJ
bmRlbnQ6IGZ1bmN0aW9uKCkKKyAgICBfYXBwZW5kSW5kZW50KCkKICAgICB7CiAgICAgICAgIC8v
IEluZGVudCBpcyBhbHJlYWR5IGluIHRoZSBjYWNoZS4KICAgICAgICAgaWYgKHRoaXMuX2luZGVu
dCA8IHRoaXMuX2luZGVudENhY2hlLmxlbmd0aCkgewpAQCAtMTkzLDcgKzE5Miw3IEBAIEZvcm1h
dHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IEluZGVudCB3YXMgbm90IGluIHRoZSBjYWNoZSwgZmlsbCB1cCB0aGUgY2FjaGUgdXAgd2l0aCB3
aGF0IHdhcyBuZWVkZWQuCi0gICAgICAgIGNvbnN0IG1heENhY2hlSW5kZW50ID0gMjA7CisgICAg
ICAgIHZhciBtYXhDYWNoZUluZGVudCA9IDIwOwogICAgICAgICB2YXIgbWF4ID0gTWF0aC5taW4o
dGhpcy5faW5kZW50LCBtYXhDYWNoZUluZGVudCk7CiAgICAgICAgIGZvciAodmFyIGkgPSB0aGlz
Ll9pbmRlbnRDYWNoZS5sZW5ndGg7IGkgPD0gbWF4OyArK2kpCiAgICAgICAgICAgICB0aGlzLl9p
bmRlbnRDYWNoZVtpXSA9IHRoaXMuX2luZGVudENhY2hlW2kgLSAxXSArIHRoaXMuX2luZGVudFN0
cmluZzsKQEAgLTIwNyw5ICsyMDYsOSBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kKHRoaXMuX2luZGVudENhY2hlW2lu
ZGVudF0pOwogICAgICAgICAgICAgaW5kZW50IC09IG1heENhY2hlSW5kZW50OwogICAgICAgICB9
IHdoaWxlIChpbmRlbnQgPiAwKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRNYXBwaW5nSWZO
ZWVkZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRpb24pCisgICAgX2FkZE1hcHBpbmdJZk5lZWRl
ZChvcmlnaW5hbFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKG9yaWdpbmFsUG9zaXRpb24g
LSB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlvbiA9PT0gdGhpcy5fZm9ybWF0dGVkQ29udGVudExl
bmd0aCAtIHRoaXMuX2xhc3RGb3JtYXR0ZWRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTIxOSw5ICsyMTgsOSBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgdGhpcy5fbGFzdE9yaWdpbmFsUG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9u
OwogICAgICAgICB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZWRD
b250ZW50TGVuZ3RoOwotICAgIH0sCisgICAgfQogCi0gICAgX2FkZEZvcm1hdHRlZExpbmVFbmRp
bmc6IGZ1bmN0aW9uKCkKKyAgICBfYWRkRm9ybWF0dGVkTGluZUVuZGluZygpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9mb3JtYXR0ZWRDb250ZW50Lmxhc3RWYWx1ZSA9PT0g
IlxuIik7CiAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLnB1c2godGhpcy5fZm9y
bWF0dGVkQ29udGVudExlbmd0aCAtIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2Vy
LmpzCmluZGV4IDNkYzExZjFjYzAzNDEzMWExMmZjZDY3MmVmNTJiZmE1YWZhOWVjNmUuLjUyNjg1
Nzk4YTRlYzA2MGZmMzBkNWE3YWJkNTYwZTllOGIxMDU4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9B
bmFseXplck1hbmFnZXIuanMKQEAgLTIzLDU4ICsyMyw1MiBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIgPSBm
dW5jdGlvbigpCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyID0gY2xhc3MgQW5hbHl6ZXJN
YW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252
ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBl
cigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMu
X2VzbGludENvbmZpZyA9IHsKLSAgICAgICAgZW52OiB7Ci0gICAgICAgICAgICAiYnJvd3NlciI6
IHRydWUsCi0gICAgICAgICAgICAibm9kZSI6IGZhbHNlCi0gICAgICAgIH0sCi0gICAgICAgIGds
b2JhbHM6IHsKLSAgICAgICAgICAgICJkb2N1bWVudCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAg
ICAgcnVsZXM6IHsKLSAgICAgICAgICAgICJjb25zaXN0ZW50LXJldHVybiI6IDIsCi0gICAgICAg
ICAgICAiY3VybHkiOiAwLAotICAgICAgICAgICAgImVxZXFlcSI6IDAsCi0gICAgICAgICAgICAi
bmV3LXBhcmVucyI6IDAsCi0gICAgICAgICAgICAibm8tY29tbWEtZGFuZ2xlIjogMCwKLSAgICAg
ICAgICAgICJuby1jb25zb2xlIjogMCwKLSAgICAgICAgICAgICJuby1jb25zdGFudC1jb25kaXRp
b24iOiAwLAotICAgICAgICAgICAgIm5vLWV4dHJhLWJpbmQiOiAyLAotICAgICAgICAgICAgIm5v
LWV4dHJhLXNlbWkiOiAyLAotICAgICAgICAgICAgIm5vLXByb3RvIjogMCwKLSAgICAgICAgICAg
ICJuby1yZXR1cm4tYXNzaWduIjogMiwKLSAgICAgICAgICAgICJuby10cmFpbGluZy1zcGFjZXMi
OiAyLAotICAgICAgICAgICAgIm5vLXVuZGVyc2NvcmUtZGFuZ2xlIjogMCwKLSAgICAgICAgICAg
ICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAotICAgICAgICAgICAgIm5vLXdyYXAtZnVuYyI6
IDIsCi0gICAgICAgICAgICAic2VtaSI6IDIsCi0gICAgICAgICAgICAic3BhY2UtaW5maXgtb3Bz
IjogMiwKLSAgICAgICAgICAgICJzcGFjZS1yZXR1cm4tdGhyb3ctY2FzZSI6IDIsCi0gICAgICAg
ICAgICAic3RyaWN0IjogMCwKLSAgICAgICAgICAgICJ2YWxpZC10eXBlb2YiOiAyCi0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGhpcy5fc291cmNlQ29kZU1lc3NhZ2VzTWFwID0gbmV3IFdlYWtN
YXA7Ci0KLSAgICBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LkNvbnRlbnREaWRDaGFuZ2UsIHRoaXMuX2hhbmRsZVNv
dXJjZUNvZGVDb250ZW50RGlkQ2hhbmdlLCB0aGlzKTsKLX07CisgICAgY29uc3RydWN0b3IoKQor
ICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKworICAgICAgICB0aGlzLl9lc2xpbnRDb25maWcgPSB7
CisgICAgICAgICAgICBlbnY6IHsKKyAgICAgICAgICAgICAgICAiYnJvd3NlciI6IHRydWUsCisg
ICAgICAgICAgICAgICAgIm5vZGUiOiBmYWxzZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IGdsb2JhbHM6IHsKKyAgICAgICAgICAgICAgICAiZG9jdW1lbnQiOiB0cnVlCisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgcnVsZXM6IHsKKyAgICAgICAgICAgICAgICAiY29uc2lzdGVudC1y
ZXR1cm4iOiAyLAorICAgICAgICAgICAgICAgICJjdXJseSI6IDAsCisgICAgICAgICAgICAgICAg
ImVxZXFlcSI6IDAsCisgICAgICAgICAgICAgICAgIm5ldy1wYXJlbnMiOiAwLAorICAgICAgICAg
ICAgICAgICJuby1jb21tYS1kYW5nbGUiOiAwLAorICAgICAgICAgICAgICAgICJuby1jb25zb2xl
IjogMCwKKyAgICAgICAgICAgICAgICAibm8tY29uc3RhbnQtY29uZGl0aW9uIjogMCwKKyAgICAg
ICAgICAgICAgICAibm8tZXh0cmEtYmluZCI6IDIsCisgICAgICAgICAgICAgICAgIm5vLWV4dHJh
LXNlbWkiOiAyLAorICAgICAgICAgICAgICAgICJuby1wcm90byI6IDAsCisgICAgICAgICAgICAg
ICAgIm5vLXJldHVybi1hc3NpZ24iOiAyLAorICAgICAgICAgICAgICAgICJuby10cmFpbGluZy1z
cGFjZXMiOiAyLAorICAgICAgICAgICAgICAgICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDAsCisg
ICAgICAgICAgICAgICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IDIsCisgICAgICAgICAgICAg
ICAgIm5vLXdyYXAtZnVuYyI6IDIsCisgICAgICAgICAgICAgICAgInNlbWkiOiAyLAorICAgICAg
ICAgICAgICAgICJzcGFjZS1pbmZpeC1vcHMiOiAyLAorICAgICAgICAgICAgICAgICJzcGFjZS1y
ZXR1cm4tdGhyb3ctY2FzZSI6IDIsCisgICAgICAgICAgICAgICAgInN0cmljdCI6IDAsCisgICAg
ICAgICAgICAgICAgInZhbGlkLXR5cGVvZiI6IDIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
IAotV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwID0gbmV3IE1h
cDsKLVdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1hcC5zZXQoV2Vi
SW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0LCBlc2xpbnQpOworICAgICAgICB0aGlzLl9z
b3VyY2VDb2RlTWVzc2FnZXNNYXAgPSBuZXcgV2Vha01hcDsKIAotV2ViSW5zcGVjdG9yLkFuYWx5
emVyTWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5B
bmFseXplck1hbmFnZXIsCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3Rv
dHlwZSwKKyAgICAgICAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250ZW50RGlkQ2hhbmdlLCB0aGlzLl9oYW5k
bGVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZSwgdGhpcyk7CisgICAgfQogCiAgICAgLy8gUHVi
bGljCiAKLSAgICBnZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291
cmNlQ29kZSkKKyAgICBnZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZShzb3VyY2VDb2Rl
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCkgewogICAgICAgICAgICAgdmFyIGFuYWx5emVyID0gV2ViSW5zcGVjdG9yLkFuYWx5emVy
TWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLmdldChzb3VyY2VDb2RlLnR5cGUpOwpAQCAtMTA0LDE2
ICs5OCwxNiBAQCBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICAgICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0cmlldmVBbmFs
eXplck1lc3NhZ2VzLmJpbmQodGhpcykpOwogICAgICAgICB9LmJpbmQodGhpcykpOwotICAgIH0s
CisgICAgfQogCi0gICAgc291cmNlQ29kZUNhbkJlQW5hbHl6ZWQ6IGZ1bmN0aW9uKHNvdXJjZUNv
ZGUpCisgICAgc291cmNlQ29kZUNhbkJlQW5hbHl6ZWQoc291cmNlQ29kZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBzb3VyY2VDb2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBl
LlNjcmlwdDsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9oYW5kbGVT
b3VyY2VDb2RlQ29udGVudERpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX2hhbmRsZVNv
dXJjZUNvZGVDb250ZW50RGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIHNvdXJj
ZUNvZGUgPSBldmVudC50YXJnZXQ7CiAKQEAgLTEyMSwzICsxMTUsNiBAQCBXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc291cmNlQ29kZU1l
c3NhZ2VzTWFwLmRlbGV0ZShzb3VyY2VDb2RlKTsKICAgICB9CiB9OworCitXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyLl90eXBlQW5hbHl6ZXJNYXAgPSBuZXcgTWFwOworV2ViSW5zcGVjdG9y
LkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLnNldChXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UuVHlwZS5TY3JpcHQsIGVzbGludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3IuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3IuanMKaW5kZXggMTYw
Mjc1ZGY3ZmQ2YTg0ZGI5N2MwNGQxOGRhMmMzNjhjNjdhZGMwZC4uM2U4N2JiNWE0YmViOTMyZjRm
OGY2NjY0MjIxNjk3NWQ5YjE0MmQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvci5qcwpAQCAtMjQs
NDggKzI0LDQ1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
V2ViSW5zcGVjdG9yLkFubm90YXRvciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVUZXh0RWRpdG9yKQor
V2ViSW5zcGVjdG9yLkFubm90YXRvciA9IGNsYXNzIEFubm90YXRvciBleHRlbmRzIFdlYkluc3Bl
Y3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVj
dG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0
b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlVGV4
dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciwgc291
cmNlQ29kZVRleHRFZGl0b3IpOworICAgIGNvbnN0cnVjdG9yKHNvdXJjZUNvZGVUZXh0RWRpdG9y
KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotICAgIHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRp
dG9yID0gc291cmNlQ29kZVRleHRFZGl0b3I7Ci0gICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIg
PSBudWxsOwotICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7Ci19OworICAgICAgICBjb25zb2xl
LmFzc2VydChzb3VyY2VDb2RlVGV4dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvciwgc291cmNlQ29kZVRleHRFZGl0b3IpOwogCi1XZWJJbnNwZWN0b3Iu
QW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkFu
bm90YXRvciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAor
ICAgICAgICB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRpdG9y
OworICAgICAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgIHRoaXMu
X2lzQWN0aXZlID0gZmFsc2U7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKICAgICBnZXQgc291
cmNlQ29kZVRleHRFZGl0b3IoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNv
ZGVUZXh0RWRpdG9yOwotICAgIH0sCisgICAgfQogCi0gICAgaXNBY3RpdmU6IGZ1bmN0aW9uKCkK
KyAgICBpc0FjdGl2ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faXNBY3RpdmU7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBwYXVzZTogZnVuY3Rpb24oKQorICAgIHBhdXNlKCkKICAgICB7
CiAgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7CiAgICAgICAgIHRoaXMuX2lz
QWN0aXZlID0gZmFsc2U7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXN1bWU6IGZ1bmN0aW9uKCkK
KyAgICByZXN1bWUoKQogICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQo
KTsKICAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOwogICAgICAgICB0aGlzLmluc2VydEFu
bm90YXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZWZyZXNoOiBmdW5jdGlvbigpCisg
ICAgcmVmcmVzaCgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pc0FjdGl2
ZSk7CiAgICAgICAgIGlmICghdGhpcy5faXNBY3RpdmUpCkBAIC03MywzNyArNzAsMzcgQEAgV2Vi
SW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY2xlYXJU
aW1lb3V0SWZOZWVkZWQoKTsKICAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOwotICAg
IH0sCisgICAgfQogCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICByZXNldCgpCiAgICAgewog
ICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwogICAgICAgICB0aGlzLl9pc0Fj
dGl2ZSA9IHRydWU7CiAgICAgICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgICB0
aGlzLmluc2VydEFubm90YXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjbGVhcjogZnVu
Y3Rpb24oKQorICAgIGNsZWFyKCkKICAgICB7CiAgICAgICAgIHRoaXMucGF1c2UoKTsKICAgICAg
ICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90
ZWN0ZWQKIAotICAgIGluc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgaW5zZXJ0QW5u
b3RhdGlvbnMoKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4K
LSAgICB9LAorICAgIH0KIAotICAgIGNsZWFyQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBj
bGVhckFubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNs
YXNzZXMuCi0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfY2xlYXJUaW1l
b3V0SWZOZWVkZWQ6IGZ1bmN0aW9uKCkKKyAgICBfY2xlYXJUaW1lb3V0SWZOZWVkZWQoKQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBj
bGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qcwppbmRleCA4ZGE2NDljNmExYzJmOTg5ZWE2
YzJkNmE3ODM1NTJiYzU4ZTkwZjkxLi43OTg2NmEyYjliODNkZTRlOThhOTEyODg2N2VmYmM5NjY1
YzM1N2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdl
ci5qcwpAQCAtMjMsNzQgKzIzLDU1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyID0gZnVuY3Rp
b24oKQorV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyID0gY2xhc3MgQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8g
RklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFu
ZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwot
Ci0gICAgaWYgKHdpbmRvdy5BcHBsaWNhdGlvbkNhY2hlQWdlbnQpCi0gICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5lbmFibGUoKTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2Us
IHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkZy
YW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LkNoaWxkRnJhbWVX
YXNSZW1vdmVkLCB0aGlzLl9jaGlsZEZyYW1lV2FzUmVtb3ZlZCwgdGhpcyk7Ci0KLSAgICB0aGlz
Ll9vbmxpbmUgPSB0cnVlOworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVy
KCk7CiAKLSAgICB0aGlzLmluaXRpYWxpemUoKTsKLX07CisgICAgICAgIGlmICh3aW5kb3cuQXBw
bGljYXRpb25DYWNoZUFnZW50KQorICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUFnZW50LmVu
YWJsZSgpOwogCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuRXZlbnQgPSB7
Ci0gICAgQ2xlYXJlZDogImFwcGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItY2xlYXJlZCIsCi0gICAg
RnJhbWVNYW5pZmVzdEFkZGVkOiAiYXBwbGljYXRpb24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5p
ZmVzdC1hZGRlZCIsCi0gICAgRnJhbWVNYW5pZmVzdFJlbW92ZWQ6ICJhcHBsaWNhdGlvbi1jYWNo
ZS1tYW5hZ2VyLWZyYW1lLW1hbmlmZXN0LXJlbW92ZWQiLAotICAgIEZyYW1lTWFuaWZlc3RTdGF0
dXNDaGFuZ2VkOiAiYXBwbGljYXRpb24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5pZmVzdC1zdGF0
dXMtY2hhbmdlZCIsCi0gICAgTmV0d29ya1N0YXRlVXBkYXRlZDogImFwcGxpY2F0aW9uLWNhY2hl
LW1hbmFnZXItbmV0d29yay1zdGF0ZS11cGRhdGVkIgotfTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNv
dXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1l
LkV2ZW50LkNoaWxkRnJhbWVXYXNSZW1vdmVkLCB0aGlzLl9jaGlsZEZyYW1lV2FzUmVtb3ZlZCwg
dGhpcyk7CiAKLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5TdGF0dXMgPSB7
Ci0gICAgVW5jYWNoZWQ6IDAsCi0gICAgSWRsZTogMSwKLSAgICBDaGVja2luZzogMiwKLSAgICBE
b3dubG9hZGluZzogMywKLSAgICBVcGRhdGVSZWFkeTogNCwKLSAgICBPYnNvbGV0ZTogNQotfTsK
KyAgICAgICAgdGhpcy5fb25saW5lID0gdHJ1ZTsKIAotV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9y
LkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLAorICAgICAgICB0aGlzLmluaXRpYWxpemUoKTsKKyAg
ICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICBp
bml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVPYmplY3Rz
ID0gW107CiAKICAgICAgICAgaWYgKHdpbmRvdy5BcHBsaWNhdGlvbkNhY2hlQWdlbnQpCiAgICAg
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyh0aGlz
Ll9mcmFtZXNXaXRoTWFuaWZlc3RzTG9hZGVkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQog
Ci0gICAgbmV0d29ya1N0YXRlVXBkYXRlZDogZnVuY3Rpb24oaXNOb3dPbmxpbmUpCisgICAgbmV0
d29ya1N0YXRlVXBkYXRlZChpc05vd09ubGluZSkKICAgICB7CiAgICAgICAgIHRoaXMuX29ubGlu
ZSA9IGlzTm93T25saW5lOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5FdmVudC5OZXR3b3JrU3RhdGVV
cGRhdGVkLCB7b25saW5lOiB0aGlzLl9vbmxpbmV9KTsKLSAgICB9LAorICAgIH0KIAogICAgIGdl
dCBvbmxpbmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX29ubGluZTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkOiBmdW5jdGlvbihmcmFt
ZUlkLCBtYW5pZmVzdFVSTCwgc3RhdHVzKQorICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRh
dGVkKGZyYW1lSWQsIG1hbmlmZXN0VVJMLCBzdGF0dXMpCiAgICAgewogICAgICAgICB2YXIgZnJh
bWUgPSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIuZnJhbWVGb3JJZGVudGlmaWVy
KGZyYW1lSWQpOwogICAgICAgICBpZiAoIWZyYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RVcGRhdGVkKGZyYW1lLCBtYW5pZmVzdFVSTCwgc3Rh
dHVzKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlcXVlc3RBcHBsaWNhdGlvbkNhY2hlOiBmdW5j
dGlvbihmcmFtZSwgY2FsbGJhY2spCisgICAgcmVxdWVzdEFwcGxpY2F0aW9uQ2FjaGUoZnJhbWUs
IGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKGVycm9y
LCBhcHBsaWNhdGlvbkNhY2hlKQogICAgICAgICB7CkBAIC0xMDMsMTEgKzg0LDExIEBAIFdlYklu
c3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
IAogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0QXBwbGljYXRpb25DYWNoZUZvckZy
YW1lKGZyYW1lLmlkLCBjYWxsYmFja1dyYXBwZXIpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8g
UHJpdmF0ZQogCi0gICAgX21haW5SZXNvdXJjZURpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisg
ICAgX21haW5SZXNvdXJjZURpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5GcmFtZSk7CiAKQEAg
LTEyMiwxNCArMTAzLDE0IEBAIFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHdpbmRvdy5BcHBsaWNhdGlvbkNhY2hlQWdlbnQp
CiAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0TWFuaWZlc3RGb3JGcmFtZShl
dmVudC50YXJnZXQuaWQsIHRoaXMuX21hbmlmZXN0Rm9yRnJhbWVMb2FkZWQuYmluZCh0aGlzLCBl
dmVudC50YXJnZXQuaWQpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jaGlsZEZyYW1lV2FzUmVt
b3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2NoaWxkRnJhbWVXYXNSZW1vdmVkKGV2ZW50KQog
ICAgIHsKICAgICAgICAgdGhpcy5fZnJhbWVNYW5pZmVzdFJlbW92ZWQoZXZlbnQuZGF0YS5jaGls
ZEZyYW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYW5pZmVzdEZvckZyYW1lTG9hZGVkOiBm
dW5jdGlvbihmcmFtZUlkLCBlcnJvciwgbWFuaWZlc3RVUkwpCisgICAgX21hbmlmZXN0Rm9yRnJh
bWVMb2FkZWQoZnJhbWVJZCwgZXJyb3IsIG1hbmlmZXN0VVJMKQogICAgIHsKICAgICAgICAgaWYg
KGVycm9yKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTQwLDkgKzEyMSw5IEBAIFdlYkluc3Bl
Y3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYg
KCFtYW5pZmVzdFVSTCkKICAgICAgICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RSZW1vdmVkKGZy
YW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9mcmFtZXNXaXRoTWFuaWZlc3RzTG9hZGVkOiBm
dW5jdGlvbihlcnJvciwgZnJhbWVzV2l0aE1hbmlmZXN0cykKKyAgICBfZnJhbWVzV2l0aE1hbmlm
ZXN0c0xvYWRlZChlcnJvciwgZnJhbWVzV2l0aE1hbmlmZXN0cykKICAgICB7CiAgICAgICAgIGlm
IChlcnJvcikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NCw5ICsxMzUsOSBAQCBXZWJJbnNw
ZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgICAg
ICB0aGlzLl9mcmFtZU1hbmlmZXN0VXBkYXRlZChmcmFtZSwgZnJhbWVzV2l0aE1hbmlmZXN0c1tp
XS5tYW5pZmVzdFVSTCwgZnJhbWVzV2l0aE1hbmlmZXN0c1tpXS5zdGF0dXMpOwogICAgICAgICB9
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZnJhbWVNYW5pZmVzdFVwZGF0ZWQ6IGZ1bmN0aW9uKGZy
YW1lLCBtYW5pZmVzdFVSTCwgc3RhdHVzKQorICAgIF9mcmFtZU1hbmlmZXN0VXBkYXRlZChmcmFt
ZSwgbWFuaWZlc3RVUkwsIHN0YXR1cykKICAgICB7CiAgICAgICAgIGlmIChzdGF0dXMgPT09IFdl
Ykluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5TdGF0dXMuVW5jYWNoZWQpIHsKICAg
ICAgICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RSZW1vdmVkKGZyYW1lKTsKQEAgLTE4NCw5ICsx
NjUsOSBAQCBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0g
ewogCiAgICAgICAgIGlmIChzdGF0dXNDaGFuZ2VkKQogICAgICAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLkV2
ZW50LkZyYW1lTWFuaWZlc3RTdGF0dXNDaGFuZ2VkLCB7ZnJhbWVNYW5pZmVzdDogdGhpcy5fYXBw
bGljYXRpb25DYWNoZU9iamVjdHNbZnJhbWUuaWRdfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
ZnJhbWVNYW5pZmVzdFJlbW92ZWQ6IGZ1bmN0aW9uKGZyYW1lKQorICAgIF9mcmFtZU1hbmlmZXN0
UmVtb3ZlZChmcmFtZSkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fYXBwbGljYXRpb25DYWNo
ZU9iamVjdHNbZnJhbWUuaWRdKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk3LDQgKzE3OCwx
OSBAQCBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CitXZWJJbnNwZWN0
b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuRXZlbnQgPSB7CisgICAgQ2xlYXJlZDogImFwcGxp
Y2F0aW9uLWNhY2hlLW1hbmFnZXItY2xlYXJlZCIsCisgICAgRnJhbWVNYW5pZmVzdEFkZGVkOiAi
YXBwbGljYXRpb24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5pZmVzdC1hZGRlZCIsCisgICAgRnJh
bWVNYW5pZmVzdFJlbW92ZWQ6ICJhcHBsaWNhdGlvbi1jYWNoZS1tYW5hZ2VyLWZyYW1lLW1hbmlm
ZXN0LXJlbW92ZWQiLAorICAgIEZyYW1lTWFuaWZlc3RTdGF0dXNDaGFuZ2VkOiAiYXBwbGljYXRp
b24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5pZmVzdC1zdGF0dXMtY2hhbmdlZCIsCisgICAgTmV0
d29ya1N0YXRlVXBkYXRlZDogImFwcGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItbmV0d29yay1zdGF0
ZS11cGRhdGVkIgorfTsKKworV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLlN0
YXR1cyA9IHsKKyAgICBVbmNhY2hlZDogMCwKKyAgICBJZGxlOiAxLAorICAgIENoZWNraW5nOiAy
LAorICAgIERvd25sb2FkaW5nOiAzLAorICAgIFVwZGF0ZVJlYWR5OiA0LAorICAgIE9ic29sZXRl
OiA1Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQmFzaWNCbG9ja0Fubm90YXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Jhc2ljQmxvY2tBbm5vdGF0b3IuanMKaW5kZXgg
YjMzODI0OWFkZGRmMzQ0YTNlZGYzYWNiZTQ2NjdjNTdjNzE3NTRjZi4uM2M5Njg5ZDkwNjFhOWIw
YTQwYjg3YjU1ODVlN2IxNTcwYjRmZTFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQmFzaWNCbG9ja0Fubm90YXRvci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9CYXNpY0Js
b2NrQW5ub3RhdG9yLmpzCkBAIC0yNCwzOCArMjQsMzQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQmFzaWNCbG9ja0Fubm90YXRvciA9
IGZ1bmN0aW9uKHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3JpcHQpCitXZWJJbnNwZWN0b3IuQmFz
aWNCbG9ja0Fubm90YXRvciA9IGNsYXNzIEJhc2ljQmxvY2tBbm5vdGF0b3IgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuQW5ub3RhdG9yCiB7Ci0gICAgV2ViSW5zcGVjdG9yLkFubm90YXRvci5jYWxsKHRo
aXMsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKLQotICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsK
LSAgICB0aGlzLl9iYXNpY0Jsb2NrTWFya2VycyA9IG5ldyBNYXA7IC8vIE9ubHkgY29udGFpbnMg
dW5leGVjdXRlZCBiYXNpYyBibG9ja3MuCi19OwotCi1XZWJJbnNwZWN0b3IuQmFzaWNCbG9ja0Fu
bm90YXRvci5IYXNOb3RFeGVjdXRlZENsYXNzTmFtZSA9ICJiYXNpYy1ibG9jay1oYXMtbm90LWV4
ZWN1dGVkIjsKKyAgICBjb25zdHJ1Y3Rvcihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQor
ICAgIHsKKyAgICAgICAgc3VwZXIodGhpcywgc291cmNlQ29kZVRleHRFZGl0b3IpOwogCi1XZWJJ
bnNwZWN0b3IuQmFzaWNCbG9ja0Fubm90YXRvci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0
b3I6IFdlYkluc3BlY3Rvci5CYXNpY0Jsb2NrQW5ub3RhdG9yLAotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUsCisgICAgICAgIHRoaXMuX3NjcmlwdCA9IHNj
cmlwdDsKKyAgICAgICAgdGhpcy5fYmFzaWNCbG9ja01hcmtlcnMgPSBuZXcgTWFwOyAvLyBPbmx5
IGNvbnRhaW5zIHVuZXhlY3V0ZWQgYmFzaWMgYmxvY2tzLgorICAgIH0KIAogICAgIC8vIFByb3Rl
Y3RlZAogCi0gICAgY2xlYXJBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIGNsZWFyQW5ub3Rh
dGlvbnMoKQogICAgIHsKICAgICAgICAgZm9yICh2YXIga2V5IG9mIHRoaXMuX2Jhc2ljQmxvY2tN
YXJrZXJzLmtleXMoKSkKICAgICAgICAgICAgIHRoaXMuX2NsZWFyUmFuZ2VGb3JCYXNpY0Jsb2Nr
TWFya2VyKGtleSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpbnNlcnRBbm5vdGF0aW9uczogZnVu
Y3Rpb24oKQorICAgIGluc2VydEFubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIGlmICghdGhp
cy5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9hbm5vdGF0
ZUJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXMoKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFBy
aXZhdGUKIAotICAgIF9hbm5vdGF0ZUJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXM6IGZ1bmN0aW9u
KCkKKyAgICBfYW5ub3RhdGVCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2VzKCkKICAgICB7CiAgICAg
ICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NjcmlwdC5pZDsKICAgICAgICAgdmFyIHN0YXJ0VGlt
ZSA9IERhdGUubm93KCk7CkBAIC05MCw5ICs4Niw5IEBAIFdlYkluc3BlY3Rvci5CYXNpY0Jsb2Nr
QW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciB0aW1lb3V0VGltZSA9IE1h
dGgubWluKE1hdGgubWF4KDY1MDAsIHRvdGFsVGltZSksIDMwICogdG90YWxUaW1lKTsKICAgICAg
ICAgICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dCh0aGlzLmluc2VydEFu
bm90YXRpb25zLmJpbmQodGhpcyksIHRpbWVvdXRUaW1lKTsKICAgICAgICAgfS5iaW5kKHRoaXMp
KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oaWdobGlnaHRUZXh0Rm9yQmFzaWNCbG9jazogZnVu
Y3Rpb24oYmFzaWNCbG9jaykKKyAgICBfaGlnaGxpZ2h0VGV4dEZvckJhc2ljQmxvY2soYmFzaWNC
bG9jaykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJhc2ljQmxvY2suc3RhcnRPZmZz
ZXQgPD0gYmFzaWNCbG9jay5lbmRPZmZzZXQgJiYgYmFzaWNCbG9jay5zdGFydE9mZnNldCA+PSAw
ICYmIGJhc2ljQmxvY2suZW5kT2Zmc2V0ID49IDAsICIiICsgYmFzaWNCbG9jay5zdGFydE9mZnNl
dCArICI6IiArIGJhc2ljQmxvY2suZW5kT2Zmc2V0KTsKICAgICAgICAgY29uc29sZS5hc3NlcnQo
IWJhc2ljQmxvY2suaGFzRXhlY3V0ZWQpOwpAQCAtMTA0LDE1ICsxMDAsMTUgQEAgV2ViSW5zcGVj
dG9yLkJhc2ljQmxvY2tBbm5vdGF0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBtYXJr
ZXIgPSB0aGlzLnNvdXJjZUNvZGVUZXh0RWRpdG9yLmFkZFN0eWxlVG9UZXh0UmFuZ2Uoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24sIFdlYkluc3BlY3Rvci5CYXNpY0Jsb2NrQW5ub3RhdG9yLkhh
c05vdEV4ZWN1dGVkQ2xhc3NOYW1lKTsKICAgICAgICAgcmV0dXJuIG1hcmtlcjsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9pc1RleHRSYW5nZU9ubHlDbG9zaW5nQnJhY2U6IGZ1bmN0aW9uKHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKQorICAgIF9pc1RleHRSYW5nZU9ubHlDbG9zaW5nQnJhY2Uo
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pCiAgICAgewogICAgICAgICB2YXIgaXNPbmx5Q2xv
c2luZ0JyYWNlID0gL15ccypcfSQvOwogICAgICAgICByZXR1cm4gaXNPbmx5Q2xvc2luZ0JyYWNl
LnRlc3QodGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci5nZXRUZXh0SW5SYW5nZShzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbikpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NsZWFyUmFuZ2VGb3JC
YXNpY0Jsb2NrTWFya2VyOiBmdW5jdGlvbihrZXkpCisgICAgX2NsZWFyUmFuZ2VGb3JCYXNpY0Js
b2NrTWFya2VyKGtleSkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2Jhc2lj
QmxvY2tNYXJrZXJzLmhhcyhrZXkpKTsKICAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMuX2Jhc2lj
QmxvY2tNYXJrZXJzLmdldChrZXkpOwpAQCAtMTIxLDMgKzExNyw1IEBAIFdlYkluc3BlY3Rvci5C
YXNpY0Jsb2NrQW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYmFzaWNCbG9j
a01hcmtlcnMuZGVsZXRlKGtleSk7CiAgICAgfQogfTsKKworV2ViSW5zcGVjdG9yLkJhc2ljQmxv
Y2tBbm5vdGF0b3IuSGFzTm90RXhlY3V0ZWRDbGFzc05hbWUgPSAiYmFzaWMtYmxvY2staGFzLW5v
dC1leGVjdXRlZCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQnJhbmNoTWFuYWdlci5qcwppbmRleCBiMzIzNWUw
NDA2ZTgzNzQ2MzM4NjZmZDQ0ZTQyNzBhOWIzYjBkYmViLi42ZGM4ZGUxY2E2NTA4OTEyY2JkNzU0
M2VkNjQ0ZWY1MjU3YTA0OWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0JyYW5jaE1hbmFnZXIuanMKQEAg
LTIzLDM3ICsyMywzNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLVdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyID0gZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9y
LkJyYW5jaE1hbmFnZXIgPSBjbGFzcyBCcmFuY2hNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9y
Lk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3Iu
T2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5P
YmplY3QuY2FsbCh0aGlzKTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMu
X21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsK
KyAgICAgICAgc3VwZXIoKTsKIAotICAgIHRoaXMuaW5pdGlhbGl6ZSgpOwotfTsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2
ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0
aGlzKTsKIAotV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNv
bnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlciwKKyAgICAgICAgdGhpcy5pbml0
aWFsaXplKCk7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKLSAgICBpbml0aWFsaXplOiBmdW5j
dGlvbigpCisgICAgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICB0aGlzLl9vcmlnaW5hbEJy
YW5jaCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJhbmNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3Jp
Z2luYWwiKSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRCcmFuY2ggPSB0aGlz
Ll9vcmlnaW5hbEJyYW5jaC5mb3JrKFdlYkluc3BlY3Rvci5VSVN0cmluZygiV29ya2luZyBDb3B5
IikpOwogICAgICAgICB0aGlzLl9icmFuY2hlcyA9IFt0aGlzLl9vcmlnaW5hbEJyYW5jaCwgdGhp
cy5fY3VycmVudEJyYW5jaF07Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgYnJhbmNoZXMoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2JyYW5jaGVzOwotICAgIH0sCisgICAgfQogCiAg
ICAgZ2V0IGN1cnJlbnRCcmFuY2goKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJl
bnRCcmFuY2g7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgY3VycmVudEJyYW5jaChicmFuY2gp
CiAgICAgewpAQCAtNjYsOSArNjQsOSBAQCBXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRCcmFuY2ggPSBicmFuY2g7CiAKICAgICAg
ICAgdGhpcy5fY3VycmVudEJyYW5jaC5hcHBseSgpOwotICAgIH0sCisgICAgfQogCi0gICAgY3Jl
YXRlQnJhbmNoOiBmdW5jdGlvbihkaXNwbGF5TmFtZSwgZnJvbUJyYW5jaCkKKyAgICBjcmVhdGVC
cmFuY2goZGlzcGxheU5hbWUsIGZyb21CcmFuY2gpCiAgICAgewogICAgICAgICBpZiAoIWZyb21C
cmFuY2gpCiAgICAgICAgICAgICBmcm9tQnJhbmNoID0gdGhpcy5fb3JpZ2luYWxCcmFuY2g7CkBA
IC04MCw5ICs3OCw5IEBAIFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdmFyIG5ld0JyYW5jaCA9IGZyb21CcmFuY2guZm9yayhkaXNwbGF5TmFtZSk7CiAg
ICAgICAgIHRoaXMuX2JyYW5jaGVzLnB1c2gobmV3QnJhbmNoKTsKICAgICAgICAgcmV0dXJuIG5l
d0JyYW5jaDsKLSAgICB9LAorICAgIH0KIAotICAgIGRlbGV0ZUJyYW5jaDogZnVuY3Rpb24oYnJh
bmNoKQorICAgIGRlbGV0ZUJyYW5jaChicmFuY2gpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydChicmFuY2ggaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJhbmNoKTsKICAgICAgICAgaWYg
KCEoYnJhbmNoIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyYW5jaCkpCkBAIC05NiwxMSArOTQs
MTEgQEAgV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAg
IGlmIChicmFuY2ggPT09IHRoaXMuX2N1cnJlbnRCcmFuY2gpCiAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50QnJhbmNoID0gdGhpcy5fb3JpZ2luYWxCcmFuY2g7Ci0gICAgfSwKKyAgICB9CiAKICAg
ICAvLyBQcml2YXRlCiAKLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVu
dCkKKyAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgY29u
c29sZS5hc3NlcnQoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lKTsK
IApAQCAtMTEwLDUgKzEwOCwzIEBAIFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7CiAgICAgfQogfTsKLQotV2ViSW5zcGVj
dG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmpl
Y3QucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCmluZGV4IGZh
NmUyZDRiMDFmNjhjMjg5NDM0OWI4ZGQwNWRkZDEwNjgxNGUxMjguLjdlYjliOTY3NzRjMmE0ZjNj
NThjNDlkMmEwM2NhYWMxZWI5MzUzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHlsZU1hbmFn
ZXIuanMKQEAgLTIzLDQ5ICsyMyw0NCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIgPSBmdW5jdGlvbigpCitX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyID0gY2xhc3MgQ1NTU3R5bGVNYW5hZ2VyIGV4dGVu
ZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8g
YSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8v
IFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIGlmICh3aW5kb3cuQ1NTQWdl
bnQpCi0gICAgICAgIENTU0FnZW50LmVuYWJsZSgpOwotCi0gICAgV2ViSW5zcGVjdG9yLkZyYW1l
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURp
ZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJbnNw
ZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuUmVz
b3VyY2VXYXNBZGRlZCwgdGhpcy5fcmVzb3VyY2VBZGRlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVj
dG9yLlJlc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZl
bnQuQ29udGVudERpZENoYW5nZSwgdGhpcy5fcmVzb3VyY2VDb250ZW50RGlkQ2hhbmdlLCB0aGlz
KTsKLSAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuUmVzb3VyY2UuRXZlbnQuVHlwZURpZENoYW5nZSwgdGhpcy5fcmVzb3VyY2VUeXBlRGlkQ2hh
bmdlLCB0aGlzKTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwog
Ci0gICAgV2ViSW5zcGVjdG9yLkRPTU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RE9NTm9kZS5FdmVudC5BdHRyaWJ1dGVNb2RpZmllZCwgdGhpcy5fbm9kZUF0dHJpYnV0ZXNEaWRD
aGFuZ2UsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5ET01Ob2RlLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkRPTU5vZGUuRXZlbnQuQXR0cmlidXRlUmVtb3ZlZCwgdGhpcy5fbm9kZUF0
dHJpYnV0ZXNEaWRDaGFuZ2UsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5ET01Ob2RlLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTU5vZGUuRXZlbnQuRW5hYmxlZFBzZXVkb0NsYXNz
ZXNDaGFuZ2VkLCB0aGlzLl9ub2RlUHNldWRvQ2xhc3Nlc0RpZENoYW5nZSwgdGhpcyk7CisgICAg
ICAgIGlmICh3aW5kb3cuQ1NTQWdlbnQpCisgICAgICAgICAgICBDU1NBZ2VudC5lbmFibGUoKTsK
IAotICAgIHRoaXMuX2NvbG9yRm9ybWF0U2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGlu
ZygiZGVmYXVsdC1jb2xvci1mb3JtYXQiLCBXZWJJbnNwZWN0b3IuQ29sb3IuRm9ybWF0Lk9yaWdp
bmFsKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291
cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LlJlc291cmNlV2FzQWRkZWQsIHRoaXMu
X3Jlc291cmNlQWRkZWQsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250ZW50RGlkQ2hh
bmdlLCB0aGlzLl9yZXNvdXJjZUNvbnRlbnREaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
RXZlbnQuVHlwZURpZENoYW5nZSwgdGhpcy5fcmVzb3VyY2VUeXBlRGlkQ2hhbmdlLCB0aGlzKTsK
IAotICAgIHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVyTWFwID0ge307Ci0gICAgdGhpcy5fc3R5
bGVTaGVldEZyYW1lVVJMTWFwID0ge307Ci0gICAgdGhpcy5fbm9kZVN0eWxlc01hcCA9IHt9Owot
fTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkRPTU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuRE9NTm9kZS5FdmVudC5BdHRyaWJ1dGVNb2RpZmllZCwgdGhpcy5fbm9kZUF0dHJpYnV0
ZXNEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuRE9NTm9kZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01Ob2RlLkV2ZW50LkF0dHJpYnV0ZVJlbW92ZWQsIHRo
aXMuX25vZGVBdHRyaWJ1dGVzRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LkRPTU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NTm9kZS5FdmVudC5FbmFi
bGVkUHNldWRvQ2xhc3Nlc0NoYW5nZWQsIHRoaXMuX25vZGVQc2V1ZG9DbGFzc2VzRGlkQ2hhbmdl
LCB0aGlzKTsKIAotV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5Gb3JjZWFibGVQc2V1ZG9D
bGFzc2VzID0gWyJhY3RpdmUiLCAiZm9jdXMiLCAiaG92ZXIiLCAidmlzaXRlZCJdOworICAgICAg
ICB0aGlzLl9jb2xvckZvcm1hdFNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoImRl
ZmF1bHQtY29sb3ItZm9ybWF0IiwgV2ViSW5zcGVjdG9yLkNvbG9yLkZvcm1hdC5PcmlnaW5hbCk7
CiAKLVdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0
cnVjdG9yOiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLAotICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRJZGVu
dGlmaWVyTWFwID0ge307CisgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRGcmFtZVVSTE1hcCA9IHt9
OworICAgICAgICB0aGlzLl9ub2RlU3R5bGVzTWFwID0ge307CisgICAgfQogCiAgICAgLy8gUHVi
bGljCiAKICAgICBnZXQgcHJlZmVycmVkQ29sb3JGb3JtYXQoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHRoaXMuX2NvbG9yRm9ybWF0U2V0dGluZy52YWx1ZTsKLSAgICB9LAorICAgIH0KIAotICAg
IGNhbkZvcmNlUHNldWRvQ2xhc3NlczogZnVuY3Rpb24oKQorICAgIGNhbkZvcmNlUHNldWRvQ2xh
c3NlcygpCiAgICAgewogICAgICAgICByZXR1cm4gd2luZG93LkNTU0FnZW50ICYmICEhQ1NTQWdl
bnQuZm9yY2VQc2V1ZG9TdGF0ZTsKLSAgICB9LAorICAgIH0KIAotICAgIHByb3BlcnR5TmFtZUhh
c090aGVyVmVuZG9yUHJlZml4OiBmdW5jdGlvbihuYW1lKQorICAgIHByb3BlcnR5TmFtZUhhc090
aGVyVmVuZG9yUHJlZml4KG5hbWUpCiAgICAgewogICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS5s
ZW5ndGggPCA0IHx8IG5hbWUuY2hhckF0KDApICE9PSAiLSIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC03NSwxOCArNzAsMTggQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwcm9wZXJ0eVZhbHVlSGFzT3RoZXJWZW5kb3JL
ZXl3b3JkOiBmdW5jdGlvbih2YWx1ZSkKKyAgICBwcm9wZXJ0eVZhbHVlSGFzT3RoZXJWZW5kb3JL
ZXl3b3JkKHZhbHVlKQogICAgIHsKICAgICAgICAgdmFyIG1hdGNoID0gdmFsdWUubWF0Y2goLyg/
Oi1tb3otfC1tcy18LW8tfC1lcHViLSlbLVx3XSsvKTsKICAgICAgICAgaWYgKCFtYXRjaCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGNhbm9uaWNhbE5hbWVGb3JQcm9wZXJ0eU5hbWU6IGZ1bmN0aW9uKG5hbWUp
CisgICAgY2Fub25pY2FsTmFtZUZvclByb3BlcnR5TmFtZShuYW1lKQogICAgIHsKICAgICAgICAg
aWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoIDwgOCB8fCBuYW1lLmNoYXJBdCgwKSAhPT0gIi0iKQog
ICAgICAgICAgICAgcmV0dXJuIG5hbWU7CkBAIC05Niw5ICs5MSw5IEBAIFdlYkluc3BlY3Rvci5D
U1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIG5hbWU7CiAK
ICAgICAgICAgcmV0dXJuIG1hdGNoWzFdOwotICAgIH0sCisgICAgfQogCi0gICAgc3R5bGVTaGVl
dEZvcklkZW50aWZpZXI6IGZ1bmN0aW9uKGlkKQorICAgIHN0eWxlU2hlZXRGb3JJZGVudGlmaWVy
KGlkKQogICAgIHsKICAgICAgICAgaWYgKGlkIGluIHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVy
TWFwKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVyTWFwW2lk
XTsKQEAgLTEwNiw5ICsxMDEsOSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0
eWxlU2hlZXQoaWQpOwogICAgICAgICB0aGlzLl9zdHlsZVNoZWV0SWRlbnRpZmllck1hcFtpZF0g
PSBzdHlsZVNoZWV0OwogICAgICAgICByZXR1cm4gc3R5bGVTaGVldDsKLSAgICB9LAorICAgIH0K
IAotICAgIHN0eWxlc0Zvck5vZGU6IGZ1bmN0aW9uKG5vZGUpCisgICAgc3R5bGVzRm9yTm9kZShu
b2RlKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUuaWQgaW4gdGhpcy5fbm9kZVN0eWxlc01hcCkK
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlU3R5bGVzTWFwW25vZGUuaWRdOwpAQCAtMTE2
LDE5ICsxMTEsMTkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciBzdHlsZXMgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMobm9k
ZSk7CiAgICAgICAgIHRoaXMuX25vZGVTdHlsZXNNYXBbbm9kZS5pZF0gPSBzdHlsZXM7CiAgICAg
ICAgIHJldHVybiBzdHlsZXM7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90ZWN0ZWQKIAot
ICAgIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgbWVkaWFRdWVyeVJl
c3VsdENoYW5nZWQoKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9y
LkNTU09ic2VydmVyLgogCiAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9ub2RlU3R5bGVz
TWFwKQogICAgICAgICAgICAgdGhpcy5fbm9kZVN0eWxlc01hcFtrZXldLm1lZGlhUXVlcnlSZXN1
bHREaWRDaGFuZ2UoKTsKLSAgICB9LAorICAgIH0KIAotICAgIHN0eWxlU2hlZXRDaGFuZ2VkOiBm
dW5jdGlvbihzdHlsZVNoZWV0SWRlbnRpZmllcikKKyAgICBzdHlsZVNoZWV0Q2hhbmdlZChzdHls
ZVNoZWV0SWRlbnRpZmllcikKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3Bl
Y3Rvci5DU1NPYnNlcnZlci4KIApAQCAtMTM4LDExICsxMzMsMTEgQEAgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHN0eWxlU2hlZXQubm90ZUNvbnRl
bnREaWRDaGFuZ2UoKTsKIAogICAgICAgICB0aGlzLl91cGRhdGVSZXNvdXJjZUNvbnRlbnQoc3R5
bGVTaGVldCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfbm9kZVBz
ZXVkb0NsYXNzZXNEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9ub2RlUHNldWRvQ2xh
c3Nlc0RpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIHZhciBub2RlID0gZXZlbnQudGFy
Z2V0OwogCkBAIC0xNTIsOSArMTQ3LDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBub2Rl
U3R5bGVzLnBzZXVkb0NsYXNzZXNEaWRDaGFuZ2Uobm9kZSk7CiAgICAgICAgIH0KLSAgICB9LAor
ICAgIH0KIAotICAgIF9ub2RlQXR0cmlidXRlc0RpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisg
ICAgX25vZGVBdHRyaWJ1dGVzRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIG5v
ZGUgPSBldmVudC50YXJnZXQ7CiAKQEAgLTE2NCw5ICsxNTksOSBAQCBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIG5vZGVTdHlsZXMuYXR0cmlidXRlRGlkQ2hhbmdlKG5vZGUsIGV2ZW50LmRhdGEu
bmFtZSk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9tYWluUmVzb3VyY2VEaWRD
aGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQp
CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuRnJhbWUpOwogCkBAIC0xNzgsOSArMTczLDkgQEAgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRJZGVu
dGlmaWVyTWFwID0ge307CiAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRGcmFtZVVSTE1hcCA9IHt9
OwogICAgICAgICB0aGlzLl9ub2RlU3R5bGVzTWFwID0ge307Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfcmVzb3VyY2VBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX3Jlc291cmNlQWRkZWQoZXZl
bnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuRnJhbWUpOwogCkBAIC0xOTEsOSArMTg2LDkgQEAgV2ViSW5zcGVjdG9y
LkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgdGhpcy5fY2xlYXJTdHlsZVNoZWV0c0ZvclJlc291cmNlKHJlc291cmNlKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9yZXNvdXJjZVR5cGVEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIF9yZXNvdXJjZVR5cGVEaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBjb25zb2xl
LmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOwog
CkBAIC0yMDIsMjggKzE5NywyOCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9jbGVhclN0eWxl
U2hlZXRzRm9yUmVzb3VyY2UocmVzb3VyY2UpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NsZWFy
U3R5bGVTaGVldHNGb3JSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgX2NsZWFyU3R5
bGVTaGVldHNGb3JSZXNvdXJjZShyZXNvdXJjZSkKICAgICB7CiAgICAgICAgIC8vIENsZWFyIGtu
b3duIHN0eWxlc2hlZXRzIGZvciB0aGlzIFVSTCBhbmQgZnJhbWUuIFRoaXMgd2lsbCBjYXVzZSB0
aGUgc3R5bGVzaGVldHMgdG8KICAgICAgICAgLy8gYmUgdXBkYXRlZCBuZXh0IHRpbWUgX2ZldGNo
SW5mb0ZvckFsbFN0eWxlU2hlZXRzIGlzIGNhbGxlZC4KICAgICAgICAgLy8gQ09NUEFUSUJJTElU
WSAoaU9TIDYpOiBUaGUgZnJhbWUncyBpZCB3YXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGtleSwg
c28gZGVsZXRlIGp1c3QgdGhlIHVybCB0b28uCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9zdHlsZVNo
ZWV0RnJhbWVVUkxNYXBbdGhpcy5fZnJhbWVVUkxNYXBLZXkocmVzb3VyY2UucGFyZW50RnJhbWUs
IHJlc291cmNlLnVybCldOwogICAgICAgICBkZWxldGUgdGhpcy5fc3R5bGVTaGVldEZyYW1lVVJM
TWFwW3Jlc291cmNlLnVybF07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZnJhbWVVUkxNYXBLZXk6
IGZ1bmN0aW9uKGZyYW1lLCB1cmwpCisgICAgX2ZyYW1lVVJMTWFwS2V5KGZyYW1lLCB1cmwpCiAg
ICAgewogICAgICAgICByZXR1cm4gKGZyYW1lID8gZnJhbWUuaWQgKyAiOiIgOiAiIikgKyB1cmw7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbG9va3VwU3R5bGVTaGVldEZvclJlc291cmNlOiBmdW5j
dGlvbihyZXNvdXJjZSwgY2FsbGJhY2spCisgICAgX2xvb2t1cFN0eWxlU2hlZXRGb3JSZXNvdXJj
ZShyZXNvdXJjZSwgY2FsbGJhY2spCiAgICAgewogICAgICAgICB0aGlzLl9sb29rdXBTdHlsZVNo
ZWV0KHJlc291cmNlLnBhcmVudEZyYW1lLCByZXNvdXJjZS51cmwsIGNhbGxiYWNrKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9sb29rdXBTdHlsZVNoZWV0OiBmdW5jdGlvbihmcmFtZSwgdXJsLCBj
YWxsYmFjaykKKyAgICBfbG9va3VwU3R5bGVTaGVldChmcmFtZSwgdXJsLCBjYWxsYmFjaykKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZyYW1lIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9y
LkZyYW1lKTsKIApAQCAtMjM5LDkgKzIzNCw5IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fc3R5bGVTaGVldEZy
YW1lVVJMTWFwW2tleV0gfHwgdGhpcy5fc3R5bGVTaGVldEZyYW1lVVJMTWFwW3VybF0gfHwgbnVs
bCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX2ZldGNoSW5mb0ZvckFsbFN0eWxl
U2hlZXRzKHN5bGVTaGVldHNGZXRjaGVkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0g
ICAgX2ZldGNoSW5mb0ZvckFsbFN0eWxlU2hlZXRzOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBf
ZmV0Y2hJbmZvRm9yQWxsU3R5bGVTaGVldHMoY2FsbGJhY2spCiAgICAgewogICAgICAgICBjb25z
b2xlLmFzc2VydCh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpOwogCkBAIC0yNjksOSAr
MjY0LDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICBDU1NBZ2VudC5nZXRBbGxTdHlsZVNoZWV0cyhwcm9jZXNzU3R5bGVT
aGVldHMuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcmVzb3VyY2VDb250ZW50
RGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfcmVzb3VyY2VDb250ZW50RGlkQ2hhbmdl
KGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIHJlc291cmNlID0gZXZlbnQudGFyZ2V0OwogICAg
ICAgICBpZiAocmVzb3VyY2UgPT09IHRoaXMuX2lnbm9yZVJlc291cmNlQ29udGVudERpZENoYW5n
ZUV2ZW50Rm9yUmVzb3VyY2UpCkBAIC0zMDQsOSArMjk5LDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0
eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChyZXNvdXJjZS5fX3BlbmRpbmdD
aGFuZ2VUaW1lb3V0KQogICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlc291cmNlLl9fcGVuZGlu
Z0NoYW5nZVRpbWVvdXQpOwogICAgICAgICByZXNvdXJjZS5fX3BlbmRpbmdDaGFuZ2VUaW1lb3V0
ID0gc2V0VGltZW91dChhcHBseVN0eWxlU2hlZXRDaGFuZ2VzLmJpbmQodGhpcyksIDUwMCk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfdXBkYXRlUmVzb3VyY2VDb250ZW50OiBmdW5jdGlvbihzdHls
ZVNoZWV0KQorICAgIF91cGRhdGVSZXNvdXJjZUNvbnRlbnQoc3R5bGVTaGVldCkKICAgICB7CiAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHN0eWxlU2hlZXQpOwogCkBAIC0zNjYsMyArMzYxLDUgQEAg
V2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHN0eWxl
U2hlZXQuX19wZW5kaW5nQ2hhbmdlVGltZW91dCA9IHNldFRpbWVvdXQoYXBwbHlTdHlsZVNoZWV0
Q2hhbmdlcy5iaW5kKHRoaXMpLCA1MDApOwogICAgIH0KIH07CisKK1dlYkluc3BlY3Rvci5DU1NT
dHlsZU1hbmFnZXIuRm9yY2VhYmxlUHNldWRvQ2xhc3NlcyA9IFsiYWN0aXZlIiwgImZvY3VzIiwg
ImhvdmVyIiwgInZpc2l0ZWQiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVy
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29k
ZU1pcnJvckNvbG9yRWRpdGluZ0NvbnRyb2xsZXIuanMKaW5kZXggNThjNjk5Y2E2MzI4M2FhZGE3
YzEzNDY4OTMxOWI2ZDRmZmIyYjIxNS4uZDlhYjhmZWQwY2QyNTMyM2Y3NWJjNmRhOGUzYTM1ZTky
NDhiZTdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQ29kZU1pcnJvckNvbG9yRWRpdGluZ0NvbnRyb2xsZXIuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckNv
bG9yRWRpdGluZ0NvbnRyb2xsZXIuanMKQEAgLTIzLDQyICsyMyw0MCBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29s
b3JFZGl0aW5nQ29udHJvbGxlciA9IGZ1bmN0aW9uKGNvZGVNaXJyb3IsIG1hcmtlcikKK1dlYklu
c3BlY3Rvci5Db2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJvbGxlciA9IGNsYXNzIENvZGVNaXJy
b3JDb2xvckVkaXRpbmdDb250cm9sbGVyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JF
ZGl0aW5nQ29udHJvbGxlcgogewotICAgIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0Nv
bnRyb2xsZXIuY2FsbCh0aGlzLCBjb2RlTWlycm9yLCBtYXJrZXIpOwotfTsKLQotV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBj
b25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVy
LAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxl
ci5wcm90b3R5cGUsCisgICAgY29uc3RydWN0b3IoY29kZU1pcnJvciwgbWFya2VyKQorICAgIHsK
KyAgICAgICAgc3VwZXIodGhpcywgY29kZU1pcnJvciwgbWFya2VyKTsKKyAgICB9CiAKICAgICAv
LyBQdWJsaWMKIAogICAgIGdldCBpbml0aWFsVmFsdWUoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5Db2xvci5mcm9tU3RyaW5nKHRoaXMudGV4dCk7Ci0gICAgfSwKKyAgICB9
CiAKICAgICBnZXQgY3NzQ2xhc3NOYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiY29sb3Ii
OwotICAgIH0sCisgICAgfQogCi0gICAgcG9wb3ZlcldpbGxQcmVzZW50OiBmdW5jdGlvbihwb3Bv
dmVyKQorICAgIHBvcG92ZXJXaWxsUHJlc2VudChwb3BvdmVyKQogICAgIHsKICAgICAgICAgdGhp
cy5fY29sb3JQaWNrZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbG9yUGlja2VyOwogICAgICAgICB0
aGlzLl9jb2xvclBpY2tlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Db2xvclBpY2tl
ci5FdmVudC5Db2xvckNoYW5nZWQsIHRoaXMuX2NvbG9yUGlja2VyQ29sb3JDaGFuZ2VkLCB0aGlz
KTsKICAgICAgICAgcG9wb3Zlci5jb250ZW50ID0gdGhpcy5fY29sb3JQaWNrZXIuZWxlbWVudDsK
LSAgICB9LAorICAgIH0KIAotICAgIHBvcG92ZXJEaWRQcmVzZW50OiBmdW5jdGlvbihwb3BvdmVy
KQorICAgIHBvcG92ZXJEaWRQcmVzZW50KHBvcG92ZXIpCiAgICAgewogICAgICAgICB0aGlzLl9j
b2xvclBpY2tlci5jb2xvciA9IHRoaXMuX3ZhbHVlOwotICAgIH0sCisgICAgfQogCiAgICAgLy8g
UHJpdmF0ZQogCi0gICAgX2NvbG9yUGlja2VyQ29sb3JDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkK
KyAgICBfY29sb3JQaWNrZXJDb2xvckNoYW5nZWQoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlz
LnZhbHVlID0gZXZlbnQudGFyZ2V0LmNvbG9yOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0
aW9uQ29udHJvbGxlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qcwppbmRleCA0ZGE4YzQz
Y2M1Y2RkZjBkZWVlNDg5Zjk0MTA5MWU4ZGM3YzcyNWNlLi42ZjlmYjA1MzFmYmQwZTUwM2VkOTE2
YmVkNjA0OGYzYTA3NTVhZTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29k
ZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzCkBAIC0yMyw3OSArMjMsNjUgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29kZU1p
cnJvckNvbXBsZXRpb25Db250cm9sbGVyID0gZnVuY3Rpb24oY29kZU1pcnJvciwgZGVsZWdhdGUs
IHN0b3BDaGFyYWN0ZXJzUmVnZXgpCitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25D
b250cm9sbGVyID0gY2xhc3MgQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyIGV4dGVuZHMg
V2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBX
ZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdl
Ykluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIGNvbnNvbGUuYXNzZXJ0KGNvZGVN
aXJyb3IpOwotCi0gICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVNaXJyb3I7Ci0gICAgdGhpcy5f
c3RvcENoYXJhY3RlcnNSZWdleCA9IHN0b3BDaGFyYWN0ZXJzUmVnZXggfHwgbnVsbDsKLSAgICB0
aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlIHx8IG51bGw7Ci0KLSAgICB0aGlzLl9zdGFydE9mZnNl
dCA9IE5hTjsKLSAgICB0aGlzLl9lbmRPZmZzZXQgPSBOYU47Ci0gICAgdGhpcy5fbGluZU51bWJl
ciA9IE5hTjsKLSAgICB0aGlzLl9wcmVmaXggPSAiIjsKLSAgICB0aGlzLl9jb21wbGV0aW9ucyA9
IFtdOwotICAgIHRoaXMuX2V4dGVuZGVkQ29tcGxldGlvblByb3ZpZGVycyA9IHt9OwotCi0gICAg
dGhpcy5fc3VnZ2VzdGlvbnNWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5Db21wbGV0aW9uU3VnZ2Vz
dGlvbnNWaWV3KHRoaXMpOwotCi0gICAgdGhpcy5fa2V5TWFwID0gewotICAgICAgICAiVXAiOiB0
aGlzLl9oYW5kbGVVcEtleS5iaW5kKHRoaXMpLAotICAgICAgICAiRG93biI6IHRoaXMuX2hhbmRs
ZURvd25LZXkuYmluZCh0aGlzKSwKLSAgICAgICAgIlJpZ2h0IjogdGhpcy5faGFuZGxlUmlnaHRP
ckVudGVyS2V5LmJpbmQodGhpcyksCi0gICAgICAgICJFc2MiOiB0aGlzLl9oYW5kbGVFc2NhcGVL
ZXkuYmluZCh0aGlzKSwKLSAgICAgICAgIkVudGVyIjogdGhpcy5faGFuZGxlUmlnaHRPckVudGVy
S2V5LmJpbmQodGhpcyksCi0gICAgICAgICJUYWIiOiB0aGlzLl9oYW5kbGVUYWJLZXkuYmluZCh0
aGlzKSwKLSAgICAgICAgIkNtZC1BIjogdGhpcy5faGFuZGxlSGlkZUtleS5iaW5kKHRoaXMpLAot
ICAgICAgICAiQ21kLVoiOiB0aGlzLl9oYW5kbGVIaWRlS2V5LmJpbmQodGhpcyksCi0gICAgICAg
ICJTaGlmdC1DbWQtWiI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKLSAgICAgICAg
IkNtZC1ZIjogdGhpcy5faGFuZGxlSGlkZUtleS5iaW5kKHRoaXMpCi0gICAgfTsKLQotICAgIHRo
aXMuX2hhbmRsZUNoYW5nZUxpc3RlbmVyID0gdGhpcy5faGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7
Ci0gICAgdGhpcy5faGFuZGxlQ3Vyc29yQWN0aXZpdHlMaXN0ZW5lciA9IHRoaXMuX2hhbmRsZUN1
cnNvckFjdGl2aXR5LmJpbmQodGhpcyk7Ci0gICAgdGhpcy5faGFuZGxlSGlkZUFjdGlvbkxpc3Rl
bmVyID0gdGhpcy5faGFuZGxlSGlkZUFjdGlvbi5iaW5kKHRoaXMpOwotCi0gICAgdGhpcy5fY29k
ZU1pcnJvci5hZGRLZXlNYXAodGhpcy5fa2V5TWFwKTsKLQotICAgIHRoaXMuX2NvZGVNaXJyb3Iu
b24oImNoYW5nZSIsIHRoaXMuX2hhbmRsZUNoYW5nZUxpc3RlbmVyKTsKLSAgICB0aGlzLl9jb2Rl
TWlycm9yLm9uKCJjdXJzb3JBY3Rpdml0eSIsIHRoaXMuX2hhbmRsZUN1cnNvckFjdGl2aXR5TGlz
dGVuZXIpOwotICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImJsdXIiLCB0aGlzLl9oYW5kbGVIaWRl
QWN0aW9uTGlzdGVuZXIpOwotICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oInNjcm9sbCIsIHRoaXMu
X2hhbmRsZUhpZGVBY3Rpb25MaXN0ZW5lcik7Ci19OworICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJy
b3IsIGRlbGVnYXRlLCBzdG9wQ2hhcmFjdGVyc1JlZ2V4KQorICAgIHsKKyAgICAgICAgc3VwZXIo
KTsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5HZW5lcmlj
U3RvcENoYXJhY3RlcnNSZWdleCA9IC9bXHM9OjssXS87Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJv
ckNvbXBsZXRpb25Db250cm9sbGVyLkRlZmF1bHRTdG9wQ2hhcmFjdGVyc1JlZ2V4TW9kZU1hcCA9
IHsiY3NzIjogL1tcczo7LHt9KCldLywgImphdmFzY3JpcHQiOiAvW1xzPTo7LCErXC0qLyUmfF5+
Pzw+Lnt9KClbXF1dL307Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9s
bGVyLkJhc2VFeHByZXNzaW9uU3RvcENoYXJhY3RlcnNSZWdleE1vZGVNYXAgPSB7ImphdmFzY3Jp
cHQiOiAvW1xzPTo7LCErXC0qLyUmfF5+Pzw+XS99OwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JD
b21wbGV0aW9uQ29udHJvbGxlci5PcGVuQnJhY2tldENoYXJhY3RlcnNSZWdleCA9IC9bKHtbXS87
Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkNsb3NlQnJhY2tl
dENoYXJhY3RlcnNSZWdleCA9IC9bKX1cXV0vOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21w
bGV0aW9uQ29udHJvbGxlci5NYXRjaGluZ0JyYWNrZXRzID0geyJ7IjogIn0iLCAiKCI6ICIpIiwg
IlsiOiAiXSIsICJ9IjogInsiLCAiKSI6ICIoIiwgIl0iOiAiWyJ9OwotV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uSGludFN0eWxlQ2xhc3NOYW1l
ID0gImNvbXBsZXRpb24taGludCI7Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25D
b250cm9sbGVyLkNvbXBsZXRpb25zSGlkZGVuRGVsYXkgPSAyNTA7Ci1XZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkNvbXBsZXRpb25UeXBpbmdEZWxheSA9IDI1MDsK
LVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlvbk9y
aWdpbiA9ICIrY29tcGxldGlvbiI7Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25D
b250cm9sbGVyLkRlbGV0ZUNvbXBsZXRpb25PcmlnaW4gPSAiK2RlbGV0ZS1jb21wbGV0aW9uIjsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJvcik7CisKKyAgICAgICAgdGhpcy5fY29k
ZU1pcnJvciA9IGNvZGVNaXJyb3I7CisgICAgICAgIHRoaXMuX3N0b3BDaGFyYWN0ZXJzUmVnZXgg
PSBzdG9wQ2hhcmFjdGVyc1JlZ2V4IHx8IG51bGw7CisgICAgICAgIHRoaXMuX2RlbGVnYXRlID0g
ZGVsZWdhdGUgfHwgbnVsbDsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIsCisgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0g
TmFOOworICAgICAgICB0aGlzLl9lbmRPZmZzZXQgPSBOYU47CisgICAgICAgIHRoaXMuX2xpbmVO
dW1iZXIgPSBOYU47CisgICAgICAgIHRoaXMuX3ByZWZpeCA9ICIiOworICAgICAgICB0aGlzLl9j
b21wbGV0aW9ucyA9IFtdOworICAgICAgICB0aGlzLl9leHRlbmRlZENvbXBsZXRpb25Qcm92aWRl
cnMgPSB7fTsKKworICAgICAgICB0aGlzLl9zdWdnZXN0aW9uc1ZpZXcgPSBuZXcgV2ViSW5zcGVj
dG9yLkNvbXBsZXRpb25TdWdnZXN0aW9uc1ZpZXcodGhpcyk7CisKKyAgICAgICAgdGhpcy5fa2V5
TWFwID0geworICAgICAgICAgICAgIlVwIjogdGhpcy5faGFuZGxlVXBLZXkuYmluZCh0aGlzKSwK
KyAgICAgICAgICAgICJEb3duIjogdGhpcy5faGFuZGxlRG93bktleS5iaW5kKHRoaXMpLAorICAg
ICAgICAgICAgIlJpZ2h0IjogdGhpcy5faGFuZGxlUmlnaHRPckVudGVyS2V5LmJpbmQodGhpcyks
CisgICAgICAgICAgICAiRXNjIjogdGhpcy5faGFuZGxlRXNjYXBlS2V5LmJpbmQodGhpcyksCisg
ICAgICAgICAgICAiRW50ZXIiOiB0aGlzLl9oYW5kbGVSaWdodE9yRW50ZXJLZXkuYmluZCh0aGlz
KSwKKyAgICAgICAgICAgICJUYWIiOiB0aGlzLl9oYW5kbGVUYWJLZXkuYmluZCh0aGlzKSwKKyAg
ICAgICAgICAgICJDbWQtQSI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKKyAgICAg
ICAgICAgICJDbWQtWiI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKKyAgICAgICAg
ICAgICJTaGlmdC1DbWQtWiI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKKyAgICAg
ICAgICAgICJDbWQtWSI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKQorICAgICAgICB9
OworCisgICAgICAgIHRoaXMuX2hhbmRsZUNoYW5nZUxpc3RlbmVyID0gdGhpcy5faGFuZGxlQ2hh
bmdlLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuX2hhbmRsZUN1cnNvckFjdGl2aXR5TGlzdGVu
ZXIgPSB0aGlzLl9oYW5kbGVDdXJzb3JBY3Rpdml0eS5iaW5kKHRoaXMpOworICAgICAgICB0aGlz
Ll9oYW5kbGVIaWRlQWN0aW9uTGlzdGVuZXIgPSB0aGlzLl9oYW5kbGVIaWRlQWN0aW9uLmJpbmQo
dGhpcyk7CisKKyAgICAgICAgdGhpcy5fY29kZU1pcnJvci5hZGRLZXlNYXAodGhpcy5fa2V5TWFw
KTsKKworICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJjaGFuZ2UiLCB0aGlzLl9oYW5kbGVD
aGFuZ2VMaXN0ZW5lcik7CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImN1cnNvckFjdGl2
aXR5IiwgdGhpcy5faGFuZGxlQ3Vyc29yQWN0aXZpdHlMaXN0ZW5lcik7CisgICAgICAgIHRoaXMu
X2NvZGVNaXJyb3Iub24oImJsdXIiLCB0aGlzLl9oYW5kbGVIaWRlQWN0aW9uTGlzdGVuZXIpOwor
ICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJzY3JvbGwiLCB0aGlzLl9oYW5kbGVIaWRlQWN0
aW9uTGlzdGVuZXIpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCiAgICAgZ2V0IGRlbGVnYXRl
KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTsKLSAgICB9LAorICAgIH0K
IAotICAgIGFkZEV4dGVuZGVkQ29tcGxldGlvblByb3ZpZGVyOiBmdW5jdGlvbihtb2RlTmFtZSwg
cHJvdmlkZXIpCisgICAgYWRkRXh0ZW5kZWRDb21wbGV0aW9uUHJvdmlkZXIobW9kZU5hbWUsIHBy
b3ZpZGVyKQogICAgIHsKICAgICAgICAgdGhpcy5fZXh0ZW5kZWRDb21wbGV0aW9uUHJvdmlkZXJz
W21vZGVOYW1lXSA9IHByb3ZpZGVyOwotICAgIH0sCisgICAgfQogCi0gICAgdXBkYXRlQ29tcGxl
dGlvbnM6IGZ1bmN0aW9uKGNvbXBsZXRpb25zLCBpbXBsaWNpdFN1ZmZpeCkKKyAgICB1cGRhdGVD
b21wbGV0aW9ucyhjb21wbGV0aW9ucywgaW1wbGljaXRTdWZmaXgpCiAgICAgewogICAgICAgICBp
ZiAoaXNOYU4odGhpcy5fc3RhcnRPZmZzZXQpIHx8IGlzTmFOKHRoaXMuX2VuZE9mZnNldCkgfHwg
aXNOYU4odGhpcy5fbGluZU51bWJlcikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzgsMjQg
KzEyNCwyNCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2FwcGx5Q29tcGxldGlvbkhp
bnQoY29tcGxldGlvbnNbaW5kZXhdKTsKLSAgICB9LAorICAgIH0KIAotICAgIGlzQ29tcGxldGlv
bkNoYW5nZTogZnVuY3Rpb24oY2hhbmdlKQorICAgIGlzQ29tcGxldGlvbkNoYW5nZShjaGFuZ2Up
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faWdub3JlQ2hhbmdlIHx8IGNoYW5nZS5vcmln
aW4gPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxl
dGlvbk9yaWdpbiB8fCBjaGFuZ2Uub3JpZ2luID09PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNv
bXBsZXRpb25Db250cm9sbGVyLkRlbGV0ZUNvbXBsZXRpb25PcmlnaW47Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBpc1Nob3dpbmdDb21wbGV0aW9uczogZnVuY3Rpb24oKQorICAgIGlzU2hvd2luZ0Nv
bXBsZXRpb25zKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0aW9uc1ZpZXcu
dmlzaWJsZSB8fCAodGhpcy5fY29tcGxldGlvbkhpbnRNYXJrZXIgJiYgdGhpcy5fY29tcGxldGlv
bkhpbnRNYXJrZXIuZmluZCgpKTsKLSAgICB9LAorICAgIH0KIAotICAgIGlzSGFuZGxpbmdDbGlj
a0V2ZW50OiBmdW5jdGlvbigpCisgICAgaXNIYW5kbGluZ0NsaWNrRXZlbnQoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3Rpb25zVmlldy5pc0hhbmRsaW5nQ2xpY2tFdmVudCgp
OwotICAgIH0sCisgICAgfQogCi0gICAgaGlkZUNvbXBsZXRpb25zOiBmdW5jdGlvbigpCisgICAg
aGlkZUNvbXBsZXRpb25zKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zVmlldy5o
aWRlKCk7CiAKQEAgLTE3Niw5ICsxNjIsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBs
ZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBkZWxldGUgdGhpcy5fY3Vy
cmVudENvbXBsZXRpb247CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pZ25vcmVOZXh0Q3Vyc29yQWN0
aXZpdHk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjbG9zZTogZnVuY3Rpb24oKQorICAgIGNsb3Nl
KCkKICAgICB7CiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IucmVtb3ZlS2V5TWFwKHRoaXMuX2tl
eU1hcCk7CiAKQEAgLTE4NiwzNyArMTcyLDM3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29t
cGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jb2RlTWlycm9y
Lm9mZigiY3Vyc29yQWN0aXZpdHkiLCB0aGlzLl9oYW5kbGVDdXJzb3JBY3Rpdml0eUxpc3RlbmVy
KTsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vZmYoImJsdXIiLCB0aGlzLl9oYW5kbGVIaWRl
QWN0aW9uTGlzdGVuZXIpOwogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9mZigic2Nyb2xsIiwg
dGhpcy5faGFuZGxlSGlkZUFjdGlvbkxpc3RlbmVyKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8v
IFByb3RlY3RlZAogCi0gICAgY29tcGxldGlvblN1Z2dlc3Rpb25zU2VsZWN0ZWRDb21wbGV0aW9u
OiBmdW5jdGlvbihzdWdnZXN0aW9uc1ZpZXcsIGNvbXBsZXRpb25UZXh0KQorICAgIGNvbXBsZXRp
b25TdWdnZXN0aW9uc1NlbGVjdGVkQ29tcGxldGlvbihzdWdnZXN0aW9uc1ZpZXcsIGNvbXBsZXRp
b25UZXh0KQogICAgIHsKICAgICAgICAgdGhpcy5fYXBwbHlDb21wbGV0aW9uSGludChjb21wbGV0
aW9uVGV4dCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjb21wbGV0aW9uU3VnZ2VzdGlvbnNDbGlj
a2VkQ29tcGxldGlvbjogZnVuY3Rpb24oc3VnZ2VzdGlvbnNWaWV3LCBjb21wbGV0aW9uVGV4dCkK
KyAgICBjb21wbGV0aW9uU3VnZ2VzdGlvbnNDbGlja2VkQ29tcGxldGlvbihzdWdnZXN0aW9uc1Zp
ZXcsIGNvbXBsZXRpb25UZXh0KQogICAgIHsKICAgICAgICAgLy8gVGhlIGNsaWNrZWQgc3VnZ2Vz
dGlvbiBjYXVzZXMgdGhlIGVkaXRvciB0byBsb29zZSBmb2N1cy4gUmVzdG9yZSBpdCBzbyB0aGUg
dXNlciBjYW4ga2VlcCB0eXBpbmcuCiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IuZm9jdXMoKTsK
IAogICAgICAgICB0aGlzLl9hcHBseUNvbXBsZXRpb25IaW50KGNvbXBsZXRpb25UZXh0KTsKICAg
ICAgICAgdGhpcy5fY29tbWl0Q29tcGxldGlvbkhpbnQoKTsKLSAgICB9LAorICAgIH0KIAogICAg
IC8vIFByaXZhdGUKIAogICAgIGdldCBfY3VycmVudFJlcGxhY2VtZW50VGV4dCgpCiAgICAgewog
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudENvbXBsZXRpb24gKyB0aGlzLl9pbXBsaWNpdFN1
ZmZpeDsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYXNQZW5kaW5nQ29tcGxldGlvbjogZnVuY3Rp
b24oKQorICAgIF9oYXNQZW5kaW5nQ29tcGxldGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4g
IWlzTmFOKHRoaXMuX3N0YXJ0T2Zmc2V0KSAmJiAhaXNOYU4odGhpcy5fZW5kT2Zmc2V0KSAmJiAh
aXNOYU4odGhpcy5fbGluZU51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbm90aWZ5Q29t
cGxldGlvbnNIaWRkZW5Tb29uOiBmdW5jdGlvbigpCisgICAgX25vdGlmeUNvbXBsZXRpb25zSGlk
ZGVuU29vbigpCiAgICAgewogICAgICAgICBmdW5jdGlvbiBub3RpZnkoKQogICAgICAgICB7CkBA
IC0yMzAsOSArMjE2LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJv
bGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9ub3RpZnlDb21wbGV0aW9uc0hp
ZGRlbklmTmVlZGVkVGltZW91dCkKICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ub3Rp
ZnlDb21wbGV0aW9uc0hpZGRlbklmTmVlZGVkVGltZW91dCk7CiAgICAgICAgIHRoaXMuX25vdGlm
eUNvbXBsZXRpb25zSGlkZGVuSWZOZWVkZWRUaW1lb3V0ID0gc2V0VGltZW91dChub3RpZnkuYmlu
ZCh0aGlzKSwgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21w
bGV0aW9uc0hpZGRlbkRlbGF5KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hcHBseUNvbXBsZXRp
b25IaW50OiBmdW5jdGlvbihjb21wbGV0aW9uVGV4dCkKKyAgICBfYXBwbHlDb21wbGV0aW9uSGlu
dChjb21wbGV0aW9uVGV4dCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbXBsZXRp
b25UZXh0KTsKICAgICAgICAgaWYgKCFjb21wbGV0aW9uVGV4dCkKQEAgLTI2NSw5ICsyNTEsOSBA
QCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24odXBkYXRlLmJpbmQodGhpcykp
OwogCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pZ25vcmVDaGFuZ2U7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfY29tbWl0Q29tcGxldGlvbkhpbnQ6IGZ1bmN0aW9uKCkKKyAgICBfY29tbWl0Q29tcGxl
dGlvbkhpbnQoKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCkKICAgICAgICAgewpA
QCAtMjk5LDkgKzI4NSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRy
b2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9wZXJhdGlvbih1
cGRhdGUuYmluZCh0aGlzKSk7CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2lnbm9yZUNoYW5nZTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9yZW1vdmVMYXN0Q2hhbmdlRnJvbUhpc3Rvcnk6IGZ1bmN0
aW9uKCkKKyAgICBfcmVtb3ZlTGFzdENoYW5nZUZyb21IaXN0b3J5KCkKICAgICB7CiAgICAgICAg
IHZhciBoaXN0b3J5ID0gdGhpcy5fY29kZU1pcnJvci5nZXRIaXN0b3J5KCk7CiAKQEAgLTMxNCw5
ICszMDAsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgaGlzdG9yeS5kb25lLnBvcCgpOwogCiAgICAgICAgIHRoaXMu
X2NvZGVNaXJyb3Iuc2V0SGlzdG9yeShoaXN0b3J5KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9y
ZW1vdmVDb21wbGV0aW9uSGludDogZnVuY3Rpb24obm9uYXRvbWljLCBkb250UmVzdG9yZVByZWZp
eCkKKyAgICBfcmVtb3ZlQ29tcGxldGlvbkhpbnQobm9uYXRvbWljLCBkb250UmVzdG9yZVByZWZp
eCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fY29tcGxldGlvbkhpbnRNYXJrZXIpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0zNTksOSArMzQ1LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2NvZGVN
aXJyb3Iub3BlcmF0aW9uKHVwZGF0ZS5iaW5kKHRoaXMpKTsKIAogICAgICAgICBkZWxldGUgdGhp
cy5faWdub3JlQ2hhbmdlOwotICAgIH0sCisgICAgfQogCi0gICAgX3NjYW5TdHJpbmdGb3JFeHBy
ZXNzaW9uOiBmdW5jdGlvbihtb2RlTmFtZSwgc3RyaW5nLCBzdGFydE9mZnNldCwgZGlyZWN0aW9u
LCBhbGxvd01pZGRsZUFuZEVtcHR5LCBpbmNsdWRlU3RvcENoYXJhY3RlciwgaWdub3JlSW5pdGlh
bFVubWF0Y2hlZE9wZW5CcmFja2V0LCBzdG9wQ2hhcmFjdGVyc1JlZ2V4KQorICAgIF9zY2FuU3Ry
aW5nRm9yRXhwcmVzc2lvbihtb2RlTmFtZSwgc3RyaW5nLCBzdGFydE9mZnNldCwgZGlyZWN0aW9u
LCBhbGxvd01pZGRsZUFuZEVtcHR5LCBpbmNsdWRlU3RvcENoYXJhY3RlciwgaWdub3JlSW5pdGlh
bFVubWF0Y2hlZE9wZW5CcmFja2V0LCBzdG9wQ2hhcmFjdGVyc1JlZ2V4KQogICAgIHsKICAgICAg
ICAgY29uc29sZS5hc3NlcnQoZGlyZWN0aW9uID09PSAtMSB8fCBkaXJlY3Rpb24gPT09IDEpOwog
CkBAIC00MzQsOSArNDIwLDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4ge3N0cmlu
Zzogc3RyaW5nLnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldH07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY29tcGxldGVBdEN1cnJlbnRQb3Np
dGlvbjogZnVuY3Rpb24oZm9yY2UpCisgICAgX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb24oZm9y
Y2UpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY29kZU1pcnJvci5zb21ldGhpbmdTZWxlY3Rl
ZCgpKSB7CiAgICAgICAgICAgICB0aGlzLmhpZGVDb21wbGV0aW9ucygpOwpAQCAtNTE1LDkgKzUw
MSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90
eXBlID0gewogICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuY29tcGxldGlvbkNvbnRyb2xsZXJD
b21wbGV0aW9uc05lZWRlZCh0aGlzLCB0aGlzLl9wcmVmaXgsIGRlZmF1bHRDb21wbGV0aW9ucywg
YmFzZVNjYW5SZXN1bHQgPyBiYXNlU2NhblJlc3VsdC5zdHJpbmcgOiBudWxsLCBzdWZmaXgsIGZv
cmNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0aW9ucyhk
ZWZhdWx0Q29tcGxldGlvbnMpOwotICAgIH0sCisgICAgfQogCi0gICAgX2dlbmVyYXRlQ1NTQ29t
cGxldGlvbnM6IGZ1bmN0aW9uKG1haW5Ub2tlbiwgYmFzZSwgc3VmZml4KQorICAgIF9nZW5lcmF0
ZUNTU0NvbXBsZXRpb25zKG1haW5Ub2tlbiwgYmFzZSwgc3VmZml4KQogICAgIHsKICAgICAgICAg
Ly8gV2Ugb25seSBzdXBwb3J0IGNvbXBsZXRpb24gaW5zaWRlIENTUyBibG9jayBjb250ZXh0Lgog
ICAgICAgICBpZiAobWFpblRva2VuLnN0YXRlLnN0YXRlID09PSAibWVkaWEiIHx8IG1haW5Ub2tl
bi5zdGF0ZS5zdGF0ZSA9PT0gInRvcCIgfHwgbWFpblRva2VuLnN0YXRlLnN0YXRlID09PSAicGFy
ZW5zIikKQEAgLTU2MSw5ICs1NDcsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRp
b25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBDb21wbGV0ZSBwcm9wZXJ0
eSBuYW1lcy4KICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5jc3NO
YW1lQ29tcGxldGlvbnMuc3RhcnRzV2l0aCh0aGlzLl9wcmVmaXgpOwotICAgIH0sCisgICAgfQog
Ci0gICAgX2dlbmVyYXRlSmF2YVNjcmlwdENvbXBsZXRpb25zOiBmdW5jdGlvbihtYWluVG9rZW4s
IGJhc2UsIHN1ZmZpeCkKKyAgICBfZ2VuZXJhdGVKYXZhU2NyaXB0Q29tcGxldGlvbnMobWFpblRv
a2VuLCBiYXNlLCBzdWZmaXgpCiAgICAgewogICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGJhc2Ug
ZXhwcmVzc2lvbiB0aGVuIHdlIHNob3VsZCBub3QgYXR0ZW1wdCB0byBtYXRjaCBhbnkga2V5d29y
ZHMgb3IgdmFyaWFibGVzLgogICAgICAgICAvLyBBbGxvdyBvbmx5IG9wZW4gYnJhY2tldCBjaGFy
YWN0ZXJzIGF0IHRoZSBlbmQgb2YgdGhlIGJhc2UsIG90aGVyd2lzZSBsZWF2ZSBjb21wbGV0aW9u
cyB3aXRoCkBAIC01NzMsMjUgKzU1OSwyNSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBs
ZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgbWF0Y2hpbmdXb3Jk
cyA9IFtdOwogCi0gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuX3ByZWZpeDsKKyAgICAgICAg
dmFyIHByZWZpeCA9IHRoaXMuX3ByZWZpeDsKIAogICAgICAgICB2YXIgbG9jYWxTdGF0ZSA9IG1h
aW5Ub2tlbi5zdGF0ZS5sb2NhbFN0YXRlID8gbWFpblRva2VuLnN0YXRlLmxvY2FsU3RhdGUgOiBt
YWluVG9rZW4uc3RhdGU7CiAKLSAgICAgICAgY29uc3QgZGVjbGFyaW5nVmFyaWFibGUgPSBsb2Nh
bFN0YXRlLmxleGljYWwudHlwZSA9PT0gInZhcmRlZiI7Ci0gICAgICAgIGNvbnN0IGluc2lkZVN3
aXRjaCA9IGxvY2FsU3RhdGUubGV4aWNhbC5wcmV2ID8gbG9jYWxTdGF0ZS5sZXhpY2FsLnByZXYu
aW5mbyA9PT0gInN3aXRjaCIgOiBmYWxzZTsKLSAgICAgICAgY29uc3QgaW5zaWRlQmxvY2sgPSBs
b2NhbFN0YXRlLmxleGljYWwucHJldiA/IGxvY2FsU3RhdGUubGV4aWNhbC5wcmV2LnR5cGUgPT09
ICJ9IiA6IGZhbHNlOwotICAgICAgICBjb25zdCBpbnNpZGVQYXJlbnRoZXNpcyA9IGxvY2FsU3Rh
dGUubGV4aWNhbC50eXBlID09PSAiKSI7Ci0gICAgICAgIGNvbnN0IGluc2lkZUJyYWNrZXRzID0g
bG9jYWxTdGF0ZS5sZXhpY2FsLnR5cGUgPT09ICJdIjsKKyAgICAgICAgdmFyIGRlY2xhcmluZ1Zh
cmlhYmxlID0gbG9jYWxTdGF0ZS5sZXhpY2FsLnR5cGUgPT09ICJ2YXJkZWYiOworICAgICAgICB2
YXIgaW5zaWRlU3dpdGNoID0gbG9jYWxTdGF0ZS5sZXhpY2FsLnByZXYgPyBsb2NhbFN0YXRlLmxl
eGljYWwucHJldi5pbmZvID09PSAic3dpdGNoIiA6IGZhbHNlOworICAgICAgICB2YXIgaW5zaWRl
QmxvY2sgPSBsb2NhbFN0YXRlLmxleGljYWwucHJldiA/IGxvY2FsU3RhdGUubGV4aWNhbC5wcmV2
LnR5cGUgPT09ICJ9IiA6IGZhbHNlOworICAgICAgICB2YXIgaW5zaWRlUGFyZW50aGVzaXMgPSBs
b2NhbFN0YXRlLmxleGljYWwudHlwZSA9PT0gIikiOworICAgICAgICB2YXIgaW5zaWRlQnJhY2tl
dHMgPSBsb2NhbFN0YXRlLmxleGljYWwudHlwZSA9PT0gIl0iOwogCi0gICAgICAgIGNvbnN0IGFs
bEtleXdvcmRzID0gWyJicmVhayIsICJjYXNlIiwgImNhdGNoIiwgImNvbnN0IiwgImNvbnRpbnVl
IiwgImRlYnVnZ2VyIiwgImRlZmF1bHQiLCAiZGVsZXRlIiwgImRvIiwgImVsc2UiLCAiZmFsc2Ui
LCAiZmluYWxseSIsICJmb3IiLCAiZnVuY3Rpb24iLCAiaWYiLCAiaW4iLAorICAgICAgICB2YXIg
YWxsS2V5d29yZHMgPSBbImJyZWFrIiwgImNhc2UiLCAiY2F0Y2giLCAiY29uc3QiLCAiY29udGlu
dWUiLCAiZGVidWdnZXIiLCAiZGVmYXVsdCIsICJkZWxldGUiLCAiZG8iLCAiZWxzZSIsICJmYWxz
ZSIsICJmaW5hbGx5IiwgImZvciIsICJmdW5jdGlvbiIsICJpZiIsICJpbiIsCiAgICAgICAgICAg
ICAiSW5maW5pdHkiLCAiaW5zdGFuY2VvZiIsICJOYU4iLCAibmV3IiwgIm51bGwiLCAicmV0dXJu
IiwgInN3aXRjaCIsICJ0aGlzIiwgInRocm93IiwgInRydWUiLCAidHJ5IiwgInR5cGVvZiIsICJ1
bmRlZmluZWQiLCAidmFyIiwgInZvaWQiLCAid2hpbGUiLCAid2l0aCJdOwotICAgICAgICBjb25z
dCB2YWx1ZUtleXdvcmRzID0gWyJmYWxzZSIsICJJbmZpbml0eSIsICJOYU4iLCAibnVsbCIsICJ0
aGlzIiwgInRydWUiLCAidW5kZWZpbmVkIl07CisgICAgICAgIHZhciB2YWx1ZUtleXdvcmRzID0g
WyJmYWxzZSIsICJJbmZpbml0eSIsICJOYU4iLCAibnVsbCIsICJ0aGlzIiwgInRydWUiLCAidW5k
ZWZpbmVkIl07CiAKLSAgICAgICAgY29uc3QgYWxsb3dlZEtleXdvcmRzSW5zaWRlQmxvY2tzID0g
YWxsS2V5d29yZHMua2V5U2V0KCk7Ci0gICAgICAgIGNvbnN0IGFsbG93ZWRLZXl3b3Jkc1doZW5E
ZWNsYXJpbmdWYXJpYWJsZSA9IHZhbHVlS2V5d29yZHMua2V5U2V0KCk7Ci0gICAgICAgIGNvbnN0
IGFsbG93ZWRLZXl3b3Jkc0luc2lkZVBhcmVudGhlc2lzID0gdmFsdWVLZXl3b3Jkcy5jb25jYXQo
WyJmdW5jdGlvbiJdKS5rZXlTZXQoKTsKLSAgICAgICAgY29uc3QgYWxsb3dlZEtleXdvcmRzSW5z
aWRlQnJhY2tldHMgPSBhbGxvd2VkS2V5d29yZHNJbnNpZGVQYXJlbnRoZXNpczsKLSAgICAgICAg
Y29uc3QgYWxsb3dlZEtleXdvcmRzT25seUluc2lkZVN3aXRjaCA9IFsiY2FzZSIsICJkZWZhdWx0
Il0ua2V5U2V0KCk7CisgICAgICAgIHZhciBhbGxvd2VkS2V5d29yZHNJbnNpZGVCbG9ja3MgPSBh
bGxLZXl3b3Jkcy5rZXlTZXQoKTsKKyAgICAgICAgdmFyIGFsbG93ZWRLZXl3b3Jkc1doZW5EZWNs
YXJpbmdWYXJpYWJsZSA9IHZhbHVlS2V5d29yZHMua2V5U2V0KCk7CisgICAgICAgIHZhciBhbGxv
d2VkS2V5d29yZHNJbnNpZGVQYXJlbnRoZXNpcyA9IHZhbHVlS2V5d29yZHMuY29uY2F0KFsiZnVu
Y3Rpb24iXSkua2V5U2V0KCk7CisgICAgICAgIHZhciBhbGxvd2VkS2V5d29yZHNJbnNpZGVCcmFj
a2V0cyA9IGFsbG93ZWRLZXl3b3Jkc0luc2lkZVBhcmVudGhlc2lzOworICAgICAgICB2YXIgYWxs
b3dlZEtleXdvcmRzT25seUluc2lkZVN3aXRjaCA9IFsiY2FzZSIsICJkZWZhdWx0Il0ua2V5U2V0
KCk7CiAKICAgICAgICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkcyhrZXl3b3JkcykKICAgICAgICAg
ewpAQCAtNjczLDkgKzY1OSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNv
bnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG1hdGNo
aW5nV29yZHM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGFuZGxlVXBLZXk6IGZ1bmN0aW9uKGNv
ZGVNaXJyb3IpCisgICAgX2hhbmRsZVVwS2V5KGNvZGVNaXJyb3IpCiAgICAgewogICAgICAgICBp
ZiAoIXRoaXMuX2hhc1BlbmRpbmdDb21wbGV0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29k
ZU1pcnJvci5QYXNzOwpAQCAtNjg0LDkgKzY3MCw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
Q29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zVmlldy5zZWxlY3RQcmV2aW91cygpOwotICAgIH0s
CisgICAgfQogCi0gICAgX2hhbmRsZURvd25LZXk6IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAg
X2hhbmRsZURvd25LZXkoY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faGFz
UGVuZGluZ0NvbXBsZXRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7
CkBAIC02OTUsOSArNjgxLDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhp
cy5fc3VnZ2VzdGlvbnNWaWV3LnNlbGVjdE5leHQoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9o
YW5kbGVSaWdodE9yRW50ZXJLZXk6IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAgX2hhbmRsZVJp
Z2h0T3JFbnRlcktleShjb2RlTWlycm9yKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9oYXNQ
ZW5kaW5nQ29tcGxldGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsK
QEAgLTcwNiw5ICs2OTIsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250
cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlz
Ll9jb21taXRDb21wbGV0aW9uSGludCgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2hhbmRsZUVz
Y2FwZUtleTogZnVuY3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlRXNjYXBlS2V5KGNvZGVN
aXJyb3IpCiAgICAgewogICAgICAgICB2YXIgZGVsZWdhdGVJbXBsZW1lbnRzU2hvdWxkQWxsb3dF
c2NhcGVDb21wbGV0aW9uID0gdGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRl
LmNvbXBsZXRpb25Db250cm9sbGVyU2hvdWxkQWxsb3dFc2NhcGVDb21wbGV0aW9uID09PSAiZnVu
Y3Rpb24iOwogICAgICAgICBpZiAodGhpcy5faGFzUGVuZGluZ0NvbXBsZXRpb24oKSkKQEAgLTcx
OSw5ICs3MDUsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRp
b24odHJ1ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBh
c3M7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGFuZGxlVGFiS2V5OiBmdW5jdGlvbihjb2RlTWly
cm9yKQorICAgIF9oYW5kbGVUYWJLZXkoY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5faGFzUGVuZGluZ0NvbXBsZXRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb2RlTWly
cm9yLlBhc3M7CkBAIC03NjksOSArNzU1LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21w
bGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2VuZE9mZnNldCA9
IHRoaXMuX3N0YXJ0T2Zmc2V0ICsgY29tbW9uUHJlZml4Lmxlbmd0aDsKIAogICAgICAgICB0aGlz
Ll9hcHBseUNvbXBsZXRpb25IaW50KHRoaXMuX2N1cnJlbnRDb21wbGV0aW9uKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9oYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGNvZGVNaXJyb3IsIGNoYW5nZSkK
KyAgICBfaGFuZGxlQ2hhbmdlKGNvZGVNaXJyb3IsIGNoYW5nZSkKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLmlzQ29tcGxldGlvbkNoYW5nZShjaGFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtNzk2LDkgKzc4Miw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRy
b2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY29tcGxldGVBdEN1cnJlbnRQ
b3NpdGlvbihmYWxzZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRp
b25EZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRp
b24uYmluZCh0aGlzLCBmYWxzZSksIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNv
bnRyb2xsZXIuQ29tcGxldGlvblR5cGluZ0RlbGF5KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9o
YW5kbGVDdXJzb3JBY3Rpdml0eTogZnVuY3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlQ3Vy
c29yQWN0aXZpdHkoY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pZ25vcmVD
aGFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CkBAIC04MDksMTYgKzc5NSwxNiBAQCBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgfQogCiAgICAgICAgIHRoaXMuaGlkZUNvbXBsZXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfaGFuZGxlSGlkZUtleTogZnVuY3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlSGlk
ZUtleShjb2RlTWlycm9yKQogICAgIHsKICAgICAgICAgdGhpcy5oaWRlQ29tcGxldGlvbnMoKTsK
IAogICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgIH0sCisgICAgfQogCi0gICAg
X2hhbmRsZUhpZGVBY3Rpb246IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAgX2hhbmRsZUhpZGVB
Y3Rpb24oY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIC8vIENsaWNraW5nIGEgc3VnZ2VzdGlv
biBjYXVzZXMgdGhlIGVkaXRvciB0byBibHVyLiBXZSBkb24ndCB3YW50IHRvIGhpZGUgY29tcGxl
dGlvbnMgaW4gdGhpcyBjYXNlLgogICAgICAgICBpZiAodGhpcy5pc0hhbmRsaW5nQ2xpY2tFdmVu
dCgpKQpAQCAtODI4LDQgKzgxNCwxNCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRp
b25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlv
bkNvbnRyb2xsZXIuR2VuZXJpY1N0b3BDaGFyYWN0ZXJzUmVnZXggPSAvW1xzPTo7LF0vOworV2Vi
SW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5EZWZhdWx0U3RvcENoYXJh
Y3RlcnNSZWdleE1vZGVNYXAgPSB7ImNzcyI6IC9bXHM6Oyx7fSgpXS8sICJqYXZhc2NyaXB0Ijog
L1tccz06OywhK1wtKi8lJnxefj88Pi57fSgpW1xdXS99OworV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JDb21wbGV0aW9uQ29udHJvbGxlci5CYXNlRXhwcmVzc2lvblN0b3BDaGFyYWN0ZXJzUmVnZXhN
b2RlTWFwID0geyJqYXZhc2NyaXB0IjogL1tccz06OywhK1wtKi8lJnxefj88Pl0vfTsKK1dlYklu
c3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuT3BlbkJyYWNrZXRDaGFyYWN0
ZXJzUmVnZXggPSAvWyh7W10vOworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29u
dHJvbGxlci5DbG9zZUJyYWNrZXRDaGFyYWN0ZXJzUmVnZXggPSAvWyl9XF1dLzsKK1dlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuTWF0Y2hpbmdCcmFja2V0cyA9IHsi
eyI6ICJ9IiwgIigiOiAiKSIsICJbIjogIl0iLCAifSI6ICJ7IiwgIikiOiAiKCIsICJdIjogIlsi
fTsKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlv
bkhpbnRTdHlsZUNsYXNzTmFtZSA9ICJjb21wbGV0aW9uLWhpbnQiOworV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uc0hpZGRlbkRlbGF5ID0gMjUw
OworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9u
VHlwaW5nRGVsYXkgPSAyNTA7CitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250
cm9sbGVyLkNvbXBsZXRpb25PcmlnaW4gPSAiK2NvbXBsZXRpb24iOworV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5EZWxldGVDb21wbGV0aW9uT3JpZ2luID0gIitk
ZWxldGUtY29tcGxldGlvbiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJv
bGxlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmpzCmluZGV4IGIxYzNiOTRh
NjQ1ZGU2MzJhMjRhZDZiZDdiYWZlYzM3MWVjNTgwNjguLjk2NTBlZjk0YjJlZTYzMzQ0YTFiMWI3
YmFkOTQ4ZTZhYjYyZWRiMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9s
bGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmpzCkBAIC0yMywyMiAr
MjMsMjEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIgPSBmdW5jdGlv
bihjb2RlTWlycm9yKQorV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJD
b250cm9sbGVyID0gY2xhc3MgQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIK
IHsKLSAgICB0aGlzLl9jb2RlTWlycm9yID0gY29kZU1pcnJvcjsKLQotICAgIHRoaXMuX2RyYWdU
b0FkanVzdENvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xs
ZXIodGhpcyk7Ci19OworICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJyb3IpCisgICAgeworICAgICAg
ICB0aGlzLl9jb2RlTWlycm9yID0gY29kZU1pcnJvcjsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1
Y3RvcjogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVy
LAorICAgICAgICB0aGlzLl9kcmFnVG9BZGp1c3RDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rv
ci5EcmFnVG9BZGp1c3RDb250cm9sbGVyKHRoaXMpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwog
CiAgICAgZ2V0IGVuYWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWdUb0Fk
anVzdENvbnRyb2xsZXIuZW5hYmxlZDsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBlbmFibGVk
KGVuYWJsZWQpCiAgICAgewpAQCAtNDcsMzggKzQ2LDM4IEBAIFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAg
dGhpcy5fZHJhZ1RvQWRqdXN0Q29udHJvbGxlci5lbGVtZW50ID0gdGhpcy5fY29kZU1pcnJvci5n
ZXRXcmFwcGVyRWxlbWVudCgpOwogICAgICAgICB0aGlzLl9kcmFnVG9BZGp1c3RDb250cm9sbGVy
LmVuYWJsZWQgPSBlbmFibGVkOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAK
LSAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyQWN0aXZlU3RhdGVDaGFuZ2VkOiBmdW5jdGlvbihk
cmFnVG9BZGp1c3RDb250cm9sbGVyKQorICAgIGRyYWdUb0FkanVzdENvbnRyb2xsZXJBY3RpdmVT
dGF0ZUNoYW5nZWQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKICAgICB7CiAgICAgICAgIGlmICgh
ZHJhZ1RvQWRqdXN0Q29udHJvbGxlci5hY3RpdmUpCiAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVk
VG9rZW5JbmZvID0gbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIGRyYWdUb0FkanVzdENvbnRy
b2xsZXJDYW5CZUFjdGl2YXRlZDogZnVuY3Rpb24oZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKKyAg
ICBkcmFnVG9BZGp1c3RDb250cm9sbGVyQ2FuQmVBY3RpdmF0ZWQoZHJhZ1RvQWRqdXN0Q29udHJv
bGxlcikKICAgICB7CiAgICAgICAgIHJldHVybiAhdGhpcy5fY29kZU1pcnJvci5nZXRPcHRpb24o
InJlYWRPbmx5Iik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVy
Q2FuQmVBZGp1c3RlZDogZnVuY3Rpb24oZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKKyAgICBkcmFn
VG9BZGp1c3RDb250cm9sbGVyQ2FuQmVBZGp1c3RlZChkcmFnVG9BZGp1c3RDb250cm9sbGVyKQog
ICAgIHsKIAogICAgICAgICByZXR1cm4gdGhpcy5faG92ZXJlZFRva2VuSW5mbyAmJiB0aGlzLl9o
b3ZlcmVkVG9rZW5JbmZvLmNvbnRhaW5zTnVtYmVyOwotICAgIH0sCisgICAgfQogCi0gICAgZHJh
Z1RvQWRqdXN0Q29udHJvbGxlcldhc0FkanVzdGVkQnlBbW91bnQ6IGZ1bmN0aW9uKGRyYWdUb0Fk
anVzdENvbnRyb2xsZXIsIGFtb3VudCkKKyAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyV2FzQWRq
dXN0ZWRCeUFtb3VudChkcmFnVG9BZGp1c3RDb250cm9sbGVyLCBhbW91bnQpCiAgICAgewogICAg
ICAgICB0aGlzLl9jb2RlTWlycm9yLmFsdGVyTnVtYmVySW5SYW5nZShhbW91bnQsIHRoaXMuX2hv
dmVyZWRUb2tlbkluZm8uc3RhcnRQb3NpdGlvbiwgdGhpcy5faG92ZXJlZFRva2VuSW5mby5lbmRQ
b3NpdGlvbiwgZmFsc2UpOwotICAgIH0sCisgICAgfQogCi0gICAgZHJhZ1RvQWRqdXN0Q29udHJv
bGxlckRpZFJlc2V0OiBmdW5jdGlvbihkcmFnVG9BZGp1c3RDb250cm9sbGVyKQorICAgIGRyYWdU
b0FkanVzdENvbnRyb2xsZXJEaWRSZXNldChkcmFnVG9BZGp1c3RDb250cm9sbGVyKQogICAgIHsK
ICAgICAgICAgdGhpcy5faG92ZXJlZFRva2VuSW5mbyA9IG51bGw7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyQ2FuQWRqdXN0T2JqZWN0QXRQb2ludDogZnVuY3Rp
b24oZHJhZ1RvQWRqdXN0Q29udHJvbGxlciwgcG9pbnQpCisgICAgZHJhZ1RvQWRqdXN0Q29udHJv
bGxlckNhbkFkanVzdE9iamVjdEF0UG9pbnQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlciwgcG9pbnQp
CiAgICAgewogICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0No
YXIoe2xlZnQ6IHBvaW50LngsIHRvcDogcG9pbnQueX0pOwogICAgICAgICB2YXIgdG9rZW4gPSB0
aGlzLl9jb2RlTWlycm9yLmdldFRva2VuQXQocG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckVkaXRp
bmdDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzCmluZGV4IDkwNjM5ZDU5Yzg1
YjE3ZDNhNjkzMTYwM2NhODAxYjVhMmQ1NmVkZWIuLjY5MDJjYTZiOTVhZWVhODU3MTdiMGMwNGRj
NDM4M2M4OTYwZTZiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9y
RWRpdGluZ0NvbnRyb2xsZXIuanMKQEAgLTIzLDY2ICsyMyw2MyBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGlu
Z0NvbnRyb2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9yLCBtYXJrZXIpCitXZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyID0gY2xhc3MgQ29kZU1pcnJvckVkaXRpbmdDb250
cm9sbGVyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252
ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBl
cigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMu
X2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOwotICAgIHRoaXMuX21hcmtlciA9IG1hcmtlcjsKLSAg
ICB0aGlzLl9kZWxlZ2F0ZSA9IG51bGw7CisgICAgY29uc3RydWN0b3IoY29kZU1pcnJvciwgbWFy
a2VyKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotICAgIHRoaXMuX3JhbmdlID0gbWFya2Vy
LnJhbmdlOworICAgICAgICB0aGlzLl9jb2RlTWlycm9yID0gY29kZU1pcnJvcjsKKyAgICAgICAg
dGhpcy5fbWFya2VyID0gbWFya2VyOworICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IG51bGw7CiAK
LSAgICAvLyBUaGUgdmFsdWUgbXVzdCBzdXBwb3J0IC50b1N0cmluZygpIGFuZCAuY29weSgpIG1l
dGhvZHMuCi0gICAgdGhpcy5fdmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTsKKyAgICAgICAgdGhp
cy5fcmFuZ2UgPSBtYXJrZXIucmFuZ2U7CiAKLSAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0RXNj
ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KG51bGwsIFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0LktleS5Fc2NhcGUpOwotfTsKKyAgICAgICAgLy8gVGhlIHZhbHVlIG11
c3Qgc3VwcG9ydCAudG9TdHJpbmcoKSBhbmQgLmNvcHkoKSBtZXRob2RzLgorICAgICAgICB0aGlz
Ll92YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlOwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckVk
aXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlciwKLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5PYmplY3QucHJvdG90eXBlLAorICAgICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0RXNj
ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KG51bGwsIFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0LktleS5Fc2NhcGUpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCiAg
ICAgZ2V0IG1hcmtlcigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbWFya2VyOwotICAg
IH0sCisgICAgfQogCiAgICAgZ2V0IHJhbmdlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9yYW5nZTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCB2YWx1ZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fdmFsdWU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgdmFsdWUodmFs
dWUpCiAgICAgewogICAgICAgICB0aGlzLnRleHQgPSB2YWx1ZS50b1N0cmluZygpOwogICAgICAg
ICB0aGlzLl92YWx1ZSA9IHZhbHVlOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGRlbGVnYXRl
KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTsKLSAgICB9LAorICAgIH0K
IAogICAgIHNldCBkZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2RlbGVn
YXRlID0gZGVsZWdhdGU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgdGV4dCgpCiAgICAgewog
ICAgICAgICB2YXIgZnJvbSA9IHtsaW5lOiB0aGlzLl9yYW5nZS5zdGFydExpbmUsIGNoOiB0aGlz
Ll9yYW5nZS5zdGFydENvbHVtbn07CiAgICAgICAgIHZhciB0byA9IHtsaW5lOiB0aGlzLl9yYW5n
ZS5lbmRMaW5lLCBjaDogdGhpcy5fcmFuZ2UuZW5kQ29sdW1ufTsKICAgICAgICAgcmV0dXJuIHRo
aXMuX2NvZGVNaXJyb3IuZ2V0UmFuZ2UoZnJvbSwgdG8pOwotICAgIH0sCisgICAgfQogCiAgICAg
c2V0IHRleHQodGV4dCkKICAgICB7CkBAIC05NCw2MyArOTEsNjMgQEAgV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBlbmRM
aW5lID0gdGhpcy5fcmFuZ2Uuc3RhcnRMaW5lICsgbGluZXMubGVuZ3RoIC0gMTsKICAgICAgICAg
dmFyIGVuZENvbHVtbiA9IGxpbmVzLmxlbmd0aCA+IDEgPyBsaW5lcy5sYXN0VmFsdWUubGVuZ3Ro
IDogdGhpcy5fcmFuZ2Uuc3RhcnRDb2x1bW4gKyB0ZXh0Lmxlbmd0aDsKICAgICAgICAgdGhpcy5f
cmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZSh0aGlzLl9yYW5nZS5zdGFydExpbmUs
IHRoaXMuX3JhbmdlLnN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4pOwotICAgIH0sCisg
ICAgfQogCiAgICAgZ2V0IGluaXRpYWxWYWx1ZSgpCiAgICAgewogICAgICAgICAvLyBJbXBsZW1l
bnRlZCBieSBzdWJjbGFzc2VzLgogICAgICAgICByZXR1cm4gdGhpcy50ZXh0OwotICAgIH0sCisg
ICAgfQogCiAgICAgZ2V0IGNzc0NsYXNzTmFtZSgpCiAgICAgewogICAgICAgICAvLyBJbXBsZW1l
bnRlZCBieSBzdWJjbGFzc2VzLgogICAgICAgICByZXR1cm4gIiI7Ci0gICAgfSwKKyAgICB9CiAK
ICAgICBnZXQgcG9wb3ZlcigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcG9wb3ZlcjsK
LSAgICB9LAorICAgIH0KIAogICAgIGdldCBwb3BvdmVyUHJlZmVycmVkRWRnZXMoKQogICAgIHsK
ICAgICAgICAgLy8gQmVzdCB0byBkaXNwbGF5IHRoZSBwb3BvdmVyIHRvIHRoZSBsZWZ0IG9yIGFi
b3ZlIHRoZSBlZGl0ZWQgcmFuZ2Ugc2luY2UgaXRzIGVuZCBwb3NpdGlvbiBtYXkgY2hhbmdlLCBi
dXQgbm90IGl0cyBzdGFydAogICAgICAgICAvLyBwb3NpdGlvbi4gVGhpcyB3YXkgd2UgbWluaW1p
emUgdGhlIGNoYW5jZXMgb2Ygb3ZlcmxheWluZyB0aGUgZWRpdGVkIHJhbmdlIGFzIGl0IGNoYW5n
ZXMuCiAgICAgICAgIHJldHVybiBbV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1JTl9YLCBXZWJJbnNw
ZWN0b3IuUmVjdEVkZ2UuTUlOX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWSwgV2ViSW5z
cGVjdG9yLlJlY3RFZGdlLk1BWF9YXTsKLSAgICB9LAorICAgIH0KIAotICAgIHBvcG92ZXJUYXJn
ZXRGcmFtZVdpdGhSZWN0czogZnVuY3Rpb24ocmVjdHMpCisgICAgcG9wb3ZlclRhcmdldEZyYW1l
V2l0aFJlY3RzKHJlY3RzKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5SZWN0
LnVuaW9uT2ZSZWN0cyhyZWN0cyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwcmVzZW50SG92ZXJN
ZW51OiBmdW5jdGlvbigpCisgICAgcHJlc2VudEhvdmVyTWVudSgpCiAgICAgewogICAgICAgICB0
aGlzLl9ob3Zlck1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkhvdmVyTWVudSh0aGlzKTsKICAgICAg
ICAgdGhpcy5faG92ZXJNZW51LmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNzc0NsYXNzTmFt
ZSk7CiAgICAgICAgIHRoaXMuX3JlY3RzID0gdGhpcy5fbWFya2VyLnJlY3RzOwogICAgICAgICB0
aGlzLl9ob3Zlck1lbnUucHJlc2VudCh0aGlzLl9yZWN0cyk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBkaXNtaXNzSG92ZXJNZW51OiBmdW5jdGlvbihkaXNjcmV0ZSkKKyAgICBkaXNtaXNzSG92ZXJN
ZW51KGRpc2NyZXRlKQogICAgIHsKICAgICAgICAgdGhpcy5faG92ZXJNZW51LmRpc21pc3MoZGlz
Y3JldGUpOwotICAgIH0sCisgICAgfQogCi0gICAgcG9wb3ZlcldpbGxQcmVzZW50OiBmdW5jdGlv
bihwb3BvdmVyKQorICAgIHBvcG92ZXJXaWxsUHJlc2VudChwb3BvdmVyKQogICAgIHsKICAgICAg
ICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KLSAgICB9LAorICAgIH0KIAotICAgIHBv
cG92ZXJEaWRQcmVzZW50OiBmdW5jdGlvbihwb3BvdmVyKQorICAgIHBvcG92ZXJEaWRQcmVzZW50
KHBvcG92ZXIpCiAgICAgewogICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgot
ICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBoYW5kbGVLZXlkb3duRXZl
bnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIGhhbmRsZUtleWRvd25FdmVudChldmVudCkKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dEVzYy5tYXRjaGVzRXZlbnQoZXZl
bnQpIHx8ICF0aGlzLl9wb3BvdmVyLnZpc2libGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNTksOSArMTU2LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJv
bGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3BvcG92ZXIuZGlzbWlzcygpOwogCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCisgICAgfQogCi0gICAgaG92ZXJNZW51QnV0dG9u
V2FzUHJlc3NlZDogZnVuY3Rpb24oaG92ZXJNZW51KQorICAgIGhvdmVyTWVudUJ1dHRvbldhc1By
ZXNzZWQoaG92ZXJNZW51KQogICAgIHsKICAgICAgICAgdGhpcy5fcG9wb3ZlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuUG9wb3Zlcih0aGlzKTsKICAgICAgICAgdGhpcy5wb3BvdmVyV2lsbFByZXNlbnQo
dGhpcy5fcG9wb3Zlcik7CkBAIC0xNzYsOSArMTczLDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9kZWxl
Z2F0ZS5lZGl0aW5nQ29udHJvbGxlckRpZFN0YXJ0RWRpdGluZyh0aGlzKTsKIAogICAgICAgICB0
aGlzLl9vcmlnaW5hbFZhbHVlID0gdGhpcy5fdmFsdWUuY29weSgpOwotICAgIH0sCisgICAgfQog
Ci0gICAgZGlkRGlzbWlzc1BvcG92ZXI6IGZ1bmN0aW9uKHBvcG92ZXIpCisgICAgZGlkRGlzbWlz
c1BvcG92ZXIocG9wb3ZlcikKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9wb3BvdmVyOwog
ICAgICAgICBkZWxldGUgdGhpcy5fb3JpZ2luYWxWYWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JHcmFkaWVu
dEVkaXRpbmdDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuanMKaW5k
ZXggODM3YWI2NWU4MTEzNGQ4OGVkODRmY2IzZTliZDgzNzg0OTA0ZmZkYi4uYzM0NDE4ZmNkOWJh
ZDgzM2QxYzFkMjdiMDQ4NjBkZDllZTE5MjI3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckdyYWRpZW50RWRpdGlu
Z0NvbnRyb2xsZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuanMKQEAgLTIz
LDc4ICsyMyw2OCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LVdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlciA9IGZ1bmN0
aW9uKGNvZGVNaXJyb3IsIG1hcmtlcikKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRF
ZGl0aW5nQ29udHJvbGxlciA9IGNsYXNzIENvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9s
bGVyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlcgogewot
ICAgIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIuY2FsbCh0aGlzLCBj
b2RlTWlycm9yLCBtYXJrZXIpOwotCi0gICAgaWYgKCFXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdy
YWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuR3JhZGllbnRUeXBlcykgewotICAgICAgICBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuR3JhZGllbnRUeXBlcyA9
IHsKLSAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQiOiB7Ci0gICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLkxpbmVhckdyYWRpZW50LAotICAgICAgICAgICAgICAgIGxhYmVsOiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxpbmVhciBHcmFkaWVudCIpLAotICAgICAgICAgICAgICAg
IHJlcGVhdHM6IGZhbHNlCi0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAicmFkaWFsLWdy
YWRpZW50IjogewotICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5SYWRpYWxHcmFk
aWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSYWRp
YWwgR3JhZGllbnQiKSwKLSAgICAgICAgICAgICAgICByZXBlYXRzOiBmYWxzZQotICAgICAgICAg
ICAgfSwKLQotICAgICAgICAgICAgInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiOiB7Ci0gICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLkxpbmVhckdyYWRpZW50LAotICAgICAgICAg
ICAgICAgIGxhYmVsOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlcGVhdGluZyBMaW5lYXIgR3Jh
ZGllbnQiKSwKLSAgICAgICAgICAgICAgICByZXBlYXRzOiB0cnVlCi0gICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCI6IHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuUmFkaWFsR3JhZGllbnQsCi0gICAgICAgICAgICAgICAg
bGFiZWw6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVwZWF0aW5nIFJhZGlhbCBHcmFkaWVudCIp
LAotICAgICAgICAgICAgICAgIHJlcGVhdHM6IHRydWUKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fTsKKyAgICBjb25zdHJ1Y3Rvcihjb2RlTWlycm9yLCBtYXJrZXIpCisgICAgeworICAgICAgICBz
dXBlcih0aGlzLCBjb2RlTWlycm9yLCBtYXJrZXIpOworCisgICAgICAgIGlmICghV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkdyYWRpZW50VHlwZXMpIHsK
KyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJv
bGxlci5HcmFkaWVudFR5cGVzID0geworICAgICAgICAgICAgICAgICJsaW5lYXItZ3JhZGllbnQi
OiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5MaW5lYXJHcmFkaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTGlu
ZWFyIEdyYWRpZW50IiksCisgICAgICAgICAgICAgICAgICAgIHJlcGVhdHM6IGZhbHNlCisgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICJyYWRpYWwtZ3JhZGllbnQiOiB7Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5SYWRpYWxHcmFkaWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgbGFiZWw6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmFkaWFsIEdy
YWRpZW50IiksCisgICAgICAgICAgICAgICAgICAgIHJlcGVhdHM6IGZhbHNlCisgICAgICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgICAgICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50Ijog
eworICAgICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuTGluZWFyR3JhZGllbnQs
CisgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlcGVh
dGluZyBMaW5lYXIgR3JhZGllbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgcmVwZWF0czogdHJ1
ZQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAicmVwZWF0aW5nLXJhZGlh
bC1ncmFkaWVudCI6IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlJh
ZGlhbEdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBsYWJlbDogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJSZXBlYXRpbmcgUmFkaWFsIEdyYWRpZW50IiksCisgICAgICAgICAgICAgICAgICAg
IHJlcGVhdHM6IHRydWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAg
ICB9CiAgICAgfQotfTsKLQotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdD
b250cm9sbGVyLlN0eWxlQ2xhc3NOYW1lID0gImdyYWRpZW50LWVkaXRpbmctY29udHJvbGxlciI7
Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuRWRpdHND
b2xvckNsYXNzTmFtZSA9ICJlZGl0cy1jb2xvciI7Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdy
YWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuUmFkaWFsR3JhZGllbnRDbGFzc05hbWUgPSAicmFkaWFs
LWdyYWRpZW50IjsKLQotLy8gTGF6aWx5IHBvcHVsYXRlZCBpbiB0aGUgV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyIGNvbnN0cnVjdG9yLgotLy8gSXQgbmVl
ZHMgdG8gYmUgbGF6eSB0byB1c2UgVUlTdHJpbmcgYWZ0ZXIgTWFpbi5qcyBhbmQgbG9jYWxpemVk
U3RyaW5ncy5qcyBsb2Fkcy4KLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5n
Q29udHJvbGxlci5HcmFkaWVudFR5cGVzID0gbnVsbDsKLQotV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3Rv
cjogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLAotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5wcm90
b3R5cGUsCiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBpbml0aWFsVmFsdWUoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5HcmFkaWVudC5mcm9tU3RyaW5nKHRoaXMudGV4
dCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgY3NzQ2xhc3NOYW1lKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAiZ3JhZGllbnQiOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBvcG92ZXJQ
cmVmZXJyZWRFZGdlcygpCiAgICAgewogICAgICAgICAvLyBTaW5jZSB0aGUgZ3JhZGllbnQgZWRp
dG9yIGNhbiByZXNpemUgdG8gYmUgcXVpdGUgdGFsbCwgbGV0J3MgYXZvaWQgZGlzcGxheWluZyB0
aGUgcG9wb3ZlcgogICAgICAgICAvLyBhYm92ZSB0aGUgZWRpdGVkIHZhbHVlIHNvIHRoYXQgaXQg
bWF5IG5vdCBjaGFuZ2Ugd2hpY2ggZWRnZSBpdCBhdHRhY2hlcyB0byB1cG9uIGVkaXRpbmcgYSBz
dG9wLgogICAgICAgICByZXR1cm4gW1dlYkluc3BlY3Rvci5SZWN0RWRnZS5NSU5fWCwgV2ViSW5z
cGVjdG9yLlJlY3RFZGdlLk1BWF9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1hdOwotICAg
IH0sCisgICAgfQogCi0gICAgcG9wb3ZlclRhcmdldEZyYW1lV2l0aFJlY3RzOiBmdW5jdGlvbihy
ZWN0cykKKyAgICBwb3BvdmVyVGFyZ2V0RnJhbWVXaXRoUmVjdHMocmVjdHMpCiAgICAgewogICAg
ICAgICAvLyBJZiBhIGdyYWRpZW50IGlzIGRlZmluZWQgYWNyb3NzIHNldmVyYWwgbGluZXMsIHdl
IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZSBmaXJzdCBsaW5lIG9ubHkKICAgICAgICAgLy8gYXMg
YSB0YXJnZXQgZnJhbWUgZm9yIHRoZSBlZGl0b3Igc2luY2Ugd2UgbWF5IHJlZm9ybWF0IHRoZSBn
cmFkaWVudCB2YWx1ZSB0byBmaXQgb24gYSBzaW5nbGUgbGluZS4KICAgICAgICAgcmV0dXJuIHJl
Y3RzWzBdOwotICAgIH0sCisgICAgfQogCi0gICAgcG9wb3ZlcldpbGxQcmVzZW50OiBmdW5jdGlv
bihwb3BvdmVyKQorICAgIHBvcG92ZXJXaWxsUHJlc2VudChwb3BvdmVyKQogICAgIHsKICAgICAg
ICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAg
ICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdy
YWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuU3R5bGVDbGFzc05hbWU7CkBAIC0xMzAsOSArMTIwLDkg
QEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fdXBkYXRlQ1NTQ2xhc3NGb3JHcmFkaWVudFR5cGUoKTsK
IAogICAgICAgICBwb3BvdmVyLmNvbnRlbnQgPSB0aGlzLl9jb250YWluZXI7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBwb3BvdmVyRGlkUHJlc2VudDogZnVuY3Rpb24ocG9wb3ZlcikKKyAgICBwb3Bv
dmVyRGlkUHJlc2VudChwb3BvdmVyKQogICAgIHsKICAgICAgICAgdGhpcy5fZ3JhZGllbnRTbGlk
ZXIuc3RvcHMgPSB0aGlzLnZhbHVlLnN0b3BzOwogCkBAIC0xNDMsMjQgKzEzMywyNCBAQCBXZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdGhpcy5fZ3JhZGllbnRUeXBlUGlja2VyLnZhbHVlID0gdGhpcy52YWx1
ZS5yZXBlYXRzID8gInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQiIDogInJhZGlhbC1ncmFkaWVu
dCI7CiAKICAgICAgICAgdGhpcy5fZ3JhZGllbnRTbGlkZXIuZGVsZWdhdGUgPSB0aGlzOwotICAg
IH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBoYW5kbGVFdmVudDogZnVuY3Rp
b24oZXZlbnQpCisgICAgaGFuZGxlRXZlbnQoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoZXZl
bnQudHlwZSA9PT0gImlucHV0IikKICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUlucHV0RXZlbnQo
ZXZlbnQpOwogICAgICAgICBlbHNlIGlmIChldmVudC50eXBlID09PSAiY2hhbmdlIikKICAgICAg
ICAgICAgIHRoaXMuX2hhbmRsZUNoYW5nZUV2ZW50KGV2ZW50KTsKLSAgICB9LAorICAgIH0KIAot
ICAgIGdyYWRpZW50U2xpZGVyU3RvcHNEaWRDaGFuZ2U6IGZ1bmN0aW9uKGdyYWRpZW50U2xpZGVy
KQorICAgIGdyYWRpZW50U2xpZGVyU3RvcHNEaWRDaGFuZ2UoZ3JhZGllbnRTbGlkZXIpCiAgICAg
ewogICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBncmFkaWVudFNsaWRlclN0b3BXYXNTZWxlY3RlZDogZnVuY3Rpb24oZ3JhZGll
bnRTbGlkZXIsIHN0b3ApCisgICAgZ3JhZGllbnRTbGlkZXJTdG9wV2FzU2VsZWN0ZWQoZ3JhZGll
bnRTbGlkZXIsIHN0b3ApCiAgICAgewogICAgICAgICB2YXIgc2VsZWN0ZWRTdG9wID0gZ3JhZGll
bnRTbGlkZXIuc2VsZWN0ZWRTdG9wOwogCkBAIC0xNzgsOSArMTY4LDkgQEAgV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fYW5nbGVJbnB1dC5ibHVyKCk7CiAKICAgICAgICAgdGhpcy5wb3BvdmVyLnVwZGF0
ZSgpOwotICAgIH0sCisgICAgfQogCi0gICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxlcldhc0FkanVz
dGVkQnlBbW91bnQ6IGZ1bmN0aW9uKGRyYWdUb0FkanVzdENvbnRyb2xsZXIsIGFtb3VudCkKKyAg
ICBkcmFnVG9BZGp1c3RDb250cm9sbGVyV2FzQWRqdXN0ZWRCeUFtb3VudChkcmFnVG9BZGp1c3RD
b250cm9sbGVyLCBhbW91bnQpCiAgICAgewogICAgICAgICB2YXIgYW5nbGUgPSBwYXJzZUZsb2F0
KHRoaXMuX2FuZ2xlSW5wdXQudmFsdWUpICsgYW1vdW50OwogICAgICAgICBpZiAoTWF0aC5yb3Vu
ZChhbmdsZSkgIT09IGFuZ2xlKQpAQCAtMTg4LDIwICsxNzgsMjAgQEAgV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICB0aGlzLl9hbmdsZUlucHV0LnZhbHVlID0gYW5nbGU7CiAgICAgICAgIHRoaXMuX2FuZ2xlSW5w
dXRWYWx1ZURpZENoYW5nZShhbmdsZSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRl
CiAKLSAgICBfaGFuZGxlSW5wdXRFdmVudDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2hhbmRsZUlu
cHV0RXZlbnQoZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgYW5nbGUgPSBwYXJzZUZsb2F0KHRo
aXMuX2FuZ2xlSW5wdXQudmFsdWUpOwogICAgICAgICBpZiAoaXNOYU4oYW5nbGUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX2FuZ2xlSW5wdXRWYWx1ZURpZENoYW5nZShh
bmdsZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYW5nbGVJbnB1dFZhbHVlRGlkQ2hhbmdlOiBm
dW5jdGlvbihhbmdsZSkKKyAgICBfYW5nbGVJbnB1dFZhbHVlRGlkQ2hhbmdlKGFuZ2xlKQogICAg
IHsKICAgICAgICAgdGhpcy52YWx1ZS5hbmdsZSA9IGFuZ2xlOwogICAgICAgICB0aGlzLnRleHQg
PSB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7CkBAIC0yMTMsOSArMjAzLDkgQEAgV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHRoaXMuX2FuZ2xlSW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsK
ICAgICAgICAgICAgIHRoaXMuX2FuZ2xlSW5wdXQuc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uU3Rh
cnQ7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVDaGFuZ2VFdmVudDog
ZnVuY3Rpb24oZXZlbnQpCisgICAgX2hhbmRsZUNoYW5nZUV2ZW50KGV2ZW50KQogICAgIHsKICAg
ICAgICAgdmFyIGRlc2NyaXB0b3IgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRp
dGluZ0NvbnRyb2xsZXIuR3JhZGllbnRUeXBlc1t0aGlzLl9ncmFkaWVudFR5cGVQaWNrZXIudmFs
dWVdOwogICAgICAgICBpZiAoISh0aGlzLnZhbHVlIGluc3RhbmNlb2YgZGVzY3JpcHRvci50eXBl
KSkgewpAQCAtMjMwLDE2ICsyMjAsMTYgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVu
dEVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgICAgICB0aGlz
LnZhbHVlLnJlcGVhdHMgPSBkZXNjcmlwdG9yLnJlcGVhdHM7CiAgICAgICAgIHRoaXMudGV4dCA9
IHRoaXMudmFsdWUudG9TdHJpbmcoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jb2xvclBpY2tl
ckNvbG9yQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2NvbG9yUGlja2VyQ29sb3JDaGFu
Z2VkKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fZ3JhZGllbnRTbGlkZXIuc2VsZWN0ZWRT
dG9wLmNvbG9yID0gZXZlbnQudGFyZ2V0LmNvbG9yOwogICAgICAgICB0aGlzLl9ncmFkaWVudFNs
aWRlci5zdG9wcyA9IHRoaXMudmFsdWUuc3RvcHM7CiAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMu
dmFsdWUudG9TdHJpbmcoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF91cGRhdGVDU1NDbGFzc0Zv
ckdyYWRpZW50VHlwZTogZnVuY3Rpb24oKQorICAgIF91cGRhdGVDU1NDbGFzc0ZvckdyYWRpZW50
VHlwZSgpCiAgICAgewogICAgICAgICBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5MaW5lYXJHcmFkaWVudCkKICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xp
c3QucmVtb3ZlKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxl
ci5SYWRpYWxHcmFkaWVudENsYXNzTmFtZSk7CkBAIC0yNDcsMyArMjM3LDExIEBAIFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuUmFkaWFsR3JhZGllbnRDbGFzc05hbWUp
OwogICAgIH0KIH07CisKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29u
dHJvbGxlci5TdHlsZUNsYXNzTmFtZSA9ICJncmFkaWVudC1lZGl0aW5nLWNvbnRyb2xsZXIiOwor
V2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkVkaXRzQ29s
b3JDbGFzc05hbWUgPSAiZWRpdHMtY29sb3IiOworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFk
aWVudEVkaXRpbmdDb250cm9sbGVyLlJhZGlhbEdyYWRpZW50Q2xhc3NOYW1lID0gInJhZGlhbC1n
cmFkaWVudCI7CisKKy8vIExhemlseSBwb3B1bGF0ZWQgaW4gdGhlIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlciBjb25zdHJ1Y3Rvci4KKy8vIEl0IG5lZWRz
IHRvIGJlIGxhenkgdG8gdXNlIFVJU3RyaW5nIGFmdGVyIE1haW4uanMgYW5kIGxvY2FsaXplZFN0
cmluZ3MuanMgbG9hZHMuCitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0Nv
bnRyb2xsZXIuR3JhZGllbnRUeXBlcyA9IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuanMKaW5kZXggMzRlY2Ux
N2RjYjlmOGM0MThiZDQzODcyMTkyMThjZmQ5YjY4OTYwNi4uZTU1NzgyYThmNGFiYmUwMWZkZmQ3
YjU3MDIxZWI1OTIwZTJhNTc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVy
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcwpAQCAtMjMsNTYgKzIzLDQ0IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlciA9IGZ1bmN0aW9uKGNvZGVNaXJyb3Is
IGRlbGVnYXRlKQorV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxl
ciA9IGNsYXNzIENvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlciBleHRlbmRzIFdlYklu
c3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5z
cGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNw
ZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9y
KTsKLQotICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOwotICAgIHRoaXMuX2RlbGVn
YXRlID0gZGVsZWdhdGUgfHwgbnVsbDsKLSAgICB0aGlzLl9tb2RlID0gV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vbmU7Ci0KLSAgICB0aGlzLl9t
b3VzZU92ZXJEZWxheUR1cmF0aW9uID0gMDsKLSAgICB0aGlzLl9tb3VzZU91dFJlbGVhc2VEZWxh
eUR1cmF0aW9uID0gMDsKLSAgICB0aGlzLl9jbGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdlID0g
bnVsbDsKKyAgICBjb25zdHJ1Y3Rvcihjb2RlTWlycm9yLCBkZWxlZ2F0ZSkKKyAgICB7CisgICAg
ICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7Ci0gICAgdGhpcy5fdHJh
Y2tpbmcgPSBmYWxzZTsKLSAgICB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvID0gbnVsbDsKLSAgICB0
aGlzLl9ob3ZlcmVkTWFya2VyID0gbnVsbDsKLX07CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNv
ZGVNaXJyb3IpOwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLkp1bXBUb1N5bWJvbEhpZ2hsaWdodFN0eWxlQ2xhc3NOYW1lID0gImp1bXAtdG8tc3ltYm9s
LWhpZ2hsaWdodCI7CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOworICAg
ICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlIHx8IG51bGw7CisgICAgICAgIHRoaXMuX21v
ZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUu
Tm9uZTsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5N
b2RlID0gewotICAgIE5vbmU6ICJub25lIiwKLSAgICBOb25TeW1ib2xUb2tlbnM6ICJub24tc3lt
Ym9sLXRva2VucyIsCi0gICAgSmF2YVNjcmlwdEV4cHJlc3Npb246ICJqYXZhc2NyaXB0LWV4cHJl
c3Npb24iLAotICAgIEphdmFTY3JpcHRUeXBlSW5mb3JtYXRpb246ICJqYXZhc2NyaXB0LXR5cGUt
aW5mb3JtYXRpb24iLAotICAgIE1hcmtlZFRva2VuczogIm1hcmtlZC10b2tlbnMiCi19OworICAg
ICAgICB0aGlzLl9tb3VzZU92ZXJEZWxheUR1cmF0aW9uID0gMDsKKyAgICAgICAgdGhpcy5fbW91
c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9IDA7CisgICAgICAgIHRoaXMuX2NsYXNzTmFtZUZv
ckhpZ2hsaWdodGVkUmFuZ2UgPSBudWxsOwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlciwKKyAgICAgICAgdGhpcy5f
ZW5hYmxlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl90cmFja2luZyA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvID0gbnVsbDsKKyAgICAgICAgdGhpcy5faG92ZXJlZE1h
cmtlciA9IG51bGw7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKICAgICBnZXQgZGVsZWdhdGUo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlOwotICAgIH0sCisgICAgfQog
CiAgICAgc2V0IGRlbGVnYXRlKHgpCiAgICAgewogICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHg7
Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZW5hYmxlZCgpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fZW5hYmxlZDsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBlbmFibGVkKGVuYWJs
ZWQpCiAgICAgewpAQCAtOTIsMTIgKzgwLDEyIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgd3JhcHBlci5y
ZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgdGhpcyk7CiAgICAgICAgICAgICB0aGlz
Ll9zdG9wVHJhY2tpbmcoKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IG1v
ZGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX21vZGU7Ci0gICAgfSwKKyAgICB9CiAK
ICAgICBzZXQgbW9kZShtb2RlKQogICAgIHsKQEAgLTEwNyw2MiArOTUsNjIgQEAgV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgaWYgKG9sZE1vZGUgIT09IHRoaXMuX21vZGUgJiYgdGhpcy5fdHJhY2tpbmcgJiYgdGhp
cy5faG92ZXJlZFRva2VuSW5mbykKICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NOZXdIb3ZlcmVk
VG9rZW4oKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBtb3VzZU92ZXJEZWxheUR1cmF0aW9u
KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tb3VzZU92ZXJEZWxheUR1cmF0aW9uOwot
ICAgIH0sCisgICAgfQogCiAgICAgc2V0IG1vdXNlT3ZlckRlbGF5RHVyYXRpb24oeCkKICAgICB7
CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHggPj0gMCk7CiAgICAgICAgIHRoaXMuX21vdXNlT3Zl
ckRlbGF5RHVyYXRpb24gPSBNYXRoLm1heCh4LCAwKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdl
dCBtb3VzZU91dFJlbGVhc2VEZWxheUR1cmF0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0
aGlzLl9tb3VzZU91dFJlbGVhc2VEZWxheUR1cmF0aW9uOwotICAgIH0sCisgICAgfQogCiAgICAg
c2V0IG1vdXNlT3V0UmVsZWFzZURlbGF5RHVyYXRpb24oeCkKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHggPj0gMCk7CiAgICAgICAgIHRoaXMuX21vdXNlT3V0UmVsZWFzZURlbGF5RHVy
YXRpb24gPSBNYXRoLm1heCh4LCAwKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBjbGFzc05h
bWVGb3JIaWdobGlnaHRlZFJhbmdlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jbGFz
c05hbWVGb3JIaWdobGlnaHRlZFJhbmdlOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGNsYXNz
TmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UoeCkKICAgICB7CiAgICAgICAgIHRoaXMuX2NsYXNzTmFt
ZUZvckhpZ2hsaWdodGVkUmFuZ2UgPSB4IHx8IG51bGw7Ci0gICAgfSwKKyAgICB9CiAKICAgICBn
ZXQgY2FuZGlkYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jYW5kaWRhdGU7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICBnZXQgaG92ZXJlZE1hcmtlcigpCiAgICAgewogICAgICAgICBy
ZXR1cm4gdGhpcy5faG92ZXJlZE1hcmtlcjsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBob3Zl
cmVkTWFya2VyKGhvdmVyZWRNYXJrZXIpCiAgICAgewogICAgICAgICB0aGlzLl9ob3ZlcmVkTWFy
a2VyID0gaG92ZXJlZE1hcmtlcjsKLSAgICB9LAorICAgIH0KIAotICAgIGhpZ2hsaWdodExhc3RI
b3ZlcmVkUmFuZ2U6IGZ1bmN0aW9uKCkKKyAgICBoaWdobGlnaHRMYXN0SG92ZXJlZFJhbmdlKCkK
ICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9jYW5kaWRhdGUpCiAgICAgICAgICAgICB0aGlzLmhp
Z2hsaWdodFJhbmdlKHRoaXMuX2NhbmRpZGF0ZS5ob3ZlcmVkVG9rZW5SYW5nZSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBoaWdobGlnaHRSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgaGlnaGxp
Z2h0UmFuZ2UocmFuZ2UpCiAgICAgewogICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdlJ3Jl
IHRyeWluZyB0byBoaWdobGlnaHQgdGhlIHNhbWUgcmFuZ2UuCiAgICAgICAgIGlmICh0aGlzLl9j
b2RlTWlycm9yTWFya2VkVGV4dCAmJiB0aGlzLl9jb2RlTWlycm9yTWFya2VkVGV4dC5jbGFzc05h
bWUgPT09IHRoaXMuX2NsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UpIHsKQEAgLTE3OCw5ICsx
NjYsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvck1hcmtlZFRleHQgPSB0aGlzLl9j
b2RlTWlycm9yLm1hcmtUZXh0KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQsIHtjbGFzc05hbWV9KTsK
IAogICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcywgdHJ1
ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZW1vdmVIaWdobGlnaHRlZFJhbmdlOiBmdW5jdGlv
bigpCisgICAgcmVtb3ZlSGlnaGxpZ2h0ZWRSYW5nZSgpCiAgICAgewogICAgICAgICBpZiAoIXRo
aXMuX2NvZGVNaXJyb3JNYXJrZWRUZXh0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg5LDEx
ICsxNzcsMTEgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb2RlTWlycm9yTWFya2VkVGV4
dDsKIAogICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhp
cywgdHJ1ZSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfc3RhcnRU
cmFja2luZzogZnVuY3Rpb24oKQorICAgIF9zdGFydFRyYWNraW5nKCkKICAgICB7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl90cmFja2luZyk7CiAgICAgICAgIGlmICh0aGlzLl90cmFj
a2luZykKQEAgLTIwNyw5ICsxOTUsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJh
Y2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgd3JhcHBlci5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLCBmYWxzZSk7CiAgICAgICAgIHdyYXBwZXIuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMsIGZhbHNlKTsKICAgICAgICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLCB0cnVlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9z
dG9wVHJhY2tpbmc6IGZ1bmN0aW9uKCkKKyAgICBfc3RvcFRyYWNraW5nKCkKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3RyYWNraW5nKTsKICAgICAgICAgaWYgKCF0aGlzLl90
cmFja2luZykKQEAgLTIyNyw5ICsyMTUsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgd2luZG93LnJlbW92ZUV2
ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMsIHRydWUpOwogCiAgICAgICAgIHRoaXMuX3Jl
c2V0VHJhY2tpbmdTdGF0ZXMoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGhhbmRsZUV2ZW50OiBm
dW5jdGlvbihldmVudCkKKyAgICBoYW5kbGVFdmVudChldmVudCkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAoZXZlbnQudHlwZSkgewogICAgICAgICBjYXNlICJtb3VzZWVudGVyIjoKQEAgLTI1OSwy
MCArMjQ3LDIwIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fd2luZG93TG9zdEZvY3VzKGV2ZW50
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
bW91c2VFbnRlcmVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfbW91c2VFbnRlcmVkKGV2ZW50KQog
ICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl90cmFja2luZykKICAgICAgICAgICAgIHRoaXMuX3N0
YXJ0VHJhY2tpbmcoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZUxlZnQ6IGZ1bmN0aW9u
KGV2ZW50KQorICAgIF9tb3VzZUxlZnQoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9zdG9w
VHJhY2tpbmcoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZU1vdmVkV2l0aE1hcmtlZFRl
eHQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tb3VzZU1vdmVkV2l0aE1hcmtlZFRleHQoZXZlbnQp
CiAgICAgewogICAgICAgICB2YXIgc2hvdWxkUmVsZWFzZSA9ICFldmVudC50YXJnZXQuY2xhc3NM
aXN0LmNvbnRhaW5zKHRoaXMuX2NsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UpOwogICAgICAg
ICBpZiAoc2hvdWxkUmVsZWFzZSAmJiB0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVs
ZWdhdGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJDYW5SZWxlYXNlSGlnaGxpZ2h0ZWRSYW5nZSA9
PT0gImZ1bmN0aW9uIikKQEAgLTI4NiwyMSArMjc0LDIxIEBAIFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGNsZWFy
VGltZW91dCh0aGlzLl9tYXJrZWRUZXh0TW91c2VvdXRUaW1lcik7CiAgICAgICAgIGRlbGV0ZSB0
aGlzLl9tYXJrZWRUZXh0TW91c2VvdXRUaW1lcjsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYXJr
ZWRUZXh0SXNOb0xvbmdlckhvdmVyZWQ6IGZ1bmN0aW9uKCkKKyAgICBfbWFya2VkVGV4dElzTm9M
b25nZXJIb3ZlcmVkKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBl
b2YgdGhpcy5fZGVsZWdhdGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZFJhbmdl
UmVsZWFzZWQgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS50b2tl
blRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkUmFuZ2VSZWxlYXNlZCh0aGlzKTsKICAgICAg
ICAgZGVsZXRlIHRoaXMuX21hcmtlZFRleHRNb3VzZW91dFRpbWVyOwotICAgIH0sCisgICAgfQog
Ci0gICAgX21vdXNlTW92ZWRPdmVyRWRpdG9yOiBmdW5jdGlvbihldmVudCkKKyAgICBfbW91c2VN
b3ZlZE92ZXJFZGl0b3IoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRhdGVIb3ZlcmVk
VG9rZW5JbmZvKHtsZWZ0OiBldmVudC5wYWdlWCwgdG9wOiBldmVudC5wYWdlWX0pOwotICAgIH0s
CisgICAgfQogCi0gICAgX3VwZGF0ZUhvdmVyZWRUb2tlbkluZm86IGZ1bmN0aW9uKG1vdXNlQ29v
cmRzKQorICAgIF91cGRhdGVIb3ZlcmVkVG9rZW5JbmZvKG1vdXNlQ29vcmRzKQogICAgIHsKICAg
ICAgICAgLy8gR2V0IHRoZSBwb3NpdGlvbiBpbiB0aGUgdGV4dCBhbmQgdGhlIHRva2VuIGF0IHRo
YXQgcG9zaXRpb24uCiAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2NvZGVNaXJyb3IuY29v
cmRzQ2hhcihtb3VzZUNvb3Jkcyk7CkBAIC0zMzksMjEgKzMyNywyMSBAQCBXZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHRoaXMuX3Byb2Nlc3NOZXdIb3ZlcmVkVG9rZW4oKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgdGhpcy5fdG9rZW5Ib3ZlclRpbWVyID0gc2V0VGltZW91dCh0aGlzLl9wcm9jZXNzTmV3
SG92ZXJlZFRva2VuLmJpbmQodGhpcyksIHRoaXMuX21vdXNlT3ZlckRlbGF5RHVyYXRpb24pOwot
ICAgIH0sCisgICAgfQogCi0gICAgX21vdXNlTW92ZWRPdXRPZkVkaXRvcjogZnVuY3Rpb24oZXZl
bnQpCisgICAgX21vdXNlTW92ZWRPdXRPZkVkaXRvcihldmVudCkKICAgICB7CiAgICAgICAgIGNs
ZWFyVGltZW91dCh0aGlzLl90b2tlbkhvdmVyVGltZXIpOwogICAgICAgICBkZWxldGUgdGhpcy5f
aG92ZXJlZFRva2VuSW5mbzsKICAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdGlvbk1heUJlSW5Q
cm9ncmVzczsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZUJ1dHRvbldhc1ByZXNzZWRPdmVy
RWRpdG9yOiBmdW5jdGlvbihldmVudCkKKyAgICBfbW91c2VCdXR0b25XYXNQcmVzc2VkT3ZlckVk
aXRvcihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1heUJlSW5Qcm9ncmVz
cyA9IHRydWU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbW91c2VCdXR0b25XYXNSZWxlYXNlZE92
ZXJFZGl0b3I6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tb3VzZUJ1dHRvbldhc1JlbGVhc2VkT3Zl
ckVkaXRvcihldmVudCkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb25NYXlC
ZUluUHJvZ3Jlc3M7CiAgICAgICAgIHRoaXMuX21vdXNlTW92ZWRPdmVyRWRpdG9yKGV2ZW50KTsK
QEAgLTM3MSwxNCArMzU5LDE0IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX3dpbmRvd0xvc3RGb2N1czogZnVu
Y3Rpb24oZXZlbnQpCisgICAgX3dpbmRvd0xvc3RGb2N1cyhldmVudCkKICAgICB7CiAgICAgICAg
IHRoaXMuX3Jlc2V0VHJhY2tpbmdTdGF0ZXMoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9wcm9j
ZXNzTmV3SG92ZXJlZFRva2VuOiBmdW5jdGlvbigpCisgICAgX3Byb2Nlc3NOZXdIb3ZlcmVkVG9r
ZW4oKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faG92ZXJlZFRva2VuSW5m
byk7CiAKQEAgLTQwOCw5ICszOTYsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJh
Y2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAodGhpcy5fZGVsZWdh
dGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRva2VuVHJhY2tpbmdDb250cm9sbGVyTmV3SGln
aGxpZ2h0Q2FuZGlkYXRlID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgdGhpcy5fZGVsZWdh
dGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJOZXdIaWdobGlnaHRDYW5kaWRhdGUodGhpcywgdGhp
cy5fY2FuZGlkYXRlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9wcm9jZXNzTm9uU3ltYm9sVG9r
ZW46IGZ1bmN0aW9uKCkKKyAgICBfcHJvY2Vzc05vblN5bWJvbFRva2VuKCkKICAgICB7CiAgICAg
ICAgIC8vIElnbm9yZSBhbnkgc3ltYm9sIHRva2Vucy4KICAgICAgICAgdmFyIHR5cGUgPSB0aGlz
Ll9ob3ZlcmVkVG9rZW5JbmZvLnRva2VuLnR5cGU7CkBAIC00MjQsOSArNDEyLDkgQEAgV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBob3ZlcmVkVG9rZW46IHRoaXMuX2hvdmVyZWRUb2tlbkluZm8udG9rZW4sCiAg
ICAgICAgICAgICBob3ZlcmVkVG9rZW5SYW5nZToge3N0YXJ0OiBzdGFydFBvc2l0aW9uLCBlbmQ6
IGVuZFBvc2l0aW9ufSwKICAgICAgICAgfTsKLSAgICB9LAorICAgIH0KIAotICAgIF9wcm9jZXNz
SmF2YVNjcmlwdEV4cHJlc3Npb246IGZ1bmN0aW9uKCkKKyAgICBfcHJvY2Vzc0phdmFTY3JpcHRF
eHByZXNzaW9uKCkKICAgICB7CiAgICAgICAgIC8vIE9ubHkgdmFsaWQgd2l0aGluIEphdmFTY3Jp
cHQuCiAgICAgICAgIGlmICh0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLm1vZGVOYW1lICE9PSAiamF2
YXNjcmlwdCIpCkBAIC00MzUsNiArNDIzLDEyIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc3RhcnRQb3Np
dGlvbiA9IHtsaW5lOiB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLnBvc2l0aW9uLmxpbmUsIGNoOiB0
aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLnRva2VuLnN0YXJ0fTsKICAgICAgICAgdmFyIGVuZFBvc2l0
aW9uID0ge2xpbmU6IHRoaXMuX2hvdmVyZWRUb2tlbkluZm8ucG9zaXRpb24ubGluZSwgY2g6IHRo
aXMuX2hvdmVyZWRUb2tlbkluZm8udG9rZW4uZW5kfTsKIAorICAgICAgICBmdW5jdGlvbiB0b2tl
bklzSW5SYW5nZSh0b2tlbiwgcmFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0
b2tlbi5saW5lID49IHJhbmdlLnN0YXJ0LmxpbmUgJiYgdG9rZW4uY2ggPj0gcmFuZ2Uuc3RhcnQu
Y2ggJiYKKyAgICAgICAgICAgICAgICAgICB0b2tlbi5saW5lIDw9IHJhbmdlLmVuZC5saW5lICYm
IHRva2VuLmNoIDw9IHJhbmdlLmVuZC5jaDsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIElmIHRo
ZSBob3ZlcmVkIHRva2VuIGlzIHdpdGhpbiBhIHNlbGVjdGlvbiwgdXNlIHRoZSBzZWxlY3Rpb24g
YXMgb3VyIGV4cHJlc3Npb24uCiAgICAgICAgIGlmICh0aGlzLl9jb2RlTWlycm9yLnNvbWV0aGlu
Z1NlbGVjdGVkKCkpIHsKICAgICAgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHsKQEAgLTQ0
MiwxMiArNDM2LDYgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgZW5kOiB0aGlzLl9jb2RlTWlycm9y
LmdldEN1cnNvcigiZW5kIikKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGZ1bmN0aW9u
IHRva2VuSXNJblJhbmdlKHRva2VuLCByYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdG9rZW4ubGluZSA+PSByYW5nZS5zdGFydC5saW5lICYmIHRva2VuLmNoID49
IHJhbmdlLnN0YXJ0LmNoICYmCi0gICAgICAgICAgICAgICAgICAgICAgIHRva2VuLmxpbmUgPD0g
cmFuZ2UuZW5kLmxpbmUgJiYgdG9rZW4uY2ggPD0gcmFuZ2UuZW5kLmNoOwotICAgICAgICAgICAg
fQotCiAgICAgICAgICAgICBpZiAodG9rZW5Jc0luUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgc2VsZWN0
aW9uUmFuZ2UpIHx8IHRva2VuSXNJblJhbmdlKGVuZFBvc2l0aW9uLCBzZWxlY3Rpb25SYW5nZSkp
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICBob3ZlcmVk
VG9rZW46IHRoaXMuX2hvdmVyZWRUb2tlbkluZm8udG9rZW4sCkBAIC01MDMsMTQgKzQ5MSwxNCBA
QCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgICAgICBleHByZXNzaW9uUmFu
Z2U6IHtzdGFydDogZXhwcmVzc2lvblN0YXJ0UG9zaXRpb24sIGVuZDogZW5kUG9zaXRpb259LAog
ICAgICAgICB9OwotICAgIH0sCisgICAgfQogCi0gICAgX3Byb2Nlc3NNYXJrZWRUb2tlbjogZnVu
Y3Rpb24oKQorICAgIF9wcm9jZXNzTWFya2VkVG9rZW4oKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX3Byb2Nlc3NOb25TeW1ib2xUb2tlbigpOwotICAgIH0sCisgICAgfQogCi0gICAgX3Jl
c2V0VHJhY2tpbmdTdGF0ZXM6IGZ1bmN0aW9uKCkKKyAgICBfcmVzZXRUcmFja2luZ1N0YXRlcygp
CiAgICAgewogICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdG9rZW5Ib3ZlclRpbWVyKTsKICAg
ICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdGlvbk1heUJlSW5Qcm9ncmVzczsKQEAgLTUxOSw0ICs1
MDcsMTIgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5w
cm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0
aW9uQ29udHJvbGxlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5w
cm90b3R5cGU7CitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVy
Lkp1bXBUb1N5bWJvbEhpZ2hsaWdodFN0eWxlQ2xhc3NOYW1lID0gImp1bXAtdG8tc3ltYm9sLWhp
Z2hsaWdodCI7CisKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuTW9kZSA9IHsKKyAgICBOb25lOiAibm9uZSIsCisgICAgTm9uU3ltYm9sVG9rZW5zOiAibm9u
LXN5bWJvbC10b2tlbnMiLAorICAgIEphdmFTY3JpcHRFeHByZXNzaW9uOiAiamF2YXNjcmlwdC1l
eHByZXNzaW9uIiwKKyAgICBKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOiAiamF2YXNjcmlwdC10
eXBlLWluZm9ybWF0aW9uIiwKKyAgICBNYXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIgorfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0RPTVRyZWVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvRE9NVHJlZU1hbmFnZXIuanMKaW5kZXggNzExNmZmYmQyYzU4OTk5NDhm
MmZlOGYyNWY3MGRlZDg4ZjlhMzJjZS4uYzBmM2QyY2Y0MmI3YTczMWEwZWI4MTc5NTdlZjY4MDZl
NTg5Y2U4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvRE9NVHJlZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRE9NVHJlZU1hbmFnZXIuanMKQEAgLTMwLDQ0ICsz
MCwzMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFn
ZXIgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLl9pZFRvRE9NTm9kZSA9IHt9OwotICAgIHRoaXMu
X2RvY3VtZW50ID0gbnVsbDsKLSAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkcyA9IHt9Owot
ICAgIHRoaXMuX2Zsb3dzID0gbmV3IE1hcDsKLSAgICB0aGlzLl9jb250ZW50Tm9kZXNUb0Zsb3dz
TWFwID0gbmV3IE1hcDsKLSAgICB0aGlzLl9yZXN0b3JlU2VsZWN0ZWROb2RlSXNBbGxvd2VkID0g
dHJ1ZTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJj
ZURpZENoYW5nZSwgdGhpcyk7Ci19OworV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyID0gY2xh
c3MgRE9NVHJlZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Cit7CisgICAgY29u
c3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotLy8gRklYTUU6IE1vdmUgdG8g
YSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzIGFuZCB3ZSBjYW4gcmVtb3ZlIHRoaXMuCi1X
ZWJJbnNwZWN0b3IuT2JqZWN0LmRlcHJlY2F0ZWRBZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIpOworICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZSA9IHt9
OworICAgICAgICB0aGlzLl9kb2N1bWVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX2F0dHJpYnV0
ZUxvYWROb2RlSWRzID0ge307CisgICAgICAgIHRoaXMuX2Zsb3dzID0gbmV3IE1hcDsKKyAgICAg
ICAgdGhpcy5fY29udGVudE5vZGVzVG9GbG93c01hcCA9IG5ldyBNYXA7CisgICAgICAgIHRoaXMu
X3Jlc3RvcmVTZWxlY3RlZE5vZGVJc0FsbG93ZWQgPSB0cnVlOwogCi1XZWJJbnNwZWN0b3IuRE9N
VHJlZU1hbmFnZXIuRXZlbnQgPSB7Ci0gICAgQXR0cmlidXRlTW9kaWZpZWQ6ICJkb20tdHJlZS1t
YW5hZ2VyLWF0dHJpYnV0ZS1tb2RpZmllZCIsCi0gICAgQXR0cmlidXRlUmVtb3ZlZDogImRvbS10
cmVlLW1hbmFnZXItYXR0cmlidXRlLXJlbW92ZWQiLAotICAgIENoYXJhY3RlckRhdGFNb2RpZmll
ZDogImRvbS10cmVlLW1hbmFnZXItY2hhcmFjdGVyLWRhdGEtbW9kaWZpZWQiLAotICAgIE5vZGVJ
bnNlcnRlZDogImRvbS10cmVlLW1hbmFnZXItbm9kZS1pbnNlcnRlZCIsCi0gICAgTm9kZVJlbW92
ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLW5vZGUtcmVtb3ZlZCIsCi0gICAgRG9jdW1lbnRVcGRhdGVk
OiAiZG9tLXRyZWUtbWFuYWdlci1kb2N1bWVudC11cGRhdGVkIiwKLSAgICBDaGlsZE5vZGVDb3Vu
dFVwZGF0ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNoaWxkLW5vZGUtY291bnQtdXBkYXRlZCIsCi0g
ICAgRE9NTm9kZVdhc0luc3BlY3RlZDogImRvbS10cmVlLW1hbmFnZXItZG9tLW5vZGUtd2FzLWlu
c3BlY3RlZCIsCi0gICAgSW5zcGVjdE1vZGVTdGF0ZUNoYW5nZWQ6ICJkb20tdHJlZS1tYW5hZ2Vy
LWluc3BlY3QtbW9kZS1zdGF0ZS1jaGFuZ2VkIiwKLSAgICBDb250ZW50Rmxvd0xpc3RXYXNVcGRh
dGVkOiAiZG9tLXRyZWUtbWFuYWdlci1jb250ZW50LWZsb3ctbGlzdC13YXMtdXBkYXRlZCIsCi0g
ICAgQ29udGVudEZsb3dXYXNBZGRlZDogImRvbS10cmVlLW1hbmFnZXItY29udGVudC1mbG93LXdh
cy1hZGRlZCIsCi0gICAgQ29udGVudEZsb3dXYXNSZW1vdmVkOiAiZG9tLXRyZWUtbWFuYWdlci1j
b250ZW50LWZsb3ctd2FzLXJlbW92ZWQiLAotICAgIFJlZ2lvbk92ZXJzZXRDaGFuZ2VkOiAiZG9t
LXRyZWUtbWFuYWdlci1yZWdpb24tb3ZlcnNldC1jaGFuZ2VkIgotfTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1h
aW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsK
KyAgICB9CiAKLVdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5fZmxvd1BheWxvYWRIYXNoS2V5
ID0gZnVuY3Rpb24oZmxvd1BheWxvYWQpCi17Ci0gICAgLy8gVXNlIHRoZSBmbG93IG5vZGUgaWQs
IHRvIGF2b2lkIGNvbGxpc2lvbnMgd2hlbiB3ZSBjaGFuZ2UgbWFpbiBkb2N1bWVudCBpZC4KLSAg
ICByZXR1cm4gZmxvd1BheWxvYWQuZG9jdW1lbnROb2RlSWQgKyAiOiIgKyBmbG93UGF5bG9hZC5u
YW1lOwotfTsKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRpYyBfZmxvd1BheWxvYWRIYXNoS2V5
KGZsb3dQYXlsb2FkKQorICAgIHsKKyAgICAgICAgLy8gVXNlIHRoZSBmbG93IG5vZGUgaWQsIHRv
IGF2b2lkIGNvbGxpc2lvbnMgd2hlbiB3ZSBjaGFuZ2UgbWFpbiBkb2N1bWVudCBpZC4KKyAgICAg
ICAgcmV0dXJuIGZsb3dQYXlsb2FkLmRvY3VtZW50Tm9kZUlkICsgIjoiICsgZmxvd1BheWxvYWQu
bmFtZTsKKyAgICB9CiAKLVdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7
Ci0gICAgcmVxdWVzdERvY3VtZW50OiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICAvLyBQdWJsaWMK
KworICAgIHJlcXVlc3REb2N1bWVudChjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlmICh0aGlz
Ll9kb2N1bWVudCkgewogICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQpAQCAtOTYsMjAgKzg1LDIy
IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
IAogICAgICAgICBET01BZ2VudC5nZXREb2N1bWVudChvbkRvY3VtZW50QXZhaWxhYmxlLmJpbmQo
dGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgcHVzaE5vZGVUb0Zyb250ZW5kOiBmdW5jdGlv
bihvYmplY3RJZCwgY2FsbGJhY2spCisgICAgcHVzaE5vZGVUb0Zyb250ZW5kKG9iamVjdElkLCBj
YWxsYmFjaykKICAgICB7CiAgICAgICAgIHRoaXMuX2Rpc3BhdGNoV2hlbkRvY3VtZW50QXZhaWxh
YmxlKERPTUFnZW50LnJlcXVlc3ROb2RlLmJpbmQoRE9NQWdlbnQsIG9iamVjdElkKSwgY2FsbGJh
Y2spOwotICAgIH0sCisgICAgfQogCi0gICAgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kOiBmdW5j
dGlvbihwYXRoLCBjYWxsYmFjaykKKyAgICBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQocGF0aCwg
Y2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgY2FsbGJhY2tDYXN0ID0gY2FsbGJhY2s7CiAg
ICAgICAgIHRoaXMuX2Rpc3BhdGNoV2hlbkRvY3VtZW50QXZhaWxhYmxlKERPTUFnZW50LnB1c2hO
b2RlQnlQYXRoVG9Gcm9udGVuZC5iaW5kKERPTUFnZW50LCBwYXRoKSwgY2FsbGJhY2tDYXN0KTsK
LSAgICB9LAorICAgIH0KIAotICAgIF93cmFwQ2xpZW50Q2FsbGJhY2s6IGZ1bmN0aW9uKGNhbGxi
YWNrKQorICAgIC8vIFByaXZhdGUKKworICAgIF93cmFwQ2xpZW50Q2FsbGJhY2soY2FsbGJhY2sp
CiAgICAgewogICAgICAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTE4LDkgKzEwOSw5IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZHVyaW5nIERPTUFnZW50IG9w
ZXJhdGlvbjogIiArIGVycm9yKTsKICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yID8gbnVsbCA6
IHJlc3VsdCk7CiAgICAgICAgIH07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZGlzcGF0Y2hXaGVu
RG9jdW1lbnRBdmFpbGFibGU6IGZ1bmN0aW9uKGZ1bmMsIGNhbGxiYWNrKQorICAgIF9kaXNwYXRj
aFdoZW5Eb2N1bWVudEF2YWlsYWJsZShmdW5jLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZh
ciBjYWxsYmFja1dyYXBwZXIgPSB0aGlzLl93cmFwQ2xpZW50Q2FsbGJhY2soY2FsbGJhY2spOwog
CkBAIC0xMzQsOSArMTI1LDkgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB0aGlzLnJlcXVlc3REb2N1
bWVudChvbkRvY3VtZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0g
ICAgX2F0dHJpYnV0ZU1vZGlmaWVkOiBmdW5jdGlvbihub2RlSWQsIG5hbWUsIHZhbHVlKQorICAg
IF9hdHRyaWJ1dGVNb2RpZmllZChub2RlSWQsIG5hbWUsIHZhbHVlKQogICAgIHsKICAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRdOwogICAgICAgICBpZiAoIW5vZGUp
CkBAIC0xNDQsOSArMTM1LDkgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgbm9kZS5fc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKICAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2Vy
LkV2ZW50LkF0dHJpYnV0ZU1vZGlmaWVkLCB7bm9kZSwgbmFtZX0pOwogICAgICAgICBub2RlLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NTm9kZS5FdmVudC5BdHRyaWJ1
dGVNb2RpZmllZCwge25hbWV9KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hdHRyaWJ1dGVSZW1v
dmVkOiBmdW5jdGlvbihub2RlSWQsIG5hbWUpCisgICAgX2F0dHJpYnV0ZVJlbW92ZWQobm9kZUlk
LCBuYW1lKQogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9pZFRvRE9NTm9kZVtub2Rl
SWRdOwogICAgICAgICBpZiAoIW5vZGUpCkBAIC0xNTQsMTggKzE0NSwxOCBAQCBXZWJJbnNwZWN0
b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBub2RlLl9yZW1vdmVBdHRy
aWJ1dGUobmFtZSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudC5BdHRyaWJ1dGVSZW1vdmVkLCB7bm9kZSwgbmFt
ZX0pOwogICAgICAgICBub2RlLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
RE9NTm9kZS5FdmVudC5BdHRyaWJ1dGVSZW1vdmVkLCB7bmFtZX0pOwotICAgIH0sCisgICAgfQog
Ci0gICAgX2lubGluZVN0eWxlSW52YWxpZGF0ZWQ6IGZ1bmN0aW9uKG5vZGVJZHMpCisgICAgX2lu
bGluZVN0eWxlSW52YWxpZGF0ZWQobm9kZUlkcykKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbm9kZUlkcy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIHRoaXMuX2F0dHJpYnV0
ZUxvYWROb2RlSWRzW25vZGVJZHNbaV1dID0gdHJ1ZTsKICAgICAgICAgaWYgKCJfbG9hZE5vZGVB
dHRyaWJ1dGVzVGltZW91dCIgaW4gdGhpcykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
dGhpcy5fbG9hZE5vZGVBdHRyaWJ1dGVzVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fbG9hZE5v
ZGVBdHRyaWJ1dGVzLmJpbmQodGhpcyksIDApOwotICAgIH0sCisgICAgfQogCi0gICAgX2xvYWRO
b2RlQXR0cmlidXRlczogZnVuY3Rpb24oKQorICAgIF9sb2FkTm9kZUF0dHJpYnV0ZXMoKQogICAg
IHsKICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobm9kZUlkLCBlcnJvciwgYXR0cmlidXRlcykK
ICAgICAgICAgewpAQCAtMTg4LDI2ICsxNzksMjYgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIERPTUFnZW50LmdldEF0dHJpYnV0ZXMobm9k
ZUlkQXNOdW1iZXIsIGNhbGxiYWNrLmJpbmQodGhpcywgbm9kZUlkQXNOdW1iZXIpKTsKICAgICAg
ICAgfQogICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkcyA9IHt9OwotICAgIH0sCisg
ICAgfQogCi0gICAgX2NoYXJhY3RlckRhdGFNb2RpZmllZDogZnVuY3Rpb24obm9kZUlkLCBuZXdW
YWx1ZSkKKyAgICBfY2hhcmFjdGVyRGF0YU1vZGlmaWVkKG5vZGVJZCwgbmV3VmFsdWUpCiAgICAg
ewogICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX2lkVG9ET01Ob2RlW25vZGVJZF07CiAgICAgICAg
IG5vZGUuX25vZGVWYWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQuQ2hhcmFjdGVyRGF0
YU1vZGlmaWVkLCB7bm9kZX0pOwotICAgIH0sCisgICAgfQogCi0gICAgbm9kZUZvcklkOiBmdW5j
dGlvbihub2RlSWQpCisgICAgbm9kZUZvcklkKG5vZGVJZCkKICAgICB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRdOwotICAgIH0sCisgICAgfQogCi0gICAgX2RvY3Vt
ZW50VXBkYXRlZDogZnVuY3Rpb24oKQorICAgIF9kb2N1bWVudFVwZGF0ZWQoKQogICAgIHsKICAg
ICAgICAgdGhpcy5fc2V0RG9jdW1lbnQobnVsbCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2V0
RG9jdW1lbnQ6IGZ1bmN0aW9uKHBheWxvYWQpCisgICAgX3NldERvY3VtZW50KHBheWxvYWQpCiAg
ICAgewogICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZSA9IHt9OwogICAgICAgICBpZiAocGF5bG9h
ZCAmJiAibm9kZUlkIiBpbiBwYXlsb2FkKQpAQCAtMjE1LDE0ICsyMDYsMTQgQEAgV2ViSW5zcGVj
dG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgdGhpcy5fZG9jdW1lbnQgPSBudWxsOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQuRG9jdW1lbnRVcGRhdGVk
LCB0aGlzLl9kb2N1bWVudCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2V0RGV0YWNoZWRSb290
OiBmdW5jdGlvbihwYXlsb2FkKQorICAgIF9zZXREZXRhY2hlZFJvb3QocGF5bG9hZCkKICAgICB7
CiAgICAgICAgIG5ldyBXZWJJbnNwZWN0b3IuRE9NTm9kZSh0aGlzLCBudWxsLCBmYWxzZSwgcGF5
bG9hZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2V0Q2hpbGROb2RlczogZnVuY3Rpb24ocGFy
ZW50SWQsIHBheWxvYWRzKQorICAgIF9zZXRDaGlsZE5vZGVzKHBhcmVudElkLCBwYXlsb2FkcykK
ICAgICB7CiAgICAgICAgIGlmICghcGFyZW50SWQgJiYgcGF5bG9hZHMubGVuZ3RoKSB7CiAgICAg
ICAgICAgICB0aGlzLl9zZXREZXRhY2hlZFJvb3QocGF5bG9hZHNbMF0pOwpAQCAtMjMxLDQ4ICsy
MjIsNDggQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICB2YXIgcGFyZW50ID0gdGhpcy5faWRUb0RPTU5vZGVbcGFyZW50SWRdOwogICAgICAgICBw
YXJlbnQuX3NldENoaWxkcmVuUGF5bG9hZChwYXlsb2Fkcyk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfY2hpbGROb2RlQ291bnRVcGRhdGVkOiBmdW5jdGlvbihub2RlSWQsIG5ld1ZhbHVlKQorICAg
IF9jaGlsZE5vZGVDb3VudFVwZGF0ZWQobm9kZUlkLCBuZXdWYWx1ZSkKICAgICB7CiAgICAgICAg
IHZhciBub2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKICAgICAgICAgbm9kZS5jaGls
ZE5vZGVDb3VudCA9IG5ld1ZhbHVlOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQuQ2hpbGROb2RlQ291bnRVcGRh
dGVkLCBub2RlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jaGlsZE5vZGVJbnNlcnRlZDogZnVu
Y3Rpb24ocGFyZW50SWQsIHByZXZJZCwgcGF5bG9hZCkKKyAgICBfY2hpbGROb2RlSW5zZXJ0ZWQo
cGFyZW50SWQsIHByZXZJZCwgcGF5bG9hZCkKICAgICB7CiAgICAgICAgIHZhciBwYXJlbnQgPSB0
aGlzLl9pZFRvRE9NTm9kZVtwYXJlbnRJZF07CiAgICAgICAgIHZhciBwcmV2ID0gdGhpcy5faWRU
b0RPTU5vZGVbcHJldklkXTsKICAgICAgICAgdmFyIG5vZGUgPSBwYXJlbnQuX2luc2VydENoaWxk
KHByZXYsIHBheWxvYWQpOwogICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZVtub2RlLmlkXSA9IG5v
ZGU7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5E
T01UcmVlTWFuYWdlci5FdmVudC5Ob2RlSW5zZXJ0ZWQsIHtub2RlLCBwYXJlbnR9KTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9jaGlsZE5vZGVSZW1vdmVkOiBmdW5jdGlvbihwYXJlbnRJZCwgbm9k
ZUlkKQorICAgIF9jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBub2RlSWQpCiAgICAgewogICAg
ICAgICB2YXIgcGFyZW50ID0gdGhpcy5faWRUb0RPTU5vZGVbcGFyZW50SWRdOwogICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuX2lkVG9ET01Ob2RlW25vZGVJZF07CiAgICAgICAgIHBhcmVudC5fcmVt
b3ZlQ2hpbGQobm9kZSk7CiAgICAgICAgIHRoaXMuX3VuYmluZChub2RlKTsKICAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLkV2
ZW50Lk5vZGVSZW1vdmVkLCB7bm9kZTpub2RlLCBwYXJlbnR9KTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF91bmJpbmQ6IGZ1bmN0aW9uKG5vZGUpCisgICAgX3VuYmluZChub2RlKQogICAgIHsKICAg
ICAgICAgdGhpcy5fcmVtb3ZlQ29udGVudE5vZGVGcm9tRmxvd0lmTmVlZGVkKG5vZGUpOwogCiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9pZFRvRE9NTm9kZVtub2RlLmlkXTsKICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IG5vZGUuY2hpbGRyZW4gJiYgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2kp
CiAgICAgICAgICAgICB0aGlzLl91bmJpbmQobm9kZS5jaGlsZHJlbltpXSk7Ci0gICAgfSwKKyAg
ICB9CiAKICAgICBnZXQgcmVzdG9yZVNlbGVjdGVkTm9kZUlzQWxsb3dlZCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fcmVzdG9yZVNlbGVjdGVkTm9kZUlzQWxsb3dlZDsKLSAgICB9LAor
ICAgIH0KIAotICAgIGluc3BlY3RFbGVtZW50OiBmdW5jdGlvbihub2RlSWQpCisgICAgaW5zcGVj
dEVsZW1lbnQobm9kZUlkKQogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9pZFRvRE9N
Tm9kZVtub2RlSWRdOwogICAgICAgICBpZiAobm9kZSkKQEAgLTI4MCw5ICsyNzEsOSBAQCBXZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2lu
c3BlY3RNb2RlRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQuSW5zcGVjdE1vZGVTdGF0
ZUNoYW5nZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgaW5zcGVjdE5vZGVPYmplY3Q6IGZ1bmN0
aW9uKHJlbW90ZU9iamVjdCkKKyAgICBpbnNwZWN0Tm9kZU9iamVjdChyZW1vdGVPYmplY3QpCiAg
ICAgewogICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0ZWROb2RlSXNBbGxvd2VkID0gZmFsc2U7
CiAKQEAgLTI5OCw5ICsyODksOSBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmVtb3RlT2JqZWN0LnB1c2hOb2RlVG9Gcm9u
dGVuZChub2RlQXZhaWxhYmxlLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgcGVy
Zm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnksIHNlYXJjaENhbGxiYWNrKQorICAgIHBlcmZvcm1T
ZWFyY2gocXVlcnksIHNlYXJjaENhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhpcy5jYW5jZWxT
ZWFyY2goKTsKIApAQCAtMzEwLDQ5ICszMDEsNTAgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNlYXJjaENhbGxiYWNrKHJlc3VsdHNDb3Vu
dCk7CiAgICAgICAgIH0KICAgICAgICAgRE9NQWdlbnQucGVyZm9ybVNlYXJjaChxdWVyeSwgY2Fs
bGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZWFyY2hSZXN1bHQ6IGZ1
bmN0aW9uKGluZGV4LCBjYWxsYmFjaykKKyAgICBzZWFyY2hSZXN1bHQoaW5kZXgsIGNhbGxiYWNr
KQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaElkKSB7Ci0gICAgICAgICAgICBmdW5j
dGlvbiBteWNhbGxiYWNrKGVycm9yLCBub2RlSWRzKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVy
cm9yKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGVJZHMubGVuZ3RoICE9PSAxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRzWzBdXSk7CisgICAg
ICAgIGZ1bmN0aW9uIG15Y2FsbGJhY2soZXJyb3IsIG5vZGVJZHMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Ip
OworICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlSWRzLmxlbmd0aCAhPT0gMSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX2lk
VG9ET01Ob2RlW25vZGVJZHNbMF1dKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLl9z
ZWFyY2hJZCkKICAgICAgICAgICAgIERPTUFnZW50LmdldFNlYXJjaFJlc3VsdHModGhpcy5fc2Vh
cmNoSWQsIGluZGV4LCBpbmRleCArIDEsIG15Y2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgICAg
IH0gZWxzZQorICAgICAgICBlbHNlCiAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTsKLSAgICB9
LAorICAgIH0KIAotICAgIGNhbmNlbFNlYXJjaDogZnVuY3Rpb24oKQorICAgIGNhbmNlbFNlYXJj
aCgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fc2VhcmNoSWQpIHsKICAgICAgICAgICAgIERP
TUFnZW50LmRpc2NhcmRTZWFyY2hSZXN1bHRzKHRoaXMuX3NlYXJjaElkKTsKICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9zZWFyY2hJZDsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAg
cXVlcnlTZWxlY3RvcjogZnVuY3Rpb24obm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxiYWNrKQorICAg
IHF1ZXJ5U2VsZWN0b3Iobm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxiYWNrKQogICAgIHsKICAgICAg
ICAgdmFyIGNhbGxiYWNrQ2FzdCA9IGNhbGxiYWNrOwogICAgICAgICBET01BZ2VudC5xdWVyeVNl
bGVjdG9yKG5vZGVJZCwgc2VsZWN0b3JzLCB0aGlzLl93cmFwQ2xpZW50Q2FsbGJhY2soY2FsbGJh
Y2tDYXN0KSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlv
bihub2RlSWQsIHNlbGVjdG9ycywgY2FsbGJhY2spCisgICAgcXVlcnlTZWxlY3RvckFsbChub2Rl
SWQsIHNlbGVjdG9ycywgY2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgY2FsbGJhY2tDYXN0
ID0gY2FsbGJhY2s7CiAgICAgICAgIERPTUFnZW50LnF1ZXJ5U2VsZWN0b3JBbGwobm9kZUlkLCBz
ZWxlY3RvcnMsIHRoaXMuX3dyYXBDbGllbnRDYWxsYmFjayhjYWxsYmFja0Nhc3QpKTsKLSAgICB9
LAorICAgIH0KIAotICAgIGhpZ2hsaWdodERPTU5vZGU6IGZ1bmN0aW9uKG5vZGVJZCwgbW9kZSkK
KyAgICBoaWdobGlnaHRET01Ob2RlKG5vZGVJZCwgbW9kZSkKICAgICB7CiAgICAgICAgIGlmICh0
aGlzLl9oaWRlRE9NTm9kZUhpZ2hsaWdodFRpbWVvdXQpIHsKICAgICAgICAgICAgIGNsZWFyVGlt
ZW91dCh0aGlzLl9oaWRlRE9NTm9kZUhpZ2hsaWdodFRpbWVvdXQpOwpAQCAtMzY0LDkgKzM1Niw5
IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICBET01BZ2VudC5oaWdobGlnaHROb2RlLmludm9rZSh7bm9kZUlkLCBoaWdobGlnaHRDb25maWc6
IHRoaXMuX2J1aWxkSGlnaGxpZ2h0Q29uZmlnKG1vZGUpfSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIERPTUFnZW50LmhpZGVIaWdobGlnaHQoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGhp
Z2hsaWdodFJlY3Q6IGZ1bmN0aW9uKHJlY3QsIHVzZVBhZ2VDb29yZGluYXRlcykKKyAgICBoaWdo
bGlnaHRSZWN0KHJlY3QsIHVzZVBhZ2VDb29yZGluYXRlcykKICAgICB7CiAgICAgICAgIERPTUFn
ZW50LmhpZ2hsaWdodFJlY3QuaW52b2tlKHsKICAgICAgICAgICAgIHg6IHJlY3QueCwKQEAgLTM3
NywyMyArMzY5LDIzIEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IHtyOiAyNTUsIGc6IDIyOSwgYjogMTUzLCBhOiAw
LjY2fSwKICAgICAgICAgICAgIHVzZVBhZ2VDb29yZGluYXRlcwogICAgICAgICB9KTsKLSAgICB9
LAorICAgIH0KIAotICAgIGhpZGVET01Ob2RlSGlnaGxpZ2h0OiBmdW5jdGlvbigpCisgICAgaGlk
ZURPTU5vZGVIaWdobGlnaHQoKQogICAgIHsKICAgICAgICAgdGhpcy5oaWdobGlnaHRET01Ob2Rl
KDApOwotICAgIH0sCisgICAgfQogCi0gICAgaGlnaGxpZ2h0RE9NTm9kZUZvclR3b1NlY29uZHM6
IGZ1bmN0aW9uKG5vZGVJZCkKKyAgICBoaWdobGlnaHRET01Ob2RlRm9yVHdvU2Vjb25kcyhub2Rl
SWQpCiAgICAgewogICAgICAgICB0aGlzLmhpZ2hsaWdodERPTU5vZGUobm9kZUlkKTsKICAgICAg
ICAgdGhpcy5faGlkZURPTU5vZGVIaWdobGlnaHRUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLmhp
ZGVET01Ob2RlSGlnaGxpZ2h0LmJpbmQodGhpcyksIDIwMDApOwotICAgIH0sCisgICAgfQogCiAg
ICAgZ2V0IGluc3BlY3RNb2RlRW5hYmxlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5f
aW5zcGVjdE1vZGVFbmFibGVkOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGluc3BlY3RNb2Rl
RW5hYmxlZChlbmFibGVkKQogICAgIHsKQEAgLTQwNCw5ICszOTYsOSBAQCBXZWJJbnNwZWN0b3Iu
RE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgRE9NQWdl
bnQuc2V0SW5zcGVjdE1vZGVFbmFibGVkKGVuYWJsZWQsIHRoaXMuX2J1aWxkSGlnaGxpZ2h0Q29u
ZmlnKCksIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgX2J1aWxk
SGlnaGxpZ2h0Q29uZmlnOiBmdW5jdGlvbihtb2RlKQorICAgIF9idWlsZEhpZ2hsaWdodENvbmZp
Zyhtb2RlKQogICAgIHsKICAgICAgICAgbW9kZSA9IG1vZGUgfHwgImFsbCI7CiAgICAgICAgIHZh
ciBoaWdobGlnaHRDb25maWcgPSB7IHNob3dJbmZvOiBtb2RlID09PSAiYWxsIiB9OwpAQCAtNDIz
LDkgKzQxNSw5IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBoaWdobGlnaHRDb25maWcubWFyZ2luQ29sb3IgPSB7cjogMjQ2LCBnOiAxNzgs
IGI6IDEwNywgYTogMC42Nn07CiAKICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodENvbmZpZzsKLSAg
ICB9LAorICAgIH0KIAotICAgIF9jcmVhdGVDb250ZW50Rmxvd0Zyb21QYXlsb2FkOiBmdW5jdGlv
bihmbG93UGF5bG9hZCkKKyAgICBfY3JlYXRlQ29udGVudEZsb3dGcm9tUGF5bG9hZChmbG93UGF5
bG9hZCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBDb2xsZWN0IHRoZSByZWdpb25zIGZyb20g
dGhlIHBheWxvYWQuCiAgICAgICAgIHZhciBmbG93ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZW50
RmxvdyhmbG93UGF5bG9hZC5kb2N1bWVudE5vZGVJZCwgZmxvd1BheWxvYWQubmFtZSwgZmxvd1Bh
eWxvYWQub3ZlcnNldCwgZmxvd1BheWxvYWQuY29udGVudC5tYXAodGhpcy5ub2RlRm9ySWQuYmlu
ZCh0aGlzKSkpOwpAQCAtNDM2LDE4ICs0MjgsMTggQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBmbG93OwotICAg
IH0sCisgICAgfQogCi0gICAgX3VwZGF0ZUNvbnRlbnRGbG93RnJvbVBheWxvYWQ6IGZ1bmN0aW9u
KGNvbnRlbnRGbG93LCBmbG93UGF5bG9hZCkKKyAgICBfdXBkYXRlQ29udGVudEZsb3dGcm9tUGF5
bG9hZChjb250ZW50RmxvdywgZmxvd1BheWxvYWQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydChjb250ZW50Rmxvdy5jb250ZW50Tm9kZXMubGVuZ3RoID09PSBmbG93UGF5bG9hZC5jb250
ZW50Lmxlbmd0aCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbnRlbnRGbG93LmNvbnRlbnRO
b2Rlcy5ldmVyeShmdW5jdGlvbihub2RlLCBpKSB7IG5vZGUuaWQgPT09IGZsb3dQYXlsb2FkLmNv
bnRlbnRbaV07IH0pKTsKIAogICAgICAgICAvLyBGSVhNRTogQ29sbGVjdCB0aGUgcmVnaW9ucyBm
cm9tIHRoZSBwYXlsb2FkLgogICAgICAgICBjb250ZW50Rmxvdy5vdmVyc2V0ID0gZmxvd1BheWxv
YWQub3ZlcnNldDsKLSAgICB9LAorICAgIH0KIAotICAgIGdldE5hbWVkRmxvd0NvbGxlY3Rpb246
IGZ1bmN0aW9uKGRvY3VtZW50Tm9kZUlkZW50aWZpZXIpCisgICAgZ2V0TmFtZWRGbG93Q29sbGVj
dGlvbihkb2N1bWVudE5vZGVJZGVudGlmaWVyKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gb25O
YW1lZEZsb3dDb2xsZWN0aW9uQXZhaWxhYmxlKGVycm9yLCBmbG93cykKICAgICAgICAgewpAQCAt
NDc0LDE4ICs0NjYsMTggQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKIAogICAgICAgICBpZiAod2luZG93LkNTU0FnZW50ICYmIENTU0FnZW50LmdldE5hbWVkRmxv
d0NvbGxlY3Rpb24pCiAgICAgICAgICAgICBDU1NBZ2VudC5nZXROYW1lZEZsb3dDb2xsZWN0aW9u
KGRvY3VtZW50Tm9kZUlkZW50aWZpZXIsIG9uTmFtZWRGbG93Q29sbGVjdGlvbkF2YWlsYWJsZS5i
aW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIG5hbWVkRmxvd0NyZWF0ZWQ6IGZ1bmN0
aW9uKGZsb3dQYXlsb2FkKQorICAgIG5hbWVkRmxvd0NyZWF0ZWQoZmxvd1BheWxvYWQpCiAgICAg
ewogICAgICAgICB2YXIgZmxvd0tleSA9IFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5fZmxv
d1BheWxvYWRIYXNoS2V5KGZsb3dQYXlsb2FkKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRo
aXMuX2Zsb3dzLmhhcyhmbG93S2V5KSk7CiAgICAgICAgIHZhciBjb250ZW50RmxvdyA9IHRoaXMu
X2NyZWF0ZUNvbnRlbnRGbG93RnJvbVBheWxvYWQoZmxvd1BheWxvYWQpOwogICAgICAgICB0aGlz
Ll9mbG93cy5zZXQoZmxvd0tleSwgY29udGVudEZsb3cpOwogICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQuQ29udGVu
dEZsb3dXYXNBZGRlZCwge2Zsb3c6IGNvbnRlbnRGbG93fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBuYW1lZEZsb3dSZW1vdmVkOiBmdW5jdGlvbihkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBmbG93
TmFtZSkKKyAgICBuYW1lZEZsb3dSZW1vdmVkKGRvY3VtZW50Tm9kZUlkZW50aWZpZXIsIGZsb3dO
YW1lKQogICAgIHsKICAgICAgICAgdmFyIGZsb3dLZXkgPSBXZWJJbnNwZWN0b3IuRE9NVHJlZU1h
bmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleSh7ZG9jdW1lbnROb2RlSWQ6IGRvY3VtZW50Tm9kZUlk
ZW50aWZpZXIsIG5hbWU6IGZsb3dOYW1lfSk7CiAgICAgICAgIHZhciBjb250ZW50RmxvdyA9IHRo
aXMuX2Zsb3dzLmdldChmbG93S2V5KTsKQEAgLTQ5NywyMSArNDg5LDIxIEBAIFdlYkluc3BlY3Rv
ci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9jb250ZW50
Tm9kZXNUb0Zsb3dzTWFwLmRlbGV0ZShjb250ZW50Tm9kZS5pZCk7CiAKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLkV2ZW50
LkNvbnRlbnRGbG93V2FzUmVtb3ZlZCwge2Zsb3c6IGNvbnRlbnRGbG93fSk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfc2VuZE5hbWVkRmxvd1VwZGF0ZUV2ZW50czogZnVuY3Rpb24oZmxvd1BheWxv
YWQpCisgICAgX3NlbmROYW1lZEZsb3dVcGRhdGVFdmVudHMoZmxvd1BheWxvYWQpCiAgICAgewog
ICAgICAgICB2YXIgZmxvd0tleSA9IFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5fZmxvd1Bh
eWxvYWRIYXNoS2V5KGZsb3dQYXlsb2FkKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5f
Zmxvd3MuaGFzKGZsb3dLZXkpKTsKICAgICAgICAgdGhpcy5fdXBkYXRlQ29udGVudEZsb3dGcm9t
UGF5bG9hZCh0aGlzLl9mbG93cy5nZXQoZmxvd0tleSksIGZsb3dQYXlsb2FkKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIHJlZ2lvbk92ZXJzZXRDaGFuZ2VkOiBmdW5jdGlvbihmbG93UGF5bG9hZCkK
KyAgICByZWdpb25PdmVyc2V0Q2hhbmdlZChmbG93UGF5bG9hZCkKICAgICB7CiAgICAgICAgIHRo
aXMuX3NlbmROYW1lZEZsb3dVcGRhdGVFdmVudHMoZmxvd1BheWxvYWQpOwotICAgIH0sCisgICAg
fQogCi0gICAgcmVnaXN0ZXJlZE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50OiBmdW5jdGlvbihkb2N1
bWVudE5vZGVJZGVudGlmaWVyLCBmbG93TmFtZSwgY29udGVudE5vZGVJZCwgbmV4dENvbnRlbnRF
bGVtZW50Tm9kZUlkKQorICAgIHJlZ2lzdGVyZWROYW1lZEZsb3dDb250ZW50RWxlbWVudChkb2N1
bWVudE5vZGVJZGVudGlmaWVyLCBmbG93TmFtZSwgY29udGVudE5vZGVJZCwgbmV4dENvbnRlbnRF
bGVtZW50Tm9kZUlkKQogICAgIHsKICAgICAgICAgdmFyIGZsb3dLZXkgPSBXZWJJbnNwZWN0b3Iu
RE9NVHJlZU1hbmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleSh7ZG9jdW1lbnROb2RlSWQ6IGRvY3Vt
ZW50Tm9kZUlkZW50aWZpZXIsIG5hbWU6IGZsb3dOYW1lfSk7CiAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuX2Zsb3dzLmhhcyhmbG93S2V5KSk7CkBAIC01MjYsMTggKzUxOCwxOCBAQCBXZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgZmxvdy5p
bnNlcnRDb250ZW50Tm9kZUJlZm9yZShjb250ZW50Tm9kZSwgdGhpcy5ub2RlRm9ySWQobmV4dENv
bnRlbnRFbGVtZW50Tm9kZUlkKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZsb3cuYXBw
ZW5kQ29udGVudE5vZGUoY29udGVudE5vZGUpOwotICAgIH0sCisgICAgfQogCi0gICAgX3JlbW92
ZUNvbnRlbnROb2RlRnJvbUZsb3dJZk5lZWRlZDogZnVuY3Rpb24obm9kZSkKKyAgICBfcmVtb3Zl
Q29udGVudE5vZGVGcm9tRmxvd0lmTmVlZGVkKG5vZGUpCiAgICAgewogICAgICAgICBpZiAoIXRo
aXMuX2NvbnRlbnROb2Rlc1RvRmxvd3NNYXAuaGFzKG5vZGUuaWQpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB2YXIgZmxvdyA9IHRoaXMuX2NvbnRlbnROb2Rlc1RvRmxvd3NNYXAuZ2V0
KG5vZGUuaWQpOwogICAgICAgICB0aGlzLl9jb250ZW50Tm9kZXNUb0Zsb3dzTWFwLmRlbGV0ZShu
b2RlLmlkKTsKICAgICAgICAgZmxvdy5yZW1vdmVDb250ZW50Tm9kZShub2RlKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIHVucmVnaXN0ZXJlZE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50OiBmdW5jdGlv
bihkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBmbG93TmFtZSwgY29udGVudE5vZGVJZCkKKyAgICB1
bnJlZ2lzdGVyZWROYW1lZEZsb3dDb250ZW50RWxlbWVudChkb2N1bWVudE5vZGVJZGVudGlmaWVy
LCBmbG93TmFtZSwgY29udGVudE5vZGVJZCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRoaXMuX2NvbnRlbnROb2Rlc1RvRmxvd3NNYXAuaGFzKGNvbnRlbnROb2RlSWQpKTsKIApAQCAt
NTQ2LDkgKzUzOCw5IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgdGhpcy5fY29udGVudE5vZGVzVG9GbG93c01hcC5kZWxldGUoY29udGVudE5v
ZGVJZCk7CiAgICAgICAgIGZsb3cucmVtb3ZlQ29udGVudE5vZGUodGhpcy5ub2RlRm9ySWQoY29u
dGVudE5vZGVJZCkpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NvZXJjZVJlbW90ZUFycmF5T2ZE
T01Ob2RlczogZnVuY3Rpb24ob2JqZWN0SWQsIGNhbGxiYWNrKQorICAgIF9jb2VyY2VSZW1vdGVB
cnJheU9mRE9NTm9kZXMob2JqZWN0SWQsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIGxl
bmd0aCwgbm9kZXMsIHJlY2VpdmVkID0gMCwgbGFzdEVycm9yID0gbnVsbCwgZG9tVHJlZU1hbmFn
ZXIgPSB0aGlzOwogCkBAIC01ODcsOSArNTc5LDkgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBET01BZ2VudC5yZXF1ZXN0Tm9kZShu
b2RlUHJvcGVydHkudmFsdWUub2JqZWN0SWQsIG5vZGVSZXF1ZXN0ZWQuYmluZChudWxsLCBpKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQogCi0gICAgZ2V0Tm9k
ZUNvbnRlbnRGbG93SW5mbzogZnVuY3Rpb24oZG9tTm9kZSwgcmVzdWx0UmVhZHlDYWxsYmFjaykK
KyAgICBnZXROb2RlQ29udGVudEZsb3dJbmZvKGRvbU5vZGUsIHJlc3VsdFJlYWR5Q2FsbGJhY2sp
CiAgICAgewogICAgICAgICBET01BZ2VudC5yZXNvbHZlTm9kZShkb21Ob2RlLmlkLCBkb21Ob2Rl
UmVzb2x2ZWQuYmluZCh0aGlzKSk7CiAKQEAgLTcxMiwxNSArNzA0LDI5IEBAIFdlYkluc3BlY3Rv
ci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9t
YWluUmVzb3VyY2VEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VE
aWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmlzTWFpbkZy
YW1lKCkpCiAgICAgICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0ZWROb2RlSXNBbGxvd2VkID0g
dHJ1ZTsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9y
LkRPTVRyZWVNYW5hZ2VyLkV2ZW50ID0geworICAgIEF0dHJpYnV0ZU1vZGlmaWVkOiAiZG9tLXRy
ZWUtbWFuYWdlci1hdHRyaWJ1dGUtbW9kaWZpZWQiLAorICAgIEF0dHJpYnV0ZVJlbW92ZWQ6ICJk
b20tdHJlZS1tYW5hZ2VyLWF0dHJpYnV0ZS1yZW1vdmVkIiwKKyAgICBDaGFyYWN0ZXJEYXRhTW9k
aWZpZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNoYXJhY3Rlci1kYXRhLW1vZGlmaWVkIiwKKyAgICBO
b2RlSW5zZXJ0ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLW5vZGUtaW5zZXJ0ZWQiLAorICAgIE5vZGVS
ZW1vdmVkOiAiZG9tLXRyZWUtbWFuYWdlci1ub2RlLXJlbW92ZWQiLAorICAgIERvY3VtZW50VXBk
YXRlZDogImRvbS10cmVlLW1hbmFnZXItZG9jdW1lbnQtdXBkYXRlZCIsCisgICAgQ2hpbGROb2Rl
Q291bnRVcGRhdGVkOiAiZG9tLXRyZWUtbWFuYWdlci1jaGlsZC1ub2RlLWNvdW50LXVwZGF0ZWQi
LAorICAgIERPTU5vZGVXYXNJbnNwZWN0ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWRvbS1ub2RlLXdh
cy1pbnNwZWN0ZWQiLAorICAgIEluc3BlY3RNb2RlU3RhdGVDaGFuZ2VkOiAiZG9tLXRyZWUtbWFu
YWdlci1pbnNwZWN0LW1vZGUtc3RhdGUtY2hhbmdlZCIsCisgICAgQ29udGVudEZsb3dMaXN0V2Fz
VXBkYXRlZDogImRvbS10cmVlLW1hbmFnZXItY29udGVudC1mbG93LWxpc3Qtd2FzLXVwZGF0ZWQi
LAorICAgIENvbnRlbnRGbG93V2FzQWRkZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNvbnRlbnQtZmxv
dy13YXMtYWRkZWQiLAorICAgIENvbnRlbnRGbG93V2FzUmVtb3ZlZDogImRvbS10cmVlLW1hbmFn
ZXItY29udGVudC1mbG93LXdhcy1yZW1vdmVkIiwKKyAgICBSZWdpb25PdmVyc2V0Q2hhbmdlZDog
ImRvbS10cmVlLW1hbmFnZXItcmVnaW9uLW92ZXJzZXQtY2hhbmdlZCIKK307CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9EYXNoYm9h
cmRNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvRGFzaGJvYXJkTWFuYWdlci5qcwppbmRleCBjODQ4YjI3N2JhZmI0ZDIwMWJiZTEyMWVh
M2M1YTI3ZGJlYTZmZTE1Li40OGM0YThmZDViNjVmNzU2MzdkNmU5ZDE2ZWI1OTc4ODhiYzBjN2Vk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9EYXNoYm9hcmRNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Rhc2hib2FyZE1hbmFnZXIuanMKQEAgLTIzLDE5ICsyMywx
NyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3Bl
Y3Rvci5EYXNoYm9hcmRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7Ci0gICAgLy8gRklYTUU6IENvbnZl
cnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVy
KCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgdGhpcy5f
ZGFzaGJvYXJkcyA9IHt9OwotICAgIHRoaXMuX2Rhc2hib2FyZHMuZGVmYXVsdCA9IG5ldyBXZWJJ
bnNwZWN0b3IuRGVmYXVsdERhc2hib2FyZDsKLSAgICB0aGlzLl9kYXNoYm9hcmRzLmRlYnVnZ2Vy
ID0gbmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckRhc2hib2FyZDsKLSAgICB0aGlzLl9kYXNoYm9h
cmRzLnJlcGxheSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVwbGF5RGFzaGJvYXJkOwotfTsKK1dlYklu
c3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyID0gY2xhc3MgRGFzaGJvYXJkTWFuYWdlciBleHRlbmRz
IFdlYkluc3BlY3Rvci5PYmplY3QKK3sKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAg
ICBzdXBlcigpOwogCi1XZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlci5wcm90b3R5cGUgPSB7
Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5EYXNoYm9hcmRNYW5hZ2VyLAotICAgIF9f
cHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIHRoaXMuX2Rh
c2hib2FyZHMgPSB7fTsKKyAgICAgICAgdGhpcy5fZGFzaGJvYXJkcy5kZWZhdWx0ID0gbmV3IFdl
Ykluc3BlY3Rvci5EZWZhdWx0RGFzaGJvYXJkOworICAgICAgICB0aGlzLl9kYXNoYm9hcmRzLmRl
YnVnZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckRhc2hib2FyZDsKKyAgICAgICAgdGhp
cy5fZGFzaGJvYXJkcy5yZXBsYXkgPSBuZXcgV2ViSW5zcGVjdG9yLlJlcGxheURhc2hib2FyZDsK
KyAgICB9CiAKICAgICBnZXQgZGFzaGJvYXJkcygpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2Vy
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVi
dWdnZXJNYW5hZ2VyLmpzCmluZGV4IGVmZmQ4YjViM2JjOGE0YzFlMGQ0ZTk0M2Q0ZTk0M2E3YzJi
MGFiMmUuLjA4ODNhMzhlMTMwMjZiODVlMmExNGExMGQ0MDQ5MDM2OWQ4Mzg3NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVn
Z2VyTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9EZWJ1Z2dlck1hbmFnZXIuanMKQEAgLTIzLDk4ICsyMyw3MyBAQAogICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyID0gY2xh
c3MgRGVidWdnZXJNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8v
IEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBh
bmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsK
LQotICAgIGlmICh3aW5kb3cuRGVidWdnZXJBZ2VudCkKLSAgICAgICAgRGVidWdnZXJBZ2VudC5l
bmFibGUoKTsKLQotICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuRGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdlLCB0
aGlzLl9icmVha3BvaW50RGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LkV2ZW50LkRpc2FibGVkU3RhdGVEaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnREaXNhYmxl
ZFN0YXRlRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkNvbmRpdGlvbkRpZENo
YW5nZSwgdGhpcy5fYnJlYWtwb2ludEVkaXRhYmxlUHJvcGVydHlEaWRDaGFuZ2UsIHRoaXMpOwot
ICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQuRXZlbnQuQXV0b0NvbnRpbnVlRGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50
RWRpdGFibGVQcm9wZXJ0eURpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BY3Rp
b25zRGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50RWRpdGFibGVQcm9wZXJ0eURpZENoYW5nZSwg
dGhpcyk7Ci0KLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLCB0aGlzLl9p
bnNwZWN0b3JDbG9zaW5nLmJpbmQodGhpcykpOworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7Cisg
ICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9hbGxFeGNlcHRpb25zQnJlYWtwb2ludEVuYWJs
ZWRTZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJicmVhay1vbi1hbGwtZXhjZXB0
aW9ucyIsIGZhbHNlKTsKLSAgICB0aGlzLl9hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50
RW5hYmxlZFNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoImJyZWFrLW9uLWFsbC11
bmNhdWdodC1leGNlcHRpb25zIiwgZmFsc2UpOworICAgICAgICBpZiAod2luZG93LkRlYnVnZ2Vy
QWdlbnQpCisgICAgICAgICAgICBEZWJ1Z2dlckFnZW50LmVuYWJsZSgpOwogCi0gICAgdmFyIHNw
ZWNpYWxCcmVha3BvaW50TG9jYXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVMb2Nh
dGlvbihudWxsLCBJbmZpbml0eSwgSW5maW5pdHkpOworICAgICAgICBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkRp
c3BsYXlMb2NhdGlvbkRpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludERpc3BsYXlMb2NhdGlvbkRp
ZENoYW5nZSwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuRGlzYWJsZWRTdGF0ZURpZENo
YW5nZSwgdGhpcy5fYnJlYWtwb2ludERpc2FibGVkU3RhdGVEaWRDaGFuZ2UsIHRoaXMpOworICAg
ICAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LkV2ZW50LkNvbmRpdGlvbkRpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludEVk
aXRhYmxlUHJvcGVydHlEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkF1
dG9Db250aW51ZURpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludEVkaXRhYmxlUHJvcGVydHlEaWRD
aGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNEaWRDaGFuZ2UsIHRo
aXMuX2JyZWFrcG9pbnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hhbmdlLCB0aGlzKTsKIAotICAgIHRo
aXMuX2FsbEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50
KHNwZWNpYWxCcmVha3BvaW50TG9jYXRpb24sICF0aGlzLl9hbGxFeGNlcHRpb25zQnJlYWtwb2lu
dEVuYWJsZWRTZXR0aW5nLnZhbHVlKTsKLSAgICB0aGlzLl9hbGxFeGNlcHRpb25zQnJlYWtwb2lu
dC5yZXNvbHZlZCA9IHRydWU7CisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdl
aGlkZSIsIHRoaXMuX2luc3BlY3RvckNsb3NpbmcuYmluZCh0aGlzKSk7CiAKLSAgICB0aGlzLl9h
bGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50KHNwZWNpYWxCcmVha3BvaW50TG9jYXRpb24sICF0aGlzLl9hbGxVbmNhdWdodEV4Y2VwdGlv
bnNCcmVha3BvaW50RW5hYmxlZFNldHRpbmcudmFsdWUpOworICAgICAgICB0aGlzLl9hbGxFeGNl
cHRpb25zQnJlYWtwb2ludEVuYWJsZWRTZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5n
KCJicmVhay1vbi1hbGwtZXhjZXB0aW9ucyIsIGZhbHNlKTsKKyAgICAgICAgdGhpcy5fYWxsVW5j
YXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludEVuYWJsZWRTZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rv
ci5TZXR0aW5nKCJicmVhay1vbi1hbGwtdW5jYXVnaHQtZXhjZXB0aW9ucyIsIGZhbHNlKTsKIAot
ICAgIHRoaXMuX2JyZWFrcG9pbnRzID0gW107Ci0gICAgdGhpcy5fYnJlYWtwb2ludFVSTE1hcCA9
IHt9OwotICAgIHRoaXMuX2JyZWFrcG9pbnRTY3JpcHRJZGVudGlmaWVyTWFwID0ge307Ci0gICAg
dGhpcy5fYnJlYWtwb2ludElkTWFwID0ge307CisgICAgICAgIHZhciBzcGVjaWFsQnJlYWtwb2lu
dExvY2F0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24obnVsbCwgSW5m
aW5pdHksIEluZmluaXR5KTsKIAotICAgIHRoaXMuX25leHRCcmVha3BvaW50QWN0aW9uSWRlbnRp
ZmllciA9IDE7CisgICAgICAgIHRoaXMuX2FsbEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gbmV3IFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50KHNwZWNpYWxCcmVha3BvaW50TG9jYXRpb24sICF0aGlzLl9h
bGxFeGNlcHRpb25zQnJlYWtwb2ludEVuYWJsZWRTZXR0aW5nLnZhbHVlKTsKKyAgICAgICAgdGhp
cy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQucmVzb2x2ZWQgPSB0cnVlOwogCi0gICAgdGhpcy5f
cGF1c2VkID0gZmFsc2U7Ci0gICAgdGhpcy5fcGF1c2VSZWFzb24gPSBudWxsOwotICAgIHRoaXMu
X3BhdXNlRGF0YSA9IG51bGw7CisgICAgICAgIHRoaXMuX2FsbFVuY2F1Z2h0RXhjZXB0aW9uc0Jy
ZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQoc3BlY2lhbEJyZWFrcG9pbnRM
b2NhdGlvbiwgIXRoaXMuX2FsbFVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFibGVkU2V0
dGluZy52YWx1ZSk7CiAKLSAgICB0aGlzLl9zY3JpcHRJZE1hcCA9IHt9OwotICAgIHRoaXMuX3Nj
cmlwdFVSTE1hcCA9IHt9OworICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IFtdOworICAgICAg
ICB0aGlzLl9icmVha3BvaW50VVJMTWFwID0ge307CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRT
Y3JpcHRJZGVudGlmaWVyTWFwID0ge307CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRJZE1hcCA9
IHt9OwogCi0gICAgdGhpcy5fYnJlYWtwb2ludHNTZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5T
ZXR0aW5nKCJicmVha3BvaW50cyIsIFtdKTsKLSAgICB0aGlzLl9icmVha3BvaW50c0VuYWJsZWRT
ZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJicmVha3BvaW50cy1lbmFibGVkIiwg
dHJ1ZSk7CisgICAgICAgIHRoaXMuX25leHRCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllciA9IDE7
CiAKLSAgICBpZiAod2luZG93LkRlYnVnZ2VyQWdlbnQpCi0gICAgICAgIERlYnVnZ2VyQWdlbnQu
c2V0QnJlYWtwb2ludHNBY3RpdmUodGhpcy5fYnJlYWtwb2ludHNFbmFibGVkU2V0dGluZy52YWx1
ZSk7CisgICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9wYXVzZVJl
YXNvbiA9IG51bGw7CisgICAgICAgIHRoaXMuX3BhdXNlRGF0YSA9IG51bGw7CiAKLSAgICB0aGlz
Ll91cGRhdGVCcmVha09uRXhjZXB0aW9uc1N0YXRlKCk7CisgICAgICAgIHRoaXMuX3NjcmlwdElk
TWFwID0ge307CisgICAgICAgIHRoaXMuX3NjcmlwdFVSTE1hcCA9IHt9OwogCi0gICAgZnVuY3Rp
b24gcmVzdG9yZUJyZWFrcG9pbnRzU29vbigpIHsKLSAgICAgICAgdGhpcy5fcmVzdG9yaW5nQnJl
YWtwb2ludHMgPSB0cnVlOwotICAgICAgICBmb3IgKHZhciBjb29raWUgb2YgdGhpcy5fYnJlYWtw
b2ludHNTZXR0aW5nLnZhbHVlKQotICAgICAgICAgICAgdGhpcy5hZGRCcmVha3BvaW50KG5ldyBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludChjb29raWUpKTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3Jl
c3RvcmluZ0JyZWFrcG9pbnRzOwotICAgIH0KKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNTZXR0
aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJicmVha3BvaW50cyIsIFtdKTsKKyAgICAg
ICAgdGhpcy5fYnJlYWtwb2ludHNFbmFibGVkU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0
dGluZygiYnJlYWtwb2ludHMtZW5hYmxlZCIsIHRydWUpOwogCi0gICAgLy8gRW5zdXJlIHRoYXQg
YWxsIG1hbmFnZXJzIGxlYXJuIGFib3V0IHJlc3RvcmVkIGJyZWFrcG9pbnRzLAotICAgIC8vIHJl
Z2FyZGxlc3Mgb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gb3JkZXIuCi0gICAgc2V0VGltZW91dChy
ZXN0b3JlQnJlYWtwb2ludHNTb29uLmJpbmQodGhpcyksIDApOwotfTsKKyAgICAgICAgaWYgKHdp
bmRvdy5EZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAgRGVidWdnZXJBZ2VudC5zZXRCcmVha3Bv
aW50c0FjdGl2ZSh0aGlzLl9icmVha3BvaW50c0VuYWJsZWRTZXR0aW5nLnZhbHVlKTsKIAotV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudCA9IHsKLSAgICBCcmVha3BvaW50QWRkZWQ6
ICJkZWJ1Z2dlci1tYW5hZ2VyLWJyZWFrcG9pbnQtYWRkZWQiLAotICAgIEJyZWFrcG9pbnRSZW1v
dmVkOiAiZGVidWdnZXItbWFuYWdlci1icmVha3BvaW50LXJlbW92ZWQiLAotICAgIEJyZWFrcG9p
bnRNb3ZlZDogImRlYnVnZ2VyLW1hbmFnZXItYnJlYWtwb2ludC1tb3ZlZCIsCi0gICAgUGF1c2Vk
OiAiZGVidWdnZXItbWFuYWdlci1wYXVzZWQiLAotICAgIFJlc3VtZWQ6ICJkZWJ1Z2dlci1tYW5h
Z2VyLXJlc3VtZWQiLAotICAgIENhbGxGcmFtZXNEaWRDaGFuZ2U6ICJkZWJ1Z2dlci1tYW5hZ2Vy
LWNhbGwtZnJhbWVzLWRpZC1jaGFuZ2UiLAotICAgIEFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZTog
ImRlYnVnZ2VyLW1hbmFnZXItYWN0aXZlLWNhbGwtZnJhbWUtZGlkLWNoYW5nZSIsCi0gICAgU2Ny
aXB0QWRkZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLXNjcmlwdC1hZGRlZCIsCi0gICAgU2NyaXB0c0Ns
ZWFyZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLXNjcmlwdHMtY2xlYXJlZCIsCi0gICAgQnJlYWtwb2lu
dHNFbmFibGVkRGlkQ2hhbmdlOiAiZGVidWdnZXItbWFuYWdlci1icmVha3BvaW50cy1lbmFibGVk
LWRpZC1jaGFuZ2UiCi19OworICAgICAgICB0aGlzLl91cGRhdGVCcmVha09uRXhjZXB0aW9uc1N0
YXRlKCk7CiAKLVdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24gPSB7Ci0g
ICAgQXNzZXJ0aW9uOiAiYXNzZXJ0aW9uIiwKLSAgICBCcmVha3BvaW50OiAiYnJlYWtwb2ludCIs
Ci0gICAgQ1NQVmlvbGF0aW9uOiAiQ1NQLXZpb2xhdGlvbiIsCi0gICAgRGVidWdnZXJTdGF0ZW1l
bnQ6ICJkZWJ1Z2dlci1zdGF0ZW1lbnQiLAotICAgIEV4Y2VwdGlvbjogImV4Y2VwdGlvbiIsCi0g
ICAgUGF1c2VPbk5leHRTdGF0ZW1lbnQ6ICJwYXVzZS1vbi1uZXh0LXN0YXRlbWVudCIsCi0gICAg
T3RoZXI6ICJvdGhlciIsCi19CisgICAgICAgIGZ1bmN0aW9uIHJlc3RvcmVCcmVha3BvaW50c1Nv
b24oKSB7CisgICAgICAgICAgICB0aGlzLl9yZXN0b3JpbmdCcmVha3BvaW50cyA9IHRydWU7Cisg
ICAgICAgICAgICBmb3IgKHZhciBjb29raWUgb2YgdGhpcy5fYnJlYWtwb2ludHNTZXR0aW5nLnZh
bHVlKQorICAgICAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChuZXcgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnQoY29va2llKSk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVzdG9yaW5n
QnJlYWtwb2ludHM7CisgICAgICAgIH0KIAotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5w
cm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIsCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBtYW5hZ2VycyBsZWFybiBhYm91dCByZXN0
b3JlZCBicmVha3BvaW50cywKKyAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGVpciBpbml0aWFs
aXphdGlvbiBvcmRlci4KKyAgICAgICAgc2V0VGltZW91dChyZXN0b3JlQnJlYWtwb2ludHNTb29u
LmJpbmQodGhpcyksIDApOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCiAgICAgZ2V0IGJyZWFr
cG9pbnRzRW5hYmxlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNF
bmFibGVkU2V0dGluZy52YWx1ZTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBicmVha3BvaW50
c0VuYWJsZWQoZW5hYmxlZCkKICAgICB7CkBAIC0xMjgsMzIgKzEwMywzMiBAQCBXZWJJbnNwZWN0
b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgRGVidWdnZXJBZ2VudC5z
ZXRCcmVha3BvaW50c0FjdGl2ZShlbmFibGVkKTsKIAogICAgICAgICB0aGlzLl91cGRhdGVCcmVh
a09uRXhjZXB0aW9uc1N0YXRlKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgcGF1c2VkKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAg
ICBnZXQgcGF1c2VSZWFzb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdXNlUmVh
c29uOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBhdXNlRGF0YSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fcGF1c2VEYXRhOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGNhbGxG
cmFtZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxGcmFtZXM7Ci0gICAgfSwK
KyAgICB9CiAKICAgICBnZXQgYWN0aXZlQ2FsbEZyYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9hY3RpdmVDYWxsRnJhbWU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgYWN0aXZl
Q2FsbEZyYW1lKGNhbGxGcmFtZSkKICAgICB7CkBAIC0xNjMsOSArMTM4LDkgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2FjdGl2ZUNh
bGxGcmFtZSA9IGNhbGxGcmFtZSB8fCBudWxsOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQWN0aXZlQ2Fs
bEZyYW1lRGlkQ2hhbmdlKTsKLSAgICB9LAorICAgIH0KIAotICAgIHBhdXNlOiBmdW5jdGlvbigp
CisgICAgcGF1c2UoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkKICAgICAgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKQEAgLTE4NCw5ICsxNTksOSBAQCBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRd
KTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlc3VtZTogZnVuY3Rpb24oKQorICAgIHJlc3VtZSgp
CiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkKICAgICAgICAgICAgIHJldHVybiBQ
cm9taXNlLnJlc29sdmUoKTsKQEAgLTIwNSw5ICsxODAsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVy
biBQcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRdKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIHN0ZXBPdmVyOiBmdW5jdGlvbigpCisgICAgc3RlcE92ZXIoKQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQpCiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZWplY3QobmV3IEVycm9yKCJDYW5ub3Qgc3RlcCBvdmVyIGJlY2F1c2UgZGVidWdnZXIgaXMgbm90
IHBhdXNlZC4iKSk7CkBAIC0yMjYsOSArMjAxLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBzdGVwSW50bzogZnVuY3Rpb24oKQorICAgIHN0ZXBJbnRvKCkKICAgICB7CiAgICAg
ICAgIGlmICghdGhpcy5fcGF1c2VkKQogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0
KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgaW50byBiZWNhdXNlIGRlYnVnZ2VyIGlzIG5vdCBwYXVz
ZWQuIikpOwpAQCAtMjQ3LDkgKzIyMiw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgcmV0dXJuIFByb21pc2Uu
YWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwotICAgIH0sCisgICAgfQogCi0g
ICAgc3RlcE91dDogZnVuY3Rpb24oKQorICAgIHN0ZXBPdXQoKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9wYXVzZWQpCiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVy
cm9yKCJDYW5ub3Qgc3RlcCBvdXQgYmVjYXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIpKTsK
QEAgLTI2OCwyNCArMjQzLDI0IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtt
YW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0
IGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9h
bGxFeGNlcHRpb25zQnJlYWtwb2ludDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBhbGxVbmNh
dWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9h
bGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0
IGJyZWFrcG9pbnRzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9icmVha3BvaW50czsK
LSAgICB9LAorICAgIH0KIAotICAgIGJyZWFrcG9pbnRzRm9yU291cmNlQ29kZTogZnVuY3Rpb24o
c291cmNlQ29kZSkKKyAgICBicmVha3BvaW50c0ZvclNvdXJjZUNvZGUoc291cmNlQ29kZSkKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UgfHwgc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5TY3Jp
cHQpOwogCkBAIC0zMTAsMzAgKzI4NSwzMCBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBbXTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGJyZWFrcG9pbnRGb3JJZGVudGlmaWVyOiBmdW5jdGlvbihpZCkKKyAgICBi
cmVha3BvaW50Rm9ySWRlbnRpZmllcihpZCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9i
cmVha3BvaW50SWRNYXBbaWRdOwotICAgIH0sCisgICAgfQogCi0gICAgc2NyaXB0Rm9ySWRlbnRp
ZmllcjogZnVuY3Rpb24oaWQpCisgICAgc2NyaXB0Rm9ySWRlbnRpZmllcihpZCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRJZE1hcFtpZF0gfHwgbnVsbDsKLSAgICB9LAorICAg
IH0KIAotICAgIHNjcmlwdHNGb3JVUkw6IGZ1bmN0aW9uKHVybCkKKyAgICBzY3JpcHRzRm9yVVJM
KHVybCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1heSBub3QgYmUgc2FmZS4gQSBS
ZXNvdXJjZSdzIFVSTCBtYXkgZGlmZmVyIGZyb20gYSBTY3JpcHQncyBVUkwuCiAgICAgICAgIHJl
dHVybiB0aGlzLl9zY3JpcHRVUkxNYXBbdXJsXSB8fCBbXTsKLSAgICB9LAorICAgIH0KIAotICAg
IGNvbnRpbnVlVG9Mb2NhdGlvbjogZnVuY3Rpb24oc2NyaXB0SWRlbnRpZmllciwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKQorICAgIGNvbnRpbnVlVG9Mb2NhdGlvbihzY3JpcHRJZGVudGlmaWVy
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICBEZWJ1Z2dlckFnZW50
LmNvbnRpbnVlVG9Mb2NhdGlvbih7c2NyaXB0SWQ6IHNjcmlwdElkZW50aWZpZXIsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcn0pOwotICAgIH0sCisgICAgfQogCi0gICAgYWRkQnJlYWtwb2ludDog
ZnVuY3Rpb24oYnJlYWtwb2ludCwgc2tpcEV2ZW50RGlzcGF0Y2gsIHNob3VsZFNwZWN1bGF0aXZl
bHlSZXNvbHZlKQorICAgIGFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCwgc2tpcEV2ZW50RGlzcGF0
Y2gsIHNob3VsZFNwZWN1bGF0aXZlbHlSZXNvbHZlKQogICAgIHsKICAgICAgICAgY29uc29sZS5h
c3NlcnQoYnJlYWtwb2ludCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LCAiQmFk
IGFyZ3VtZW50IHRvIERlYnVnZ2VyTWFuZ2VyLmFkZEJyZWFrcG9pbnQ6ICIsIGJyZWFrcG9pbnQp
OwogICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCkBAIC0zNjQsOSArMzM5LDkgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKCFza2lwRXZl
bnREaXNwYXRjaCkKICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludEFkZGVkLCB7YnJlYWtw
b2ludH0pOwotICAgIH0sCisgICAgfQogCi0gICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24o
YnJlYWtwb2ludCkKKyAgICByZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydChicmVha3BvaW50KTsKICAgICAgICAgaWYgKCFicmVha3BvaW50
KQpAQCAtNDA0LDkgKzM3OSw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICBicmVha3BvaW50LmNsZWFyQWN0aW9ucygpOwogCiAgICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
RXZlbnQuQnJlYWtwb2ludFJlbW92ZWQsIHticmVha3BvaW50fSk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBicmVha3BvaW50UmVzb2x2ZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZGVudGlmaWVyLCBs
b2NhdGlvbikKKyAgICBicmVha3BvaW50UmVzb2x2ZWQoYnJlYWtwb2ludElkZW50aWZpZXIsIGxv
Y2F0aW9uKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyT2JzZXJ2ZXIuCiAKQEAgLTQyMyw5ICszOTgsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIGJyZWFrcG9pbnQucmVz
b2x2ZWQgPSB0cnVlOwotICAgIH0sCisgICAgfQogCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAg
ICByZXNldCgpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuRGVi
dWdnZXJPYnNlcnZlci4KIApAQCAtNDU3LDkgKzQzMiw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh3YXNQYXVzZWQpCiAgICAgICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJN
YW5hZ2VyLkV2ZW50LlJlc3VtZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgZGVidWdnZXJEaWRQ
YXVzZTogZnVuY3Rpb24oY2FsbEZyYW1lc1BheWxvYWQsIHJlYXNvbiwgZGF0YSkKKyAgICBkZWJ1
Z2dlckRpZFBhdXNlKGNhbGxGcmFtZXNQYXlsb2FkLCByZWFzb24sIGRhdGEpCiAgICAgewogICAg
ICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci4KIApAQCAt
NDk5LDkgKzQ3NCw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5FdmVudC5QYXVzZWQpOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkNhbGxGcmFt
ZXNEaWRDaGFuZ2UpOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBkZWJ1Z2dlckRpZFJlc3VtZTogZnVuY3Rpb24oKQorICAg
IGRlYnVnZ2VyRGlkUmVzdW1lKCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLgogCkBAIC01MjEsMTQgKzQ5NiwxNCBAQCBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gV2UgZGVsYXkg
Y2xlYXJpbmcgdGhlIHN0YXRlIGFuZCBmaXJpbmcgZXZlbnRzIHNvIHRoZSB1c2VyIGludGVyZmFj
ZSBkb2VzIG5vdCBmbGFzaAogICAgICAgICAvLyBiZXR3ZWVuIGJyaWVmIHN0ZXBzIG9yIHN1Y2Nl
c3NpdmUgYnJlYWtwb2ludHMuCiAgICAgICAgIHRoaXMuX2RlbGF5ZWRSZXN1bWVUaW1lb3V0ID0g
c2V0VGltZW91dChkZWxheWVkV29yay5iaW5kKHRoaXMpLCA1MCk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBwbGF5QnJlYWtwb2ludEFjdGlvblNvdW5kOiBmdW5jdGlvbihicmVha3BvaW50QWN0aW9u
SWRlbnRpZmllcikKKyAgICBwbGF5QnJlYWtwb2ludEFjdGlvblNvdW5kKGJyZWFrcG9pbnRBY3Rp
b25JZGVudGlmaWVyKQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmJlZXAo
KTsKLSAgICB9LAorICAgIH0KIAotICAgIHNjcmlwdERpZFBhcnNlOiBmdW5jdGlvbihzY3JpcHRJ
ZGVudGlmaWVyLCB1cmwsIGlzQ29udGVudFNjcmlwdCwgc3RhcnRMaW5lLCBzdGFydENvbHVtbiwg
ZW5kTGluZSwgZW5kQ29sdW1uLCBzb3VyY2VNYXBVUkwpCisgICAgc2NyaXB0RGlkUGFyc2Uoc2Ny
aXB0SWRlbnRpZmllciwgdXJsLCBpc0NvbnRlbnRTY3JpcHQsIHN0YXJ0TGluZSwgc3RhcnRDb2x1
bW4sIGVuZExpbmUsIGVuZENvbHVtbiwgc291cmNlTWFwVVJMKQogICAgIHsKICAgICAgICAgLy8g
RG9uJ3QgYWRkIHRoZSBzY3JpcHQgYWdhaW4gaWYgaXQgaXMgYWxyZWFkeSBrbm93bi4KICAgICAg
ICAgaWYgKHRoaXMuX3NjcmlwdElkTWFwW3NjcmlwdElkZW50aWZpZXJdKSB7CkBAIC01NTIsMjYg
KzUyNywyNiBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgfQogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuU2NyaXB0QWRkZWQsIHtzY3JpcHR9KTsKLSAgICB9
LAorICAgIH0KIAotICAgIGlzQnJlYWtwb2ludFJlbW92YWJsZTogZnVuY3Rpb24oYnJlYWtwb2lu
dCkKKyAgICBpc0JyZWFrcG9pbnRSZW1vdmFibGUoYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAg
IHJldHVybiBicmVha3BvaW50ICE9PSB0aGlzLl9hbGxFeGNlcHRpb25zQnJlYWtwb2ludCAmJiBi
cmVha3BvaW50ICE9PSB0aGlzLl9hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50OwotICAg
IH0sCisgICAgfQogCi0gICAgaXNCcmVha3BvaW50RWRpdGFibGU6IGZ1bmN0aW9uKGJyZWFrcG9p
bnQpCisgICAgaXNCcmVha3BvaW50RWRpdGFibGUoYnJlYWtwb2ludCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLmlzQnJlYWtwb2ludFJlbW92YWJsZShicmVha3BvaW50KTsKLSAgICB9LAor
ICAgIH0KIAogICAgIGdldCBuZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX25leHRCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllcisrOwot
ICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX3NvdXJjZUNvZGVMb2NhdGlv
bkZyb21QYXlsb2FkOiBmdW5jdGlvbihwYXlsb2FkKQorICAgIF9zb3VyY2VDb2RlTG9jYXRpb25G
cm9tUGF5bG9hZChwYXlsb2FkKQogICAgIHsKICAgICAgICAgdmFyIHNjcmlwdCA9IHRoaXMuX3Nj
cmlwdElkTWFwW3BheWxvYWQuc2NyaXB0SWRdOwogICAgICAgICBjb25zb2xlLmFzc2VydChzY3Jp
cHQpOwpAQCAtNTc5LDE3ICs1NTQsMTcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAogICAgICAgICByZXR1cm4g
c2NyaXB0LmNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbihwYXlsb2FkLmxpbmVOdW1iZXIsIHBheWxv
YWQuY29sdW1uTnVtYmVyKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9zY29wZUNoYWluRnJvbVBh
eWxvYWQ6IGZ1bmN0aW9uKHBheWxvYWQpCisgICAgX3Njb3BlQ2hhaW5Gcm9tUGF5bG9hZChwYXls
b2FkKQogICAgIHsKICAgICAgICAgdmFyIHNjb3BlQ2hhaW4gPSBbXTsKICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwYXlsb2FkLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgc2NvcGVDaGFp
bi5wdXNoKHRoaXMuX3Njb3BlQ2hhaW5Ob2RlRnJvbVBheWxvYWQocGF5bG9hZFtpXSkpOwogICAg
ICAgICByZXR1cm4gc2NvcGVDaGFpbjsKLSAgICB9LAorICAgIH0KIAotICAgIF9zY29wZUNoYWlu
Tm9kZUZyb21QYXlsb2FkOiBmdW5jdGlvbihwYXlsb2FkKQorICAgIF9zY29wZUNoYWluTm9kZUZy
b21QYXlsb2FkKHBheWxvYWQpCiAgICAgewogICAgICAgICB2YXIgdHlwZSA9IG51bGw7CiAgICAg
ICAgIHN3aXRjaCAocGF5bG9hZC50eXBlKSB7CkBAIC02MTcsOSArNTkyLDkgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIG9iamVjdCA9
IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocGF5bG9hZC5vYmplY3QpOwog
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5TY29wZUNoYWluTm9kZSh0eXBlLCBvYmpl
Y3QpOwotICAgIH0sCisgICAgfQogCi0gICAgX3BhdXNlUmVhc29uRnJvbVBheWxvYWQ6IGZ1bmN0
aW9uKHBheWxvYWQpCisgICAgX3BhdXNlUmVhc29uRnJvbVBheWxvYWQocGF5bG9hZCkKICAgICB7
CiAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgYmFja2VuZCBwYXVzZSBzZWFzb25zLgog
ICAgICAgICBzd2l0Y2ggKHBheWxvYWQpIHsKQEAgLTYzOCw5ICs2MTMsOSBAQCBXZWJJbnNwZWN0
b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLk90
aGVyOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZGVidWdnZXJCcmVha3BvaW50
QWN0aW9uVHlwZTogZnVuY3Rpb24odHlwZSkKKyAgICBfZGVidWdnZXJCcmVha3BvaW50QWN0aW9u
VHlwZSh0eXBlKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRBY3Rpb24uVHlwZS5Mb2c6CkBAIC02NTUsOSArNjMwLDkg
QEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydChmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm4gRGVidWdnZXJBZ2Vu
dC5CcmVha3BvaW50QWN0aW9uVHlwZS5Mb2c7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAot
ICAgIF9zZXRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50LCBjYWxsYmFjaykKKyAgICBf
c2V0QnJlYWtwb2ludChicmVha3BvaW50LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KCFicmVha3BvaW50LmlkZW50aWZpZXIpOwogICAgICAgICBjb25zb2xlLmFzc2Vy
dCghYnJlYWtwb2ludC5kaXNhYmxlZCk7CkBAIC03MjQsOSArNjk5LDkgQEAgV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgb3B0aW9ucwog
ICAgICAgICAgICAgfSwgZGlkU2V0QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKICAgICAgICAgfQot
ICAgIH0sCisgICAgfQogCi0gICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9p
bnQsIGNhbGxiYWNrKQorICAgIF9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQsIGNhbGxiYWNr
KQogICAgIHsKICAgICAgICAgaWYgKCFicmVha3BvaW50LmlkZW50aWZpZXIpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC03NDgsOSArNzIzLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICBEZWJ1Z2dlckFnZW50LnJlbW92
ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5pZGVudGlmaWVyLCBkaWRSZW1vdmVCcmVha3BvaW50LmJp
bmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgX2JyZWFrcG9pbnREaXNwbGF5TG9jYXRp
b25EaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9icmVha3BvaW50RGlzcGxheUxvY2F0
aW9uRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2lnbm9yZUJyZWFr
cG9pbnREaXNwbGF5TG9jYXRpb25EaWRDaGFuZ2VFdmVudCkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTc2OSw5ICs3NDQsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKIAogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50TW92ZWQsIHticmVha3BvaW50
fSk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9icmVha3BvaW50RGlzYWJsZWRT
dGF0ZURpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX2JyZWFrcG9pbnREaXNhYmxlZFN0
YXRlRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVu
dC50YXJnZXQ7CiAKQEAgLTc5NSw5ICs3NzAsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoYnJl
YWtwb2ludCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQo
YnJlYWtwb2ludCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludEVkaXRhYmxlUHJv
cGVydHlEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9icmVha3BvaW50RWRpdGFibGVQ
cm9wZXJ0eURpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIHZhciBicmVha3BvaW50ID0g
ZXZlbnQudGFyZ2V0OwogICAgICAgICBpZiAoYnJlYWtwb2ludC5kaXNhYmxlZCkKQEAgLTgxNSw5
ICs3OTAsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIC8vIEFkZCB0aGUgYnJlYWtwb2ludCB3aXRoIGl0cyBuZXcgY29uZGl0aW9uIGFu
ZCBnZXQgYSBuZXcgaWQuCiAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9p
bnQpOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfdXBkYXRlQnJlYWtPbkV4Y2Vw
dGlvbnNTdGF0ZTogZnVuY3Rpb24oKQorICAgIF91cGRhdGVCcmVha09uRXhjZXB0aW9uc1N0YXRl
KCkKICAgICB7CiAgICAgICAgIHZhciBzdGF0ZSA9ICJub25lIjsKIApAQCAtODQyLDE0ICs4MTcs
MTQgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KIAogICAgICAgICBEZWJ1Z2dlckFnZW50LnNldFBhdXNlT25FeGNlcHRpb25zKHN0YXRlKTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9pbnNwZWN0b3JDbG9zaW5nOiBmdW5jdGlvbihldmVudCkK
KyAgICBfaW5zcGVjdG9yQ2xvc2luZyhldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NhdmVC
cmVha3BvaW50cygpOwotICAgIH0sCisgICAgfQogCi0gICAgX3NhdmVCcmVha3BvaW50czogZnVu
Y3Rpb24oKQorICAgIF9zYXZlQnJlYWtwb2ludHMoKQogICAgIHsKICAgICAgICAgdmFyIHNhdmVk
QnJlYWtwb2ludHMgPSBbXTsKIApAQCAtODY0LDkgKzgzOSw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fYnJl
YWtwb2ludHNTZXR0aW5nLnZhbHVlID0gc2F2ZWRCcmVha3BvaW50czsKLSAgICB9LAorICAgIH0K
IAotICAgIF9hc3NvY2lhdGVCcmVha3BvaW50c1dpdGhTb3VyY2VDb2RlOiBmdW5jdGlvbihicmVh
a3BvaW50cywgc291cmNlQ29kZSkKKyAgICBfYXNzb2NpYXRlQnJlYWtwb2ludHNXaXRoU291cmNl
Q29kZShicmVha3BvaW50cywgc291cmNlQ29kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2lnbm9y
ZUJyZWFrcG9pbnREaXNwbGF5TG9jYXRpb25EaWRDaGFuZ2VFdmVudCA9IHRydWU7CiAKQEAgLTg4
Miw0ICs4NTcsMjUgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuRGVi
dWdnZXJNYW5hZ2VyLkV2ZW50ID0geworICAgIEJyZWFrcG9pbnRBZGRlZDogImRlYnVnZ2VyLW1h
bmFnZXItYnJlYWtwb2ludC1hZGRlZCIsCisgICAgQnJlYWtwb2ludFJlbW92ZWQ6ICJkZWJ1Z2dl
ci1tYW5hZ2VyLWJyZWFrcG9pbnQtcmVtb3ZlZCIsCisgICAgQnJlYWtwb2ludE1vdmVkOiAiZGVi
dWdnZXItbWFuYWdlci1icmVha3BvaW50LW1vdmVkIiwKKyAgICBQYXVzZWQ6ICJkZWJ1Z2dlci1t
YW5hZ2VyLXBhdXNlZCIsCisgICAgUmVzdW1lZDogImRlYnVnZ2VyLW1hbmFnZXItcmVzdW1lZCIs
CisgICAgQ2FsbEZyYW1lc0RpZENoYW5nZTogImRlYnVnZ2VyLW1hbmFnZXItY2FsbC1mcmFtZXMt
ZGlkLWNoYW5nZSIsCisgICAgQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlOiAiZGVidWdnZXItbWFu
YWdlci1hY3RpdmUtY2FsbC1mcmFtZS1kaWQtY2hhbmdlIiwKKyAgICBTY3JpcHRBZGRlZDogImRl
YnVnZ2VyLW1hbmFnZXItc2NyaXB0LWFkZGVkIiwKKyAgICBTY3JpcHRzQ2xlYXJlZDogImRlYnVn
Z2VyLW1hbmFnZXItc2NyaXB0cy1jbGVhcmVkIiwKKyAgICBCcmVha3BvaW50c0VuYWJsZWREaWRD
aGFuZ2U6ICJkZWJ1Z2dlci1tYW5hZ2VyLWJyZWFrcG9pbnRzLWVuYWJsZWQtZGlkLWNoYW5nZSIK
K307CisKK1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24gPSB7CisgICAg
QXNzZXJ0aW9uOiAiYXNzZXJ0aW9uIiwKKyAgICBCcmVha3BvaW50OiAiYnJlYWtwb2ludCIsCisg
ICAgQ1NQVmlvbGF0aW9uOiAiQ1NQLXZpb2xhdGlvbiIsCisgICAgRGVidWdnZXJTdGF0ZW1lbnQ6
ICJkZWJ1Z2dlci1zdGF0ZW1lbnQiLAorICAgIEV4Y2VwdGlvbjogImV4Y2VwdGlvbiIsCisgICAg
UGF1c2VPbk5leHRTdGF0ZW1lbnQ6ICJwYXVzZS1vbi1uZXh0LXN0YXRlbWVudCIsCisgICAgT3Ro
ZXI6ICJvdGhlciIsCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RyYWdUb0FkanVzdENvbnRy
b2xsZXIuanMKaW5kZXggYTFkOTA0NmZhYTlmODM4YTFkMWEzMGI0NWQyYzQ2MWU4Y2NiNzFmMC4u
YTg2MDA5ZWFkMmQwOGE1MmI0YjEzZDY3NjhlYzY5NDMyNWQ0ODQ0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRHJhZ1RvQWRqdXN0
Q29udHJvbGxlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9EcmFnVG9BZGp1c3RDb250cm9sbGVyLmpzCkBAIC0yMywzOCArMjMsMzUgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3Iu
RHJhZ1RvQWRqdXN0Q29udHJvbGxlciA9IGZ1bmN0aW9uKGRlbGVnYXRlKQorV2ViSW5zcGVjdG9y
LkRyYWdUb0FkanVzdENvbnRyb2xsZXIgPSBjbGFzcyBEcmFnVG9BZGp1c3RDb250cm9sbGVyCiB7
Ci0gICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLQotICAgIHRoaXMuX2VsZW1lbnQgPSBu
dWxsOwotICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlOwotICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxz
ZTsKLSAgICB0aGlzLl9kcmFnZ2luZyA9IGZhbHNlOwotICAgIHRoaXMuX3RyYWNrc01vdXNlQ2xp
Y2tBbmREcmFnID0gZmFsc2U7Ci19OwotCi1XZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJv
bGxlci5TdHlsZUNsYXNzTmFtZSA9ICJkcmFnLXRvLWFkanVzdCI7CisgICAgY29uc3RydWN0b3Io
ZGVsZWdhdGUpCisgICAgeworICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogCi1X
ZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAgY29u
c3RydWN0b3I6IFdlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLAorICAgICAgICB0
aGlzLl9lbGVtZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZHJhZ2dpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fdHJhY2tzTW91c2VDbGlja0FuZERyYWcgPSBmYWxzZTsKKyAgICB9
CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBlbGVtZW50KCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9lbGVtZW50OwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGVsZW1lbnQoZWxl
bWVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50OwotICAgIH0sCisg
ICAgfQogCiAgICAgZ2V0IGVuYWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Vu
YWJsZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZW5hYmxlZChlbmFibGVkKQogICAgIHsK
QEAgLTY4LDEyICs2NSwxMiBAQCBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoIm1vdXNlZW50ZXIiLCB0aGlzKTsKICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3Zl
RXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsIHRoaXMpOwogICAgICAgICB9Ci0gICAgfSwKKyAg
ICB9CiAKICAgICBnZXQgYWN0aXZlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9hY3Rp
dmU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgYWN0aXZlKGFjdGl2ZSkKICAgICB7CkBAIC05
NiwyMCArOTMsMjAgQEAgV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90
eXBlID0gewogCiAgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVs
ZWdhdGUuZHJhZ1RvQWRqdXN0Q29udHJvbGxlckFjdGl2ZVN0YXRlQ2hhbmdlZCA9PT0gImZ1bmN0
aW9uIikKICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENvbnRyb2xsZXJB
Y3RpdmVTdGF0ZUNoYW5nZWQodGhpcyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXNldDogZnVu
Y3Rpb24oKQorICAgIHJlc2V0KCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NldFRyYWNrc01vdXNl
Q2xpY2tBbmREcmFnKGZhbHNlKTsKICAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVt
b3ZlKFdlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLlN0eWxlQ2xhc3NOYW1lKTsK
IAogICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLmRy
YWdUb0FkanVzdENvbnRyb2xsZXJEaWRSZXNldCA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgICAg
IHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENvbnRyb2xsZXJEaWRSZXNldCh0aGlzKTsKLSAg
ICB9LAorICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAogCi0gICAgaGFuZGxlRXZlbnQ6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIGhhbmRsZUV2ZW50KGV2ZW50KQogICAgIHsKICAgICAgICAgc3dpdGNo
KGV2ZW50LnR5cGUpIHsKICAgICAgICAgY2FzZSAibW91c2VlbnRlciI6CkBAIC0xNDAsMTEgKzEz
NywxMSBAQCBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9zZXRE
cmFnZ2luZzogZnVuY3Rpb24oZHJhZ2dpbmcpCisgICAgX3NldERyYWdnaW5nKGRyYWdnaW5nKQog
ICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2RyYWdnaW5nID09PSBkcmFnZ2luZykKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE1Niw5ICsxNTMsOSBAQCBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVu
dERyYWdFbmQod2luZG93LmV2ZW50KTsKIAogICAgICAgICB0aGlzLl9kcmFnZ2luZyA9IGRyYWdn
aW5nOwotICAgIH0sCisgICAgfQogCi0gICAgX3NldFRyYWNrc01vdXNlQ2xpY2tBbmREcmFnOiBm
dW5jdGlvbih0cmFja3NNb3VzZUNsaWNrQW5kRHJhZykKKyAgICBfc2V0VHJhY2tzTW91c2VDbGlj
a0FuZERyYWcodHJhY2tzTW91c2VDbGlja0FuZERyYWcpCiAgICAgewogICAgICAgICBpZiAodGhp
cy5fdHJhY2tzTW91c2VDbGlja0FuZERyYWcgPT09IHRyYWNrc01vdXNlQ2xpY2tBbmREcmFnKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc1LDI3ICsxNzIsMjcgQEAgV2ViSW5zcGVjdG9yLkRy
YWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAg
dGhpcy5fdHJhY2tzTW91c2VDbGlja0FuZERyYWcgPSB0cmFja3NNb3VzZUNsaWNrQW5kRHJhZzsK
LSAgICB9LAorICAgIH0KIAotICAgIF9tb2RpZmllcnNEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIF9tb2RpZmllcnNEaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgY2Fu
QmVBZGp1c3RlZCA9IFdlYkluc3BlY3Rvci5tb2RpZmllcktleXMuYWx0S2V5OwogICAgICAgICBp
ZiAoY2FuQmVBZGp1c3RlZCAmJiB0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5fZGVsZWdh
dGUuZHJhZ1RvQWRqdXN0Q29udHJvbGxlckNhbkJlQWRqdXN0ZWQgPT09ICJmdW5jdGlvbiIpCiAg
ICAgICAgICAgICBjYW5CZUFkanVzdGVkID0gdGhpcy5fZGVsZWdhdGUuZHJhZ1RvQWRqdXN0Q29u
dHJvbGxlckNhbkJlQWRqdXN0ZWQodGhpcyk7CiAKICAgICAgICAgdGhpcy5fc2V0VHJhY2tzTW91
c2VDbGlja0FuZERyYWcoY2FuQmVBZGp1c3RlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbW91
c2VNb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX21vdXNlTW92ZWQoZXZlbnQpCiAgICAgewog
ICAgICAgICB2YXIgY2FuQmVBZGp1c3RlZCA9IGV2ZW50LmFsdEtleTsKICAgICAgICAgaWYgKGNh
bkJlQWRqdXN0ZWQgJiYgdGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLmRy
YWdUb0FkanVzdENvbnRyb2xsZXJDYW5BZGp1c3RPYmplY3RBdFBvaW50ID09PSAiZnVuY3Rpb24i
KQogICAgICAgICAgICAgY2FuQmVBZGp1c3RlZCA9IHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVz
dENvbnRyb2xsZXJDYW5BZGp1c3RPYmplY3RBdFBvaW50KHRoaXMsIFdlYkluc3BlY3Rvci5Qb2lu
dC5mcm9tRXZlbnQoZXZlbnQpKTsKIAogICAgICAgICB0aGlzLl9zZXRUcmFja3NNb3VzZUNsaWNr
QW5kRHJhZyhjYW5CZUFkanVzdGVkKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZVdhc1By
ZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tb3VzZVdhc1ByZXNzZWQoZXZlbnQpCiAgICAg
ewogICAgICAgICB0aGlzLl9sYXN0WCA9IGV2ZW50LnNjcmVlblg7CiAKQEAgLTIwMyw5ICsyMDAs
OSBAQCBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAK
ICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbW91c2VXYXNEcmFnZ2VkOiBmdW5jdGlv
bihldmVudCkKKyAgICBfbW91c2VXYXNEcmFnZ2VkKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFy
IHggPSBldmVudC5zY3JlZW5YOwogICAgICAgICB2YXIgYW1vdW50ID0geCAtIHRoaXMuX2xhc3RY
OwpAQCAtMjI1LDkgKzIyMiw5IEBAIFdlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVy
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZVdh
c1JlbGVhc2VkOiBmdW5jdGlvbihldmVudCkKKyAgICBfbW91c2VXYXNSZWxlYXNlZChldmVudCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX3NldERyYWdnaW5nKGZhbHNlKTsKIApAQCAtMjM3LDMgKzIz
NCw1IEBAIFdlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgIH0KIH07CisKK1dlYkluc3BlY3Rvci5EcmFnVG9B
ZGp1c3RDb250cm9sbGVyLlN0eWxlQ2xhc3NOYW1lID0gImRyYWctdG8tYWRqdXN0IjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zv
cm1hdHRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0Zvcm1hdHRlci5qcwppbmRleCA1YTdmMmQ4MGEyZjU1NDFlYjM3NWY3OTViZDA0NTllNGVl
MTg1Y2UwLi5iZmE5OThlZmY4MmRiNzM0NWYzY2RiYTgzMDcyNTBlMTBjOGU1N2FiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3Jt
YXR0ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvRm9ybWF0dGVyLmpzCkBAIC0yMywyNCArMjMsMjMgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1mdW5jdGlvbiBGb3JtYXR0ZXIoY29kZU1pcnJvciwg
YnVpbGRlcikKK2NsYXNzIEZvcm1hdHRlcgogewotICAgIGNvbnNvbGUuYXNzZXJ0KGNvZGVNaXJy
b3IpOwotICAgIGNvbnNvbGUuYXNzZXJ0KGJ1aWxkZXIpOwotCi0gICAgdGhpcy5fY29kZU1pcnJv
ciA9IGNvZGVNaXJyb3I7Ci0gICAgdGhpcy5fYnVpbGRlciA9IGJ1aWxkZXI7CisgICAgY29uc3Ry
dWN0b3IoY29kZU1pcnJvciwgYnVpbGRlcikKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KGNvZGVNaXJyb3IpOworICAgICAgICBjb25zb2xlLmFzc2VydChidWlsZGVyKTsKIAotICAgIHRo
aXMuX2xhc3RUb2tlbiA9IG51bGw7Ci0gICAgdGhpcy5fbGFzdENvbnRlbnQgPSAiIjsKLX0KKyAg
ICAgICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVNaXJyb3I7CisgICAgICAgIHRoaXMuX2J1aWxk
ZXIgPSBidWlsZGVyOwogCi1Gb3JtYXR0ZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9y
OiBGb3JtYXR0ZXIsCisgICAgICAgIHRoaXMuX2xhc3RUb2tlbiA9IG51bGw7CisgICAgICAgIHRo
aXMuX2xhc3RDb250ZW50ID0gIiI7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKLSAgICBmb3Jt
YXQ6IGZ1bmN0aW9uKGZyb20sIHRvKQorICAgIGZvcm1hdChmcm9tLCB0bykKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2J1aWxkZXIub3JpZ2luYWxDb250ZW50ID09PSBudWxs
KTsKICAgICAgICAgaWYgKHRoaXMuX2J1aWxkZXIub3JpZ2luYWxDb250ZW50ICE9PSBudWxsKQpA
QCAtNzcsMTEgKzc2LDExIEBAIEZvcm1hdHRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICB0aGlzLl9idWlsZGVyLmZpbmlzaCgpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8g
UHJpdmF0ZQogCi0gICAgX2hhbmRsZVRva2VuOiBmdW5jdGlvbihtb2RlLCB0b2tlbiwgc3RhdGUs
IHN0cmVhbSwgb3JpZ2luYWxQb3NpdGlvbiwgaXNXaGl0ZVNwYWNlLCBzdGFydE9mTmV3TGluZSwg
Zmlyc3RUb2tlbk9uTGluZSkKKyAgICBfaGFuZGxlVG9rZW4obW9kZSwgdG9rZW4sIHN0YXRlLCBz
dHJlYW0sIG9yaWdpbmFsUG9zaXRpb24sIGlzV2hpdGVTcGFjZSwgc3RhcnRPZk5ld0xpbmUsIGZp
cnN0VG9rZW5PbkxpbmUpCiAgICAgewogICAgICAgICAvLyBTdHJpbmcgY29udGVudCBvZiB0aGUg
dG9rZW4uCiAgICAgICAgIHZhciBjb250ZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKQEAgLTE0Niwx
NyArMTQ1LDE3IEBAIEZvcm1hdHRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFJlY29yZCB0
aGlzIHRva2VuIGFzIHRoZSBsYXN0IHRva2VuLgogICAgICAgICB0aGlzLl9sYXN0VG9rZW4gPSB0
b2tlbjsKICAgICAgICAgdGhpcy5fbGFzdENvbnRlbnQgPSBjb250ZW50OwotICAgIH0sCisgICAg
fQogCi0gICAgX2hhbmRsZUVtcHR5TGluZTogZnVuY3Rpb24oKQorICAgIF9oYW5kbGVFbXB0eUxp
bmUoKQogICAgIHsKICAgICAgICAgLy8gUHJlc2VydmUgb3JpZ2luYWwgd2hpdGVzcGFjZSBvbmx5
IGxpbmVzIGJ5IGFkZGluZyBhIG5ld2xpbmUuCiAgICAgICAgIC8vIEhvd2V2ZXIsIGRvbid0IGRv
IHRoaXMgaWYgdGhlIGJ1aWxkZXIganVzdCBhZGRlZCBtdWx0aXBsZSBuZXdsaW5lcy4KICAgICAg
ICAgaWYgKCEodGhpcy5fYnVpbGRlci5sYXN0VG9rZW5XYXNOZXdsaW5lICYmIHRoaXMuX2J1aWxk
ZXIubGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBsZSkpCiAgICAgICAgICAgICB0aGlzLl9idWls
ZGVyLmFwcGVuZE5ld2xpbmUodHJ1ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGFuZGxlTGlu
ZUVuZGluZzogZnVuY3Rpb24ob3JpZ2luYWxOZXdMaW5lUG9zaXRpb24pCisgICAgX2hhbmRsZUxp
bmVFbmRpbmcob3JpZ2luYWxOZXdMaW5lUG9zaXRpb24pCiAgICAgewogICAgICAgICAvLyBSZWNv
cmQgdGhlIG9yaWdpbmFsIGxpbmUgZW5kaW5nLgogICAgICAgICB0aGlzLl9idWlsZGVyLmFkZE9y
aWdpbmFsTGluZUVuZGluZyhvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJD
b250ZW50QnVpbGRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCmluZGV4IDNjMzZhMmJiM2YzODQ0
ZTgzN2M2YjBhODZmZjhhOGM4ZTVlMzAwYjQuLjgyOTFjMzRhNDYwNmYwYTgwMmRhMDY0YTgzZWMz
YmExMzE0ODhjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRC
dWlsZGVyLmpzCkBAIC0yMyw3MCArMjMsNjkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi1mdW5jdGlvbiBGb3JtYXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5n
LCBvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxPZmZz
ZXQsIGZvcm1hdHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQorY2xhc3MgRm9ybWF0dGVyQ29udGVu
dEJ1aWxkZXIKIHsKLSAgICB0aGlzLl9vcmlnaW5hbENvbnRlbnQgPSBudWxsOwotICAgIHRoaXMu
X2Zvcm1hdHRlZENvbnRlbnQgPSBbXTsKLSAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3Ro
ID0gMDsKLQotICAgIHRoaXMuX3N0YXJ0T2ZMaW5lID0gdHJ1ZTsKLSAgICB0aGlzLmxhc3RUb2tl
bldhc05ld2xpbmUgPSBmYWxzZTsKLSAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBm
YWxzZTsKLSAgICB0aGlzLmxhc3ROZXdsaW5lQXBwZW5kV2FzTXVsdGlwbGUgPSBmYWxzZTsKKyAg
ICBjb25zdHJ1Y3RvcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5l
RW5kaW5ncywgb3JpZ2luYWxPZmZzZXQsIGZvcm1hdHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxDb250ZW50ID0gbnVsbDsKKyAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29udGVudCA9IFtdOworICAgICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50
TGVuZ3RoID0gMDsKIAotICAgIHRoaXMuX2luZGVudCA9IDA7Ci0gICAgdGhpcy5faW5kZW50U3Ry
aW5nID0gaW5kZW50U3RyaW5nOwotICAgIHRoaXMuX2luZGVudENhY2hlID0gWyIiLCB0aGlzLl9p
bmRlbnRTdHJpbmddOworICAgICAgICB0aGlzLl9zdGFydE9mTGluZSA9IHRydWU7CisgICAgICAg
IHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZhbHNlOworICAgICAgICB0aGlzLmxhc3RUb2tl
bldhc1doaXRlc3BhY2UgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdh
c011bHRpcGxlID0gZmFsc2U7CiAKLSAgICB0aGlzLl9tYXBwaW5nID0gbWFwcGluZzsKLSAgICB0
aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzID0gb3JpZ2luYWxMaW5lRW5kaW5ncyB8fCBbXTsKLSAg
ICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncyA9IGZvcm1hdHRlZExpbmVFbmRpbmdzIHx8IFtd
OwotICAgIHRoaXMuX29yaWdpbmFsT2Zmc2V0ID0gb3JpZ2luYWxPZmZzZXQgfHwgMDsKLSAgICB0
aGlzLl9mb3JtYXR0ZWRPZmZzZXQgPSBmb3JtYXR0ZWRPZmZzZXQgfHwgMDsKKyAgICAgICAgdGhp
cy5faW5kZW50ID0gMDsKKyAgICAgICAgdGhpcy5faW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5n
OworICAgICAgICB0aGlzLl9pbmRlbnRDYWNoZSA9IFsiIiwgdGhpcy5faW5kZW50U3RyaW5nXTsK
IAotICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID0gMDsKLSAgICB0aGlzLl9sYXN0Rm9y
bWF0dGVkUG9zaXRpb24gPSAwOwotfQorICAgICAgICB0aGlzLl9tYXBwaW5nID0gbWFwcGluZzsK
KyAgICAgICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncyA9IG9yaWdpbmFsTGluZUVuZGluZ3Mg
fHwgW107CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGlu
ZUVuZGluZ3MgfHwgW107CisgICAgICAgIHRoaXMuX29yaWdpbmFsT2Zmc2V0ID0gb3JpZ2luYWxP
ZmZzZXQgfHwgMDsKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkT2Zmc2V0ID0gZm9ybWF0dGVkT2Zm
c2V0IHx8IDA7CiAKLUZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKLSAgICBj
b25zdHJ1Y3RvcjogRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIsCisgICAgICAgIHRoaXMuX2xhc3RP
cmlnaW5hbFBvc2l0aW9uID0gMDsKKyAgICAgICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9u
ID0gMDsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBvcmlnaW5hbENvbnRlbnQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsQ29udGVudDsKLSAgICB9LAor
ICAgIH0KIAogICAgIGdldCBmb3JtYXR0ZWRDb250ZW50KCkKICAgICB7CiAgICAgICAgIHZhciBm
b3JtYXR0ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LmpvaW4oIiIpOwogICAgICAgICBjb25z
b2xlLmFzc2VydChmb3JtYXR0ZWQubGVuZ3RoID09PSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVu
Z3RoKTsKICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDsKLSAgICB9LAorICAgIH0KIAogICAgIGdl
dCBtYXBwaW5nKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tYXBwaW5nOwotICAgIH0s
CisgICAgfQogCiAgICAgZ2V0IG9yaWdpbmFsTGluZUVuZGluZ3MoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3M7Ci0gICAgfSwKKyAgICB9CiAKICAgICBn
ZXQgZm9ybWF0dGVkTGluZUVuZGluZ3MoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Zv
cm1hdHRlZExpbmVFbmRpbmdzOwotICAgIH0sCisgICAgfQogCi0gICAgc2V0T3JpZ2luYWxDb250
ZW50OiBmdW5jdGlvbihvcmlnaW5hbENvbnRlbnQpCisgICAgc2V0T3JpZ2luYWxDb250ZW50KG9y
aWdpbmFsQ29udGVudCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9vcmln
aW5hbENvbnRlbnQpOwogICAgICAgICB0aGlzLl9vcmlnaW5hbENvbnRlbnQgPSBvcmlnaW5hbENv
bnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBhcHBlbmRUb2tlbjogZnVuY3Rpb24oc3RyaW5n
LCBvcmlnaW5hbFBvc2l0aW9uKQorICAgIGFwcGVuZFRva2VuKHN0cmluZywgb3JpZ2luYWxQb3Np
dGlvbikKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9zdGFydE9mTGluZSkKICAgICAgICAgICAg
IHRoaXMuX2FwcGVuZEluZGVudCgpOwpAQCAtOTcsMTggKzk2LDE4IEBAIEZvcm1hdHRlckNvbnRl
bnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc3RhcnRPZkxpbmUgPSBmYWxz
ZTsKICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7CiAgICAgICAgIHRo
aXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwotICAgIH0sCisgICAgfQogCi0gICAg
YXBwZW5kU3BhY2U6IGZ1bmN0aW9uKCkKKyAgICBhcHBlbmRTcGFjZSgpCiAgICAgewogICAgICAg
ICBpZiAoIXRoaXMuX3N0YXJ0T2ZMaW5lKSB7CiAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoIiAi
KTsKICAgICAgICAgICAgIHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAg
ICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gdHJ1ZTsKICAgICAgICAgfQotICAg
IH0sCisgICAgfQogCi0gICAgYXBwZW5kTmV3bGluZTogZnVuY3Rpb24oZm9yY2UpCisgICAgYXBw
ZW5kTmV3bGluZShmb3JjZSkKICAgICB7CiAgICAgICAgIGlmICgoIXRoaXMubGFzdFRva2VuV2Fz
TmV3bGluZSAmJiAhdGhpcy5fc3RhcnRPZkxpbmUpIHx8IGZvcmNlKSB7CiAgICAgICAgICAgICB0
aGlzLl9hcHBlbmQoIlxuIik7CkBAIC0xMTgsOSArMTE3LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1
aWxkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNw
YWNlID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmxhc3ROZXdsaW5lQXBwZW5kV2FzTXVsdGlw
bGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgYXBwZW5kTXVsdGlw
bGVOZXdsaW5lczogZnVuY3Rpb24obmV3bGluZXMpCisgICAgYXBwZW5kTXVsdGlwbGVOZXdsaW5l
cyhuZXdsaW5lcykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG5ld2xpbmVzID4gMCk7
CiAKQEAgLTEzMSw5ICsxMzAsOSBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgaWYgKHdhc011bHRpcGxlKQogICAgICAgICAgICAgdGhpcy5sYXN0TmV3
bGluZUFwcGVuZFdhc011bHRpcGxlID0gdHJ1ZTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlbW92
ZUxhc3ROZXdsaW5lOiBmdW5jdGlvbigpCisgICAgcmVtb3ZlTGFzdE5ld2xpbmUoKQogICAgIHsK
ICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lKTsKICAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy5fZm9ybWF0dGVkQ29udGVudC5sYXN0VmFsdWUgPT09ICJc
biIpOwpAQCAtMTQzLDQ4ICsxNDIsNDggQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90
eXBlID0gewogICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7CiAg
ICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBmYWxzZTsKICAgICAgICAg
fQotICAgIH0sCisgICAgfQogCi0gICAgaW5kZW50OiBmdW5jdGlvbigpCisgICAgaW5kZW50KCkK
ICAgICB7CiAgICAgICAgICsrdGhpcy5faW5kZW50OwotICAgIH0sCisgICAgfQogCi0gICAgZGVk
ZW50OiBmdW5jdGlvbigpCisgICAgZGVkZW50KCkKICAgICB7CiAgICAgICAgIC0tdGhpcy5faW5k
ZW50OwogCiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luZGVudCA+PSAwKTsKICAgICAg
ICAgaWYgKHRoaXMuX2luZGVudCA8IDApCiAgICAgICAgICAgICB0aGlzLl9pbmRlbnQgPSAwOwot
ICAgIH0sCisgICAgfQogCi0gICAgYWRkT3JpZ2luYWxMaW5lRW5kaW5nOiBmdW5jdGlvbihvcmln
aW5hbFBvc2l0aW9uKQorICAgIGFkZE9yaWdpbmFsTGluZUVuZGluZyhvcmlnaW5hbFBvc2l0aW9u
KQogICAgIHsKICAgICAgICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncy5wdXNoKG9yaWdpbmFs
UG9zaXRpb24pOwotICAgIH0sCisgICAgfQogCi0gICAgZmluaXNoOiBmdW5jdGlvbigpCisgICAg
ZmluaXNoKCkKICAgICB7CiAgICAgICAgIHRoaXMuYXBwZW5kTmV3bGluZSgpOwotICAgIH0sCisg
ICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX3BvcE5ld0xpbmU6IGZ1bmN0aW9uKCkKKyAg
ICBfcG9wTmV3TGluZSgpCiAgICAgewogICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuX2Zvcm1h
dHRlZENvbnRlbnQucG9wKCk7CiAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnRMZW5ndGgg
LT0gcmVtb3ZlZC5sZW5ndGg7CiAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLnBv
cCgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2FwcGVuZDogZnVuY3Rpb24oc3RyKQorICAgIF9h
cHBlbmQoc3RyKQogICAgIHsKICAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudC5wdXNoKHN0
cik7CiAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnRMZW5ndGggKz0gc3RyLmxlbmd0aDsK
LSAgICB9LAorICAgIH0KIAotICAgIF9hcHBlbmRJbmRlbnQ6IGZ1bmN0aW9uKCkKKyAgICBfYXBw
ZW5kSW5kZW50KCkKICAgICB7CiAgICAgICAgIC8vIEluZGVudCBpcyBhbHJlYWR5IGluIHRoZSBj
YWNoZS4KICAgICAgICAgaWYgKHRoaXMuX2luZGVudCA8IHRoaXMuX2luZGVudENhY2hlLmxlbmd0
aCkgewpAQCAtMTkzLDcgKzE5Miw3IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEluZGVudCB3YXMgbm90IGluIHRoZSBjYWNo
ZSwgZmlsbCB1cCB0aGUgY2FjaGUgdXAgd2l0aCB3aGF0IHdhcyBuZWVkZWQuCi0gICAgICAgIGNv
bnN0IG1heENhY2hlSW5kZW50ID0gMjA7CisgICAgICAgIHZhciBtYXhDYWNoZUluZGVudCA9IDIw
OwogICAgICAgICB2YXIgbWF4ID0gTWF0aC5taW4odGhpcy5faW5kZW50LCBtYXhDYWNoZUluZGVu
dCk7CiAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9pbmRlbnRDYWNoZS5sZW5ndGg7IGkgPD0g
bWF4OyArK2kpCiAgICAgICAgICAgICB0aGlzLl9pbmRlbnRDYWNoZVtpXSA9IHRoaXMuX2luZGVu
dENhY2hlW2kgLSAxXSArIHRoaXMuX2luZGVudFN0cmluZzsKQEAgLTIwNyw5ICsyMDYsOSBAQCBG
b3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhp
cy5fYXBwZW5kKHRoaXMuX2luZGVudENhY2hlW2luZGVudF0pOwogICAgICAgICAgICAgaW5kZW50
IC09IG1heENhY2hlSW5kZW50OwogICAgICAgICB9IHdoaWxlIChpbmRlbnQgPiAwKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9hZGRNYXBwaW5nSWZOZWVkZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9z
aXRpb24pCisgICAgX2FkZE1hcHBpbmdJZk5lZWRlZChvcmlnaW5hbFBvc2l0aW9uKQogICAgIHsK
ICAgICAgICAgaWYgKG9yaWdpbmFsUG9zaXRpb24gLSB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlv
biA9PT0gdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCAtIHRoaXMuX2xhc3RGb3JtYXR0ZWRQ
b3NpdGlvbikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxOSw5ICsyMTgsOSBAQCBGb3JtYXR0
ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fbGFzdE9yaWdp
bmFsUG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uOwogICAgICAgICB0aGlzLl9sYXN0Rm9ybWF0
dGVkUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoOwotICAgIH0sCisgICAg
fQogCi0gICAgX2FkZEZvcm1hdHRlZExpbmVFbmRpbmc6IGZ1bmN0aW9uKCkKKyAgICBfYWRkRm9y
bWF0dGVkTGluZUVuZGluZygpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9m
b3JtYXR0ZWRDb250ZW50Lmxhc3RWYWx1ZSA9PT0gIlxuIik7CiAgICAgICAgIHRoaXMuX2Zvcm1h
dHRlZExpbmVFbmRpbmdzLnB1c2godGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCAtIDEpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvRm9ybWF0dGVyU291cmNlTWFwLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCmluZGV4IGE4MGY2Y2E3ZDNm
ZGMzZmMzMzEwY2U3ODQ1ZmM0MDM4Mzc5MTFhNWQuLjQyOGRjZWVmMzA0NTRjOGNjZGZlZjdhOTkz
MDU3ZDgzZWQwNjQzMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAu
anMKQEAgLTIzLDYxICsyMyw2MSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLVdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAgPSBmdW5jdGlvbihvcmln
aW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgbWFwcGluZykKK1dlYkluc3Bl
Y3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAgPSBjbGFzcyBGb3JtYXR0ZXJTb3VyY2VNYXAgZXh0ZW5k
cyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBh
IFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8g
V2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworICAgIGNvbnN0cnVjdG9yKG9yaWdpbmFs
TGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCBtYXBwaW5nKQorICAgIHsKKyAgICAg
ICAgc3VwZXIoKTsKIAotICAgIHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MgPSBvcmlnaW5hbExp
bmVFbmRpbmdzOwotICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGlu
ZUVuZGluZ3M7Ci0gICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7Ci19OworICAgICAgICB0aGlz
Ll9vcmlnaW5hbExpbmVFbmRpbmdzID0gb3JpZ2luYWxMaW5lRW5kaW5nczsKKyAgICAgICAgdGhp
cy5fZm9ybWF0dGVkTGluZUVuZGluZ3MgPSBmb3JtYXR0ZWRMaW5lRW5kaW5nczsKKyAgICAgICAg
dGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7CisgICAgfSAKIAotV2ViSW5zcGVjdG9yLkZvcm1hdHRl
clNvdXJjZU1hcC5mcm9tQnVpbGRlciA9IGZ1bmN0aW9uKGJ1aWxkZXIpCi17Ci0gICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwKGJ1aWxkZXIub3JpZ2luYWxMaW5l
RW5kaW5ncywgYnVpbGRlci5mb3JtYXR0ZWRMaW5lRW5kaW5ncywgYnVpbGRlci5tYXBwaW5nKTsK
LX07CisgICAgLy8gU3RhdGljCiAKLVdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJv
dG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNl
TWFwLAorICAgIHN0YXRpYyBmcm9tQnVpbGRlcihidWlsZGVyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwKGJ1aWxkZXIub3JpZ2luYWxM
aW5lRW5kaW5ncywgYnVpbGRlci5mb3JtYXR0ZWRMaW5lRW5kaW5ncywgYnVpbGRlci5tYXBwaW5n
KTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICBvcmlnaW5hbFRvRm9ybWF0dGVk
KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBvcmlnaW5hbFBv
c2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGlu
Z3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOwogICAgICAgICByZXR1cm4g
dGhpcy5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQob3JpZ2luYWxQb3NpdGlvbik7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBvcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKG9y
aWdpbmFsUG9zaXRpb24pCisgICAgb3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkKG9yaWdpbmFs
UG9zaXRpb24pCiAgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9j
b252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3Jt
YXR0ZWQsIG9yaWdpbmFsUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25U
b0xvY2F0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7
Ci0gICAgfSwKKyAgICB9CiAKIAotICAgIGZvcm1hdHRlZFRvT3JpZ2luYWw6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICBmb3JtYXR0ZWRUb09yaWdpbmFsKGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0g
dGhpcy5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7
CiAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fb3JpZ2luYWxM
aW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBmb3Jt
YXR0ZWRUb09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
CisgICAgZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNldChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
CiAgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRv
UG9zaXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29s
dW1uTnVtYmVyIHx8IDApOwogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2Nv
bnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFwcGluZy5vcmln
aW5hbCwgZm9ybWF0dGVkUG9zaXRpb24pOwogICAgICAgICByZXR1cm4gb3JpZ2luYWxQb3NpdGlv
bjsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9sb2NhdGlvblRvUG9z
aXRpb246IGZ1bmN0aW9uKGxpbmVFbmRpbmdzLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisg
ICAgX2xvY2F0aW9uVG9Qb3NpdGlvbihsaW5lRW5kaW5ncywgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyKQogICAgIHsKICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSBsaW5lTnVtYmVyID8gbGluZUVu
ZGluZ3NbbGluZU51bWJlciAtIDFdICsgMSA6IDA7CiAgICAgICAgIHJldHVybiBsaW5lT2Zmc2V0
ICsgY29sdW1uTnVtYmVyOwotICAgIH0sCisgICAgfQogCi0gICAgX3Bvc2l0aW9uVG9Mb2NhdGlv
bjogZnVuY3Rpb24obGluZUVuZGluZ3MsIHBvc2l0aW9uKQorICAgIF9wb3NpdGlvblRvTG9jYXRp
b24obGluZUVuZGluZ3MsIHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIg
PSBsaW5lRW5kaW5ncy51cHBlckJvdW5kKHBvc2l0aW9uIC0gMSk7CiAgICAgICAgIGlmICghbGlu
ZU51bWJlcikKQEAgLTg1LDkgKzg1LDkgQEAgV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1h
cC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHZhciBjb2x1bW5OdW1i
ZXIgPSBwb3NpdGlvbiAtIGxpbmVFbmRpbmdzW2xpbmVOdW1iZXIgLSAxXSAtIDE7CiAgICAgICAg
IHJldHVybiB7bGluZU51bWJlciwgY29sdW1uTnVtYmVyfTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9jb252ZXJ0UG9zaXRpb246IGZ1bmN0aW9uKHBvc2l0aW9uczEsIHBvc2l0aW9uczIsIHBvc2l0
aW9uSW5Qb3NpdGlvbjEpCisgICAgX2NvbnZlcnRQb3NpdGlvbihwb3NpdGlvbnMxLCBwb3NpdGlv
bnMyLCBwb3NpdGlvbkluUG9zaXRpb24xKQogICAgIHsKICAgICAgICAgdmFyIGluZGV4ID0gcG9z
aXRpb25zMS51cHBlckJvdW5kKHBvc2l0aW9uSW5Qb3NpdGlvbjEpIC0gMTsKICAgICAgICAgdmFy
IGNvbnZlcnRlZFBvc2l0aW9uID0gcG9zaXRpb25zMltpbmRleF0gKyBwb3NpdGlvbkluUG9zaXRp
b24xIC0gcG9zaXRpb25zMVtpbmRleF07CkBAIC05Niw1ICs5NiwzIEBAIFdlYkluc3BlY3Rvci5G
b3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gY29udmVydGVk
UG9zaXRpb247CiAgICAgfQogfTsKLQotV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRnJhbWVSZXNvdXJjZU1hbmFnZXIu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9GcmFt
ZVJlc291cmNlTWFuYWdlci5qcwppbmRleCA5MTFiNTRiZTg3Y2JjYjA5MDI3ZDAyNzlhZmFhNzQy
ZmJjZWVkMDVhLi42NjQyODVjN2Q3NzYyMGI0NzkyNGMzOGI0YTYwMzViODQ1MGU5ZjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9G
cmFtZVJlc291cmNlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9GcmFtZVJlc291cmNlTWFuYWdlci5qcwpAQCAtMjMsMzYgKzIz
LDI1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5z
cGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyID0gZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9yLkZy
YW1lUmVzb3VyY2VNYW5hZ2VyID0gY2xhc3MgRnJhbWVSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBX
ZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdl
Ykluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2Vi
SW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgaWYgKHdpbmRvdy5QYWdlQWdlbnQp
Ci0gICAgICAgIFBhZ2VBZ2VudC5lbmFibGUoKTsKLSAgICBpZiAod2luZG93Lk5ldHdvcmtBZ2Vu
dCkKLSAgICAgICAgTmV0d29ya0FnZW50LmVuYWJsZSgpOwotCi0gICAgV2ViSW5zcGVjdG9yLm5v
dGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZpY2F0aW9uLkV4
dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzKTsK
LQotICAgIHRoaXMuaW5pdGlhbGl6ZSgpOwotfTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgewor
ICAgICAgICBzdXBlcigpOwogCi0vLyBGSVhNRTogTW92ZSB0byBhIFdlYkluc3BlY3Rvci5PYmpl
Y3Qgc3ViY2xhc3MgYW5kIHdlIGNhbiByZW1vdmUgdGhpcy4KLVdlYkluc3BlY3Rvci5PYmplY3Qu
ZGVwcmVjYXRlZEFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5GcmFtZVJlc291
cmNlTWFuYWdlcik7CisgICAgICAgIGlmICh3aW5kb3cuUGFnZUFnZW50KQorICAgICAgICAgICAg
UGFnZUFnZW50LmVuYWJsZSgpOworICAgICAgICBpZiAod2luZG93Lk5ldHdvcmtBZ2VudCkKKyAg
ICAgICAgICAgIE5ldHdvcmtBZ2VudC5lbmFibGUoKTsKIAotV2ViSW5zcGVjdG9yLkZyYW1lUmVz
b3VyY2VNYW5hZ2VyLkV2ZW50ID0gewotICAgIEZyYW1lV2FzQWRkZWQ6ICJmcmFtZS1yZXNvdXJj
ZS1tYW5hZ2VyLWZyYW1lLXdhcy1hZGRlZCIsCi0gICAgRnJhbWVXYXNSZW1vdmVkOiAiZnJhbWUt
cmVzb3VyY2UtbWFuYWdlci1mcmFtZS13YXMtcmVtb3ZlZCIsCi0gICAgTWFpbkZyYW1lRGlkQ2hh
bmdlOiAiZnJhbWUtcmVzb3VyY2UtbWFuYWdlci1tYWluLWZyYW1lLWRpZC1jaGFuZ2UiCi19Owor
ICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0aW9ucy5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Ob3RpZmljYXRpb24uRXh0cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzLl9leHRyYURv
bWFpbnNBY3RpdmF0ZWQsIHRoaXMpOwogCi1XZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFn
ZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNv
dXJjZU1hbmFnZXIsCisgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpOworICAgIH0KIAogICAgIC8v
IFB1YmxpYwogCi0gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKQorICAgIGluaXRpYWxpemUoKQog
ICAgIHsKICAgICAgICAgdmFyIG9sZE1haW5GcmFtZSA9IHRoaXMuX21haW5GcmFtZTsKIApAQCAt
NjYsMTIgKzU1LDEyIEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMuX3dhaXRpbmdGb3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXls
b2FkID0gdHJ1ZTsKICAgICAgICAgaWYgKHdpbmRvdy5QYWdlQWdlbnQpCiAgICAgICAgICAgICBQ
YWdlQWdlbnQuZ2V0UmVzb3VyY2VUcmVlKHRoaXMuX3Byb2Nlc3NNYWluRnJhbWVSZXNvdXJjZVRy
ZWVQYXlsb2FkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IG1haW5GcmFt
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbWFpbkZyYW1lOwotICAgIH0sCisgICAg
fQogCiAgICAgZ2V0IGZyYW1lcygpCiAgICAgewpAQCAtODAsMTQgKzY5LDE0IEBAIFdlYkluc3Bl
Y3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBmcmFt
ZXMucHVzaCh0aGlzLl9mcmFtZUlkZW50aWZpZXJNYXBba2V5XSk7CiAKICAgICAgICAgcmV0dXJu
IGZyYW1lczsKLSAgICB9LAorICAgIH0KIAotICAgIGZyYW1lRm9ySWRlbnRpZmllcjogZnVuY3Rp
b24oZnJhbWVJZCkKKyAgICBmcmFtZUZvcklkZW50aWZpZXIoZnJhbWVJZCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLl9mcmFtZUlkZW50aWZpZXJNYXBbZnJhbWVJZF0gfHwgbnVsbDsKLSAg
ICB9LAorICAgIH0KIAotICAgIGZyYW1lRGlkTmF2aWdhdGU6IGZ1bmN0aW9uKGZyYW1lUGF5bG9h
ZCkKKyAgICBmcmFtZURpZE5hdmlnYXRlKGZyYW1lUGF5bG9hZCkKICAgICB7CiAgICAgICAgIC8v
IENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIuCiAKQEAgLTE0OCw5ICsxMzcs
OSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAg
ICAgICAgIGlmIChmcmFtZVdhc0xvYWRlZEluc3RhbnRseSkKICAgICAgICAgICAgIGZyYW1lLm1h
aW5SZXNvdXJjZS5tYXJrQXNGaW5pc2hlZCgpOwotICAgIH0sCisgICAgfQogCi0gICAgZnJhbWVE
aWREZXRhY2g6IGZ1bmN0aW9uKGZyYW1lSWQpCisgICAgZnJhbWVEaWREZXRhY2goZnJhbWVJZCkK
ICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIu
CiAKQEAgLTE3OCw5ICsxNjcsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIu
cHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh0aGlzLl9tYWluRnJhbWUgIT09IG9sZE1haW5G
cmFtZSkKICAgICAgICAgICAgIHRoaXMuX21haW5GcmFtZURpZENoYW5nZShvbGRNYWluRnJhbWUp
OwotICAgIH0sCisgICAgfQogCi0gICAgcmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudDogZnVuY3Rp
b24ocmVxdWVzdElkZW50aWZpZXIsIGZyYW1lSWRlbnRpZmllciwgbG9hZGVySWRlbnRpZmllciwg
cmVxdWVzdCwgdHlwZSwgcmVkaXJlY3RSZXNwb25zZSwgdGltZXN0YW1wLCBpbml0aWF0b3IpCisg
ICAgcmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWRlbnRpZmllciwgZnJhbWVJZGVu
dGlmaWVyLCBsb2FkZXJJZGVudGlmaWVyLCByZXF1ZXN0LCB0eXBlLCByZWRpcmVjdFJlc3BvbnNl
LCB0aW1lc3RhbXAsIGluaXRpYXRvcikKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdl
Ykluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIuCiAKQEAgLTIwNCw5ICsxOTMsOSBAQCBXZWJJbnNw
ZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIEFz
c29jaWF0ZSB0aGUgcmVzb3VyY2Ugd2l0aCB0aGUgcmVxdWVzdElkZW50aWZpZXIgc28gaXQgY2Fu
IGJlIGZvdW5kIGluIGZ1dHVyZSBsb2FkaW5nIGV2ZW50cy4KICAgICAgICAgdGhpcy5fcmVzb3Vy
Y2VSZXF1ZXN0SWRlbnRpZmllck1hcFtyZXF1ZXN0SWRlbnRpZmllcl0gPSByZXNvdXJjZTsKLSAg
ICB9LAorICAgIH0KIAotICAgIG1hcmtSZXNvdXJjZVJlcXVlc3RBc1NlcnZlZEZyb21NZW1vcnlD
YWNoZTogZnVuY3Rpb24ocmVxdWVzdElkZW50aWZpZXIpCisgICAgbWFya1Jlc291cmNlUmVxdWVz
dEFzU2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZGVudGlmaWVyKQogICAgIHsKICAgICAg
ICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci4KIApAQCAtMjIz
LDkgKzIxMiw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgcmVzb3VyY2UubWFya0FzQ2FjaGVk
KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXNvdXJjZVJlcXVlc3RXYXNTZXJ2ZWRGcm9tTWVt
b3J5Q2FjaGU6IGZ1bmN0aW9uKHJlcXVlc3RJZGVudGlmaWVyLCBmcmFtZUlkZW50aWZpZXIsIGxv
YWRlcklkZW50aWZpZXIsIGNhY2hlZFJlc291cmNlUGF5bG9hZCwgdGltZXN0YW1wLCBpbml0aWF0
b3IpCisgICAgcmVzb3VyY2VSZXF1ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJ
ZGVudGlmaWVyLCBmcmFtZUlkZW50aWZpZXIsIGxvYWRlcklkZW50aWZpZXIsIGNhY2hlZFJlc291
cmNlUGF5bG9hZCwgdGltZXN0YW1wLCBpbml0aWF0b3IpCiAgICAgewogICAgICAgICAvLyBDYWxs
ZWQgZnJvbSBXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLgogCkBAIC0yNDgsOSArMjM3LDkg
QEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICAvLyBObyBuZWVkIHRvIGFzc29jaWF0ZSB0aGUgcmVzb3VyY2Ugd2l0aCB0aGUgcmVxdWVz
dElkZW50aWZpZXIsIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkgZXZlbnQKICAgICAgICAgLy8gc2Vu
dCBmb3IgbWVtb3J5IGNhY2hlIHJlc291cmNlIGxvYWRzLgotICAgIH0sCisgICAgfQogCi0gICAg
cmVzb3VyY2VSZXF1ZXN0RGlkUmVjZWl2ZVJlc3BvbnNlOiBmdW5jdGlvbihyZXF1ZXN0SWRlbnRp
ZmllciwgZnJhbWVJZGVudGlmaWVyLCBsb2FkZXJJZGVudGlmaWVyLCB0eXBlLCByZXNwb25zZSwg
dGltZXN0YW1wKQorICAgIHJlc291cmNlUmVxdWVzdERpZFJlY2VpdmVSZXNwb25zZShyZXF1ZXN0
SWRlbnRpZmllciwgZnJhbWVJZGVudGlmaWVyLCBsb2FkZXJJZGVudGlmaWVyLCB0eXBlLCByZXNw
b25zZSwgdGltZXN0YW1wKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVj
dG9yLk5ldHdvcmtPYnNlcnZlci4KIApAQCAtMjkxLDkgKzI4MCw5IEBAIFdlYkluc3BlY3Rvci5G
cmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXNvdXJjZS5t
YXJrQXNDYWNoZWQoKTsKIAogICAgICAgICByZXNvdXJjZS51cGRhdGVGb3JSZXNwb25zZShyZXNw
b25zZS51cmwsIHJlc3BvbnNlLm1pbWVUeXBlLCB0eXBlLCByZXNwb25zZS5oZWFkZXJzLCByZXNw
b25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQsIGVsYXBzZWRUaW1lKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIHJlc291cmNlUmVxdWVzdERpZFJlY2VpdmVEYXRhOiBmdW5jdGlvbihyZXF1
ZXN0SWRlbnRpZmllciwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgsIHRpbWVzdGFtcCkK
KyAgICByZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZlRGF0YShyZXF1ZXN0SWRlbnRpZmllciwgZGF0
YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgsIHRpbWVzdGFtcCkKICAgICB7CiAgICAgICAgIC8v
IENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIuCiAKQEAgLTMxNCw5ICsz
MDMsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewog
CiAgICAgICAgIGlmIChlbmNvZGVkRGF0YUxlbmd0aCAhPT0gLTEpCiAgICAgICAgICAgICByZXNv
dXJjZS5pbmNyZWFzZVRyYW5zZmVyU2l6ZShlbmNvZGVkRGF0YUxlbmd0aCk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICByZXNvdXJjZVJlcXVlc3REaWRGaW5pc2hMb2FkaW5nOiBmdW5jdGlvbihyZXF1
ZXN0SWRlbnRpZmllciwgdGltZXN0YW1wLCBzb3VyY2VNYXBVUkwpCisgICAgcmVzb3VyY2VSZXF1
ZXN0RGlkRmluaXNoTG9hZGluZyhyZXF1ZXN0SWRlbnRpZmllciwgdGltZXN0YW1wLCBzb3VyY2VN
YXBVUkwpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuTmV0d29y
a09ic2VydmVyLgogCkBAIC0zMzgsOSArMzI3LDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3Vy
Y2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zb3VyY2VN
YXBNYW5hZ2VyLmRvd25sb2FkU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgcmVzb3VyY2UudXJsLCBy
ZXNvdXJjZSk7CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX3Jlc291cmNlUmVxdWVzdElkZW50aWZp
ZXJNYXBbcmVxdWVzdElkZW50aWZpZXJdOwotICAgIH0sCisgICAgfQogCi0gICAgcmVzb3VyY2VS
ZXF1ZXN0RGlkRmFpbExvYWRpbmc6IGZ1bmN0aW9uKHJlcXVlc3RJZGVudGlmaWVyLCBjYW5jZWxl
ZCwgdGltZXN0YW1wKQorICAgIHJlc291cmNlUmVxdWVzdERpZEZhaWxMb2FkaW5nKHJlcXVlc3RJ
ZGVudGlmaWVyLCBjYW5jZWxlZCwgdGltZXN0YW1wKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVk
IGZyb20gV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci4KIApAQCAtMzYyLDkgKzM1MSw5IEBA
IFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICByZXNvdXJjZS5wYXJlbnRGcmFtZS5jbGVhclByb3Zpc2lvbmFsTG9hZCgpOwogCiAgICAg
ICAgIGRlbGV0ZSB0aGlzLl9yZXNvdXJjZVJlcXVlc3RJZGVudGlmaWVyTWFwW3JlcXVlc3RJZGVu
dGlmaWVyXTsKLSAgICB9LAorICAgIH0KIAotICAgIGV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkOiBm
dW5jdGlvbihjb250ZXh0UGF5bG9hZCkKKyAgICBleGVjdXRpb25Db250ZXh0Q3JlYXRlZChjb250
ZXh0UGF5bG9hZCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5S
dW50aW1lT2JzZXJ2ZXIuCiAKQEAgLTM3Niw5ICszNjUsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVS
ZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBj
b250ZXh0UGF5bG9hZC5uYW1lIHx8IGZyYW1lLm1haW5SZXNvdXJjZS5kaXNwbGF5TmFtZTsKICAg
ICAgICAgdmFyIGV4ZWN1dGlvbkNvbnRleHQgPSBuZXcgV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dFBheWxvYWQuaWQsIGRpc3BsYXlOYW1lLCBjb250ZXh0UGF5bG9hZC5pc1Bh
Z2VDb250ZXh0LCBmcmFtZSk7CiAgICAgICAgIGZyYW1lLmFkZEV4ZWN1dGlvbkNvbnRleHQoZXhl
Y3V0aW9uQ29udGV4dCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXNvdXJjZUZvclVSTDogZnVu
Y3Rpb24odXJsKQorICAgIHJlc291cmNlRm9yVVJMKHVybCkKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5fbWFpbkZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0zODcsMTEgKzM3
NiwxMSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21haW5GcmFtZS5tYWluUmVzb3VyY2U7CiAKICAgICAg
ICAgcmV0dXJuIHRoaXMuX21haW5GcmFtZS5yZXNvdXJjZUZvclVSTCh1cmwsIHRydWUpOwotICAg
IH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2FkZE5ld1Jlc291cmNlVG9GcmFt
ZTogZnVuY3Rpb24ocmVxdWVzdElkZW50aWZpZXIsIGZyYW1lSWRlbnRpZmllciwgbG9hZGVySWRl
bnRpZmllciwgdXJsLCB0eXBlLCByZXF1ZXN0TWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVz
dERhdGEsIGVsYXBzZWRUaW1lLCBmcmFtZU5hbWUsIGZyYW1lU2VjdXJpdHlPcmlnaW4sIGluaXRp
YXRvclNvdXJjZUNvZGVMb2NhdGlvbikKKyAgICBfYWRkTmV3UmVzb3VyY2VUb0ZyYW1lKHJlcXVl
c3RJZGVudGlmaWVyLCBmcmFtZUlkZW50aWZpZXIsIGxvYWRlcklkZW50aWZpZXIsIHVybCwgdHlw
ZSwgcmVxdWVzdE1ldGhvZCwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3REYXRhLCBlbGFwc2VkVGlt
ZSwgZnJhbWVOYW1lLCBmcmFtZVNlY3VyaXR5T3JpZ2luLCBpbml0aWF0b3JTb3VyY2VDb2RlTG9j
YXRpb24pCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fd2FpdGluZ0Zvck1h
aW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQpOwogCkBAIC00MjcsOSArNDE2LDkgQEAgV2ViSW5z
cGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQocmVzb3VyY2UpOwogCiAgICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9hZGRSZXNvdXJjZVRvRnJhbWU6IGZ1bmN0aW9uKGZyYW1lLCByZXNvdXJj
ZSkKKyAgICBfYWRkUmVzb3VyY2VUb0ZyYW1lKGZyYW1lLCByZXNvdXJjZSkKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl93YWl0aW5nRm9yTWFpbkZyYW1lUmVzb3VyY2VUcmVl
UGF5bG9hZCk7CiAgICAgICAgIGlmICh0aGlzLl93YWl0aW5nRm9yTWFpbkZyYW1lUmVzb3VyY2VU
cmVlUGF5bG9hZCkKQEAgLTQ0OCw5ICs0MzcsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJj
ZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYW5vdGhlciBy
ZXNvdXJjZSwgZWl0aGVyIGZvciB0aGUgbWFpbiBsb2FkZXIgb3IgdGhlIHByb3Zpc2lvbmFsIGxv
YWRlci4KICAgICAgICAgY29uc29sZS5hc3NlcnQocmVzb3VyY2UubG9hZGVySWRlbnRpZmllciA9
PT0gZnJhbWUubG9hZGVySWRlbnRpZmllciB8fCByZXNvdXJjZS5sb2FkZXJJZGVudGlmaWVyID09
PSBmcmFtZS5wcm92aXNpb25hbExvYWRlcklkZW50aWZpZXIpOwogICAgICAgICBmcmFtZS5hZGRS
ZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaW5pdGlhdG9yU291cmNl
Q29kZUxvY2F0aW9uRnJvbVBheWxvYWQ6IGZ1bmN0aW9uKGluaXRpYXRvclBheWxvYWQpCisgICAg
X2luaXRpYXRvclNvdXJjZUNvZGVMb2NhdGlvbkZyb21QYXlsb2FkKGluaXRpYXRvclBheWxvYWQp
CiAgICAgewogICAgICAgICBpZiAoIWluaXRpYXRvclBheWxvYWQpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKQEAgLTQ5Myw5ICs0ODIsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1h
bmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAg
cmV0dXJuIHNvdXJjZUNvZGUuY3JlYXRlU291cmNlQ29kZUxvY2F0aW9uKGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc01haW5GcmFtZVJlc291
cmNlVHJlZVBheWxvYWQ6IGZ1bmN0aW9uKGVycm9yLCBtYWluRnJhbWVQYXlsb2FkKQorICAgIF9w
cm9jZXNzTWFpbkZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZChlcnJvciwgbWFpbkZyYW1lUGF5bG9h
ZCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3dhaXRpbmdGb3JNYWluRnJh
bWVSZXNvdXJjZVRyZWVQYXlsb2FkKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX3dhaXRpbmdGb3JN
YWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkOwpAQCAtNTE3LDkgKzUwNiw5IEBAIFdlYkluc3Bl
Y3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHRo
aXMuX21haW5GcmFtZSAhPT0gb2xkTWFpbkZyYW1lKQogICAgICAgICAgICAgdGhpcy5fbWFpbkZy
YW1lRGlkQ2hhbmdlKG9sZE1haW5GcmFtZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY3JlYXRl
RnJhbWU6IGZ1bmN0aW9uKHBheWxvYWQpCisgICAgX2NyZWF0ZUZyYW1lKHBheWxvYWQpCiAgICAg
ewogICAgICAgICAvLyBJZiBwYXlsb2FkLnVybCBpcyBtaXNzaW5nIG9yIGVtcHR5IHRoZW4gdGhp
cyBwYWdlIGlzIGxpa2VseSB0aGUgc3BlY2lhbCBlbXB0eSBwYWdlLiBJbiB0aGF0IGNhc2UKICAg
ICAgICAgLy8gd2Ugd2lsbCBqdXN0IHNheSBpdCBpcyAiYWJvdXQ6YmxhbmsiIHNvIHdlIGhhdmUg
YSBVUkwsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciByZXNvdXJjZXMuCkBAIC01MzEsOSArNTIwLDkg
QEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgbWFpblJlc291cmNlLm1hcmtBc0ZpbmlzaGVkKCk7CiAKICAgICAgICAgcmV0dXJuIGZyYW1l
OwotICAgIH0sCisgICAgfQogCi0gICAgX2NyZWF0ZVJlc291cmNlOiBmdW5jdGlvbihwYXlsb2Fk
LCBmcmFtZVBheWxvYWQpCisgICAgX2NyZWF0ZVJlc291cmNlKHBheWxvYWQsIGZyYW1lUGF5bG9h
ZCkKICAgICB7CiAgICAgICAgIHZhciByZXNvdXJjZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UocGF5bG9hZC51cmwsIHBheWxvYWQubWltZVR5cGUsIHBheWxvYWQudHlwZSwgZnJhbWVQYXls
b2FkLmxvYWRlcklkKTsKIApAQCAtNTQxLDkgKzUzMCw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJl
c291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc291
cmNlTWFwTWFuYWdlci5kb3dubG9hZFNvdXJjZU1hcChwYXlsb2FkLnNvdXJjZU1hcFVSTCwgcmVz
b3VyY2UudXJsLCByZXNvdXJjZSk7CiAKICAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgIH0s
CisgICAgfQogCi0gICAgX2FkZEZyYW1lVHJlZUZyb21GcmFtZVJlc291cmNlVHJlZVBheWxvYWQ6
IGZ1bmN0aW9uKHBheWxvYWQsIGlzTWFpbkZyYW1lKQorICAgIF9hZGRGcmFtZVRyZWVGcm9tRnJh
bWVSZXNvdXJjZVRyZWVQYXlsb2FkKHBheWxvYWQsIGlzTWFpbkZyYW1lKQogICAgIHsKICAgICAg
ICAgdmFyIGZyYW1lID0gdGhpcy5fY3JlYXRlRnJhbWUocGF5bG9hZC5mcmFtZSk7CiAgICAgICAg
IGlmIChpc01haW5GcmFtZSkKQEAgLTU3MywyNyArNTYyLDMxIEBAIFdlYkluc3BlY3Rvci5GcmFt
ZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRnJh
bWVXYXNBZGRlZEV2ZW50KGZyYW1lKTsKIAogICAgICAgICByZXR1cm4gZnJhbWU7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfZGlzcGF0Y2hGcmFtZVdhc0FkZGVkRXZlbnQ6IGZ1bmN0aW9uKGZyYW1l
KQorICAgIF9kaXNwYXRjaEZyYW1lV2FzQWRkZWRFdmVudChmcmFtZSkKICAgICB7CiAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNl
TWFuYWdlci5FdmVudC5GcmFtZVdhc0FkZGVkLCB7ZnJhbWV9KTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9tYWluRnJhbWVEaWRDaGFuZ2U6IGZ1bmN0aW9uKG9sZE1haW5GcmFtZSkKKyAgICBfbWFp
bkZyYW1lRGlkQ2hhbmdlKG9sZE1haW5GcmFtZSkKICAgICB7CiAgICAgICAgIGlmIChvbGRNYWlu
RnJhbWUpCiAgICAgICAgICAgICBvbGRNYWluRnJhbWUudW5tYXJrQXNNYWluRnJhbWUoKTsKICAg
ICAgICAgaWYgKHRoaXMuX21haW5GcmFtZSkKICAgICAgICAgICAgIHRoaXMuX21haW5GcmFtZS5t
YXJrQXNNYWluRnJhbWUoKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLkV2ZW50Lk1haW5GcmFtZURpZENoYW5n
ZSwge29sZE1haW5GcmFtZX0pOwotICAgIH0sCisgICAgfQogCi0gICAgX2V4dHJhRG9tYWluc0Fj
dGl2YXRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2V4dHJhRG9tYWluc0FjdGl2YXRlZChldmVu
dCkKICAgICB7CiAgICAgICAgIGlmIChldmVudC5kYXRhLmRvbWFpbnMuY29udGFpbnMoIlBhZ2Ui
KSAmJiB3aW5kb3cuUGFnZUFnZW50KQogICAgICAgICAgICAgUGFnZUFnZW50LmdldFJlc291cmNl
VHJlZSh0aGlzLl9wcm9jZXNzTWFpbkZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZC5iaW5kKHRoaXMp
KTsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90
eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVj
dG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLkV2ZW50ID0geworICAgIEZyYW1lV2FzQWRkZWQ6ICJm
cmFtZS1yZXNvdXJjZS1tYW5hZ2VyLWZyYW1lLXdhcy1hZGRlZCIsCisgICAgRnJhbWVXYXNSZW1v
dmVkOiAiZnJhbWUtcmVzb3VyY2UtbWFuYWdlci1mcmFtZS13YXMtcmVtb3ZlZCIsCisgICAgTWFp
bkZyYW1lRGlkQ2hhbmdlOiAiZnJhbWUtcmVzb3VyY2UtbWFuYWdlci1tYWluLWZyYW1lLWRpZC1j
aGFuZ2UiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvSXNzdWVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSXNzdWVNYW5hZ2VyLmpzCmluZGV4IGYyMGU5NTk2MjA3
MWY4NzQ4YWRhNWU3ZDYxZGExNzZkYTE1MTgxZmYuLjVmNzMyMDdmYjBmZmFhMDkxYWQyZDE2YzZk
NDU2ZDRiMWIwNjg0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0lzc3VlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Jc3N1ZU1hbmFnZXIuanMKQEAgLTIzLDM1
ICsyMywyOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdl
Ykluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuSXNzdWVN
YW5hZ2VyID0gY2xhc3MgSXNzdWVNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAog
ewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1
YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2Fs
bCh0aGlzKTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNv
dXJjZURpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5BY3RpdmVMb2dDbGVhcmVk
LCB0aGlzLl9hY3RpdmVMb2dDbGVhcmVkLCB0aGlzKTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAg
eworICAgICAgICBzdXBlcigpOwogCi0gICAgdGhpcy5pbml0aWFsaXplKCk7Ci19OworICAgICAg
ICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUu
RXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2Us
IHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IubG9nTWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50LkFjdGl2ZUxvZ0NsZWFyZWQsIHRoaXMuX2Fj
dGl2ZUxvZ0NsZWFyZWQsIHRoaXMpOwogCi1XZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLkV2ZW50
ID0gewotICAgIElzc3VlV2FzQWRkZWQ6ICJpc3N1ZS1tYW5hZ2VyLWlzc3VlLXdhcy1hZGRlZCIs
Ci0gICAgQ2xlYXJlZDogImlzc3VlLW1hbmFnZXItY2xlYXJlZCIKLX07Ci0KLVdlYkluc3BlY3Rv
ci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0
b3IuSXNzdWVNYW5hZ2VyLAorICAgICAgICB0aGlzLmluaXRpYWxpemUoKTsKKyAgICB9CiAKICAg
ICAvLyBQdWJsaWMKIAotICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICBpbml0aWFsaXpl
KCkKICAgICB7CiAgICAgICAgIHRoaXMuX2lzc3VlcyA9IFtdOwogCiAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIuRXZlbnQuQ2xl
YXJlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpc3N1ZVdhc0FkZGVkOiBmdW5jdGlvbihzb3Vy
Y2UsIGxldmVsLCB0ZXh0LCB1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgcGFyYW1ldGVy
cykKKyAgICBpc3N1ZVdhc0FkZGVkKHNvdXJjZSwgbGV2ZWwsIHRleHQsIHVybCwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyLCBwYXJhbWV0ZXJzKQogICAgIHsKICAgICAgICAgdmFyIG1vZGlmaWVk
TGluZU51bWJlcjsKICAgICAgICAgaWYgKGxpbmVOdW1iZXIpIHsKQEAgLTYzLDkgKzU2LDkgQEAg
V2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2lz
c3Vlcy5wdXNoKGlzc3VlKTsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLkV2ZW50Lklzc3VlV2FzQWRkZWQsIHtpc3N1ZX0p
OwotICAgIH0sCisgICAgfQogCi0gICAgaXNzdWVzRm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291
cmNlQ29kZSkKKyAgICBpc3N1ZXNGb3JTb3VyY2VDb2RlKHNvdXJjZUNvZGUpCiAgICAgewogICAg
ICAgICB2YXIgaXNzdWVzID0gW107CiAKQEAgLTc3LDE2ICs3MCwxNiBAQCBXZWJJbnNwZWN0b3Iu
SXNzdWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBp
c3N1ZXM7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfYWN0aXZlTG9n
Q2xlYXJlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2FjdGl2ZUxvZ0NsZWFyZWQoZXZlbnQpCiAg
ICAgewogICAgICAgICB0aGlzLmluaXRpYWxpemUoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9t
YWluUmVzb3VyY2VEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VE
aWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJn
ZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWUpOwogCkBAIC05Nyw0ICs5MCw3IEBAIFdl
Ykluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYklu
c3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5P
YmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlci5FdmVudCA9IHsKKyAg
ICBJc3N1ZVdhc0FkZGVkOiAiaXNzdWUtbWFuYWdlci1pc3N1ZS13YXMtYWRkZWQiLAorICAgIENs
ZWFyZWQ6ICJpc3N1ZS1tYW5hZ2VyLWNsZWFyZWQiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdD
b250cm9sbGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzCmluZGV4IDkyNjgyN2YxNGI3N2Vk
YTk4ZGI2M2NkZDg5N2ZiYzhmNmRkMGRjMmEuLmU1YjQwNmViNDExMjJlYjY1YzFhMjM4OTYwNDZl
YWIyNmU4ZjU4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0TG9n
Vmlld0NvbnRyb2xsZXIuanMKQEAgLTIzLDY0ICsyMyw2MCBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0Nv
bnRyb2xsZXIgPSBmdW5jdGlvbihlbGVtZW50LCBzY3JvbGxFbGVtZW50LCB0ZXh0UHJvbXB0LCBk
ZWxlZ2F0ZSwgaGlzdG9yeVNldHRpbmdJZGVudGlmaWVyKQorV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRMb2dWaWV3Q29udHJvbGxlciA9IGNsYXNzIEphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciBl
eHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlz
IHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAg
ICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2Vy
dCh0ZXh0UHJvbXB0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVQcm9tcHQpOwotICAg
IGNvbnNvbGUuYXNzZXJ0KGhpc3RvcnlTZXR0aW5nSWRlbnRpZmllcik7CisgICAgY29uc3RydWN0
b3IoZWxlbWVudCwgc2Nyb2xsRWxlbWVudCwgdGV4dFByb21wdCwgZGVsZWdhdGUsIGhpc3RvcnlT
ZXR0aW5nSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9l
bGVtZW50ID0gZWxlbWVudDsKLSAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gc2Nyb2xsRWxlbWVu
dDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGV4dFByb21wdCBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Db25zb2xlUHJvbXB0KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoaGlzdG9yeVNldHRp
bmdJZGVudGlmaWVyKTsKIAotICAgIHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5nID0gbmV3IFdl
Ykluc3BlY3Rvci5TZXR0aW5nKGhpc3RvcnlTZXR0aW5nSWRlbnRpZmllciwgbnVsbCk7CisgICAg
ICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50OworICAgICAgICB0aGlzLl9zY3JvbGxFbGVtZW50
ID0gc2Nyb2xsRWxlbWVudDsKIAotICAgIHRoaXMuX3Byb21wdCA9IHRleHRQcm9tcHQ7Ci0gICAg
dGhpcy5fcHJvbXB0LmRlbGVnYXRlID0gdGhpczsKLSAgICB0aGlzLl9wcm9tcHQuaGlzdG9yeSA9
IHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5nLnZhbHVlOworICAgICAgICB0aGlzLl9wcm9tcHRI
aXN0b3J5U2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZyhoaXN0b3J5U2V0dGluZ0lk
ZW50aWZpZXIsIG51bGwpOwogCi0gICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgICAg
ICB0aGlzLl9wcm9tcHQgPSB0ZXh0UHJvbXB0OworICAgICAgICB0aGlzLl9wcm9tcHQuZGVsZWdh
dGUgPSB0aGlzOworICAgICAgICB0aGlzLl9wcm9tcHQuaGlzdG9yeSA9IHRoaXMuX3Byb21wdEhp
c3RvcnlTZXR0aW5nLnZhbHVlOwogCi0gICAgdGhpcy5fY2xlYXJlZCA9IHRydWU7Ci0gICAgdGhp
cy5fcHJldmlvdXNNZXNzYWdlID0gbnVsbDsKLSAgICB0aGlzLl9yZXBlYXRDb3VudFdhc0ludGVy
cnVwdGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIAotICAg
IHRoaXMuX3Nlc3Npb25zID0gW107CisgICAgICAgIHRoaXMuX2NsZWFyZWQgPSB0cnVlOworICAg
ICAgICB0aGlzLl9wcmV2aW91c01lc3NhZ2UgPSBudWxsOworICAgICAgICB0aGlzLl9yZXBlYXRD
b3VudFdhc0ludGVycnVwdGVkID0gZmFsc2U7CiAKLSAgICB0aGlzLm1lc3NhZ2VzQ2xlYXJLZXli
b2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsICJLIiwgdGhp
cy5faGFuZGxlQ2xlYXJTaG9ydGN1dC5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLm1lc3NhZ2VzQWx0
ZXJuYXRlQ2xlYXJLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNo
b3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbnRyb2wsICJM
IiwgdGhpcy5faGFuZGxlQ2xlYXJTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsK
KyAgICAgICAgdGhpcy5fc2Vzc2lvbnMgPSBbXTsKIAotICAgIHRoaXMuX21lc3NhZ2VzRmluZEtl
eWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkYiLCB0
aGlzLl9oYW5kbGVGaW5kU2hvcnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fZWxlbWVudCk7Ci0gICAg
dGhpcy5fbWVzc2FnZXNGaW5kTmV4dEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIu
Q29tbWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0LmJpbmQo
dGhpcyksIHRoaXMuX2VsZW1lbnQpOwotICAgIHRoaXMuX21lc3NhZ2VzRmluZFByZXZpb3VzS2V5
Ym9hcmRTaG9ydGN1dCA9IG5ldyBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuU2hpZnQsICJHIiwgdGhpcy5faGFuZGxl
RmluZFByZXZpb3VzU2hvcnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fZWxlbWVudCk7CisgICAgICAg
IHRoaXMubWVzc2FnZXNDbGVhcktleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29t
bWFuZE9yQ29udHJvbCwgIksiLCB0aGlzLl9oYW5kbGVDbGVhclNob3J0Y3V0LmJpbmQodGhpcykp
OworICAgICAgICB0aGlzLm1lc3NhZ2VzQWx0ZXJuYXRlQ2xlYXJLZXlib2FyZFNob3J0Y3V0ID0g
bmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNo
b3J0Y3V0Lk1vZGlmaWVyLkNvbnRyb2wsICJMIiwgdGhpcy5faGFuZGxlQ2xlYXJTaG9ydGN1dC5i
aW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKIAotICAgIHRoaXMuX3Byb21wdEFsdGVybmF0ZUNs
ZWFyS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db250cm9sLCAiTCIsIHRoaXMu
X2hhbmRsZUNsZWFyU2hvcnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fcHJvbXB0LmVsZW1lbnQpOwot
ICAgIHRoaXMuX3Byb21wdEZpbmRLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNv
bW1hbmRPckNvbnRyb2wsICJGIiwgdGhpcy5faGFuZGxlRmluZFNob3J0Y3V0LmJpbmQodGhpcyks
IHRoaXMuX3Byb21wdC5lbGVtZW50KTsKLSAgICB0aGlzLl9wcm9tcHRGaW5kTmV4dEtleWJvYXJk
U2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9o
YW5kbGVGaW5kTmV4dFNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsK
LSAgICB0aGlzLl9wcm9tcHRGaW5kUHJldmlvdXNLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllci5TaGlmdCwgIkciLCB0aGlzLl9oYW5kbGVGaW5kUHJldmlvdXNTaG9ydGN1dC5iaW5k
KHRoaXMpLCB0aGlzLl9wcm9tcHQuZWxlbWVudCk7CisgICAgICAgIHRoaXMuX21lc3NhZ2VzRmlu
ZEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkYi
LCB0aGlzLl9oYW5kbGVGaW5kU2hvcnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fZWxlbWVudCk7Cisg
ICAgICAgIHRoaXMuX21lc3NhZ2VzRmluZE5leHRLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1v
ZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsICJHIiwgdGhpcy5faGFuZGxlRmluZE5leHRTaG9ydGN1
dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKKyAgICAgICAgdGhpcy5fbWVzc2FnZXNGaW5k
UHJldmlvdXNLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRy
b2wgfCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkciLCB0
aGlzLl9oYW5kbGVGaW5kUHJldmlvdXNTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50
KTsKIAotICAgIHRoaXMuc3RhcnROZXdTZXNzaW9uKCk7Ci19OworICAgICAgICB0aGlzLl9wcm9t
cHRBbHRlcm5hdGVDbGVhcktleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29udHJv
bCwgIkwiLCB0aGlzLl9oYW5kbGVDbGVhclNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21w
dC5lbGVtZW50KTsKKyAgICAgICAgdGhpcy5fcHJvbXB0RmluZEtleWJvYXJkU2hvcnRjdXQgPSBu
ZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hv
cnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkYiLCB0aGlzLl9oYW5kbGVGaW5kU2hv
cnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fcHJvbXB0LmVsZW1lbnQpOworICAgICAgICB0aGlzLl9w
cm9tcHRGaW5kTmV4dEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9y
Q29udHJvbCwgIkciLCB0aGlzLl9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0LmJpbmQodGhpcyksIHRo
aXMuX3Byb21wdC5lbGVtZW50KTsKKyAgICAgICAgdGhpcy5fcHJvbXB0RmluZFByZXZpb3VzS2V5
Ym9hcmRTaG9ydGN1dCA9IG5ldyBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuU2hpZnQsICJHIiwgdGhpcy5faGFuZGxl
RmluZFByZXZpb3VzU2hvcnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fcHJvbXB0LmVsZW1lbnQpOwog
Ci1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLkNhY2hlZFByb3BlcnRp
ZXNEdXJhdGlvbiA9IDMwMDAwOwotCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250
cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRMb2dWaWV3Q29udHJvbGxlciwKKyAgICAgICAgdGhpcy5zdGFydE5ld1Nlc3Npb24oKTsK
KyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBwcm9tcHQoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX3Byb21wdDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBjdXJyZW50
Q29uc29sZUdyb3VwKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q29uc29s
ZUdyb3VwOwotICAgIH0sCisgICAgfQogCi0gICAgY2xlYXI6IGZ1bmN0aW9uKCkKKyAgICBjbGVh
cigpCiAgICAgewogICAgICAgICB0aGlzLl9jbGVhcmVkID0gdHJ1ZTsKIApAQCAtOTAsOSArODYs
OSBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9
IHsKIAogICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5kZWxlZ2F0ZS5k
aWRDbGVhck1lc3NhZ2VzID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgdGhpcy5kZWxlZ2F0
ZS5kaWRDbGVhck1lc3NhZ2VzKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzdGFydE5ld1Nlc3Np
b246IGZ1bmN0aW9uKGNsZWFyUHJldmlvdXNTZXNzaW9ucykKKyAgICBzdGFydE5ld1Nlc3Npb24o
Y2xlYXJQcmV2aW91c1Nlc3Npb25zKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25z
Lmxlbmd0aCAmJiBjbGVhclByZXZpb3VzU2Vzc2lvbnMpIHsKICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fc2Vzc2lvbnMubGVuZ3RoOyArK2kpCkBAIC0xMjIsOSArMTE4LDkg
QEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgc2Vzc2lvbiBpcyB2aXNpYmxlLgogICAg
ICAgICBjb25zb2xlU2Vzc2lvbi5lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBhcHBlbmRJbW1lZGlhdGVFeGVjdXRpb25XaXRoUmVzdWx0OiBmdW5jdGlvbih0
ZXh0LCByZXN1bHQpCisgICAgYXBwZW5kSW1tZWRpYXRlRXhlY3V0aW9uV2l0aFJlc3VsdCh0ZXh0
LCByZXN1bHQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChyZXN1bHQgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KTsKIApAQCAtMTM4LDkgKzEzNCw5IEBAIFdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAg
ICB9CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLnJ1bnRpbWVNYW5hZ2VyLnNhdmVSZXN1bHQocmVz
dWx0LCBzYXZlUmVzdWx0Q2FsbGJhY2suYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBhcHBlbmRDb25zb2xlTWVzc2FnZTogZnVuY3Rpb24oY29uc29sZU1lc3NhZ2UpCisgICAgYXBw
ZW5kQ29uc29sZU1lc3NhZ2UoY29uc29sZU1lc3NhZ2UpCiAgICAgewogICAgICAgICAvLyBDbG9u
ZSB0aGUgbWVzc2FnZSBzaW5jZSB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBjbGllbnRzIHVzaW5n
IHRoZSBtZXNzYWdlLAogICAgICAgICAvLyBhbmQgc2luY2UgdGhlIG1lc3NhZ2UgaGFzIGEgRE9N
IGVsZW1lbnQgaXQgY2FuJ3QgYmUgdHdvIHBsYWNlcyBhdCBvbmNlLgpAQCAtMTQ5LDkgKzE0NSw5
IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0g
ewogICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2FnZShtZXNzYWdlQ2xvbmUpOwogCiAg
ICAgICAgIHJldHVybiBtZXNzYWdlQ2xvbmU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB1cGRhdGVQ
cmV2aW91c01lc3NhZ2VSZXBlYXRDb3VudDogZnVuY3Rpb24oY291bnQpCisgICAgdXBkYXRlUHJl
dmlvdXNNZXNzYWdlUmVwZWF0Q291bnQoY291bnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLl9wcmV2aW91c01lc3NhZ2UpOwogICAgICAgICBpZiAoIXRoaXMuX3ByZXZpb3Vz
TWVzc2FnZSkKQEAgLTE3MiwxNSArMTY4LDE1IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9n
Vmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRD
b25zb2xlTWVzc2FnZShuZXdNZXNzYWdlKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0g
ICAgaXNTY3JvbGxlZFRvQm90dG9tOiBmdW5jdGlvbigpCisgICAgaXNTY3JvbGxlZFRvQm90dG9t
KCkKICAgICB7CiAgICAgICAgIC8vIExpZSBhYm91dCBiZWluZyBzY3JvbGxlZCB0byB0aGUgYm90
dG9tIGlmIHdlIGhhdmUgYSBwZW5kaW5nIHJlcXVlc3QgdG8gc2Nyb2xsIHRvIHRoZSBib3R0b20g
c29vbi4KICAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbFRvQm90dG9tVGltZW91dCB8fCB0aGlz
Ll9zY3JvbGxFbGVtZW50LmlzU2Nyb2xsZWRUb0JvdHRvbSgpOwotICAgIH0sCisgICAgfQogCi0g
ICAgc2Nyb2xsVG9Cb3R0b206IGZ1bmN0aW9uKCkKKyAgICBzY3JvbGxUb0JvdHRvbSgpCiAgICAg
ewogICAgICAgICBpZiAodGhpcy5fc2Nyb2xsVG9Cb3R0b21UaW1lb3V0KQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTk0LDE2ICsxOTAsMTYgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dW
aWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIERvbid0IHNjcm9sbCBpbW1l
ZGlhdGVseSBzbyB3ZSBhcmUgbm90IGNhdXNpbmcgZXhjZXNzaXZlIGxheW91dHMgd2hlbiB0aGVy
ZQogICAgICAgICAvLyBhcmUgbWFueSBtZXNzYWdlcyBiZWluZyBhZGRlZCBhdCBvbmNlLgogICAg
ICAgICB0aGlzLl9zY3JvbGxUb0JvdHRvbVRpbWVvdXQgPSBzZXRUaW1lb3V0KGRlbGF5ZWRXb3Jr
LmJpbmQodGhpcyksIDApOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAg
ICBjb25zb2xlUHJvbXB0SGlzdG9yeURpZENoYW5nZTogZnVuY3Rpb24ocHJvbXB0KQorICAgIGNv
bnNvbGVQcm9tcHRIaXN0b3J5RGlkQ2hhbmdlKHByb21wdCkKICAgICB7CiAgICAgICAgIHRoaXMu
X3Byb21wdEhpc3RvcnlTZXR0aW5nLnZhbHVlID0gdGhpcy5wcm9tcHQuaGlzdG9yeTsKLSAgICB9
LAorICAgIH0KIAotICAgIGNvbnNvbGVQcm9tcHRTaG91bGRDb21taXRUZXh0OiBmdW5jdGlvbihw
cm9tcHQsIHRleHQsIGN1cnNvcklzQXRMYXN0UG9zaXRpb24sIGhhbmRsZXIpCisgICAgY29uc29s
ZVByb21wdFNob3VsZENvbW1pdFRleHQocHJvbXB0LCB0ZXh0LCBjdXJzb3JJc0F0TGFzdFBvc2l0
aW9uLCBoYW5kbGVyKQogICAgIHsKICAgICAgICAgLy8gQWx3YXlzIGNvbW1pdCB0aGUgdGV4dCBp
ZiB3ZSBhcmUgbm90IGF0IHRoZSBsYXN0IHBvc2l0aW9uLgogICAgICAgICBpZiAoIWN1cnNvcklz
QXRMYXN0UG9zaXRpb24pIHsKQEAgLTIyMyw5ICsyMTksOSBAQCBXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAg
IFJ1bnRpbWVBZ2VudC5wYXJzZSh0ZXh0LCBwYXJzZUZpbmlzaGVkLmJpbmQodGhpcykpOwotICAg
IH0sCisgICAgfQogCi0gICAgY29uc29sZVByb21wdFRleHRDb21taXR0ZWQ6IGZ1bmN0aW9uKHBy
b21wdCwgdGV4dCkKKyAgICBjb25zb2xlUHJvbXB0VGV4dENvbW1pdHRlZChwcm9tcHQsIHRleHQp
CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0ZXh0KTsKIApAQCAtMjQzLDMxICsyMzks
MzEgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRleHQgKz0gIlxuLy8jIHNvdXJjZVVSTD1fX1dlYkluc3BlY3RvckNvbnNv
bGVfX1xuIjsKIAogICAgICAgICBXZWJJbnNwZWN0b3IucnVudGltZU1hbmFnZXIuZXZhbHVhdGVJ
bkluc3BlY3RlZFdpbmRvdyh0ZXh0LCAiY29uc29sZSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1
ZSwgdHJ1ZSwgcHJpbnRSZXN1bHQuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAv
LyBQcml2YXRlCiAKLSAgICBfaGFuZGxlQ2xlYXJTaG9ydGN1dDogZnVuY3Rpb24oKQorICAgIF9o
YW5kbGVDbGVhclNob3J0Y3V0KCkKICAgICB7CiAgICAgICAgIHRoaXMuY2xlYXIoKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9oYW5kbGVGaW5kU2hvcnRjdXQ6IGZ1bmN0aW9uKCkKKyAgICBfaGFu
ZGxlRmluZFNob3J0Y3V0KCkKICAgICB7CiAgICAgICAgIHRoaXMuZGVsZWdhdGUuZm9jdXNTZWFy
Y2hCYXIoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0OiBm
dW5jdGlvbigpCisgICAgX2hhbmRsZUZpbmROZXh0U2hvcnRjdXQoKQogICAgIHsKICAgICAgICAg
dGhpcy5kZWxlZ2F0ZS5oaWdobGlnaHROZXh0U2VhcmNoTWF0Y2goKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9oYW5kbGVGaW5kUHJldmlvdXNTaG9ydGN1dDogZnVuY3Rpb24oKQorICAgIF9oYW5k
bGVGaW5kUHJldmlvdXNTaG9ydGN1dCgpCiAgICAgewogICAgICAgICB0aGlzLmRlbGVnYXRlLmhp
Z2hsaWdodFByZXZpb3VzU2VhcmNoTWF0Y2goKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hcHBl
bmRDb25zb2xlTWVzc2FnZTogZnVuY3Rpb24obXNnLCByZXBlYXRDb3VudFdhc0ludGVycnVwdGVk
KQorICAgIF9hcHBlbmRDb25zb2xlTWVzc2FnZShtc2csIHJlcGVhdENvdW50V2FzSW50ZXJydXB0
ZWQpCiAgICAgewogICAgICAgICB2YXIgd2FzU2Nyb2xsZWRUb0JvdHRvbSA9IHRoaXMuaXNTY3Jv
bGxlZFRvQm90dG9tKCk7CiAKQEAgLTI5OSw0ICsyOTUsNCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9n
Vmlld0NvbnRyb2xsZXIuQ2FjaGVkUHJvcGVydGllc0R1cmF0aW9uID0gMzAwMDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZh
U2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblBy
b3ZpZGVyLmpzCmluZGV4IDdkNTExMmQzNjZkZWFhNTMyMzJkOGNjNzA1OGIwYzAwNjJmMDk2ZmEu
LjRiNmM0MzRjZjEzMGM3ODBiNzA0NmQwODAyZDQ1NDU5MmQwY2Y1ZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRS
dW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3Zp
ZGVyLmpzCkBAIC0yMywxOSArMjMsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92
aWRlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2Vi
SW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJ
bnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydCghV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLl9pbnN0YW5jZSk7Ci0K
LSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRo
aXMuX2NsZWFyTGFzdFByb3BlcnRpZXMsIHRoaXMpOwotfTsKLQogT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFdlYkluc3BlY3RvciwgImphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyIiwK
IHsKLSAgICBnZXQ6IGZ1bmN0aW9uKCkKKyAgICBnZXQoKQogICAgIHsKICAgICAgICAgaWYgKCFX
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuX2luc3RhbmNl
KQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblBy
b3ZpZGVyLl9pbnN0YW5jZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21w
bGV0aW9uUHJvdmlkZXI7CkBAIC00MywxMiArMzMsMjAgQEAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KFdlYkluc3BlY3RvciwgImphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyIiwKICAg
ICB9CiB9KTsKIAotV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3Zp
ZGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLAorV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRSdW50
aW1lQ29tcGxldGlvblByb3ZpZGVyID0gY2xhc3MgSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9u
UHJvdmlkZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Cit7CisgICAgY29uc3RydWN0b3Io
KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKworICAgICAgICBjb25zb2xlLmFzc2VydCghV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLl9pbnN0YW5jZSk7
CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hh
bmdlLCB0aGlzLl9jbGVhckxhc3RQcm9wZXJ0aWVzLCB0aGlzKTsKKyAgICB9CiAKICAgICAvLyBQ
cm90ZWN0ZWQKIAotICAgIGNvbXBsZXRpb25Db250cm9sbGVyQ29tcGxldGlvbnNOZWVkZWQ6IGZ1
bmN0aW9uKGNvbXBsZXRpb25Db250cm9sbGVyLCBkZWZhdWx0Q29tcGxldGlvbnMsIGJhc2UsIHBy
ZWZpeCwgc3VmZml4LCBmb3JjZWQpCisgICAgY29tcGxldGlvbkNvbnRyb2xsZXJDb21wbGV0aW9u
c05lZWRlZChjb21wbGV0aW9uQ29udHJvbGxlciwgZGVmYXVsdENvbXBsZXRpb25zLCBiYXNlLCBw
cmVmaXgsIHN1ZmZpeCwgZm9yY2VkKQogICAgIHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgbm9u
LWZvcmNlZCBlbXB0eSBwcmVmaXggY29tcGxldGlvbnMgdW5sZXNzIHRoZSBiYXNlIGlzIHRoYXQg
c3RhcnQgb2YgcHJvcGVydHkgYWNjZXNzLgogICAgICAgICBpZiAoIWZvcmNlZCAmJiAhcHJlZml4
ICYmICEvWy5bXSQvLnRlc3QoYmFzZSkpIHsKQEAgLTIzMSwxMSArMjI5LDExIEBAIFdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5wcm90b3R5cGUgPSB7CiAK
ICAgICAgICAgICAgIGNvbXBsZXRpb25Db250cm9sbGVyLnVwZGF0ZUNvbXBsZXRpb25zKGNvbXBs
ZXRpb25zLCBpbXBsaWNpdFN1ZmZpeCk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAogICAg
IC8vIFByaXZhdGUKIAotICAgIF9jbGVhckxhc3RQcm9wZXJ0aWVzOiBmdW5jdGlvbigpCisgICAg
X2NsZWFyTGFzdFByb3BlcnRpZXMoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2NsZWFyTGFz
dFByb3BlcnRpZXNUaW1lb3V0KSB7CiAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xl
YXJMYXN0UHJvcGVydGllc1RpbWVvdXQpOwpAQCAtMjQ3LDUgKzI0NSwzIEBAIFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX2xhc3RQcm9wZXJ0eU5hbWVzID0gbnVsbDsKICAgICB9CiB9OwotCi1XZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdl
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xh
eWVyVHJlZU1hbmFnZXIuanMKaW5kZXggMWIzODc0OTM3ZWUwYjgwODY3MzIwYzM1ZDZkZmNjOTY1
NzllMjA2NC4uZDZlNDRmY2RhOGE0MmQ4N2E5ZGUyNjA3OTg3NTA3NjI2NjdlYTVkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5
ZXJUcmVlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzCkBAIC0yMywzMSArMjMsMjYgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuTGF5
ZXJUcmVlTWFuYWdlciA9IGZ1bmN0aW9uKCkgewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMg
dG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAg
IC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX3N1cHBvcnRl
ZCA9ICEhd2luZG93LkxheWVyVHJlZUFnZW50OwotCi0gICAgaWYgKHRoaXMuX3N1cHBvcnRlZCkK
LSAgICAgICAgTGF5ZXJUcmVlQWdlbnQuZW5hYmxlKCk7Ci19OworV2ViSW5zcGVjdG9yLkxheWVy
VHJlZU1hbmFnZXIgPSBjbGFzcyBMYXllclRyZWVNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9y
Lk9iamVjdAoreworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAK
LVdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLkV2ZW50ID0gewotICAgIExheWVyVHJlZURp
ZENoYW5nZTogImxheWVyLXRyZWUtZGlkLWNoYW5nZSIKLX07CisgICAgICAgIHRoaXMuX3N1cHBv
cnRlZCA9ICEhd2luZG93LkxheWVyVHJlZUFnZW50OwogCi1XZWJJbnNwZWN0b3IuTGF5ZXJUcmVl
TWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5MYXll
clRyZWVNYW5hZ2VyLAorICAgICAgICBpZiAodGhpcy5fc3VwcG9ydGVkKQorICAgICAgICAgICAg
TGF5ZXJUcmVlQWdlbnQuZW5hYmxlKCk7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKICAgICBn
ZXQgc3VwcG9ydGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zdXBwb3J0ZWQ7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBsYXllclRyZWVNdXRhdGlvbnM6IGZ1bmN0aW9uKHByZXZpb3Vz
TGF5ZXJzLCBuZXdMYXllcnMpCisgICAgbGF5ZXJUcmVlTXV0YXRpb25zKHByZXZpb3VzTGF5ZXJz
LCBuZXdMYXllcnMpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnN1cHBvcnRl
ZCk7CiAKQEAgLTEyMSw5ICsxMTYsOSBAQCBXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiB7cHJlc2VydmVkLCBh
ZGRpdGlvbnMsIHJlbW92YWxzfTsKLSAgICB9LAorICAgIH0KIAotICAgIGxheWVyc0Zvck5vZGU6
IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKQorICAgIGxheWVyc0Zvck5vZGUobm9kZSwgY2FsbGJh
Y2spCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLnN1cHBvcnRlZCk7CiAKQEAg
LTEzNywyMSArMTMyLDIzIEBAIFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHZhciBsYXllckZvck5vZGUgPSBmaXJzdExheWVyLm5vZGVJZCA9
PT0gbm9kZS5pZCAmJiAhZmlyc3RMYXllci5pc0dlbmVyYXRlZENvbnRlbnQgPyBsYXllcnMuc2hp
ZnQoKSA6IG51bGw7CiAgICAgICAgICAgICBjYWxsYmFjayhsYXllckZvck5vZGUsIGxheWVycyk7
CiAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQogCi0gICAgcmVhc29uc0ZvckNvbXBvc2l0aW5n
TGF5ZXI6IGZ1bmN0aW9uKGxheWVyLCBjYWxsYmFjaykKKyAgICByZWFzb25zRm9yQ29tcG9zaXRp
bmdMYXllcihsYXllciwgY2FsbGJhY2spCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLnN1cHBvcnRlZCk7CiAKICAgICAgICAgTGF5ZXJUcmVlQWdlbnQucmVhc29uc0ZvckNvbXBv
c2l0aW5nTGF5ZXIobGF5ZXIubGF5ZXJJZCwgZnVuY3Rpb24oZXJyb3IsIHJlYXNvbnMpIHsKICAg
ICAgICAgICAgIGNhbGxiYWNrKGVycm9yID8gMCA6IHJlYXNvbnMpOwogICAgICAgICB9KTsKLSAg
ICB9LAorICAgIH0KIAotICAgIGxheWVyVHJlZURpZENoYW5nZTogZnVuY3Rpb24oKQorICAgIGxh
eWVyVHJlZURpZENoYW5nZSgpCiAgICAgewogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlci5FdmVudC5MYXllclRyZWVEaWRD
aGFuZ2UpOwogICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3Bl
Y3Rvci5MYXllclRyZWVNYW5hZ2VyLkV2ZW50ID0geworICAgIExheWVyVHJlZURpZENoYW5nZTog
ImxheWVyLXRyZWUtZGlkLWNoYW5nZSIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcwppbmRl
eCA0YWNkNWJhYjgxNjMyOWNkZTM5MjliYWIyMmY3OTFkNzkxNTZiZWEzLi5hNmFhYjllODNmMTNk
MDliMTE3NmNjZTcxNjI0ODliYTE0ZmVlNmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanMK
QEAgLTIzLDI4ICsyMywxOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLVdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyID0gZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9y
LkxvZ01hbmFnZXIgPSBjbGFzcyBMb2dNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVj
dAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0
IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5S
ZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7Ci19OwotCi1XZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5F
dmVudCA9IHsKLSAgICBTZXNzaW9uU3RhcnRlZDogImxvZy1tYW5hZ2VyLXNlc3Npb24td2FzLXN0
YXJ0ZWQiLAotICAgIENsZWFyZWQ6ICJsb2ctbWFuYWdlci1jbGVhcmVkIiwKLSAgICBNZXNzYWdl
QWRkZWQ6ICJsb2ctbWFuYWdlci1tZXNzYWdlLWFkZGVkIiwKLSAgICBBY3RpdmVMb2dDbGVhcmVk
OiAibG9nLW1hbmFnZXItY3VycmVudC1sb2ctY2xlYXJlZCIsCi0gICAgUHJldmlvdXNNZXNzYWdl
UmVwZWF0Q291bnRVcGRhdGVkOiAibG9nLW1hbmFnZXItcHJldmlvdXMtbWVzc2FnZS1yZXBlYXQt
Y291bnQtdXBkYXRlZCIKLX07CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIoKTsKIAotV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0
cnVjdG9yOiBXZWJJbnNwZWN0b3IuTG9nTWFuYWdlciwKKyAgICAgICAgV2ViSW5zcGVjdG9yLkZy
YW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJj
ZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICB9CiAK
ICAgICAvLyBQdWJsaWMKIAotICAgIG1lc3NhZ2VXYXNBZGRlZDogZnVuY3Rpb24oc291cmNlLCBs
ZXZlbCwgdGV4dCwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0
ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0SWQpCisgICAgbWVzc2FnZVdhc0FkZGVkKHNvdXJjZSwg
bGV2ZWwsIHRleHQsIHR5cGUsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1l
dGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdElkKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZy
b20gV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlci4KIApAQCAtNTQsOSArNDQsOSBAQCBXZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50Lk1lc3NhZ2VBZGRl
ZCwge21lc3NhZ2U6IGNvbnNvbGVNZXNzYWdlfSk7CiAKICAgICAgICAgY29uc29sZS5hc3NlcnQo
IWNvbnNvbGVNZXNzYWdlLl9lbGVtZW50IHx8ICFjb25zb2xlTWVzc2FnZS5fZWxlbWVudC5wYXJl
bnROb2RlLCAiVGhpcyBjb25zb2xlIG1lc3NhZ2Ugc2hvdWxkbid0IGJlIGFkZGVkIHRvIGEgdmll
dy4gVG8gYWRkIGl0IHlvdSBuZWVkIHRvIHVzZSBjbG9uZSgpLiIpOwotICAgIH0sCisgICAgfQog
Ci0gICAgbWVzc2FnZXNDbGVhcmVkOiBmdW5jdGlvbigpCisgICAgbWVzc2FnZXNDbGVhcmVkKCkK
ICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2
ZXIuCiAKQEAgLTcwLDIzICs2MCwyMyBAQCBXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuQWN0aXZlTG9nQ2xlYXJlZCk7CiAgICAgICAgICAg
ICBkZWxldGUgdGhpcy5fc2hvdWxkQ2xlYXJNZXNzYWdlczsKICAgICAgICAgfS5iaW5kKHRoaXMp
LCAwKTsKLSAgICB9LAorICAgIH0KIAotICAgIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQ6IGZ1
bmN0aW9uKGNvdW50KQorICAgIG1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQoY291bnQpCiAgICAg
ewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVyLgog
CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Mb2dN
YW5hZ2VyLkV2ZW50LlByZXZpb3VzTWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCwge2NvdW50fSk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXF1ZXN0Q2xlYXJNZXNzYWdlczogZnVuY3Rpb24oKQor
ICAgIHJlcXVlc3RDbGVhck1lc3NhZ2VzKCkKICAgICB7CiAgICAgICAgIENvbnNvbGVBZ2VudC5j
bGVhck1lc3NhZ2VzKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBf
bWFpblJlc291cmNlRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfbWFpblJlc291cmNl
RGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnQudGFy
Z2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lKTsKIApAQCAtMTA2LDQgKzk2LDEwIEBA
IFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudCA9IHsKKyAgICBT
ZXNzaW9uU3RhcnRlZDogImxvZy1tYW5hZ2VyLXNlc3Npb24td2FzLXN0YXJ0ZWQiLAorICAgIENs
ZWFyZWQ6ICJsb2ctbWFuYWdlci1jbGVhcmVkIiwKKyAgICBNZXNzYWdlQWRkZWQ6ICJsb2ctbWFu
YWdlci1tZXNzYWdlLWFkZGVkIiwKKyAgICBBY3RpdmVMb2dDbGVhcmVkOiAibG9nLW1hbmFnZXIt
Y3VycmVudC1sb2ctY2xlYXJlZCIsCisgICAgUHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnRVcGRh
dGVkOiAibG9nLW1hbmFnZXItcHJldmlvdXMtbWVzc2FnZS1yZXBlYXQtY291bnQtdXBkYXRlZCIK
K307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250
cm9sbGVycy9Qcm9iZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9Qcm9iZU1hbmFnZXIuanMKaW5kZXggMDA1ZGJkOGZjOWJhNzU1Mjg5
YzYzOTkwZjI3YWM5N2ZlOWM4NzYxNC4uZDVlNDNkMzE4ODZlNzc3M2ZkOTg2ZjdjNjI3OWE0OGI1
MzU0OTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvUHJvYmVNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1Byb2JlTWFuYWdlci5qcwpAQCAtMjQsNjEgKzI0LDUz
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIgPSBm
dW5jdGlvbigpCitXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyID0gY2xhc3MgUHJvYmVNYW5hZ2Vy
IGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRo
aXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgot
ICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIC8vIFVzZWQgdG8g
ZGV0ZWN0IGRlbGV0ZWQgcHJvYmUgYWN0aW9ucy4KLSAgICB0aGlzLl9rbm93blByb2JlSWRlbnRp
ZmllcnNGb3JCcmVha3BvaW50ID0gbmV3IE1hcDsKLQotICAgIC8vIE1haW4gbG9va3VwIHRhYmxl
cyBmb3IgcHJvYmVzIGFuZCBwcm9iZSBzZXRzLgotICAgIHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmll
ciA9IG5ldyBNYXA7Ci0gICAgdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50ID0gbmV3IE1hcDsK
KyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQs
IHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRSZW1vdmVkLCB0
aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BY3Rpb25z
RGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50QWN0aW9uc0NoYW5nZWQsIHRoaXMpOworICAgICAg
ICAvLyBVc2VkIHRvIGRldGVjdCBkZWxldGVkIHByb2JlIGFjdGlvbnMuCisgICAgICAgIHRoaXMu
X2tub3duUHJvYmVJZGVudGlmaWVyc0ZvckJyZWFrcG9pbnQgPSBuZXcgTWFwOwogCi0gICAgLy8g
U2F2ZWQgYnJlYWtwb2ludHMgc2hvdWxkIG5vdCBiZSByZXN0b3JlZCBvbiB0aGUgZmlyc3QgZXZl
bnQgbG9vcCB0dXJuLCBiZWNhdXNlIGl0Ci0gICAgLy8gbWFrZXMgbWFuYWdlciBpbml0aWFsaXph
dGlvbiBvcmRlciB2ZXJ5IGZyYWdpbGUuIE5vIGJyZWFrcG9pbnRzIHNob3VsZCBiZSBhdmFpbGFi
bGUuCi0gICAgY29uc29sZS5hc3NlcnQoIVdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYnJl
YWtwb2ludHMubGVuZ3RoLCAiTm8gYnJlYWtwb2ludHMgc2hvdWxkIGV4aXN0IGJlZm9yZSBhbGwg
dGhlIG1hbmFnZXJzIGFyZSBjb25zdHJ1Y3RlZC4iKTsKLX0KKyAgICAgICAgLy8gTWFpbiBsb29r
dXAgdGFibGVzIGZvciBwcm9iZXMgYW5kIHByb2JlIHNldHMuCisgICAgICAgIHRoaXMuX3Byb2Jl
c0J5SWRlbnRpZmllciA9IG5ldyBNYXA7CisgICAgICAgIHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtw
b2ludCA9IG5ldyBNYXA7CiAKLVdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIuRXZlbnQgPSB7Ci0g
ICAgUHJvYmVTZXRBZGRlZDogInByb2JlLW1hbmFnZXItcHJvYmUtc2V0LWFkZGVkIiwKLSAgICBQ
cm9iZVNldFJlbW92ZWQ6ICJwcm9iZS1tYW5hZ2VyLXByb2JlLXNldC1yZW1vdmVkIiwKLX07Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJl
YWtwb2ludEFkZGVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdl
ci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJl
YWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5FdmVudC5BY3Rpb25zRGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50QWN0aW9uc0No
YW5nZWQsIHRoaXMpOwogCi1XZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
LSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlciwKLSAgICBfX3Byb3Rv
X186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorICAgICAgICAvLyBTYXZlZCBicmVh
a3BvaW50cyBzaG91bGQgbm90IGJlIHJlc3RvcmVkIG9uIHRoZSBmaXJzdCBldmVudCBsb29wIHR1
cm4sIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gbWFrZXMgbWFuYWdlciBpbml0aWFsaXphdGlvbiBv
cmRlciB2ZXJ5IGZyYWdpbGUuIE5vIGJyZWFrcG9pbnRzIHNob3VsZCBiZSBhdmFpbGFibGUuCisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmJyZWFr
cG9pbnRzLmxlbmd0aCwgIk5vIGJyZWFrcG9pbnRzIHNob3VsZCBleGlzdCBiZWZvcmUgYWxsIHRo
ZSBtYW5hZ2VycyBhcmUgY29uc3RydWN0ZWQuIik7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAK
ICAgICBnZXQgcHJvYmVTZXRzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBbLi4udGhpcy5fcHJv
YmVTZXRzQnlCcmVha3BvaW50LnZhbHVlcygpXTsKLSAgICB9LAorICAgIH0KIAotICAgIHByb2Jl
Rm9ySWRlbnRpZmllcjogZnVuY3Rpb24oaWRlbnRpZmllcikKKyAgICBwcm9iZUZvcklkZW50aWZp
ZXIoaWRlbnRpZmllcikKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wcm9iZXNCeUlkZW50
aWZpZXIuZ2V0KGlkZW50aWZpZXIpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVk
IChjYWxsZWQgYnkgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIpCiAKLSAgICBkaWRTYW1w
bGVQcm9iZTogZnVuY3Rpb24oc2FtcGxlKQorICAgIGRpZFNhbXBsZVByb2JlKHNhbXBsZSkKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5oYXMo
c2FtcGxlLnByb2JlSWQpLCAiVW5rbm93biBwcm9iZSBpZGVudGlmaWVyIHNwZWNpZmllZCBmb3Ig
c2FtcGxlOiAiLCBzYW1wbGUpOwogICAgICAgICB2YXIgcHJvYmUgPSB0aGlzLl9wcm9iZXNCeUlk
ZW50aWZpZXIuZ2V0KHNhbXBsZS5wcm9iZUlkKTsKICAgICAgICAgdmFyIGVsYXBzZWRUaW1lID0g
V2ViSW5zcGVjdG9yLnRpbWVsaW5lTWFuYWdlci5jb21wdXRlRWxhcHNlZFRpbWUoc2FtcGxlLnRp
bWVzdGFtcCk7CiAgICAgICAgIHByb2JlLmFkZFNhbXBsZShuZXcgV2ViSW5zcGVjdG9yLlByb2Jl
U2FtcGxlKHNhbXBsZS5zYW1wbGVJZCwgc2FtcGxlLmJhdGNoSWQsIGVsYXBzZWRUaW1lLCBzYW1w
bGUucGF5bG9hZCkpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2Jy
ZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oYnJlYWtwb2ludE9yRXZlbnQpCisgICAgX2JyZWFrcG9p
bnRBZGRlZChicmVha3BvaW50T3JFdmVudCkKICAgICB7CiAgICAgICAgIHZhciBicmVha3BvaW50
OwogICAgICAgICBpZiAoYnJlYWtwb2ludE9yRXZlbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludCkKQEAgLTk0LDE4ICs4NiwxOCBAQCBXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fa25vd25Qcm9iZUlkZW50aWZpZXJzRm9yQnJl
YWtwb2ludC5zZXQoYnJlYWtwb2ludCwgbmV3IFNldCk7CiAKICAgICAgICAgdGhpcy5fYnJlYWtw
b2ludEFjdGlvbnNDaGFuZ2VkKGJyZWFrcG9pbnQpOwotICAgIH0sCisgICAgfQogCi0gICAgX2Jy
ZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfYnJlYWtwb2ludFJlbW92ZWQo
ZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGEuYnJlYWtw
b2ludDsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fa25vd25Qcm9iZUlkZW50aWZpZXJz
Rm9yQnJlYWtwb2ludC5oYXMoYnJlYWtwb2ludCkpOwogCiAgICAgICAgIHRoaXMuX2JyZWFrcG9p
bnRBY3Rpb25zQ2hhbmdlZChicmVha3BvaW50KTsKICAgICAgICAgdGhpcy5fa25vd25Qcm9iZUlk
ZW50aWZpZXJzRm9yQnJlYWtwb2ludC5kZWxldGUoYnJlYWtwb2ludCk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfYnJlYWtwb2ludEFjdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbihicmVha3BvaW50T3JF
dmVudCkKKyAgICBfYnJlYWtwb2ludEFjdGlvbnNDaGFuZ2VkKGJyZWFrcG9pbnRPckV2ZW50KQog
ICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQ7CiAgICAgICAgIGlmIChicmVha3BvaW50T3JF
dmVudCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50KQpAQCAtMTY0LDkgKzE1Niw5
IEBAIFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFn
ZXIuRXZlbnQuUHJvYmVTZXRSZW1vdmVkLCB7cHJvYmVTZXR9KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSwgdGhpcyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcHJvYmVTZXRGb3JCcmVha3Bv
aW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9wcm9iZVNldEZvckJyZWFrcG9pbnQoYnJl
YWtwb2ludCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9wcm9iZVNldHNCeUJyZWFrcG9pbnQu
aGFzKGJyZWFrcG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2JlU2V0c0J5QnJl
YWtwb2ludC5nZXQoYnJlYWtwb2ludCk7CkBAIC0xNzcsMyArMTY5LDggQEAgV2ViSW5zcGVjdG9y
LlByb2JlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBuZXdQcm9iZVNldDsK
ICAgICB9CiB9OworCitXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLkV2ZW50ID0geworICAgIFBy
b2JlU2V0QWRkZWQ6ICJwcm9iZS1tYW5hZ2VyLXByb2JlLXNldC1hZGRlZCIsCisgICAgUHJvYmVT
ZXRSZW1vdmVkOiAicHJvYmUtbWFuYWdlci1wcm9iZS1zZXQtcmVtb3ZlZCIsCit9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvUmVw
bGF5TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL1JlcGxheU1hbmFnZXIuanMKaW5kZXggNDgwNGFlMjIzMTk2OTAzMDRjOGNlYzJmMzRh
ZDczOTgxYjk3NzlkZS4uMWJiMGJhNTI4ZTI4MWVhMzcxNzExNzU0YzkyZmFmMTBkMjgzZGQ2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvUmVwbGF5TWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzCkBAIC0yNCw5OCArMjQsNTggQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlciA9IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyID0gY2xh
c3MgUmVwbGF5TWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBG
SVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5k
IGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0K
LSAgICB0aGlzLl9zZXNzaW9uU3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNz
aW9uU3RhdGUuSW5hY3RpdmU7Ci0gICAgdGhpcy5fc2VnbWVudFN0YXRlID0gV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlLlVubG9hZGVkOwotCi0gICAgdGhpcy5fYWN0aXZl
U2Vzc2lvbklkZW50aWZpZXIgPSBudWxsOwotICAgIHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlm
aWVyID0gbnVsbDsKLSAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSBuZXcgV2ViSW5zcGVjdG9y
LlJlcGxheVBvc2l0aW9uKDAsIDApOwotICAgIHRoaXMuX2luaXRpYWxpemVkID0gZmFsc2U7Ci0K
LSAgICAvLyBUaGVzZSBob2xkIGFjdHVhbCBpbnN0YW5jZXMgb2Ygc2Vzc2lvbnMgYW5kIHNlZ21l
bnRzLgotICAgIHRoaXMuX3Nlc3Npb25zID0gbmV3IE1hcDsKLSAgICB0aGlzLl9zZWdtZW50cyA9
IG5ldyBNYXA7Ci0gICAgLy8gVGhlc2UgaG9sZCBwcm9taXNlcyB0aGF0IHJlc29sdmUgd2hlbiB0
aGUgaW5zdGFuY2UgZGF0YSBpcyByZWNpZXZlZC4KLSAgICB0aGlzLl9zZXNzaW9uUHJvbWlzZXMg
PSBuZXcgTWFwOwotICAgIHRoaXMuX3NlZ21lbnRQcm9taXNlcyA9IG5ldyBNYXA7Ci0KLSAgICAv
LyBQbGF5YmFjayBzcGVlZCBpcyBzcGVjaWZpZWQgaW4gcmVwbGF5VG9Qb3NpdGlvbiBjb21tYW5k
cywgYW5kIHBlcnNpc3RzCi0gICAgLy8gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcGxheWJhY2sg
Y29tbWFuZCB1bnRpbCBhbm90aGVyIHBsYXliYWNrIGJlZ2lucy4KLSAgICB0aGlzLl9wbGF5YmFj
a1NwZWVkID0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuUGxheWJhY2tTcGVlZC5SZWFsVGlt
ZTsKLQotICAgIGlmICghd2luZG93LlJlcGxheUFnZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB2YXIgaW5zdGFuY2UgPSB0aGlzOwotCi0gICAgdGhpcy5faW5pdGlhbGl6YXRpb25Qcm9taXNl
ID0gUmVwbGF5QWdlbnQuY3VycmVudFJlcGxheVN0YXRlKCkKLSAgICAgICAgLnRoZW4oZnVuY3Rp
b24ocGF5bG9hZCkgewotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocGF5bG9hZC5zZXNzaW9u
U3RhdGUgaW4gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLCAiVW5rbm93
biBzZXNzaW9uIHN0YXRlOiAiICsgcGF5bG9hZC5zZXNzaW9uU3RhdGUpOwotICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQocGF5bG9hZC5zZWdtZW50U3RhdGUgaW4gV2ViSW5zcGVjdG9yLlJlcGxh
eU1hbmFnZXIuU2VnbWVudFN0YXRlLCAiVW5rbm93biBzZWdtZW50IHN0YXRlOiAiICsgcGF5bG9h
ZC5zZWdtZW50U3RhdGUpOwotCi0gICAgICAgICAgICBpbnN0YW5jZS5fYWN0aXZlU2Vzc2lvbklk
ZW50aWZpZXIgPSBwYXlsb2FkLnNlc3Npb25JZGVudGlmaWVyOwotICAgICAgICAgICAgaW5zdGFu
Y2UuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyID0gcGF5bG9hZC5zZWdtZW50SWRlbnRpZmllcjsK
LSAgICAgICAgICAgIGluc3RhbmNlLl9zZXNzaW9uU3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5TZXNzaW9uU3RhdGVbcGF5bG9hZC5zZXNzaW9uU3RhdGVdOwotICAgICAgICAgICAg
aW5zdGFuY2UuX3NlZ21lbnRTdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21l
bnRTdGF0ZVtwYXlsb2FkLnNlZ21lbnRTdGF0ZV07Ci0gICAgICAgICAgICBpbnN0YW5jZS5fY3Vy
cmVudFBvc2l0aW9uID0gcGF5bG9hZC5yZXBsYXlQb3NpdGlvbjsKLQotICAgICAgICAgICAgaW5z
dGFuY2UuX2luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIHJldHVybiBSZXBsYXlBZ2VudC5nZXRBdmFpbGFibGVTZXNzaW9ucygpOwot
ICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsKLSAgICAgICAgICAgIGZvciAodmFy
IHNlc3Npb25JZCBvZiBwYXlsb2FkLmlkcykKLSAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXNz
aW9uQ3JlYXRlZChzZXNzaW9uSWQpOwotICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikg
ewotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUmVwbGF5TWFuYWdlciBpbml0aWFsaXphdGlv
biBmYWlsZWQ6ICIsIGVycm9yKTsKLSAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICB9
KTsKLX07CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotV2Vi
SW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQgPSB7Ci0gICAgQ2FwdHVyZVN0YXJ0ZWQ6ICJy
ZXBsYXktbWFuYWdlci1jYXB0dXJlLXN0YXJ0ZWQiLAotICAgIENhcHR1cmVTdG9wcGVkOiAicmVw
bGF5LW1hbmFnZXItY2FwdHVyZS1zdG9wcGVkIiwKKyAgICAgICAgdGhpcy5fc2Vzc2lvblN0YXRl
ID0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLkluYWN0aXZlOworICAg
ICAgICB0aGlzLl9zZWdtZW50U3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdt
ZW50U3RhdGUuVW5sb2FkZWQ7CiAKLSAgICBQbGF5YmFja1N0YXJ0ZWQ6ICJyZXBsYXktbWFuYWdl
ci1wbGF5YmFjay1zdGFydGVkIiwKLSAgICBQbGF5YmFja1BhdXNlZDogInJlcGxheS1tYW5hZ2Vy
LXBsYXliYWNrLXBhdXNlZCIsCi0gICAgUGxheWJhY2tGaW5pc2hlZDogInJlcGxheS1tYW5hZ2Vy
LXBsYXliYWNrLWZpbmlzaGVkIiwKLSAgICBQbGF5YmFja1Bvc2l0aW9uQ2hhbmdlZDogInJlcGxh
eS1tYW5hZ2VyLXBsYXktYmFjay1wb3NpdGlvbi1jaGFuZ2VkIiwKKyAgICAgICAgdGhpcy5fYWN0
aXZlU2Vzc2lvbklkZW50aWZpZXIgPSBudWxsOworICAgICAgICB0aGlzLl9hY3RpdmVTZWdtZW50
SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgIHRoaXMuX2N1cnJlbnRQb3NpdGlvbiA9IG5ldyBX
ZWJJbnNwZWN0b3IuUmVwbGF5UG9zaXRpb24oMCwgMCk7CisgICAgICAgIHRoaXMuX2luaXRpYWxp
emVkID0gZmFsc2U7CiAKLSAgICBBY3RpdmVTZXNzaW9uQ2hhbmdlZDogInJlcGxheS1tYW5hZ2Vy
LWFjdGl2ZS1zZXNzaW9uLWNoYW5nZWQiLAotICAgIEFjdGl2ZVNlZ21lbnRDaGFuZ2VkOiAicmVw
bGF5LW1hbmFnZXItYWN0aXZlLXNlZ21lbnQtY2hhbmdlZCIsCisgICAgICAgIC8vIFRoZXNlIGhv
bGQgYWN0dWFsIGluc3RhbmNlcyBvZiBzZXNzaW9ucyBhbmQgc2VnbWVudHMuCisgICAgICAgIHRo
aXMuX3Nlc3Npb25zID0gbmV3IE1hcDsKKyAgICAgICAgdGhpcy5fc2VnbWVudHMgPSBuZXcgTWFw
OworICAgICAgICAvLyBUaGVzZSBob2xkIHByb21pc2VzIHRoYXQgcmVzb2x2ZSB3aGVuIHRoZSBp
bnN0YW5jZSBkYXRhIGlzIHJlY2lldmVkLgorICAgICAgICB0aGlzLl9zZXNzaW9uUHJvbWlzZXMg
PSBuZXcgTWFwOworICAgICAgICB0aGlzLl9zZWdtZW50UHJvbWlzZXMgPSBuZXcgTWFwOwogCi0g
ICAgU2Vzc2lvblNlZ21lbnRBZGRlZDogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc2VnbWVudC1h
ZGRlZCIsCi0gICAgU2Vzc2lvblNlZ21lbnRSZW1vdmVkOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lv
bi1zZWdtZW50LXJlbW92ZWQiLAorICAgICAgICAvLyBQbGF5YmFjayBzcGVlZCBpcyBzcGVjaWZp
ZWQgaW4gcmVwbGF5VG9Qb3NpdGlvbiBjb21tYW5kcywgYW5kIHBlcnNpc3RzCisgICAgICAgIC8v
IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBsYXliYWNrIGNvbW1hbmQgdW50aWwgYW5vdGhlciBw
bGF5YmFjayBiZWdpbnMuCisgICAgICAgIHRoaXMuX3BsYXliYWNrU3BlZWQgPSBXZWJJbnNwZWN0
b3IuUmVwbGF5TWFuYWdlci5QbGF5YmFja1NwZWVkLlJlYWxUaW1lOwogCi0gICAgU2Vzc2lvbkFk
ZGVkOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1hZGRlZCIsCi0gICAgU2Vzc2lvblJlbW92ZWQ6
ICJyZXBsYXktbWFuYWdlci1zZXNzaW9uLXJlbW92ZWQiLAotfTsKKyAgICAgICAgaWYgKCF3aW5k
b3cuUmVwbGF5QWdlbnQpCisgICAgICAgICAgICByZXR1cm47CiAKLVdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLlNlc3Npb25TdGF0ZSA9IHsKLSAgICBDYXB0dXJpbmc6ICJyZXBsYXktbWFuYWdl
ci1zZXNzaW9uLXN0YXRlLWNhcHR1cmluZyIsCi0gICAgSW5hY3RpdmU6ICJyZXBsYXktbWFuYWdl
ci1zZXNzaW9uLXN0YXRlLWluYWN0aXZlIiwKLSAgICBSZXBsYXlpbmc6ICJyZXBsYXktbWFuYWdl
ci1zZXNzaW9uLXN0YXRlLXJlcGxheWluZyIsCi19OworICAgICAgICB2YXIgaW5zdGFuY2UgPSB0
aGlzOwogCi1XZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUgPSB7Ci0gICAg
QXBwZW5kaW5nOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0ZS1hcHBlbmRpbmciLAotICAg
IFVubG9hZGVkOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0ZS11bmxvYWRlZCIsCi0gICAg
TG9hZGVkOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0ZS1sb2FkZWQiLAotICAgIERpc3Bh
dGNoaW5nOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0ZS1kaXNwYXRjaGluZyIsCi19Owor
ICAgICAgICB0aGlzLl9pbml0aWFsaXphdGlvblByb21pc2UgPSBSZXBsYXlBZ2VudC5jdXJyZW50
UmVwbGF5U3RhdGUoKQorICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocGF5bG9hZCkgeworICAg
ICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBheWxvYWQuc2Vzc2lvblN0YXRlIGluIFdlYklu
c3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZSwgIlVua25vd24gc2Vzc2lvbiBzdGF0
ZTogIiArIHBheWxvYWQuc2Vzc2lvblN0YXRlKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmFz
c2VydChwYXlsb2FkLnNlZ21lbnRTdGF0ZSBpbiBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5T
ZWdtZW50U3RhdGUsICJVbmtub3duIHNlZ21lbnQgc3RhdGU6ICIgKyBwYXlsb2FkLnNlZ21lbnRT
dGF0ZSk7CiAKLVdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlBsYXliYWNrU3BlZWQgPSB7Ci0g
ICAgUmVhbFRpbWU6ICJyZXBsYXktbWFuYWdlci1wbGF5YmFjay1zcGVlZC1yZWFsLXRpbWUiLAot
ICAgIEZhc3RGb3J3YXJkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stc3BlZWQtZmFzdC1mb3J3
YXJkIiwKLX07CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2FjdGl2ZVNlc3Npb25JZGVudGlm
aWVyID0gcGF5bG9hZC5zZXNzaW9uSWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICBpbnN0YW5j
ZS5fYWN0aXZlU2VnbWVudElkZW50aWZpZXIgPSBwYXlsb2FkLnNlZ21lbnRJZGVudGlmaWVyOwor
ICAgICAgICAgICAgICAgIGluc3RhbmNlLl9zZXNzaW9uU3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlci5TZXNzaW9uU3RhdGVbcGF5bG9hZC5zZXNzaW9uU3RhdGVdOworICAgICAgICAg
ICAgICAgIGluc3RhbmNlLl9zZWdtZW50U3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5TZWdtZW50U3RhdGVbcGF5bG9hZC5zZWdtZW50U3RhdGVdOworICAgICAgICAgICAgICAgIGlu
c3RhbmNlLl9jdXJyZW50UG9zaXRpb24gPSBwYXlsb2FkLnJlcGxheVBvc2l0aW9uOwogCi1XZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdl
Ykluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGUsCisgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2luaXRpYWxpemVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFJlcGxheUFnZW50LmdldEF2YWlsYWJsZVNlc3Npb25zKCk7CisgICAgICAgICAgICB9
KS50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBzZXNz
aW9uSWQgb2YgcGF5bG9hZC5pZHMpCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnNlc3Np
b25DcmVhdGVkKHNlc3Npb25JZCk7CisgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJv
cikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlJlcGxheU1hbmFnZXIgaW5pdGlh
bGl6YXRpb24gZmFpbGVkOiAiLCBlcnJvcik7CisgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7
CisgICAgICAgICAgICB9KTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIApAQCAtMTI1LDUyICs4
NSw1MiBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pbml0aWFsaXplZCk7CiAgICAgICAgIHJldHVy
biB0aGlzLl9zZXNzaW9uU3RhdGU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgc2VnbWVudFN0
YXRlKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX3NlZ21lbnRTdGF0ZTsKLSAgICB9LAorICAgIH0KIAogICAg
IGdldCBhY3RpdmVTZXNzaW9uSWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLl9pbml0aWFsaXplZCk7CiAgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVTZXNz
aW9uSWRlbnRpZmllcjsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBhY3RpdmVTZWdtZW50SWRl
bnRpZmllcigpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pbml0aWFsaXpl
ZCk7CiAgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVTZWdtZW50SWRlbnRpZmllcjsKLSAgICB9
LAorICAgIH0KIAogICAgIGdldCBwbGF5YmFja1NwZWVkKCkKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXli
YWNrU3BlZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgcGxheWJhY2tTcGVlZCh2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsKICAgICAg
ICAgdGhpcy5fcGxheWJhY2tTcGVlZCA9IHZhbHVlOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0
IGN1cnJlbnRQb3NpdGlvbigpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9p
bml0aWFsaXplZCk7CiAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UG9zaXRpb247Ci0gICAg
fSwKKyAgICB9CiAKICAgICAvLyBUaGVzZSByZXR1cm4gcHJvbWlzZXMgZXZlbiBpZiB0aGUgcmVs
ZXZhbnQgaW5zdGFuY2UgaXMgYWxyZWFkeSBjcmVhdGVkLgotICAgIHdhaXRVbnRpbEluaXRpYWxp
emVkOiBmdW5jdGlvbigpICAvLyAtLT4gKCkKKyAgICB3YWl0VW50aWxJbml0aWFsaXplZCgpICAv
LyAtLT4gKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9pbml0aWFsaXphdGlvblByb21p
c2U7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBSZXR1cm4gYSBwcm9taXNlIHRoYXQgcmVzb2x2
ZXMgdG8gYSBzZXNzaW9uLCBpZiBpdCBleGlzdHMuCi0gICAgZ2V0U2Vzc2lvbjogZnVuY3Rpb24o
c2Vzc2lvbklkKSAvLyAtLT4gKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uKQorICAgIGdldFNl
c3Npb24oc2Vzc2lvbklkKSAvLyAtLT4gKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uKQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25Qcm9taXNlcy5oYXMoc2Vzc2lvbklkKSkKICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uUHJvbWlzZXMuZ2V0KHNlc3Npb25JZCk7CkBA
IC0xODIsMTAgKzE0MiwxMCBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgdGhpcy5fc2Vzc2lvblByb21pc2VzLnNldChzZXNzaW9uSWQsIG5ld1By
b21pc2UpOwogICAgICAgICByZXR1cm4gbmV3UHJvbWlzZTsKLSAgICB9LAorICAgIH0KIAogICAg
IC8vIFJldHVybiBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHNlc3Npb24gc2VnbWVudCwg
aWYgaXQgZXhpc3RzLgotICAgIGdldFNlZ21lbnQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkgIC8vIC0t
PiAoV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb25TZWdtZW50KQorICAgIGdldFNlZ21lbnQoc2Vn
bWVudElkKSAgLy8gLS0+IChXZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lvblNlZ21lbnQpCiAgICAg
ewogICAgICAgICBpZiAodGhpcy5fc2VnbWVudFByb21pc2VzLmhhcyhzZWdtZW50SWQpKQogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3NlZ21lbnRQcm9taXNlcy5nZXQoc2VnbWVudElkKTsKQEAg
LTE5NywxMSArMTU3LDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKIAogICAgICAgICB0aGlzLl9zZWdtZW50UHJvbWlzZXMuc2V0KHNlZ21lbnRJZCwgbmV3UHJv
bWlzZSk7CiAgICAgICAgIHJldHVybiBuZXdQcm9taXNlOwotICAgIH0sCisgICAgfQogCiAgICAg
Ly8gU3dpdGNoIHRvIHRoZSBzcGVjaWZpZWQgc2Vzc2lvbi4KICAgICAvLyBSZXR1cm5zIGEgcHJv
bWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN3aXRjaCBjb21wbGV0ZXMuCi0gICAgc3dpdGNo
U2Vzc2lvbjogZnVuY3Rpb24oc2Vzc2lvbklkKSAvLyAtLT4gKCkKKyAgICBzd2l0Y2hTZXNzaW9u
KHNlc3Npb25JZCkgLy8gLS0+ICgpCiAgICAgewogICAgICAgICB2YXIgbWFuYWdlciA9IHRoaXM7
CiAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCk7CkBAIC0y
MzEsMTEgKzE5MSwxMSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCisgICAg
fQogCiAgICAgLy8gU3RhcnQgY2FwdHVyaW5nIGludG8gdGhlIGN1cnJlbnQgc2Vzc2lvbiBhcyBz
b29uIGFzIHBvc3NpYmxlLgogICAgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMg
d2hlbiBjYXB0dXJpbmcgYmVnaW5zLgotICAgIHN0YXJ0Q2FwdHVyaW5nOiBmdW5jdGlvbigpIC8v
IC0tPiAoKQorICAgIHN0YXJ0Q2FwdHVyaW5nKCkgLy8gLS0+ICgpCiAgICAgewogICAgICAgICB2
YXIgbWFuYWdlciA9IHRoaXM7CiAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLndhaXRVbnRpbElu
aXRpYWxpemVkKCk7CkBAIC0yNjIsMTEgKzIyMiwxMSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0sCisgICAgfQogCiAgICAgLy8gU3RvcCBjYXB0dXJpbmcgaW50byB0aGUgY3Vy
cmVudCBzZXNzaW9uIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICAgLy8gUmV0dXJucyBhIHByb21p
c2UgdGhhdCByZXNvbHZlcyB3aGVuIGNhcHR1cmluZyBlbmRzLgotICAgIHN0b3BDYXB0dXJpbmc6
IGZ1bmN0aW9uKCkgLy8gLS0+ICgpCisgICAgc3RvcENhcHR1cmluZygpIC8vIC0tPiAoKQogICAg
IHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5zZXNzaW9uU3RhdGUgPT09IFdlYkluc3Bl
Y3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5DYXB0dXJpbmcsICJDYW5ub3Qgc3RvcCBj
YXB0dXJpbmcgdW5sZXNzIGNhcHR1cmUgaXMgYWN0aXZlLiIpOwogICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLnNlZ21lbnRTdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vn
bWVudFN0YXRlLkFwcGVuZGluZyk7CkBAIC0yNzYsMTEgKzIzNiwxMSBAQCBXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cigiRmFpbGVkIHRvIHN0b3AgY2FwdHVyaW5nOiAiLCBlcnJvcik7CiAgICAgICAgICAgICAgICAg
dGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFBh
dXNlIHBsYXliYWNrIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICAgLy8gUmV0dXJucyBhIHByb21p
c2UgdGhhdCByZXNvbHZlcyB3aGVuIHBsYXliYWNrIGlzIHBhdXNlZC4KLSAgICBwYXVzZVBsYXli
YWNrOiBmdW5jdGlvbigpIC8vIC0tPiAoKQorICAgIHBhdXNlUGxheWJhY2soKSAvLyAtLT4gKCkK
ICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2Vzc2lvblN0YXRlICE9PSBXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUuQ2FwdHVyaW5nLCAiQ2Fubm90IHBh
dXNlIHBsYXliYWNrIHdoaWxlIGNhcHR1cmluZy4iKTsKIApAQCAtMzA0LDExICsyNjQsMTEgQEAg
V2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgfSk7
CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFBhdXNl
IHBsYXliYWNrIGFuZCB1bmxvYWQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBzZWdtZW50IGFzIHNvb24g
YXMgcG9zc2libGUuCiAgICAgLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVu
IHRoZSBjdXJyZW50IHNlZ21lbnQgaXMgdW5sb2FkZWQuCi0gICAgY2FuY2VsUGxheWJhY2s6IGZ1
bmN0aW9uKCkgLy8gLS0+ICgpCisgICAgY2FuY2VsUGxheWJhY2soKSAvLyAtLT4gKCkKICAgICB7
CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2Vzc2lvblN0YXRlICE9PSBXZWJJbnNwZWN0
b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUuQ2FwdHVyaW5nLCAiQ2Fubm90IHN0b3AgcGxh
eWJhY2sgd2hpbGUgY2FwdHVyaW5nLiIpOwogCkBAIC0zMjksMTEgKzI4OSwxMSBAQCBXZWJJbnNw
ZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUmVwbGF5IHRvIHRo
ZSBzcGVjaWZpZWQgcG9zaXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB1c2luZyB0aGUgY3VycmVu
dCByZXBsYXkgc3BlZWQuCiAgICAgLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3
aGVuIHJlcGxheSBoYXMgYmVndW4gKE5PVCB3aGVuIHRoZSBwb3NpdGlvbiBpcyByZWFjaGVkKS4K
LSAgICByZXBsYXlUb1Bvc2l0aW9uOiBmdW5jdGlvbihyZXBsYXlQb3NpdGlvbikgLy8gLS0+ICgp
CisgICAgcmVwbGF5VG9Qb3NpdGlvbihyZXBsYXlQb3NpdGlvbikgLy8gLS0+ICgpCiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydChyZXBsYXlQb3NpdGlvbiBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5SZXBsYXlQb3NpdGlvbiwgIkNhbm5vdCByZXBsYXkgdG8gYSBwb3NpdGlvbiB3aGlsZSBj
YXB0dXJpbmcuIik7CiAKQEAgLTM1OSwxMSArMzE5LDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBSZXBsYXkgdG8gdGhlIGVuZCBvZiB0aGUg
c2Vzc2lvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHVzaW5nIHRoZSBjdXJyZW50IHJlcGxheSBzcGVl
ZC4KICAgICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gcmVwbGF5IGhh
cyBiZWd1biAoTk9UIHdoZW4gdGhlIGVuZCBpcyByZWFjaGVkKS4KLSAgICByZXBsYXlUb0NvbXBs
ZXRpb246IGZ1bmN0aW9uKCkgLy8gLS0+ICgpCisgICAgcmVwbGF5VG9Db21wbGV0aW9uKCkgLy8g
LS0+ICgpCiAgICAgewogICAgICAgICB2YXIgbWFuYWdlciA9IHRoaXM7CiAgICAgICAgIHZhciBy
ZXN1bHQgPSB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCk7CkBAIC0zOTAsNyArMzUwLDcgQEAg
V2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgfSk7
CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByb3Rl
Y3RlZCAoY2FsbGVkIGJ5IFJlcGxheU9ic2VydmVyKQogCkBAIC0zOTgsNyArMzU4LDcgQEAgV2Vi
SW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIC8vIGJlaW5nIHByb3Bl
cmx5IGluaXRpYWxpemVkLiBTbywgZWFjaCBmdW5jdGlvbiBib2R5IGlzIHByZXBlbmRlZCB3aXRo
IGEgcmV0cnkgZ3VhcmQuCiAgICAgLy8gVGhpcyBtYWtlcyBjYWxsIHNpdGVzIHNpbXBsZXIgYW5k
IGF2b2lkcyBhbiBleHRyYSBldmVudCBsb29wIHR1cm4gaW4gdGhlIGNvbW1vbiBjYXNlLgogCi0g
ICAgY2FwdHVyZVN0YXJ0ZWQ6IGZ1bmN0aW9uKCkKKyAgICBjYXB0dXJlU3RhcnRlZCgpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKQogICAgICAgICAgICAgcmV0dXJuIHRo
aXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKS50aGVuKHRoaXMuY2FwdHVyZVN0YXJ0ZWQuYmluZCh0
aGlzKSk7CkBAIC00MDYsOSArMzY2LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9jaGFuZ2VTZXNzaW9uU3RhdGUoV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlLkNhcHR1cmluZyk7CiAKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQu
Q2FwdHVyZVN0YXJ0ZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgY2FwdHVyZVN0b3BwZWQ6IGZ1
bmN0aW9uKCkKKyAgICBjYXB0dXJlU3RvcHBlZCgpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMu
X2luaXRpYWxpemVkKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdFVudGlsSW5pdGlhbGl6
ZWQoKS50aGVuKHRoaXMuY2FwdHVyZVN0b3BwZWQuYmluZCh0aGlzKSk7CkBAIC00MjIsOSArMzgy
LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9
CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIuRXZlbnQuQ2FwdHVyZVN0b3BwZWQpOwotICAgIH0sCisgICAgfQogCi0gICAg
cGxheWJhY2tTdGFydGVkOiBmdW5jdGlvbigpCisgICAgcGxheWJhY2tTdGFydGVkKCkKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhp
cy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5wbGF5YmFja1N0YXJ0ZWQuYmluZCh0
aGlzKSk7CkBAIC00MzUsOSArMzk1LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9jaGFuZ2VTZWdtZW50U3RhdGUoV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlLkRpc3BhdGNoaW5nKTsKIAogICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVu
dC5QbGF5YmFja1N0YXJ0ZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgcGxheWJhY2tIaXRQb3Np
dGlvbjogZnVuY3Rpb24ocmVwbGF5UG9zaXRpb24sIHRpbWVzdGFtcCkKKyAgICBwbGF5YmFja0hp
dFBvc2l0aW9uKHJlcGxheVBvc2l0aW9uLCB0aW1lc3RhbXApCiAgICAgewogICAgICAgICBpZiAo
IXRoaXMuX2luaXRpYWxpemVkKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdFVudGlsSW5p
dGlhbGl6ZWQoKS50aGVuKHRoaXMucGxheWJhY2tIaXRQb3NpdGlvbi5iaW5kKHRoaXMsIHJlcGxh
eVBvc2l0aW9uLCB0aW1lc3RhbXApKTsKQEAgLTQ0OCw5ICs0MDgsOSBAQCBXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY3VycmVudFBvc2l0
aW9uID0gcmVwbGF5UG9zaXRpb247CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlBsYXliYWNrUG9zaXRpb25DaGFu
Z2VkKTsKLSAgICB9LAorICAgIH0KIAotICAgIHBsYXliYWNrUGF1c2VkOiBmdW5jdGlvbihwb3Np
dGlvbikKKyAgICBwbGF5YmFja1BhdXNlZChwb3NpdGlvbikKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0
aWFsaXplZCgpLnRoZW4odGhpcy5wbGF5YmFja1BhdXNlZC5iaW5kKHRoaXMsIHBvc2l0aW9uKSk7
CkBAIC00NjQsOSArNDI0LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBl
ID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuUGxheWJhY2tQYXVzZWQpOwotICAgIH0s
CisgICAgfQogCi0gICAgcGxheWJhY2tGaW5pc2hlZDogZnVuY3Rpb24oKQorICAgIHBsYXliYWNr
RmluaXNoZWQoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCkudGhlbih0aGlzLnBsYXli
YWNrRmluaXNoZWQuYmluZCh0aGlzKSk7CkBAIC00ODAsOSArNDQwLDkgQEAgV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQu
UGxheWJhY2tGaW5pc2hlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZXNzaW9uQ3JlYXRlZDog
ZnVuY3Rpb24oc2Vzc2lvbklkKQorICAgIHNlc3Npb25DcmVhdGVkKHNlc3Npb25JZCkKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhp
cy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5zZXNzaW9uQ3JlYXRlZC5iaW5kKHRo
aXMsIHNlc3Npb25JZCkpOwpAQCAtNDk4LDkgKzQ1OCw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNl
c3Npb25BZGRlZCwge3Nlc3Npb25JZH0pOwotICAgIH0sCisgICAgfQogCi0gICAgc2Vzc2lvbk1v
ZGlmaWVkOiBmdW5jdGlvbihzZXNzaW9uSWQpCisgICAgc2Vzc2lvbk1vZGlmaWVkKHNlc3Npb25J
ZCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5zZXNzaW9uTW9kaWZp
ZWQuYmluZCh0aGlzLCBzZXNzaW9uSWQpKTsKQEAgLTUwOCw5ICs0NjgsOSBAQCBXZWJJbnNwZWN0
b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZ2V0U2Vzc2lvbihz
ZXNzaW9uSWQpLnRoZW4oZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgICAgICAgc2Vzc2lvbi5z
ZWdtZW50c0NoYW5nZWQoKTsKICAgICAgICAgfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZXNz
aW9uUmVtb3ZlZDogZnVuY3Rpb24oc2Vzc2lvbklkKQorICAgIHNlc3Npb25SZW1vdmVkKHNlc3Np
b25JZCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAg
ICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5zZXNzaW9uUmVt
b3ZlZC5iaW5kKHRoaXMsIHNlc3Npb25JZCkpOwpAQCAtNTMxLDkgKzQ5MSw5IEBAIFdlYkluc3Bl
Y3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBjb25zb2xl
LmFzc2VydChyZW1vdmVkU2Vzc2lvbik7CiAgICAgICAgICAgICAgICAgbWFuYWdlci5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuU2Vzc2lv
blJlbW92ZWQsIHtyZW1vdmVkU2Vzc2lvbn0pOwogICAgICAgICAgICAgfSk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBzZWdtZW50Q3JlYXRlZDogZnVuY3Rpb24oc2VnbWVudElkKQorICAgIHNlZ21l
bnRDcmVhdGVkKHNlZ21lbnRJZCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6
ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4o
dGhpcy5zZWdtZW50Q3JlYXRlZC5iaW5kKHRoaXMsIHNlZ21lbnRJZCkpOwpAQCAtNTQ5LDkgKzUw
OSw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5fc2VnbWVudFByb21pc2VzLnNldChzZWdtZW50SWQsIFByb21pc2UucmVzb2x2ZShpbmNv
bXBsZXRlU2VnbWVudCkpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNlc3Npb25TZWdtZW50QWRkZWQsIHtz
ZWdtZW50SWRlbnRpZmllcjogc2VnbWVudElkfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZWdt
ZW50Q29tcGxldGVkOiBmdW5jdGlvbihzZWdtZW50SWQpCisgICAgc2VnbWVudENvbXBsZXRlZChz
ZWdtZW50SWQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKQogICAgICAg
ICAgICAgcmV0dXJuIHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKS50aGVuKHRoaXMuc2VnbWVu
dENvbXBsZXRlZC5iaW5kKHRoaXMsIHNlZ21lbnRJZCkpOwpAQCAtNTY4LDkgKzUyOCw5IEBAIFdl
Ykluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBj
b25zb2xlLmVycm9yKCJFcnJvciBvYnRhaW5pbmcgc2VnbWVudCBkYXRhOiAiLCBlcnJvcik7CiAg
ICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsKLSAgICB9LAorICAg
IH0KIAotICAgIHNlZ21lbnRSZW1vdmVkOiBmdW5jdGlvbihzZWdtZW50SWQpCisgICAgc2VnbWVu
dFJlbW92ZWQoc2VnbWVudElkKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXpl
ZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCkudGhlbih0
aGlzLnNlZ21lbnRSZW1vdmVkLmJpbmQodGhpcywgc2VnbWVudElkKSk7CkBAIC01OTIsOSArNTUy
LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlbW92ZWRTZWdtZW50KTsKICAgICAgICAgICAgICAgICBt
YW5hZ2VyLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5FdmVudC5TZXNzaW9uU2VnbWVudFJlbW92ZWQsIHtyZW1vdmVkU2VnbWVudH0pOwogICAgICAg
ICAgICAgfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZWdtZW50TG9hZGVkOiBmdW5jdGlvbihz
ZWdtZW50SWQpCisgICAgc2VnbWVudExvYWRlZChzZWdtZW50SWQpCiAgICAgewogICAgICAgICBp
ZiAoIXRoaXMuX2luaXRpYWxpemVkKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FpdFVudGls
SW5pdGlhbGl6ZWQoKS50aGVuKHRoaXMuc2VnbWVudExvYWRlZC5iaW5kKHRoaXMsIHNlZ21lbnRJ
ZCkpOwpAQCAtNjA3LDkgKzU2Nyw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdmFyIHByZXZpb3VzSWRlbnRpZmllciA9IHRoaXMuX2FjdGl2ZVNl
Z21lbnRJZGVudGlmaWVyOwogICAgICAgICB0aGlzLl9hY3RpdmVTZWdtZW50SWRlbnRpZmllciA9
IHNlZ21lbnRJZDsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuQWN0aXZlU2VnbWVudENoYW5nZWQsIHtwcmV2aW91
c1NlZ21lbnRJZGVudGlmaWVyOiBwcmV2aW91c0lkZW50aWZpZXJ9KTsKLSAgIH0sCisgICAgfQog
Ci0gICAgc2VnbWVudFVubG9hZGVkOiBmdW5jdGlvbigpCisgICAgc2VnbWVudFVubG9hZGVkKCkK
ICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1
cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5zZWdtZW50VW5sb2FkZWQu
YmluZCh0aGlzKSk7CkBAIC02MjAsMTEgKzU4MCwxMSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBwcmV2aW91c0lkZW50aWZpZXIgPSB0aGlz
Ll9hY3RpdmVTZWdtZW50SWRlbnRpZmllcjsKICAgICAgICAgdGhpcy5fYWN0aXZlU2VnbWVudElk
ZW50aWZpZXIgPSBudWxsOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5BY3RpdmVTZWdtZW50Q2hhbmdlZCwge3By
ZXZpb3VzU2VnbWVudElkZW50aWZpZXI6IHByZXZpb3VzSWRlbnRpZmllcn0pOwotICAgIH0sCisg
ICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2NoYW5nZVNlc3Npb25TdGF0ZTogZnVuY3Rp
b24obmV3U3RhdGUpCisgICAgX2NoYW5nZVNlc3Npb25TdGF0ZShuZXdTdGF0ZSkKICAgICB7CiAg
ICAgICAgIC8vIFdhcm4gYWJvdXQgbm8tb3Agc3RhdGUgY2hhbmdlcy4gV2Ugc2hvdWxkbid0IGJl
IHNlZWluZyB0aGVtLgogICAgICAgICB2YXIgaXNBbGxvd2VkID0gdGhpcy5fc2Vzc2lvblN0YXRl
ICE9PSBuZXdTdGF0ZTsKQEAgLTY0Miw5ICs2MDIsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGlzQWxsb3dlZCwgIklu
dmFsaWQgc2Vzc2lvbiBzdGF0ZSBjaGFuZ2U6ICIsIHRoaXMuX3Nlc3Npb25TdGF0ZSwgIiB0byAi
LCBuZXdTdGF0ZSk7CiAgICAgICAgIGlmIChpc0FsbG93ZWQpCiAgICAgICAgICAgICB0aGlzLl9z
ZXNzaW9uU3RhdGUgPSBuZXdTdGF0ZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jaGFuZ2VTZWdt
ZW50U3RhdGU6IGZ1bmN0aW9uKG5ld1N0YXRlKQorICAgIF9jaGFuZ2VTZWdtZW50U3RhdGUobmV3
U3RhdGUpCiAgICAgewogICAgICAgICAvLyBXYXJuIGFib3V0IG5vLW9wIHN0YXRlIGNoYW5nZXMu
IFdlIHNob3VsZG4ndCBiZSBzZWVpbmcgdGhlbS4KICAgICAgICAgdmFyIGlzQWxsb3dlZCA9IHRo
aXMuX3NlZ21lbnRTdGF0ZSAhPT0gbmV3U3RhdGU7CkBAIC02NjcsOSArNjI3LDkgQEAgV2ViSW5z
cGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBjb25zb2xlLmFzc2Vy
dChpc0FsbG93ZWQsICJJbnZhbGlkIHNlZ21lbnQgc3RhdGUgY2hhbmdlOiAiLCB0aGlzLl9zZWdt
ZW50U3RhdGUsICIgdG8gIiwgbmV3U3RhdGUpOwogICAgICAgICBpZiAoaXNBbGxvd2VkKQogICAg
ICAgICAgICAgdGhpcy5fc2VnbWVudFN0YXRlID0gbmV3U3RhdGU7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfc3VwcHJlc3NCcmVha3BvaW50c0FuZFJlc3VtZUlmTmVlZGVkOiBmdW5jdGlvbigpCisg
ICAgX3N1cHByZXNzQnJlYWtwb2ludHNBbmRSZXN1bWVJZk5lZWRlZCgpCiAgICAgewogICAgICAg
ICB2YXIgbWFuYWdlciA9IHRoaXM7CiAKQEAgLTY4MiwzICs2NDIsMzkgQEAgV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKK1dlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLkV2ZW50ID0geworICAgIENhcHR1cmVTdGFydGVkOiAicmVwbGF5LW1hbmFn
ZXItY2FwdHVyZS1zdGFydGVkIiwKKyAgICBDYXB0dXJlU3RvcHBlZDogInJlcGxheS1tYW5hZ2Vy
LWNhcHR1cmUtc3RvcHBlZCIsCisKKyAgICBQbGF5YmFja1N0YXJ0ZWQ6ICJyZXBsYXktbWFuYWdl
ci1wbGF5YmFjay1zdGFydGVkIiwKKyAgICBQbGF5YmFja1BhdXNlZDogInJlcGxheS1tYW5hZ2Vy
LXBsYXliYWNrLXBhdXNlZCIsCisgICAgUGxheWJhY2tGaW5pc2hlZDogInJlcGxheS1tYW5hZ2Vy
LXBsYXliYWNrLWZpbmlzaGVkIiwKKyAgICBQbGF5YmFja1Bvc2l0aW9uQ2hhbmdlZDogInJlcGxh
eS1tYW5hZ2VyLXBsYXktYmFjay1wb3NpdGlvbi1jaGFuZ2VkIiwKKworICAgIEFjdGl2ZVNlc3Np
b25DaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItYWN0aXZlLXNlc3Npb24tY2hhbmdlZCIsCisgICAg
QWN0aXZlU2VnbWVudENoYW5nZWQ6ICJyZXBsYXktbWFuYWdlci1hY3RpdmUtc2VnbWVudC1jaGFu
Z2VkIiwKKworICAgIFNlc3Npb25TZWdtZW50QWRkZWQ6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9u
LXNlZ21lbnQtYWRkZWQiLAorICAgIFNlc3Npb25TZWdtZW50UmVtb3ZlZDogInJlcGxheS1tYW5h
Z2VyLXNlc3Npb24tc2VnbWVudC1yZW1vdmVkIiwKKworICAgIFNlc3Npb25BZGRlZDogInJlcGxh
eS1tYW5hZ2VyLXNlc3Npb24tYWRkZWQiLAorICAgIFNlc3Npb25SZW1vdmVkOiAicmVwbGF5LW1h
bmFnZXItc2Vzc2lvbi1yZW1vdmVkIiwKK307CisKK1dlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2Vy
LlNlc3Npb25TdGF0ZSA9IHsKKyAgICBDYXB0dXJpbmc6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9u
LXN0YXRlLWNhcHR1cmluZyIsCisgICAgSW5hY3RpdmU6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9u
LXN0YXRlLWluYWN0aXZlIiwKKyAgICBSZXBsYXlpbmc6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9u
LXN0YXRlLXJlcGxheWluZyIsCit9OworCitXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdt
ZW50U3RhdGUgPSB7CisgICAgQXBwZW5kaW5nOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0
ZS1hcHBlbmRpbmciLAorICAgIFVubG9hZGVkOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0
ZS11bmxvYWRlZCIsCisgICAgTG9hZGVkOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0ZS1s
b2FkZWQiLAorICAgIERpc3BhdGNoaW5nOiAicmVwbGF5LW1hbmFnZXItc2VnbWVudC1zdGF0ZS1k
aXNwYXRjaGluZyIsCit9OworCitXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5QbGF5YmFja1Nw
ZWVkID0geworICAgIFJlYWxUaW1lOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stc3BlZWQtcmVh
bC10aW1lIiwKKyAgICBGYXN0Rm9yd2FyZDogInJlcGxheS1tYW5hZ2VyLXBsYXliYWNrLXNwZWVk
LWZhc3QtZm9yd2FyZCIsCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvUnVudGltZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcwppbmRl
eCBjOWIyMGM3N2M4M2RkNmM3NGFkYTcxYTExNjQwMDI0NzJhMzI5NWUxLi4wODIwMmE5ZjkzMjI0
ODdmMTAzMGZhMWM4MTRmYjE0ODkwZGU5YzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SdW50aW1lTWFu
YWdlci5qcwpAQCAtMjMsMjYgKzIzLDIwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyID0gZnVuY3Rpb24oKQor
V2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyID0gY2xhc3MgUnVudGltZU1hbmFnZXIgZXh0ZW5k
cyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBh
IFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8g
V2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgLy8gRW5hYmxlIHRoZSBSdW50
aW1lQWdlbnQgdG8gcmVjZWl2ZSBub3RpZmljYXRpb24gb2YgZXhlY3V0aW9uIGNvbnRleHRzLgot
ICAgIGlmIChSdW50aW1lQWdlbnQuZW5hYmxlKQotICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxl
KCk7Ci19OwotCi1XZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXIuRXZlbnQgPSB7Ci0gICAgRGlk
RXZhbHVhdGU6ICJydW50aW1lLW1hbmFnZXItZGlkLWV2YWx1YXRlIgotfTsKKyAgICBjb25zdHJ1
Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi1XZWJJbnNwZWN0b3IuUnVudGltZU1h
bmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuUnVudGlt
ZU1hbmFnZXIsCisgICAgICAgIC8vIEVuYWJsZSB0aGUgUnVudGltZUFnZW50IHRvIHJlY2VpdmUg
bm90aWZpY2F0aW9uIG9mIGV4ZWN1dGlvbiBjb250ZXh0cy4KKyAgICAgICAgaWYgKFJ1bnRpbWVB
Z2VudC5lbmFibGUpCisgICAgICAgICAgICBSdW50aW1lQWdlbnQuZW5hYmxlKCk7CisgICAgfQog
CiAgICAgLy8gUHVibGljCiAKLSAgICBldmFsdWF0ZUluSW5zcGVjdGVkV2luZG93OiBmdW5jdGlv
bihleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJl
dmlldywgc2F2ZVJlc3VsdCwgY2FsbGJhY2spCisgICAgZXZhbHVhdGVJbkluc3BlY3RlZFdpbmRv
dyhleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJl
dmlldywgc2F2ZVJlc3VsdCwgY2FsbGJhY2spCiAgICAgewogICAgICAgICBpZiAoIWV4cHJlc3Np
b24pIHsKICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGV4cHJlc3Npb24sIHNvIHRoZSBjb21w
bGV0aW9uIHNob3VsZCBoYXBwZW4gYWdhaW5zdCBnbG9iYWwgcHJvcGVydGllcy4KQEAgLTc4LDkg
KzcyLDkgQEAgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDgpOiAic2F2ZVJlc3VsdCIgZGlkIG5vdCBleGlzdC4K
ICAgICAgICAgdmFyIGNvbnRleHRJZCA9IFdlYkluc3BlY3Rvci5xdWlja0NvbnNvbGUuZXhlY3V0
aW9uQ29udGV4dElkZW50aWZpZXI7CiAgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZS5pbnZv
a2Uoe2V4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29udGV4dElkLCBmcmFtZUlkOiBjb250
ZXh0SWQsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdH0sIGV2YWxD
YWxsYmFjay5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIHNhdmVSZXN1bHQ6IGZ1
bmN0aW9uKHJlbW90ZU9iamVjdCwgY2FsbGJhY2spCisgICAgc2F2ZVJlc3VsdChyZW1vdGVPYmpl
Y3QsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQocmVtb3RlT2JqZWN0
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCk7CiAKQEAgLTk4LDkgKzkyLDkg
QEAgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IFJ1bnRpbWVBZ2VudC5zYXZlUmVzdWx0KHJlbW90ZU9iamVjdC5hc0NhbGxBcmd1bWVudCgpLCBt
eWNhbGxiYWNrKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUnVudGltZUFnZW50LnNhdmVS
ZXN1bHQocmVtb3RlT2JqZWN0LmFzQ2FsbEFyZ3VtZW50KCksIFdlYkluc3BlY3Rvci5xdWlja0Nv
bnNvbGUuZXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIsIG15Y2FsbGJhY2spOwotICAgIH0sCisg
ICAgfQogCi0gICAgZ2V0UHJvcGVydGllc0ZvclJlbW90ZU9iamVjdDogZnVuY3Rpb24ob2JqZWN0
SWQsIGNhbGxiYWNrKQorICAgIGdldFByb3BlcnRpZXNGb3JSZW1vdGVPYmplY3Qob2JqZWN0SWQs
IGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgUnVudGltZUFnZW50LmdldFByb3BlcnRpZXMob2Jq
ZWN0SWQsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHsKICAgICAgICAgICAgIGlmIChlcnJvcikg
ewpAQCAtMTE3LDQgKzExMSw2IEBAIFdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyLnByb3RvdHlw
ZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rv
ci5SdW50aW1lTWFuYWdlci5FdmVudCA9IHsKKyAgICBEaWRFdmFsdWF0ZTogInJ1bnRpbWUtbWFu
YWdlci1kaWQtZXZhbHVhdGUiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvU291cmNlTWFwTWFuYWdlci5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIu
anMKaW5kZXggY2FlZTc3N2VlMzllMzY1N2M4ZDQyYjlmYzliZjQzODUwZGM1OTM3Yi4uZDNjYTg0
MzQyOTE4NTRlNjhmZjAyMGFlZDlmZDE4OTkzOGM0YzA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvU291cmNlTWFwTWFuYWdlci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9T
b3VyY2VNYXBNYW5hZ2VyLmpzCkBAIC0yMywyOCArMjMsMjYgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlciA9
IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyID0gY2xhc3MgU291cmNl
TWFwTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTog
Q29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwg
c3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICB0
aGlzLl9zb3VyY2VNYXBVUkxNYXAgPSB7fTsKLSAgICB0aGlzLl9kb3dubG9hZGluZ1NvdXJjZU1h
cHMgPSB7fTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0g
ICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1l
LkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdl
LCB0aGlzKTsKLX07CisgICAgICAgIHRoaXMuX3NvdXJjZU1hcFVSTE1hcCA9IHt9OworICAgICAg
ICB0aGlzLl9kb3dubG9hZGluZ1NvdXJjZU1hcHMgPSB7fTsKIAotV2ViSW5zcGVjdG9yLlNvdXJj
ZU1hcE1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3Iu
U291cmNlTWFwTWFuYWdlciwKKyAgICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhp
cy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMK
IAotICAgIHNvdXJjZU1hcEZvclVSTDogZnVuY3Rpb24oc291cmNlTWFwVVJMKQorICAgIHNvdXJj
ZU1hcEZvclVSTChzb3VyY2VNYXBVUkwpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc291
cmNlTWFwVVJMTWFwW3NvdXJjZU1hcFVSTF07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBkb3dubG9h
ZFNvdXJjZU1hcDogZnVuY3Rpb24oc291cmNlTWFwVVJMLCBiYXNlVVJMLCBvcmlnaW5hbFNvdXJj
ZUNvZGUpCisgICAgZG93bmxvYWRTb3VyY2VNYXAoc291cmNlTWFwVVJMLCBiYXNlVVJMLCBvcmln
aW5hbFNvdXJjZUNvZGUpCiAgICAgewogICAgICAgICBzb3VyY2VNYXBVUkwgPSBhYnNvbHV0ZVVS
TChzb3VyY2VNYXBVUkwsIGJhc2VVUkwpOwogICAgICAgICBpZiAoIXNvdXJjZU1hcFVSTCkKQEAg
LTc1LDExICs3MywxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIH0KIAogICAgICAgICBsb2FkQW5kUGFyc2VTb3VyY2VNYXAuY2FsbCh0aGlz
KTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9sb2FkQW5kUGFyc2VT
b3VyY2VNYXA6IGZ1bmN0aW9uKHNvdXJjZU1hcFVSTCwgYmFzZVVSTCwgb3JpZ2luYWxTb3VyY2VD
b2RlKQorICAgIF9sb2FkQW5kUGFyc2VTb3VyY2VNYXAoc291cmNlTWFwVVJMLCBiYXNlVVJMLCBv
cmlnaW5hbFNvdXJjZUNvZGUpCiAgICAgewogICAgICAgICB0aGlzLl9kb3dubG9hZGluZ1NvdXJj
ZU1hcHNbc291cmNlTWFwVVJMXSA9IHRydWU7CiAKQEAgLTExOSwxNCArMTE3LDE0IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAoTmV0
d29ya0FnZW50LmxvYWRSZXNvdXJjZSkKICAgICAgICAgICAgIE5ldHdvcmtBZ2VudC5sb2FkUmVz
b3VyY2UoZnJhbWVJZGVudGlmaWVyLCBzb3VyY2VNYXBVUkwsIHNvdXJjZU1hcExvYWRlZC5iaW5k
KHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9sb2FkQW5kUGFyc2VGYWlsZWQ6IGZ1bmN0
aW9uKHNvdXJjZU1hcFVSTCkKKyAgICBfbG9hZEFuZFBhcnNlRmFpbGVkKHNvdXJjZU1hcFVSTCkK
ICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9kb3dubG9hZGluZ1NvdXJjZU1hcHNbc291cmNl
TWFwVVJMXTsKLSAgICB9LAorICAgIH0KIAotICAgIF9sb2FkQW5kUGFyc2VTdWNjZWVkZWQ6IGZ1
bmN0aW9uKHNvdXJjZU1hcFVSTCwgc291cmNlTWFwKQorICAgIF9sb2FkQW5kUGFyc2VTdWNjZWVk
ZWQoc291cmNlTWFwVVJMLCBzb3VyY2VNYXApCiAgICAgewogICAgICAgICBpZiAoIShzb3VyY2VN
YXBVUkwgaW4gdGhpcy5fZG93bmxvYWRpbmdTb3VyY2VNYXBzKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTE1Miw5ICsxNTAsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAocmVzb3VyY2UpCiAgICAgICAgICAgICAgICAgcmVz
b3VyY2UuYWRkU291cmNlTWFwKHNvdXJjZU1hcCk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0K
IAotICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWlu
UmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIWV2ZW50LnRhcmdl
dC5pc01haW5GcmFtZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTYzLDUgKzE2MSwzIEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fZG93bmxvYWRpbmdTb3VyY2VNYXBzID0ge307CiAgICAgfQogfTsKLQotV2ViSW5zcGVjdG9y
LlNvdXJjZU1hcE1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmpl
Y3QucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvU3RvcmFnZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9TdG9yYWdlTWFuYWdlci5qcwppbmRleCBhNThh
Y2MwZDE0Zjg0Zjc0Nzg4N2FjYmU1OTNkZTE4MDY5MGFhZDFiLi5jNGZiNDhlMjA4YTQ0MDFkYWQ5
MDMwZmIzMzRlMjI5YmNmMjQ5N2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9TdG9yYWdlTWFuYWdlci5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9TdG9yYWdlTWFuYWdlci5q
cwpAQCAtMjQsMTE3ICsyNCwxMDQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi1XZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJ
bnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIgPSBjbGFzcyBTdG9yYWdlTWFuYWdlciBleHRlbmRzIFdl
Ykluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2Vi
SW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJ
bnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBpZiAod2luZG93LkRPTVN0b3JhZ2VB
Z2VudCkKLSAgICAgICAgRE9NU3RvcmFnZUFnZW50LmVuYWJsZSgpOwotICAgIGlmICh3aW5kb3cu
RGF0YWJhc2VBZ2VudCkKLSAgICAgICAgRGF0YWJhc2VBZ2VudC5lbmFibGUoKTsKLSAgICBpZiAo
d2luZG93LkluZGV4ZWREQkFnZW50KQotICAgICAgICBJbmRleGVkREJBZ2VudC5lbmFibGUoKTsK
LQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5G
cmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENo
YW5nZSwgdGhpcyk7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsK
IAotICAgIFdlYkluc3BlY3Rvci5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLk5vdGlmaWNhdGlvbi5FeHRyYURvbWFpbnNBY3RpdmF0ZWQsIHRoaXMuX2V4dHJhRG9t
YWluc0FjdGl2YXRlZCwgdGhpcyk7CisgICAgICAgIGlmICh3aW5kb3cuRE9NU3RvcmFnZUFnZW50
KQorICAgICAgICAgICAgRE9NU3RvcmFnZUFnZW50LmVuYWJsZSgpOworICAgICAgICBpZiAod2lu
ZG93LkRhdGFiYXNlQWdlbnQpCisgICAgICAgICAgICBEYXRhYmFzZUFnZW50LmVuYWJsZSgpOwor
ICAgICAgICBpZiAod2luZG93LkluZGV4ZWREQkFnZW50KQorICAgICAgICAgICAgSW5kZXhlZERC
QWdlbnQuZW5hYmxlKCk7CiAKLSAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgNik6IERPTVN0b3Jh
Z2Ugd2FzIGRpc2NvdmVyZWQgdmlhIGEgRE9NU3RvcmFnZU9ic2VydmVyIGV2ZW50LiBOb3cgRE9N
IFN0b3JhZ2UKLSAgICAvLyBpcyBhZGRlZCB3aGVuZXZlciBhIG5ldyBzZWN1cml0eU9yaWdpbiBp
cyBkaXNjb3ZlcmVkLiBDaGVjayBmb3IgRE9NU3RvcmFnZUFnZW50LmdldERPTVN0b3JhZ2VJdGVt
cywKLSAgICAvLyB3aGljaCB3YXMgcmVuYW1lZCBhdCB0aGUgc2FtZSB0aW1lIHRoZSBjaGFuZ2Ug
dG8gc3RhcnQgdXNpbmcgc2VjdXJpdHlPcmlnaW4gd2FzIG1hZGUuCi0gICAgaWYgKHdpbmRvdy5E
T01TdG9yYWdlQWdlbnQgJiYgRE9NU3RvcmFnZUFnZW50LmdldERPTVN0b3JhZ2VJdGVtcykKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZy
YW1lLkV2ZW50LlNlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlLCB0aGlzLl9zZWN1cml0eU9yaWdpbkRp
ZENoYW5nZSwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMu
X21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CiAKLSAgICB0aGlzLmluaXRpYWxpemUoKTsK
LX07CisgICAgICAgIFdlYkluc3BlY3Rvci5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLk5vdGlmaWNhdGlvbi5FeHRyYURvbWFpbnNBY3RpdmF0ZWQsIHRoaXMuX2V4
dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcyk7CiAKLVdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdl
ci5FdmVudCA9IHsKLSAgICBDb29raWVTdG9yYWdlT2JqZWN0V2FzQWRkZWQ6ICJzdG9yYWdlLW1h
bmFnZXItY29va2llLXN0b3JhZ2Utb2JqZWN0LXdhcy1hZGRlZCIsCi0gICAgRE9NU3RvcmFnZU9i
amVjdFdhc0FkZGVkOiAic3RvcmFnZS1tYW5hZ2VyLWRvbS1zdG9yYWdlLW9iamVjdC13YXMtYWRk
ZWQiLAotICAgIERPTVN0b3JhZ2VPYmplY3RXYXNJbnNwZWN0ZWQ6ICJzdG9yYWdlLWRvbS1vYmpl
Y3Qtd2FzLWluc3BlY3RlZCIsCi0gICAgRGF0YWJhc2VXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdl
ci1kYXRhYmFzZS13YXMtYWRkZWQiLAotICAgIERhdGFiYXNlV2FzSW5zcGVjdGVkOiAic3RvcmFn
ZS1vYmplY3Qtd2FzLWluc3BlY3RlZCIsCi0gICAgSW5kZXhlZERhdGFiYXNlV2FzQWRkZWQ6ICJz
dG9yYWdlLW1hbmFnZXItaW5kZXhlZC1kYXRhYmFzZS13YXMtYWRkZWQiLAotICAgIENsZWFyZWQ6
ICJzdG9yYWdlLW1hbmFnZXItY2xlYXJlZCIKLX07CisgICAgICAgIC8vIENPTVBBVElCSUxJVFkg
KGlPUyA2KTogRE9NU3RvcmFnZSB3YXMgZGlzY292ZXJlZCB2aWEgYSBET01TdG9yYWdlT2JzZXJ2
ZXIgZXZlbnQuIE5vdyBET00gU3RvcmFnZQorICAgICAgICAvLyBpcyBhZGRlZCB3aGVuZXZlciBh
IG5ldyBzZWN1cml0eU9yaWdpbiBpcyBkaXNjb3ZlcmVkLiBDaGVjayBmb3IgRE9NU3RvcmFnZUFn
ZW50LmdldERPTVN0b3JhZ2VJdGVtcywKKyAgICAgICAgLy8gd2hpY2ggd2FzIHJlbmFtZWQgYXQg
dGhlIHNhbWUgdGltZSB0aGUgY2hhbmdlIHRvIHN0YXJ0IHVzaW5nIHNlY3VyaXR5T3JpZ2luIHdh
cyBtYWRlLgorICAgICAgICBpZiAod2luZG93LkRPTVN0b3JhZ2VBZ2VudCAmJiBET01TdG9yYWdl
QWdlbnQuZ2V0RE9NU3RvcmFnZUl0ZW1zKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkZyYW1l
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LlNlY3VyaXR5T3JpZ2lu
RGlkQ2hhbmdlLCB0aGlzLl9zZWN1cml0eU9yaWdpbkRpZENoYW5nZSwgdGhpcyk7CiAKLVdlYklu
c3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdl
Ykluc3BlY3Rvci5TdG9yYWdlTWFuYWdlciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5P
YmplY3QucHJvdG90eXBlLAorICAgICAgICB0aGlzLmluaXRpYWxpemUoKTsKKyAgICB9CiAKICAg
ICAvLyBQdWJsaWMKIAotICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICBpbml0aWFsaXpl
KCkKICAgICB7CiAgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2VPYmplY3RzID0gW107CiAgICAgICAg
IHRoaXMuX2RhdGFiYXNlT2JqZWN0cyA9IFtdOwogICAgICAgICB0aGlzLl9pbmRleGVkRGF0YWJh
c2VzID0gW107CiAgICAgICAgIHRoaXMuX2Nvb2tpZVN0b3JhZ2VPYmplY3RzID0ge307Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBkb21TdG9yYWdlV2FzQWRkZWQ6IGZ1bmN0aW9uKGlkLCBob3N0LCBp
c0xvY2FsU3RvcmFnZSkKKyAgICBkb21TdG9yYWdlV2FzQWRkZWQoaWQsIGhvc3QsIGlzTG9jYWxT
dG9yYWdlKQogICAgIHsKICAgICAgICAgdmFyIGRvbVN0b3JhZ2UgPSBuZXcgV2ViSW5zcGVjdG9y
LkRPTVN0b3JhZ2VPYmplY3QoaWQsIGhvc3QsIGlzTG9jYWxTdG9yYWdlKTsKIAogICAgICAgICB0
aGlzLl9kb21TdG9yYWdlT2JqZWN0cy5wdXNoKGRvbVN0b3JhZ2UpOwogICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIuRXZlbnQu
RE9NU3RvcmFnZU9iamVjdFdhc0FkZGVkLCB7ZG9tU3RvcmFnZX0pOwotICAgIH0sCisgICAgfQog
Ci0gICAgZGF0YWJhc2VXYXNBZGRlZDogZnVuY3Rpb24oaWQsIGhvc3QsIG5hbWUsIHZlcnNpb24p
CisgICAgZGF0YWJhc2VXYXNBZGRlZChpZCwgaG9zdCwgbmFtZSwgdmVyc2lvbikKICAgICB7CiAg
ICAgICAgIHZhciBkYXRhYmFzZSA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YWJhc2VPYmplY3QoaWQs
IGhvc3QsIG5hbWUsIHZlcnNpb24pOwogCiAgICAgICAgIHRoaXMuX2RhdGFiYXNlT2JqZWN0cy5w
dXNoKGRhdGFiYXNlKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLkV2ZW50LkRhdGFiYXNlV2FzQWRkZWQsIHtkYXRhYmFz
ZX0pOwotICAgIH0sCisgICAgfQogCi0gICAgZG9tU3RvcmFnZVdhc1VwZGF0ZWQ6IGZ1bmN0aW9u
KGlkKQorICAgIGRvbVN0b3JhZ2VXYXNVcGRhdGVkKGlkKQogICAgIHsKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLkV2ZW50
LkRPTVN0b3JhZ2VXYXNVcGRhdGVkLCBpZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpdGVtc0Ns
ZWFyZWQ6IGZ1bmN0aW9uKHN0b3JhZ2VJZCkKKyAgICBpdGVtc0NsZWFyZWQoc3RvcmFnZUlkKQog
ICAgIHsKICAgICAgICAgdGhpcy5fZG9tU3RvcmFnZUZvcklkZW50aWZpZXIoc3RvcmFnZUlkKS5p
dGVtc0NsZWFyZWQoc3RvcmFnZUlkKTsKLSAgICB9LAorICAgIH0KIAotICAgIGl0ZW1SZW1vdmVk
OiBmdW5jdGlvbihzdG9yYWdlSWQsIGtleSkKKyAgICBpdGVtUmVtb3ZlZChzdG9yYWdlSWQsIGtl
eSkKICAgICB7CiAgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2VGb3JJZGVudGlmaWVyKHN0b3JhZ2VJ
ZCkuaXRlbVJlbW92ZWQoa2V5KTsKLSAgICB9LAorICAgIH0KIAotICAgIGl0ZW1BZGRlZDogZnVu
Y3Rpb24oc3RvcmFnZUlkLCBrZXksIHZhbHVlKQorICAgIGl0ZW1BZGRlZChzdG9yYWdlSWQsIGtl
eSwgdmFsdWUpCiAgICAgewogICAgICAgICB0aGlzLl9kb21TdG9yYWdlRm9ySWRlbnRpZmllcihz
dG9yYWdlSWQpLml0ZW1BZGRlZChrZXksIHZhbHVlKTsKLSAgICB9LAorICAgIH0KIAotICAgIGl0
ZW1VcGRhdGVkOiBmdW5jdGlvbihzdG9yYWdlSWQsIGtleSwgb2xkVmFsdWUsIHZhbHVlKQorICAg
IGl0ZW1VcGRhdGVkKHN0b3JhZ2VJZCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUpCiAgICAgewogICAg
ICAgICB0aGlzLl9kb21TdG9yYWdlRm9ySWRlbnRpZmllcihzdG9yYWdlSWQpLml0ZW1VcGRhdGVk
KGtleSwgb2xkVmFsdWUsIHZhbHVlKTsKLSAgICB9LAorICAgIH0KIAotICAgIGluc3BlY3REYXRh
YmFzZTogZnVuY3Rpb24oaWQpCisgICAgaW5zcGVjdERhdGFiYXNlKGlkKQogICAgIHsKICAgICAg
ICAgdmFyIGRhdGFiYXNlID0gdGhpcy5fZGF0YWJhc2VGb3JJZGVudGlmaWVyKGlkKTsKICAgICAg
ICAgY29uc29sZS5hc3NlcnQoZGF0YWJhc2UpOwogICAgICAgICBpZiAoIWRhdGFiYXNlKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIuRXZlbnQuRGF0YWJhc2VXYXNJbnNwZWN0ZWQsIHtk
YXRhYmFzZX0pOwotICAgIH0sCisgICAgfQogCi0gICAgaW5zcGVjdERPTVN0b3JhZ2U6IGZ1bmN0
aW9uKGlkKQorICAgIGluc3BlY3RET01TdG9yYWdlKGlkKQogICAgIHsKICAgICAgICAgdmFyIGRv
bVN0b3JhZ2UgPSB0aGlzLl9kb21TdG9yYWdlRm9ySWRlbnRpZmllcihpZCk7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KGRvbVN0b3JhZ2UpOwogICAgICAgICBpZiAoIWRvbVN0b3JhZ2UpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5FdmVudC5ET01TdG9yYWdlT2JqZWN0V2FzSW5zcGVj
dGVkLCB7ZG9tU3RvcmFnZX0pOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAK
LSAgICByZXF1ZXN0SW5kZXhlZERhdGFiYXNlRGF0YTogZnVuY3Rpb24ob2JqZWN0U3RvcmUsIG9i
amVjdFN0b3JlSW5kZXgsIHN0YXJ0RW50cnlJbmRleCwgbWF4aW11bUVudHJ5Q291bnQsIGNhbGxi
YWNrKQorICAgIHJlcXVlc3RJbmRleGVkRGF0YWJhc2VEYXRhKG9iamVjdFN0b3JlLCBvYmplY3RT
dG9yZUluZGV4LCBzdGFydEVudHJ5SW5kZXgsIG1heGltdW1FbnRyeUNvdW50LCBjYWxsYmFjaykK
ICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHdpbmRvdy5JbmRleGVkREJBZ2VudCk7CiAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KG9iamVjdFN0b3JlKTsKQEAgLTE3MCwxMSArMTU3LDExIEBA
IFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH07CiAK
ICAgICAgICAgSW5kZXhlZERCQWdlbnQucmVxdWVzdERhdGEuaW52b2tlKHJlcXVlc3RBcmd1bWVu
dHMsIHByb2Nlc3NEYXRhKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAg
IF9kb21TdG9yYWdlRm9ySWRlbnRpZmllcjogZnVuY3Rpb24oaWQpCisgICAgX2RvbVN0b3JhZ2VG
b3JJZGVudGlmaWVyKGlkKQogICAgIHsKICAgICAgICAgZm9yICh2YXIgc3RvcmFnZU9iamVjdCBv
ZiB0aGlzLl9kb21TdG9yYWdlT2JqZWN0cykgewogICAgICAgICAgICAgLy8gVGhlIGlkIGlzIGFu
IG9iamVjdCwgc28gd2UgbmVlZCB0byBjb21wYXJlIHRoZSBwcm9wZXJ0aWVzIHVzaW5nIE9iamVj
dC5zaGFsbG93RXF1YWwuCkBAIC0xODQsOSArMTcxLDkgQEAgV2ViSW5zcGVjdG9yLlN0b3JhZ2VN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBudWxsOwot
ICAgIH0sCisgICAgfQogCi0gICAgX21haW5SZXNvdXJjZURpZENoYW5nZTogZnVuY3Rpb24oZXZl
bnQpCisgICAgX21haW5SZXNvdXJjZURpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5GcmFtZSk7
CiAKQEAgLTIwOSw5ICsxOTYsOSBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90
eXBlID0gewogCiAgICAgICAgIHRoaXMuX2Nvb2tpZVN0b3JhZ2VPYmplY3RzW2hvc3RdID0gbmV3
IFdlYkluc3BlY3Rvci5Db29raWVTdG9yYWdlT2JqZWN0KGhvc3QpOwogICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIuRXZlbnQu
Q29va2llU3RvcmFnZU9iamVjdFdhc0FkZGVkLCB7Y29va2llU3RvcmFnZTogdGhpcy5fY29va2ll
U3RvcmFnZU9iamVjdHNbaG9zdF19KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRET01TdG9y
YWdlSWZOZWVkZWQ6IGZ1bmN0aW9uKGZyYW1lKQorICAgIF9hZGRET01TdG9yYWdlSWZOZWVkZWQo
ZnJhbWUpCiAgICAgewogICAgICAgICAvLyBEb24ndCBzaG93IHN0b3JhZ2UgaWYgd2UgZG9uJ3Qg
aGF2ZSBhIHNlY3VyaXR5IG9yaWdpbiAoYWJvdXQ6YmxhbmspLgogICAgICAgICBpZiAoIWZyYW1l
LnNlY3VyaXR5T3JpZ2luIHx8IGZyYW1lLnNlY3VyaXR5T3JpZ2luID09PSAiOi8vIikKQEAgLTIy
Niw5ICsyMTMsOSBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICB2YXIgc2Vzc2lvblN0b3JhZ2VJZGVudGlmaWVyID0ge3NlY3VyaXR5T3JpZ2luOiBm
cmFtZS5zZWN1cml0eU9yaWdpbiwgaXNMb2NhbFN0b3JhZ2U6IGZhbHNlfTsKICAgICAgICAgaWYg
KCF0aGlzLl9kb21TdG9yYWdlRm9ySWRlbnRpZmllcihzZXNzaW9uU3RvcmFnZUlkZW50aWZpZXIp
KQogICAgICAgICAgICAgdGhpcy5kb21TdG9yYWdlV2FzQWRkZWQoc2Vzc2lvblN0b3JhZ2VJZGVu
dGlmaWVyLCBmcmFtZS5tYWluUmVzb3VyY2UudXJsQ29tcG9uZW50cy5ob3N0LCBmYWxzZSk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfYWRkSW5kZXhlZERCRGF0YWJhc2VzSWZOZWVkZWQ6IGZ1bmN0
aW9uKGZyYW1lKQorICAgIF9hZGRJbmRleGVkREJEYXRhYmFzZXNJZk5lZWRlZChmcmFtZSkKICAg
ICB7CiAgICAgICAgIGlmICghd2luZG93LkluZGV4ZWREQkFnZW50KQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMjg5LDE3ICsyNzYsMTcgQEAgV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIEluZGV4ZWREQkFnZW50LnJlcXVlc3RE
YXRhYmFzZU5hbWVzKHNlY3VyaXR5T3JpZ2luLCBwcm9jZXNzRGF0YWJhc2VOYW1lcy5iaW5kKHRo
aXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9zZWN1cml0eU9yaWdpbkRpZENoYW5nZTogZnVu
Y3Rpb24oZXZlbnQpCisgICAgX3NlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsK
ICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLkZyYW1lKTsKIAogICAgICAgICB0aGlzLl9hZGRET01TdG9yYWdlSWZOZWVkZWQoZXZlbnQu
dGFyZ2V0KTsKICAgICAgICAgdGhpcy5fYWRkSW5kZXhlZERCRGF0YWJhc2VzSWZOZWVkZWQoZXZl
bnQudGFyZ2V0KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9kYXRhYmFzZUZvcklkZW50aWZpZXI6
IGZ1bmN0aW9uKGlkKQorICAgIF9kYXRhYmFzZUZvcklkZW50aWZpZXIoaWQpCiAgICAgewogICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2RhdGFiYXNlT2JqZWN0cy5sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFiYXNlT2JqZWN0c1tpXS5pZCA9PT0gaWQp
CkBAIC0zMDcsMTIgKzI5NCwyMiBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfZXh0cmFEb21haW5zQWN0aXZhdGVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfZXh0
cmFEb21haW5zQWN0aXZhdGVkKGV2ZW50KQogICAgIHsKICAgICAgICAgCiAgICAgICAgIGlmIChl
dmVudC5kYXRhLmRvbWFpbnMuY29udGFpbnMoIkRPTVN0b3JhZ2UiKSAmJiB3aW5kb3cuRE9NU3Rv
cmFnZUFnZW50ICYmIERPTVN0b3JhZ2VBZ2VudC5nZXRET01TdG9yYWdlSXRlbXMpCiAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJh
bWUuRXZlbnQuU2VjdXJpdHlPcmlnaW5EaWRDaGFuZ2UsIHRoaXMuX3NlY3VyaXR5T3JpZ2luRGlk
Q2hhbmdlLCB0aGlzKTsKICAgICB9CiB9OworCitXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIu
RXZlbnQgPSB7CisgICAgQ29va2llU3RvcmFnZU9iamVjdFdhc0FkZGVkOiAic3RvcmFnZS1tYW5h
Z2VyLWNvb2tpZS1zdG9yYWdlLW9iamVjdC13YXMtYWRkZWQiLAorICAgIERPTVN0b3JhZ2VPYmpl
Y3RXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdlci1kb20tc3RvcmFnZS1vYmplY3Qtd2FzLWFkZGVk
IiwKKyAgICBET01TdG9yYWdlT2JqZWN0V2FzSW5zcGVjdGVkOiAic3RvcmFnZS1kb20tb2JqZWN0
LXdhcy1pbnNwZWN0ZWQiLAorICAgIERhdGFiYXNlV2FzQWRkZWQ6ICJzdG9yYWdlLW1hbmFnZXIt
ZGF0YWJhc2Utd2FzLWFkZGVkIiwKKyAgICBEYXRhYmFzZVdhc0luc3BlY3RlZDogInN0b3JhZ2Ut
b2JqZWN0LXdhcy1pbnNwZWN0ZWQiLAorICAgIEluZGV4ZWREYXRhYmFzZVdhc0FkZGVkOiAic3Rv
cmFnZS1tYW5hZ2VyLWluZGV4ZWQtZGF0YWJhc2Utd2FzLWFkZGVkIiwKKyAgICBDbGVhcmVkOiAi
c3RvcmFnZS1tYW5hZ2VyLWNsZWFyZWQiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGltZWxpbmVNYW5hZ2VyLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGltZWxpbmVNYW5h
Z2VyLmpzCmluZGV4IDExM2RiODI2MzhkNzZmODIwODY2Nzk3MDAzMDZlOTY3NmVmMzQ2MTIuLjVk
OGY3MjI2ZjljNTA0ZDk1ZmEyMGUxMzBjOTRjYzU5Yzg0NWVjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RpbWVsaW5lTWFuYWdl
ci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9UaW1lbGluZU1hbmFnZXIuanMKQEAgLTIzLDQ1ICsyMywzMiBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIg
PSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyID0gY2xhc3MgVGltZWxp
bmVNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBD
b252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBz
dXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIFdl
Ykluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVu
dC5Qcm92aXNpb25hbExvYWRTdGFydGVkLCB0aGlzLl9zdGFydEF1dG9DYXB0dXJpbmcsIHRoaXMp
OwotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5G
cmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENo
YW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkZyYW1lLkV2ZW50LlJlc291cmNlV2FzQWRkZWQsIHRoaXMuX3Jlc291cmNlV2Fz
QWRkZWQsIHRoaXMpOwotCi0gICAgdGhpcy5fcmVjb3JkaW5ncyA9IFtdOwotICAgIHRoaXMuX2Fj
dGl2ZVJlY29yZGluZyA9IG51bGw7Ci0gICAgdGhpcy5faXNDYXB0dXJpbmcgPSBmYWxzZTsKKyAg
ICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAgdGhpcy5fbmV4
dFJlY29yZGluZ0lkZW50aWZpZXIgPSAxOworICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuUHJvdmlzaW9uYWxMb2FkU3Rh
cnRlZCwgdGhpcy5fc3RhcnRBdXRvQ2FwdHVyaW5nLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5S
ZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZy
YW1lLkV2ZW50LlJlc291cmNlV2FzQWRkZWQsIHRoaXMuX3Jlc291cmNlV2FzQWRkZWQsIHRoaXMp
OwogCi0gICAgdGhpcy5fYm91bmRTdG9wQ2FwdHVyaW5nID0gdGhpcy5zdG9wQ2FwdHVyaW5nLmJp
bmQodGhpcyk7CisgICAgICAgIHRoaXMuX3JlY29yZGluZ3MgPSBbXTsKKyAgICAgICAgdGhpcy5f
YWN0aXZlUmVjb3JkaW5nID0gbnVsbDsKKyAgICAgICAgdGhpcy5faXNDYXB0dXJpbmcgPSBmYWxz
ZTsKIAotICAgIGZ1bmN0aW9uIGRlbGF5ZWRXb3JrKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xv
YWROZXdSZWNvcmRpbmcoKTsKLSAgICB9CisgICAgICAgIHRoaXMuX25leHRSZWNvcmRpbmdJZGVu
dGlmaWVyID0gMTsKIAotICAgIC8vIEFsbG93IG90aGVyIGNvZGUgdG8gc2V0IHVwIGxpc3RlbmVy
cyBiZWZvcmUgZmlyaW5nIHRoZSBpbml0aWFsIFJlY29yZGluZ0xvYWRlZCBldmVudC4KLSAgICBz
ZXRUaW1lb3V0KGRlbGF5ZWRXb3JrLmJpbmQodGhpcyksIDApOwotfTsKKyAgICAgICAgdGhpcy5f
Ym91bmRTdG9wQ2FwdHVyaW5nID0gdGhpcy5zdG9wQ2FwdHVyaW5nLmJpbmQodGhpcyk7CiAKLVdl
Ykluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuRXZlbnQgPSB7Ci0gICAgUmVjb3JkaW5nQ3JlYXRl
ZDogInRpbWVsaW5lLW1hbmFnZXItcmVjb3JkaW5nLWNyZWF0ZWQiLAotICAgIFJlY29yZGluZ0xv
YWRlZDogInRpbWVsaW5lLW1hbmFnZXItcmVjb3JkaW5nLWxvYWRlZCIsCi0gICAgQ2FwdHVyaW5n
U3RhcnRlZDogInRpbWVsaW5lLW1hbmFnZXItY2FwdHVyaW5nLXN0YXJ0ZWQiLAotICAgIENhcHR1
cmluZ1N0b3BwZWQ6ICJ0aW1lbGluZS1tYW5hZ2VyLWNhcHR1cmluZy1zdG9wcGVkIgotfTsKLQot
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5NYXhpbXVtQXV0b1JlY29yZER1cmF0aW9uID0g
OTAwMDA7IC8vIDkwIHNlY29uZHMKLVdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuTWF4aW11
bUF1dG9SZWNvcmREdXJhdGlvbkFmdGVyTG9hZEV2ZW50ID0gMTAwMDA7IC8vIDEwIHNlY29uZHMK
LVdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuRGVhZFRpbWVSZXF1aXJlZFRvU3RvcEF1dG9S
ZWNvcmRpbmdFYXJseSA9IDIwMDA7IC8vIDIgc2Vjb25kcworICAgICAgICBmdW5jdGlvbiBkZWxh
eWVkV29yaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX2xvYWROZXdSZWNvcmRpbmco
KTsKKyAgICAgICAgfQogCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlciwKKyAgICAg
ICAgLy8gQWxsb3cgb3RoZXIgY29kZSB0byBzZXQgdXAgbGlzdGVuZXJzIGJlZm9yZSBmaXJpbmcg
dGhlIGluaXRpYWwgUmVjb3JkaW5nTG9hZGVkIGV2ZW50LgorICAgICAgICBzZXRUaW1lb3V0KGRl
bGF5ZWRXb3JrLmJpbmQodGhpcyksIDApOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCkBAIC03
MCwxOSArNTcsMTkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9hY3RpdmVSZWNvcmRpbmcgfHwg
IXRoaXMuX2lzQ2FwdHVyaW5nKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVJlY29yZGlu
ZzsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCByZWNvcmRpbmdzKCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9yZWNvcmRpbmdzLnNsaWNlKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBp
c0NhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIGlzQ2FwdHVyaW5nKCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9pc0NhcHR1cmluZzsKLSAgICB9LAorICAgIH0KIAotICAgIHN0YXJ0Q2Fw
dHVyaW5nOiBmdW5jdGlvbihzaG91bGRDcmVhdGVSZWNvcmRpbmcpCisgICAgc3RhcnRDYXB0dXJp
bmcoc2hvdWxkQ3JlYXRlUmVjb3JkaW5nKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQo
IXRoaXMuX2lzQ2FwdHVyaW5nLCAiVGltZWxpbmVNYW5hZ2VyIGlzIGFscmVhZHkgY2FwdHVyaW5n
LiIpOwogCkBAIC05Nyw5ICs4NCw5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci50aW1lbGluZU1hbmFnZXIu
Y2FwdHVyaW5nU3RhcnRlZCgpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KLSAgICB9LAor
ICAgIH0KIAotICAgIHN0b3BDYXB0dXJpbmc6IGZ1bmN0aW9uKCkKKyAgICBzdG9wQ2FwdHVyaW5n
KCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2lzQ2FwdHVyaW5nLCAiVGlt
ZWxpbmVNYW5hZ2VyIGlzIG5vdCBjYXB0dXJpbmcuIik7CiAKQEAgLTEwOCw5ICs5NSw5IEBAIFdl
Ykluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAvLyBOT1RF
OiBBbHdheXMgc3RvcCBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgVGltZWxp
bmUucmVjb3JkaW5nU3RvcHBlZCBldmVudC4KICAgICAgICAgLy8gVGhpcyB3YXkgdGhlIFVJIGZl
ZWxzIGFzIHJlc3BvbnNpdmUgdG8gYSBzdG9wIGFzIHBvc3NpYmxlLgogICAgICAgICB0aGlzLmNh
cHR1cmluZ1N0b3BwZWQoKTsKLSAgICB9LAorICAgIH0KIAotICAgIHVubG9hZFJlY29yZGluZzog
ZnVuY3Rpb24oKQorICAgIHVubG9hZFJlY29yZGluZygpCiAgICAgewogICAgICAgICBpZiAoIXRo
aXMuX2FjdGl2ZVJlY29yZGluZykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyMCwxOSArMTA3
LDE5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAg
ICAgIHRoaXMuX2FjdGl2ZVJlY29yZGluZy51bmxvYWRlZCgpOwogICAgICAgICB0aGlzLl9hY3Rp
dmVSZWNvcmRpbmcgPSBudWxsOwotICAgIH0sCisgICAgfQogCi0gICAgY29tcHV0ZUVsYXBzZWRU
aW1lOiBmdW5jdGlvbih0aW1lc3RhbXApCisgICAgY29tcHV0ZUVsYXBzZWRUaW1lKHRpbWVzdGFt
cCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fYWN0aXZlUmVjb3JkaW5nKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVJlY29yZGluZy5jb21w
dXRlRWxhcHNlZFRpbWUodGltZXN0YW1wKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByb3Rl
Y3RlZAogCi0gICAgY2FwdHVyaW5nU3RhcnRlZDogZnVuY3Rpb24oKQorICAgIGNhcHR1cmluZ1N0
YXJ0ZWQoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2lzQ2FwdHVyaW5nKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTQwLDkgKzEyNyw5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9pc0NhcHR1cmluZyA9IHRydWU7CiAKICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TWFuYWdlci5FdmVudC5DYXB0dXJpbmdTdGFydGVkKTsKLSAgICB9LAorICAgIH0KIAotICAgIGNh
cHR1cmluZ1N0b3BwZWQ6IGZ1bmN0aW9uKCkKKyAgICBjYXB0dXJpbmdTdG9wcGVkKCkKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5faXNDYXB0dXJpbmcpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNjEsOSArMTQ4LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX2F1dG9DYXB0dXJpbmdNYWluUmVzb3VyY2UgPSBudWxsOwogCiAg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU1hbmFnZXIuRXZlbnQuQ2FwdHVyaW5nU3RvcHBlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBl
dmVudFJlY29yZGVkOiBmdW5jdGlvbihyZWNvcmRQYXlsb2FkKQorICAgIGV2ZW50UmVjb3JkZWQo
cmVjb3JkUGF5bG9hZCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rv
ci5UaW1lbGluZU9ic2VydmVyLgogCkBAIC0xNzQsMTcgKzE2MSwxNyBAQCBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKGZ1
bmN0aW9uKGN1cnJlbnRWYWx1ZSkgewogICAgICAgICAgICAgdGhpcy5fYWRkUmVjb3JkKGN1cnJl
bnRWYWx1ZSk7CiAgICAgICAgIH0uYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBw
YWdlRGlkTG9hZDogZnVuY3Rpb24odGltZXN0YW1wKQorICAgIHBhZ2VEaWRMb2FkKHRpbWVzdGFt
cCkKICAgICB7CiAgICAgICAgIGlmIChpc05hTihXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1h
bmFnZXIubWFpbkZyYW1lLmxvYWRFdmVudFRpbWVzdGFtcCkpCiAgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIubWFpbkZyYW1lLm1hcmtMb2FkRXZlbnQodGhpcy5h
Y3RpdmVSZWNvcmRpbmcuY29tcHV0ZUVsYXBzZWRUaW1lKHRpbWVzdGFtcCkpOwotICAgIH0sCisg
ICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX3Byb2Nlc3NOZXN0ZWRSZWNvcmRzOiBmdW5j
dGlvbihjaGlsZFJlY29yZFBheWxvYWRzLCBwYXJlbnRSZWNvcmRQYXlsb2FkKQorICAgIF9wcm9j
ZXNzTmVzdGVkUmVjb3JkcyhjaGlsZFJlY29yZFBheWxvYWRzLCBwYXJlbnRSZWNvcmRQYXlsb2Fk
KQogICAgIHsKICAgICAgICAgLy8gQ29udmVydCB0byBhIHNpbmdsZSBpdGVtIGFycmF5IGlmIG5l
ZWRlZC4KICAgICAgICAgaWYgKCEoY2hpbGRSZWNvcmRQYXlsb2FkcyBpbnN0YW5jZW9mIEFycmF5
KSkKQEAgLTIxMyw5ICsyMDAsOSBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiByZWNvcmRzOwotICAgIH0sCisg
ICAgfQogCi0gICAgX3Byb2Nlc3NSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZFBheWxvYWQsIHBhcmVu
dFJlY29yZFBheWxvYWQpCisgICAgX3Byb2Nlc3NSZWNvcmQocmVjb3JkUGF5bG9hZCwgcGFyZW50
UmVjb3JkUGF5bG9hZCkKICAgICB7CiAgICAgICAgIHZhciBzdGFydFRpbWUgPSB0aGlzLmFjdGl2
ZVJlY29yZGluZy5jb21wdXRlRWxhcHNlZFRpbWUocmVjb3JkUGF5bG9hZC5zdGFydFRpbWUpOwog
ICAgICAgICB2YXIgZW5kVGltZSA9IHRoaXMuYWN0aXZlUmVjb3JkaW5nLmNvbXB1dGVFbGFwc2Vk
VGltZShyZWNvcmRQYXlsb2FkLmVuZFRpbWUpOwpAQCAtMzY5LDkgKzM1Niw5IEBAIFdlYkluc3Bl
Y3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc0V2ZW50OiBmdW5jdGlv
bihyZWNvcmRQYXlsb2FkLCBwYXJlbnRSZWNvcmRQYXlsb2FkKQorICAgIF9wcm9jZXNzRXZlbnQo
cmVjb3JkUGF5bG9hZCwgcGFyZW50UmVjb3JkUGF5bG9hZCkKICAgICB7CiAgICAgICAgIHZhciBz
dGFydFRpbWUgPSB0aGlzLmFjdGl2ZVJlY29yZGluZy5jb21wdXRlRWxhcHNlZFRpbWUocmVjb3Jk
UGF5bG9hZC5zdGFydFRpbWUpOwogICAgICAgICB2YXIgZW5kVGltZSA9IHRoaXMuYWN0aXZlUmVj
b3JkaW5nLmNvbXB1dGVFbGFwc2VkVGltZShyZWNvcmRQYXlsb2FkLmVuZFRpbWUpOwpAQCAtNDIz
LDkgKzQxMCw5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
bG9hZE5ld1JlY29yZGluZzogZnVuY3Rpb24oKQorICAgIF9sb2FkTmV3UmVjb3JkaW5nKCkKICAg
ICB7CiAgICAgICAgIGlmICh0aGlzLl9hY3RpdmVSZWNvcmRpbmcgJiYgdGhpcy5fYWN0aXZlUmVj
b3JkaW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ1Miw5ICs0MzksOSBA
QCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fbGVnYWN5Rmlyc3RSZWNvcmRlZFRpbWVzdGFtcCA9IE5hTjsKICAgICAgICAgdGhpcy5fYWN0
aXZlUmVjb3JkaW5nID0gbmV3UmVjb3JkaW5nOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLkV2ZW50LlJlY29yZGluZ0xv
YWRlZCwge29sZFJlY29yZGluZ30pOwotICAgIH0sCisgICAgfQogCi0gICAgX2NhbGxGcmFtZXNG
cm9tUGF5bG9hZDogZnVuY3Rpb24ocGF5bG9hZCkKKyAgICBfY2FsbEZyYW1lc0Zyb21QYXlsb2Fk
KHBheWxvYWQpCiAgICAgewogICAgICAgICBpZiAoIXBheWxvYWQpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbDsKQEAgLTQ4MywxOCArNDcwLDE4IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHBheWxvYWQubWFw
KGNyZWF0ZUNhbGxGcmFtZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYWRkUmVjb3JkOiBmdW5j
dGlvbihyZWNvcmQpCisgICAgX2FkZFJlY29yZChyZWNvcmQpCiAgICAgewogICAgICAgICB0aGlz
Ll9hY3RpdmVSZWNvcmRpbmcuYWRkUmVjb3JkKHJlY29yZCk7CiAKICAgICAgICAgLy8gT25seSB3
b3JyeSBhYm91dCBkZWFkIHRpbWUgYWZ0ZXIgdGhlIGxvYWQgZXZlbnQuCiAgICAgICAgIGlmICgh
aXNOYU4oV2ViSW5zcGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZS5sb2FkRXZl
bnRUaW1lc3RhbXApKQogICAgICAgICAgICAgdGhpcy5fcmVzZXRBdXRvUmVjb3JkaW5nRGVhZFRp
bWVUaW1lb3V0KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc3RhcnRBdXRvQ2FwdHVyaW5nOiBm
dW5jdGlvbihldmVudCkKKyAgICBfc3RhcnRBdXRvQ2FwdHVyaW5nKGV2ZW50KQogICAgIHsKICAg
ICAgICAgaWYgKCFldmVudC50YXJnZXQuaXNNYWluRnJhbWUoKSB8fCAodGhpcy5faXNDYXB0dXJp
bmcgJiYgIXRoaXMuX2F1dG9DYXB0dXJpbmdNYWluUmVzb3VyY2UpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNTE5LDkgKzUwNiw5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nVGltZW91dCA9IHNl
dFRpbWVvdXQodGhpcy5fYm91bmRTdG9wQ2FwdHVyaW5nLCBXZWJJbnNwZWN0b3IuVGltZWxpbmVN
YW5hZ2VyLk1heGltdW1BdXRvUmVjb3JkRHVyYXRpb24pOwogCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0sCisgICAgfQogCi0gICAgX3N0b3BBdXRvUmVjb3JkaW5nU29vbjogZnVuY3Rpb24o
KQorICAgIF9zdG9wQXV0b1JlY29yZGluZ1Nvb24oKQogICAgIHsKICAgICAgICAgLy8gT25seSBh
dXRvIHN0b3Agd2hlbiBhdXRvIGNhcHR1cmluZy4KICAgICAgICAgaWYgKCF0aGlzLl9pc0NhcHR1
cmluZyB8fCAhdGhpcy5fYXV0b0NhcHR1cmluZ01haW5SZXNvdXJjZSkKQEAgLTUzMCw5ICs1MTcs
OSBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
aWYgKHRoaXMuX3N0b3BDYXB0dXJpbmdUaW1lb3V0KQogICAgICAgICAgICAgY2xlYXJUaW1lb3V0
KHRoaXMuX3N0b3BDYXB0dXJpbmdUaW1lb3V0KTsKICAgICAgICAgdGhpcy5fc3RvcENhcHR1cmlu
Z1RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX2JvdW5kU3RvcENhcHR1cmluZywgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTWFuYWdlci5NYXhpbXVtQXV0b1JlY29yZER1cmF0aW9uQWZ0ZXJMb2FkRXZl
bnQpOwotICAgIH0sCisgICAgfQogCi0gICAgX3Jlc2V0QXV0b1JlY29yZGluZ0RlYWRUaW1lVGlt
ZW91dDogZnVuY3Rpb24oKQorICAgIF9yZXNldEF1dG9SZWNvcmRpbmdEZWFkVGltZVRpbWVvdXQo
KQogICAgIHsKICAgICAgICAgLy8gT25seSBtb25pdG9yIGRlYWQgdGltZSB3aGVuIGF1dG8gY2Fw
dHVyaW5nLgogICAgICAgICBpZiAoIXRoaXMuX2lzQ2FwdHVyaW5nIHx8ICF0aGlzLl9hdXRvQ2Fw
dHVyaW5nTWFpblJlc291cmNlKQpAQCAtNTQxLDkgKzUyOCw5IEBAIFdlYkluc3BlY3Rvci5UaW1l
bGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fZGVhZFRpbWVUaW1l
b3V0KQogICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2RlYWRUaW1lVGltZW91dCk7CiAg
ICAgICAgIHRoaXMuX2RlYWRUaW1lVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fYm91bmRTdG9w
Q2FwdHVyaW5nLCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLkRlYWRUaW1lUmVxdWlyZWRU
b1N0b3BBdXRvUmVjb3JkaW5nRWFybHkpOwotICAgIH0sCisgICAgfQogCi0gICAgX21haW5SZXNv
dXJjZURpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX21haW5SZXNvdXJjZURpZENoYW5n
ZShldmVudCkKICAgICB7CiAgICAgICAgIC8vIElnbm9yZSByZXNvdXJjZSBldmVudHMgd2hlbiB0
aGVyZSBpc24ndCBhIG1haW4gZnJhbWUgeWV0LiBUaG9zZSBldmVudHMgYXJlIHRyaWdnZXJlZCBi
eQogICAgICAgICAvLyBsb2FkaW5nIHRoZSBjYWNoZWQgcmVzb3VyY2VzIHdoZW4gdGhlIGluc3Bl
Y3RvciBvcGVucywgYW5kIHRoZXkgZG8gbm90IGhhdmUgdGltaW5nIGluZm9ybWF0aW9uLgpAQCAt
NTYxLDkgKzU0OCw5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX2FkZFJlY29yZChuZXcgV2Vi
SW5zcGVjdG9yLlJlc291cmNlVGltZWxpbmVSZWNvcmQobWFpblJlc291cmNlKSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfcmVzb3VyY2VXYXNBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX3Jl
c291cmNlV2FzQWRkZWQoZXZlbnQpCiAgICAgewogICAgICAgICAvLyBJZ25vcmUgcmVzb3VyY2Ug
ZXZlbnRzIHdoZW4gdGhlcmUgaXNuJ3QgYSBtYWluIGZyYW1lIHlldC4gVGhvc2UgZXZlbnRzIGFy
ZSB0cmlnZ2VyZWQgYnkKICAgICAgICAgLy8gbG9hZGluZyB0aGUgY2FjaGVkIHJlc291cmNlcyB3
aGVuIHRoZSBpbnNwZWN0b3Igb3BlbnMsIGFuZCB0aGV5IGRvIG5vdCBoYXZlIHRpbWluZyBpbmZv
cm1hdGlvbi4KQEAgLTU3Nyw0ICs1NjQsMTMgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdl
ci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CitX
ZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLkV2ZW50ID0geworICAgIFJlY29yZGluZ0NyZWF0
ZWQ6ICJ0aW1lbGluZS1tYW5hZ2VyLXJlY29yZGluZy1jcmVhdGVkIiwKKyAgICBSZWNvcmRpbmdM
b2FkZWQ6ICJ0aW1lbGluZS1tYW5hZ2VyLXJlY29yZGluZy1sb2FkZWQiLAorICAgIENhcHR1cmlu
Z1N0YXJ0ZWQ6ICJ0aW1lbGluZS1tYW5hZ2VyLWNhcHR1cmluZy1zdGFydGVkIiwKKyAgICBDYXB0
dXJpbmdTdG9wcGVkOiAidGltZWxpbmUtbWFuYWdlci1jYXB0dXJpbmctc3RvcHBlZCIKK307CisK
K1dlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuTWF4aW11bUF1dG9SZWNvcmREdXJhdGlvbiA9
IDkwMDAwOyAvLyA5MCBzZWNvbmRzCitXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLk1heGlt
dW1BdXRvUmVjb3JkRHVyYXRpb25BZnRlckxvYWRFdmVudCA9IDEwMDAwOyAvLyAxMCBzZWNvbmRz
CitXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLkRlYWRUaW1lUmVxdWlyZWRUb1N0b3BBdXRv
UmVjb3JkaW5nRWFybHkgPSAyMDAwOyAvLyAyIHNlY29uZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRv
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5
cGVUb2tlbkFubm90YXRvci5qcwppbmRleCA4NWJlNTc4ZWU4YzQ0NWRlZDhiZjU1ZmZiNDk4MTdi
YWQ2MTc0ZjRlLi40OTE4MzYwMDJhOTVkN2NhMmMxMzNmNzRlOGUxM2VjODdlYmUyN2FlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9U
eXBlVG9rZW5Bbm5vdGF0b3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCkBAIC0yMywyMiArMjMsMjAg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0
b3IuVHlwZVRva2VuQW5ub3RhdG9yID0gZnVuY3Rpb24oc291cmNlQ29kZVRleHRFZGl0b3IsIHNj
cmlwdCkKK1dlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IgPSBjbGFzcyBUeXBlVG9rZW5B
bm5vdGF0b3IgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuQW5ub3RhdG9yCiB7Ci0gICAgV2ViSW5zcGVj
dG9yLkFubm90YXRvci5jYWxsKHRoaXMsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKLQotICAgIHRo
aXMuX3NjcmlwdCA9IHNjcmlwdDsKLSAgICB0aGlzLl90eXBlVG9rZW5Ob2RlcyA9IFtdOwotICAg
IHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOwotfTsKKyAgICBjb25zdHJ1Y3Rvcihzb3Vy
Y2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQorICAgIHsKKyAgICAgICAgc3VwZXIodGhpcywgc291
cmNlQ29kZVRleHRFZGl0b3IpOwogCi1XZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnBy
b3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90
YXRvciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlLAor
ICAgICAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5v
ZGVzID0gW107CisgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOworICAgIH0K
IAogICAgIC8vIFByb3RlY3RlZAogCi0gICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkK
KyAgICBpbnNlcnRBbm5vdGF0aW9ucygpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuaXNBY3Rp
dmUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc3LDE2ICs3NSwxNiBAQCBXZWJJbnNwZWN0
b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aGlz
Lmluc2VydEFubm90YXRpb25zKCk7CiAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXRU
aW1lKTsKICAgICAgICAgfS5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIGNsZWFy
QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBjbGVhckFubm90YXRpb25zKCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8g
UHJpdmF0ZQogCi0gICAgX2luc2VydFR5cGVUb2tlbjogZnVuY3Rpb24obm9kZSkKKyAgICBfaW5z
ZXJ0VHlwZVRva2VuKG5vZGUpCiAgICAgewogICAgICAgICBpZiAobm9kZS50eXBlID09PSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyKSB7CiAgICAgICAg
ICAgICBpZiAoIW5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gJiYgbm9kZS5hdHRhY2htZW50
cy50eXBlcyAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzLmlzVmFsaWQpCkBAIC0xMTUsOSArMTEz
LDkgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgaWYgKG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4pCiAgICAgICAgICAgICBub2Rl
LmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuLnVwZGF0ZShub2RlLmF0dGFjaG1lbnRzLnJldHVyblR5
cGVzKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9pbnNlcnRUb2tlbjogZnVuY3Rpb24ob3JpZ2lu
YWxPZmZzZXQsIG5vZGUsIHNob3VsZFRyYW5zbGF0ZU9mZnNldFRvQWZ0ZXJQYXJhbWV0ZXJMaXN0
LCB0eXBlVG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpCisgICAgX2luc2Vy
dFRva2VuKG9yaWdpbmFsT2Zmc2V0LCBub2RlLCBzaG91bGRUcmFuc2xhdGVPZmZzZXRUb0FmdGVy
UGFyYW1ldGVyTGlzdCwgdHlwZVRva2VuVGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFibGVOYW1l
KQogICAgIHsKICAgICAgICAgdmFyIHRva2VuUG9zaXRpb24gPSB0aGlzLnNvdXJjZUNvZGVUZXh0
RWRpdG9yLm9yaWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb24ob3JpZ2luYWxPZmZzZXQpOwog
ICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IHRoaXMuc291cmNlQ29kZVRleHRFZGl0b3IuY3Vy
cmVudFBvc2l0aW9uVG9DdXJyZW50T2Zmc2V0KHRva2VuUG9zaXRpb24pOwpAQCAtMTQwLDkgKzEz
OCw5IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlID0gewogICAg
ICAgICBub2RlLmF0dGFjaG1lbnRzLl9fdHlwZVRva2VuID0gdHlwZVRva2VuOwogICAgICAgICB0
aGlzLl90eXBlVG9rZW5Ob2Rlcy5wdXNoKG5vZGUpOwogICAgICAgICB0aGlzLl90eXBlVG9rZW5C
b29rbWFya3MucHVzaChib29rbWFyayk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfdHJhbnNsYXRl
VG9PZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdDogZnVuY3Rpb24obm9kZSwgb2Zmc2V0
LCBzb3VyY2VTdHJpbmcpCisgICAgX3RyYW5zbGF0ZVRvT2Zmc2V0QWZ0ZXJGdW5jdGlvblBhcmFt
ZXRlckxpc3Qobm9kZSwgb2Zmc2V0LCBzb3VyY2VTdHJpbmcpCiAgICAgewogICAgICAgICAvLyBU
aGUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgd2UgZ2V0IHRoZSBvZmZzZXQgc3RhcnRpbmcgYXQg
dGhlIGZ1bmN0aW9uIGtleXdvcmQgKG9yIGFmdGVyIHRoZSBnZXQvc2V0IGtleXdvcmRzKS4KICAg
ICAgICAgLy8gV2Ugd2lsbCByZXR1cm4gdGhlIG9mZnNldCBmb3IgdGhlIGNsb3NpbmcgcGFyZW50
aGVzaXMgaW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgpAQCAtMTgzLDkgKzE4MSw5IEBAIFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlID0gewogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuIG9mZnNldCArIDE7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY2xlYXJU
eXBlVG9rZW5zOiBmdW5jdGlvbigpCisgICAgX2NsZWFyVHlwZVRva2VucygpCiAgICAgewogICAg
ICAgICB0aGlzLl90eXBlVG9rZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAg
ICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gPSBudWxsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249155</attachid>
            <date>2015-03-20 18:53:01 -0700</date>
            <delta_ts>2015-03-22 18:26:10 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>bug-142890-20150320185227.patch</filename>
            <type>text/plain</type>
            <size>249676</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxNzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA4
M2QzYTcyNWRhMDdhMDYxMTZjMGMyYTgxNzY1NDllZGIxNTkzMWVlLi4xZmU4NTliMzQxYTI3NThm
NjQ4OTU2MmQyMDhlMTZlMTg5MGQwMTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNS0wMy0yMCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRvcHQgRVM2IENsYXNzIFN5bnRheCBmb3IgYWxs
IENvbnRyb2xsZXIgT2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQyODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgLSBDb252ZXJ0IGFsbCBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzIG9iamVj
dHMgdG8gY2xhc3NlcworICAgICAgICAtIENvbnZlcnQgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRv
IGNvbnN0cnVjdG9yIG1ldGhvZHMKKyAgICAgICAgLSBDb252ZXJ0ICJjb25zdHJ1Y3Rvci5tZXRo
b2QiIHRvIGNsYXNzIHN0YXRpYyBtZXRob2RzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIC0gQ29u
dmVydCBhbGwgbWV0aG9kcyB0byBtZXRob2Qgc3ludGF4LCBlbGltaW5hdGUgY29tbWFzIGJldHdl
ZW4gbWV0aG9kcworICAgICAgICAtIENvbnZlcnQgYWxsIHN1cGVyY2xhc3MgY2FsbHMgaW4gY2xh
c3NlcyB0byB1c2UgInN1cGVyIgorICAgICAgICAtIFJlbW92ZWQgRklYTUUgZnJvbSBXZWJJbnNw
ZWN0b3IuT2JqZWN0IHN1YmNsYXNzZXMsIGFkZGVkIGNhbGxzIHRvIHN1cGVyLgorICAgICAgICAt
IEZpeGVkIHN0cmljdCBtb2RlIGlzc3VlcyBub3cgdGhhdCBjbGFzc2VzIGVuZm9yY2Ugc3RyaWN0
IG1vZGUgKHNlZSBiZWxvdykuCisKKyAgICAgICAgKiBUb29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXIuanM6CisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVu
dEJ1aWxkZXIuanM6CisgICAgICAgIFVwZGF0ZWQgdG8gbWF0Y2ggY29ycmVzcG9uZGluZyBmaWxl
cyBpbiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy8qLmpzOgorICAgICAgICBNYW55IGZpbGVzIG1vZGlmaWVkIG1vc3RseSBt
ZWNoYW5pY2FsbHkgKHJlZ2V4IGZpbmQtcmVwbGFjZSkuCisKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qczoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpz
OgorICAgICAgICBSZXBsYWNlZCBjb25zdCB1c2FnZSB3aXRoIHZhci4gVXNlIG9mIGNvbnN0IGlz
IHByb2hpYml0ZWQgaW4gc3RyaWN0IG1vZGUsIHdoaWNoIGlzIGltcGxpY2l0IHdpdGhpbiBhIGNs
YXNzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9ET01UcmVlTWFuYWdlci5qczoKKyAgICAgICAgTW92ZWQgZnVuY3Rpb24gZGVjbGFyYXRp
b25zIG91dCBvZiBpZiBzdGF0ZW1lbnRzLiBTdHJpY3QgbW9kZSBkb2VzIG5vdCBhbGxvdyBmdW5j
dGlvbiBkZWNsYXJhdGlvbnMgaW4gYSBsZXhpY2FsbHkgbmVzdGVkIHN0YXRlbWVudC4KKwogMjAx
NS0wMy0xOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEFkb3B0IEVTNiBDbGFzcyBTeW50YXggZm9yIGFsbCBNb2RlbCBPYmpl
Y3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvRm9ybWF0dGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50
aW5nL0Zvcm1hdHRlci5qcwppbmRleCA1YTdmMmQ4MGEyZjU1NDFlYjM3NWY3OTViZDA0NTllNGVl
MTg1Y2UwLi5iZmE5OThlZmY4MmRiNzM0NWYzY2RiYTgzMDcyNTBlMTBjOGU1N2FiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVy
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3Jt
YXR0ZXIuanMKQEAgLTIzLDI0ICsyMywyMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLWZ1bmN0aW9uIEZvcm1hdHRlcihjb2RlTWlycm9yLCBidWlsZGVyKQor
Y2xhc3MgRm9ybWF0dGVyCiB7Ci0gICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJvcik7Ci0gICAg
Y29uc29sZS5hc3NlcnQoYnVpbGRlcik7Ci0KLSAgICB0aGlzLl9jb2RlTWlycm9yID0gY29kZU1p
cnJvcjsKLSAgICB0aGlzLl9idWlsZGVyID0gYnVpbGRlcjsKKyAgICBjb25zdHJ1Y3Rvcihjb2Rl
TWlycm9yLCBidWlsZGVyKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJv
cik7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJ1aWxkZXIpOwogCi0gICAgdGhpcy5fbGFzdFRv
a2VuID0gbnVsbDsKLSAgICB0aGlzLl9sYXN0Q29udGVudCA9ICIiOwotfQorICAgICAgICB0aGlz
Ll9jb2RlTWlycm9yID0gY29kZU1pcnJvcjsKKyAgICAgICAgdGhpcy5fYnVpbGRlciA9IGJ1aWxk
ZXI7CiAKLUZvcm1hdHRlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IEZvcm1hdHRl
ciwKKyAgICAgICAgdGhpcy5fbGFzdFRva2VuID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbGFzdENv
bnRlbnQgPSAiIjsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAgIGZvcm1hdDogZnVuY3Rp
b24oZnJvbSwgdG8pCisgICAgZm9ybWF0KGZyb20sIHRvKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fYnVpbGRlci5vcmlnaW5hbENvbnRlbnQgPT09IG51bGwpOwogICAgICAg
ICBpZiAodGhpcy5fYnVpbGRlci5vcmlnaW5hbENvbnRlbnQgIT09IG51bGwpCkBAIC03NywxMSAr
NzYsMTEgQEAgRm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRo
aXMuX2J1aWxkZXIuZmluaXNoKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAK
LSAgICBfaGFuZGxlVG9rZW46IGZ1bmN0aW9uKG1vZGUsIHRva2VuLCBzdGF0ZSwgc3RyZWFtLCBv
cmlnaW5hbFBvc2l0aW9uLCBpc1doaXRlU3BhY2UsIHN0YXJ0T2ZOZXdMaW5lLCBmaXJzdFRva2Vu
T25MaW5lKQorICAgIF9oYW5kbGVUb2tlbihtb2RlLCB0b2tlbiwgc3RhdGUsIHN0cmVhbSwgb3Jp
Z2luYWxQb3NpdGlvbiwgaXNXaGl0ZVNwYWNlLCBzdGFydE9mTmV3TGluZSwgZmlyc3RUb2tlbk9u
TGluZSkKICAgICB7CiAgICAgICAgIC8vIFN0cmluZyBjb250ZW50IG9mIHRoZSB0b2tlbi4KICAg
ICAgICAgdmFyIGNvbnRlbnQgPSBzdHJlYW0uY3VycmVudCgpOwpAQCAtMTQ2LDE3ICsxNDUsMTcg
QEAgRm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gUmVjb3JkIHRoaXMgdG9rZW4g
YXMgdGhlIGxhc3QgdG9rZW4uCiAgICAgICAgIHRoaXMuX2xhc3RUb2tlbiA9IHRva2VuOwogICAg
ICAgICB0aGlzLl9sYXN0Q29udGVudCA9IGNvbnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
aGFuZGxlRW1wdHlMaW5lOiBmdW5jdGlvbigpCisgICAgX2hhbmRsZUVtcHR5TGluZSgpCiAgICAg
ewogICAgICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCB3aGl0ZXNwYWNlIG9ubHkgbGluZXMgYnkg
YWRkaW5nIGEgbmV3bGluZS4KICAgICAgICAgLy8gSG93ZXZlciwgZG9uJ3QgZG8gdGhpcyBpZiB0
aGUgYnVpbGRlciBqdXN0IGFkZGVkIG11bHRpcGxlIG5ld2xpbmVzLgogICAgICAgICBpZiAoISh0
aGlzLl9idWlsZGVyLmxhc3RUb2tlbldhc05ld2xpbmUgJiYgdGhpcy5fYnVpbGRlci5sYXN0TmV3
bGluZUFwcGVuZFdhc011bHRpcGxlKSkKICAgICAgICAgICAgIHRoaXMuX2J1aWxkZXIuYXBwZW5k
TmV3bGluZSh0cnVlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVMaW5lRW5kaW5nOiBm
dW5jdGlvbihvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbikKKyAgICBfaGFuZGxlTGluZUVuZGluZyhv
cmlnaW5hbE5ld0xpbmVQb3NpdGlvbikKICAgICB7CiAgICAgICAgIC8vIFJlY29yZCB0aGUgb3Jp
Z2luYWwgbGluZSBlbmRpbmcuCiAgICAgICAgIHRoaXMuX2J1aWxkZXIuYWRkT3JpZ2luYWxMaW5l
RW5kaW5nKG9yaWdpbmFsTmV3TGluZVBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJD
b250ZW50QnVpbGRlci5qcwppbmRleCAzYzM2YTJiYjNmMzg0NGU4MzdjNmIwYTg2ZmY4YThjOGU1
ZTMwMGI0Li44MjkxYzM0YTQ2MDZmMGE4MDJkYTA2NGE4M2VjM2JhMTMxNDg4YzZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVy
Q29udGVudEJ1aWxkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0
eVByaW50aW5nL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCkBAIC0yMyw3MCArMjMsNjkgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1mdW5jdGlvbiBGb3Jt
YXR0ZXJDb250ZW50QnVpbGRlcihtYXBwaW5nLCBvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0
ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxPZmZzZXQsIGZvcm1hdHRlZE9mZnNldCwgaW5kZW50U3Ry
aW5nKQorY2xhc3MgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIKIHsKLSAgICB0aGlzLl9vcmlnaW5h
bENvbnRlbnQgPSBudWxsOwotICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQgPSBbXTsKLSAgICB0
aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoID0gMDsKLQotICAgIHRoaXMuX3N0YXJ0T2ZMaW5l
ID0gdHJ1ZTsKLSAgICB0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgPSBmYWxzZTsKLSAgICB0aGlz
Lmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBmYWxzZTsKLSAgICB0aGlzLmxhc3ROZXdsaW5lQXBw
ZW5kV2FzTXVsdGlwbGUgPSBmYWxzZTsKKyAgICBjb25zdHJ1Y3RvcihtYXBwaW5nLCBvcmlnaW5h
bExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgb3JpZ2luYWxPZmZzZXQsIGZvcm1h
dHRlZE9mZnNldCwgaW5kZW50U3RyaW5nKQorICAgIHsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxD
b250ZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCA9IFtdOworICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoID0gMDsKIAotICAgIHRoaXMuX2luZGVu
dCA9IDA7Ci0gICAgdGhpcy5faW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nOwotICAgIHRoaXMu
X2luZGVudENhY2hlID0gWyIiLCB0aGlzLl9pbmRlbnRTdHJpbmddOworICAgICAgICB0aGlzLl9z
dGFydE9mTGluZSA9IHRydWU7CisgICAgICAgIHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZh
bHNlOworICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7CiAKLSAgICB0aGlz
Ll9tYXBwaW5nID0gbWFwcGluZzsKLSAgICB0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzID0gb3Jp
Z2luYWxMaW5lRW5kaW5ncyB8fCBbXTsKLSAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncyA9
IGZvcm1hdHRlZExpbmVFbmRpbmdzIHx8IFtdOwotICAgIHRoaXMuX29yaWdpbmFsT2Zmc2V0ID0g
b3JpZ2luYWxPZmZzZXQgfHwgMDsKLSAgICB0aGlzLl9mb3JtYXR0ZWRPZmZzZXQgPSBmb3JtYXR0
ZWRPZmZzZXQgfHwgMDsKKyAgICAgICAgdGhpcy5faW5kZW50ID0gMDsKKyAgICAgICAgdGhpcy5f
aW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nOworICAgICAgICB0aGlzLl9pbmRlbnRDYWNoZSA9
IFsiIiwgdGhpcy5faW5kZW50U3RyaW5nXTsKIAotICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0
aW9uID0gMDsKLSAgICB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRpb24gPSAwOwotfQorICAgICAg
ICB0aGlzLl9tYXBwaW5nID0gbWFwcGluZzsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5k
aW5ncyA9IG9yaWdpbmFsTGluZUVuZGluZ3MgfHwgW107CisgICAgICAgIHRoaXMuX2Zvcm1hdHRl
ZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGluZUVuZGluZ3MgfHwgW107CisgICAgICAgIHRoaXMu
X29yaWdpbmFsT2Zmc2V0ID0gb3JpZ2luYWxPZmZzZXQgfHwgMDsKKyAgICAgICAgdGhpcy5fZm9y
bWF0dGVkT2Zmc2V0ID0gZm9ybWF0dGVkT2Zmc2V0IHx8IDA7CiAKLUZvcm1hdHRlckNvbnRlbnRC
dWlsZGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogRm9ybWF0dGVyQ29udGVudEJ1
aWxkZXIsCisgICAgICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID0gMDsKKyAgICAgICAg
dGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gMDsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMK
IAogICAgIGdldCBvcmlnaW5hbENvbnRlbnQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X29yaWdpbmFsQ29udGVudDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBmb3JtYXR0ZWRDb250
ZW50KCkKICAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250
ZW50LmpvaW4oIiIpOwogICAgICAgICBjb25zb2xlLmFzc2VydChmb3JtYXR0ZWQubGVuZ3RoID09
PSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIGZvcm1hdHRl
ZDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBtYXBwaW5nKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9tYXBwaW5nOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IG9yaWdpbmFsTGlu
ZUVuZGluZ3MoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX29yaWdpbmFsTGluZUVuZGlu
Z3M7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZm9ybWF0dGVkTGluZUVuZGluZ3MoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzOwotICAgIH0sCisg
ICAgfQogCi0gICAgc2V0T3JpZ2luYWxDb250ZW50OiBmdW5jdGlvbihvcmlnaW5hbENvbnRlbnQp
CisgICAgc2V0T3JpZ2luYWxDb250ZW50KG9yaWdpbmFsQ29udGVudCkKICAgICB7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9vcmlnaW5hbENvbnRlbnQpOwogICAgICAgICB0aGlzLl9v
cmlnaW5hbENvbnRlbnQgPSBvcmlnaW5hbENvbnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBh
cHBlbmRUb2tlbjogZnVuY3Rpb24oc3RyaW5nLCBvcmlnaW5hbFBvc2l0aW9uKQorICAgIGFwcGVu
ZFRva2VuKHN0cmluZywgb3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGlmICh0aGlz
Ll9zdGFydE9mTGluZSkKICAgICAgICAgICAgIHRoaXMuX2FwcGVuZEluZGVudCgpOwpAQCAtOTcs
MTggKzk2LDE4IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fc3RhcnRPZkxpbmUgPSBmYWxzZTsKICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNO
ZXdsaW5lID0gZmFsc2U7CiAgICAgICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZh
bHNlOwotICAgIH0sCisgICAgfQogCi0gICAgYXBwZW5kU3BhY2U6IGZ1bmN0aW9uKCkKKyAgICBh
cHBlbmRTcGFjZSgpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3N0YXJ0T2ZMaW5lKSB7CiAg
ICAgICAgICAgICB0aGlzLl9hcHBlbmQoIiAiKTsKICAgICAgICAgICAgIHRoaXMubGFzdFRva2Vu
V2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNw
YWNlID0gdHJ1ZTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgYXBwZW5kTmV3bGlu
ZTogZnVuY3Rpb24oZm9yY2UpCisgICAgYXBwZW5kTmV3bGluZShmb3JjZSkKICAgICB7CiAgICAg
ICAgIGlmICgoIXRoaXMubGFzdFRva2VuV2FzTmV3bGluZSAmJiAhdGhpcy5fc3RhcnRPZkxpbmUp
IHx8IGZvcmNlKSB7CiAgICAgICAgICAgICB0aGlzLl9hcHBlbmQoIlxuIik7CkBAIC0xMTgsOSAr
MTE3LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlz
Lmxhc3ROZXdsaW5lQXBwZW5kV2FzTXVsdGlwbGUgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0s
CisgICAgfQogCi0gICAgYXBwZW5kTXVsdGlwbGVOZXdsaW5lczogZnVuY3Rpb24obmV3bGluZXMp
CisgICAgYXBwZW5kTXVsdGlwbGVOZXdsaW5lcyhuZXdsaW5lcykKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KG5ld2xpbmVzID4gMCk7CiAKQEAgLTEzMSw5ICsxMzAsOSBAQCBGb3JtYXR0
ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHdhc011bHRpcGxl
KQogICAgICAgICAgICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gdHJ1ZTsK
LSAgICB9LAorICAgIH0KIAotICAgIHJlbW92ZUxhc3ROZXdsaW5lOiBmdW5jdGlvbigpCisgICAg
cmVtb3ZlTGFzdE5ld2xpbmUoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5s
YXN0VG9rZW5XYXNOZXdsaW5lKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fZm9ybWF0
dGVkQ29udGVudC5sYXN0VmFsdWUgPT09ICJcbiIpOwpAQCAtMTQzLDQ4ICsxNDIsNDggQEAgRm9y
bWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5sYXN0
VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1do
aXRlc3BhY2UgPSBmYWxzZTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgaW5kZW50
OiBmdW5jdGlvbigpCisgICAgaW5kZW50KCkKICAgICB7CiAgICAgICAgICsrdGhpcy5faW5kZW50
OwotICAgIH0sCisgICAgfQogCi0gICAgZGVkZW50OiBmdW5jdGlvbigpCisgICAgZGVkZW50KCkK
ICAgICB7CiAgICAgICAgIC0tdGhpcy5faW5kZW50OwogCiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRoaXMuX2luZGVudCA+PSAwKTsKICAgICAgICAgaWYgKHRoaXMuX2luZGVudCA8IDApCiAgICAg
ICAgICAgICB0aGlzLl9pbmRlbnQgPSAwOwotICAgIH0sCisgICAgfQogCi0gICAgYWRkT3JpZ2lu
YWxMaW5lRW5kaW5nOiBmdW5jdGlvbihvcmlnaW5hbFBvc2l0aW9uKQorICAgIGFkZE9yaWdpbmFs
TGluZUVuZGluZyhvcmlnaW5hbFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgdGhpcy5fb3JpZ2lu
YWxMaW5lRW5kaW5ncy5wdXNoKG9yaWdpbmFsUG9zaXRpb24pOwotICAgIH0sCisgICAgfQogCi0g
ICAgZmluaXNoOiBmdW5jdGlvbigpCisgICAgZmluaXNoKCkKICAgICB7CiAgICAgICAgIHRoaXMu
YXBwZW5kTmV3bGluZSgpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAg
X3BvcE5ld0xpbmU6IGZ1bmN0aW9uKCkKKyAgICBfcG9wTmV3TGluZSgpCiAgICAgewogICAgICAg
ICB2YXIgcmVtb3ZlZCA9IHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQucG9wKCk7CiAgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZENvbnRlbnRMZW5ndGggLT0gcmVtb3ZlZC5sZW5ndGg7CiAgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLnBvcCgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2Fw
cGVuZDogZnVuY3Rpb24oc3RyKQorICAgIF9hcHBlbmQoc3RyKQogICAgIHsKICAgICAgICAgdGhp
cy5fZm9ybWF0dGVkQ29udGVudC5wdXNoKHN0cik7CiAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZENv
bnRlbnRMZW5ndGggKz0gc3RyLmxlbmd0aDsKLSAgICB9LAorICAgIH0KIAotICAgIF9hcHBlbmRJ
bmRlbnQ6IGZ1bmN0aW9uKCkKKyAgICBfYXBwZW5kSW5kZW50KCkKICAgICB7CiAgICAgICAgIC8v
IEluZGVudCBpcyBhbHJlYWR5IGluIHRoZSBjYWNoZS4KICAgICAgICAgaWYgKHRoaXMuX2luZGVu
dCA8IHRoaXMuX2luZGVudENhY2hlLmxlbmd0aCkgewpAQCAtMTkzLDcgKzE5Miw3IEBAIEZvcm1h
dHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IEluZGVudCB3YXMgbm90IGluIHRoZSBjYWNoZSwgZmlsbCB1cCB0aGUgY2FjaGUgdXAgd2l0aCB3
aGF0IHdhcyBuZWVkZWQuCi0gICAgICAgIGNvbnN0IG1heENhY2hlSW5kZW50ID0gMjA7CisgICAg
ICAgIHZhciBtYXhDYWNoZUluZGVudCA9IDIwOwogICAgICAgICB2YXIgbWF4ID0gTWF0aC5taW4o
dGhpcy5faW5kZW50LCBtYXhDYWNoZUluZGVudCk7CiAgICAgICAgIGZvciAodmFyIGkgPSB0aGlz
Ll9pbmRlbnRDYWNoZS5sZW5ndGg7IGkgPD0gbWF4OyArK2kpCiAgICAgICAgICAgICB0aGlzLl9p
bmRlbnRDYWNoZVtpXSA9IHRoaXMuX2luZGVudENhY2hlW2kgLSAxXSArIHRoaXMuX2luZGVudFN0
cmluZzsKQEAgLTIwNyw5ICsyMDYsOSBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kKHRoaXMuX2luZGVudENhY2hlW2lu
ZGVudF0pOwogICAgICAgICAgICAgaW5kZW50IC09IG1heENhY2hlSW5kZW50OwogICAgICAgICB9
IHdoaWxlIChpbmRlbnQgPiAwKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRNYXBwaW5nSWZO
ZWVkZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRpb24pCisgICAgX2FkZE1hcHBpbmdJZk5lZWRl
ZChvcmlnaW5hbFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKG9yaWdpbmFsUG9zaXRpb24g
LSB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlvbiA9PT0gdGhpcy5fZm9ybWF0dGVkQ29udGVudExl
bmd0aCAtIHRoaXMuX2xhc3RGb3JtYXR0ZWRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTIxOSw5ICsyMTgsOSBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgdGhpcy5fbGFzdE9yaWdpbmFsUG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9u
OwogICAgICAgICB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZWRD
b250ZW50TGVuZ3RoOwotICAgIH0sCisgICAgfQogCi0gICAgX2FkZEZvcm1hdHRlZExpbmVFbmRp
bmc6IGZ1bmN0aW9uKCkKKyAgICBfYWRkRm9ybWF0dGVkTGluZUVuZGluZygpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9mb3JtYXR0ZWRDb250ZW50Lmxhc3RWYWx1ZSA9PT0g
IlxuIik7CiAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLnB1c2godGhpcy5fZm9y
bWF0dGVkQ29udGVudExlbmd0aCAtIDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2Vy
LmpzCmluZGV4IDNkYzExZjFjYzAzNDEzMWExMmZjZDY3MmVmNTJiZmE1YWZhOWVjNmUuLjUyNjg1
Nzk4YTRlYzA2MGZmMzBkNWE3YWJkNTYwZTllOGIxMDU4MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9B
bmFseXplck1hbmFnZXIuanMKQEAgLTIzLDU4ICsyMyw1MiBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIgPSBm
dW5jdGlvbigpCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyID0gY2xhc3MgQW5hbHl6ZXJN
YW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252
ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBl
cigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMu
X2VzbGludENvbmZpZyA9IHsKLSAgICAgICAgZW52OiB7Ci0gICAgICAgICAgICAiYnJvd3NlciI6
IHRydWUsCi0gICAgICAgICAgICAibm9kZSI6IGZhbHNlCi0gICAgICAgIH0sCi0gICAgICAgIGds
b2JhbHM6IHsKLSAgICAgICAgICAgICJkb2N1bWVudCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAg
ICAgcnVsZXM6IHsKLSAgICAgICAgICAgICJjb25zaXN0ZW50LXJldHVybiI6IDIsCi0gICAgICAg
ICAgICAiY3VybHkiOiAwLAotICAgICAgICAgICAgImVxZXFlcSI6IDAsCi0gICAgICAgICAgICAi
bmV3LXBhcmVucyI6IDAsCi0gICAgICAgICAgICAibm8tY29tbWEtZGFuZ2xlIjogMCwKLSAgICAg
ICAgICAgICJuby1jb25zb2xlIjogMCwKLSAgICAgICAgICAgICJuby1jb25zdGFudC1jb25kaXRp
b24iOiAwLAotICAgICAgICAgICAgIm5vLWV4dHJhLWJpbmQiOiAyLAotICAgICAgICAgICAgIm5v
LWV4dHJhLXNlbWkiOiAyLAotICAgICAgICAgICAgIm5vLXByb3RvIjogMCwKLSAgICAgICAgICAg
ICJuby1yZXR1cm4tYXNzaWduIjogMiwKLSAgICAgICAgICAgICJuby10cmFpbGluZy1zcGFjZXMi
OiAyLAotICAgICAgICAgICAgIm5vLXVuZGVyc2NvcmUtZGFuZ2xlIjogMCwKLSAgICAgICAgICAg
ICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAotICAgICAgICAgICAgIm5vLXdyYXAtZnVuYyI6
IDIsCi0gICAgICAgICAgICAic2VtaSI6IDIsCi0gICAgICAgICAgICAic3BhY2UtaW5maXgtb3Bz
IjogMiwKLSAgICAgICAgICAgICJzcGFjZS1yZXR1cm4tdGhyb3ctY2FzZSI6IDIsCi0gICAgICAg
ICAgICAic3RyaWN0IjogMCwKLSAgICAgICAgICAgICJ2YWxpZC10eXBlb2YiOiAyCi0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGhpcy5fc291cmNlQ29kZU1lc3NhZ2VzTWFwID0gbmV3IFdlYWtN
YXA7Ci0KLSAgICBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LkNvbnRlbnREaWRDaGFuZ2UsIHRoaXMuX2hhbmRsZVNv
dXJjZUNvZGVDb250ZW50RGlkQ2hhbmdlLCB0aGlzKTsKLX07CisgICAgY29uc3RydWN0b3IoKQor
ICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKworICAgICAgICB0aGlzLl9lc2xpbnRDb25maWcgPSB7
CisgICAgICAgICAgICBlbnY6IHsKKyAgICAgICAgICAgICAgICAiYnJvd3NlciI6IHRydWUsCisg
ICAgICAgICAgICAgICAgIm5vZGUiOiBmYWxzZQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IGdsb2JhbHM6IHsKKyAgICAgICAgICAgICAgICAiZG9jdW1lbnQiOiB0cnVlCisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgcnVsZXM6IHsKKyAgICAgICAgICAgICAgICAiY29uc2lzdGVudC1y
ZXR1cm4iOiAyLAorICAgICAgICAgICAgICAgICJjdXJseSI6IDAsCisgICAgICAgICAgICAgICAg
ImVxZXFlcSI6IDAsCisgICAgICAgICAgICAgICAgIm5ldy1wYXJlbnMiOiAwLAorICAgICAgICAg
ICAgICAgICJuby1jb21tYS1kYW5nbGUiOiAwLAorICAgICAgICAgICAgICAgICJuby1jb25zb2xl
IjogMCwKKyAgICAgICAgICAgICAgICAibm8tY29uc3RhbnQtY29uZGl0aW9uIjogMCwKKyAgICAg
ICAgICAgICAgICAibm8tZXh0cmEtYmluZCI6IDIsCisgICAgICAgICAgICAgICAgIm5vLWV4dHJh
LXNlbWkiOiAyLAorICAgICAgICAgICAgICAgICJuby1wcm90byI6IDAsCisgICAgICAgICAgICAg
ICAgIm5vLXJldHVybi1hc3NpZ24iOiAyLAorICAgICAgICAgICAgICAgICJuby10cmFpbGluZy1z
cGFjZXMiOiAyLAorICAgICAgICAgICAgICAgICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDAsCisg
ICAgICAgICAgICAgICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IDIsCisgICAgICAgICAgICAg
ICAgIm5vLXdyYXAtZnVuYyI6IDIsCisgICAgICAgICAgICAgICAgInNlbWkiOiAyLAorICAgICAg
ICAgICAgICAgICJzcGFjZS1pbmZpeC1vcHMiOiAyLAorICAgICAgICAgICAgICAgICJzcGFjZS1y
ZXR1cm4tdGhyb3ctY2FzZSI6IDIsCisgICAgICAgICAgICAgICAgInN0cmljdCI6IDAsCisgICAg
ICAgICAgICAgICAgInZhbGlkLXR5cGVvZiI6IDIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
IAotV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwID0gbmV3IE1h
cDsKLVdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1hcC5zZXQoV2Vi
SW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0LCBlc2xpbnQpOworICAgICAgICB0aGlzLl9z
b3VyY2VDb2RlTWVzc2FnZXNNYXAgPSBuZXcgV2Vha01hcDsKIAotV2ViSW5zcGVjdG9yLkFuYWx5
emVyTWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5B
bmFseXplck1hbmFnZXIsCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3Rv
dHlwZSwKKyAgICAgICAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250ZW50RGlkQ2hhbmdlLCB0aGlzLl9oYW5k
bGVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZSwgdGhpcyk7CisgICAgfQogCiAgICAgLy8gUHVi
bGljCiAKLSAgICBnZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291
cmNlQ29kZSkKKyAgICBnZXRBbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZShzb3VyY2VDb2Rl
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCkgewogICAgICAgICAgICAgdmFyIGFuYWx5emVyID0gV2ViSW5zcGVjdG9yLkFuYWx5emVy
TWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLmdldChzb3VyY2VDb2RlLnR5cGUpOwpAQCAtMTA0LDE2
ICs5OCwxNiBAQCBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICAgICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0cmlldmVBbmFs
eXplck1lc3NhZ2VzLmJpbmQodGhpcykpOwogICAgICAgICB9LmJpbmQodGhpcykpOwotICAgIH0s
CisgICAgfQogCi0gICAgc291cmNlQ29kZUNhbkJlQW5hbHl6ZWQ6IGZ1bmN0aW9uKHNvdXJjZUNv
ZGUpCisgICAgc291cmNlQ29kZUNhbkJlQW5hbHl6ZWQoc291cmNlQ29kZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBzb3VyY2VDb2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBl
LlNjcmlwdDsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9oYW5kbGVT
b3VyY2VDb2RlQ29udGVudERpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX2hhbmRsZVNv
dXJjZUNvZGVDb250ZW50RGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIHNvdXJj
ZUNvZGUgPSBldmVudC50YXJnZXQ7CiAKQEAgLTEyMSwzICsxMTUsNiBAQCBXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc291cmNlQ29kZU1l
c3NhZ2VzTWFwLmRlbGV0ZShzb3VyY2VDb2RlKTsKICAgICB9CiB9OworCitXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyLl90eXBlQW5hbHl6ZXJNYXAgPSBuZXcgTWFwOworV2ViSW5zcGVjdG9y
LkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwLnNldChXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UuVHlwZS5TY3JpcHQsIGVzbGludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3IuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3IuanMKaW5kZXggMTYw
Mjc1ZGY3ZmQ2YTg0ZGI5N2MwNGQxOGRhMmMzNjhjNjdhZGMwZC4uM2U4N2JiNWE0YmViOTMyZjRm
OGY2NjY0MjIxNjk3NWQ5YjE0MmQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvci5qcwpAQCAtMjQs
NDggKzI0LDQ1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
V2ViSW5zcGVjdG9yLkFubm90YXRvciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVUZXh0RWRpdG9yKQor
V2ViSW5zcGVjdG9yLkFubm90YXRvciA9IGNsYXNzIEFubm90YXRvciBleHRlbmRzIFdlYkluc3Bl
Y3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVj
dG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0
b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlVGV4
dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciwgc291
cmNlQ29kZVRleHRFZGl0b3IpOworICAgIGNvbnN0cnVjdG9yKHNvdXJjZUNvZGVUZXh0RWRpdG9y
KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotICAgIHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRp
dG9yID0gc291cmNlQ29kZVRleHRFZGl0b3I7Ci0gICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIg
PSBudWxsOwotICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7Ci19OworICAgICAgICBjb25zb2xl
LmFzc2VydChzb3VyY2VDb2RlVGV4dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvciwgc291cmNlQ29kZVRleHRFZGl0b3IpOwogCi1XZWJJbnNwZWN0b3Iu
QW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkFu
bm90YXRvciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAor
ICAgICAgICB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRpdG9y
OworICAgICAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgIHRoaXMu
X2lzQWN0aXZlID0gZmFsc2U7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKICAgICBnZXQgc291
cmNlQ29kZVRleHRFZGl0b3IoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZUNv
ZGVUZXh0RWRpdG9yOwotICAgIH0sCisgICAgfQogCi0gICAgaXNBY3RpdmU6IGZ1bmN0aW9uKCkK
KyAgICBpc0FjdGl2ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faXNBY3RpdmU7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBwYXVzZTogZnVuY3Rpb24oKQorICAgIHBhdXNlKCkKICAgICB7
CiAgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7CiAgICAgICAgIHRoaXMuX2lz
QWN0aXZlID0gZmFsc2U7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXN1bWU6IGZ1bmN0aW9uKCkK
KyAgICByZXN1bWUoKQogICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQo
KTsKICAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOwogICAgICAgICB0aGlzLmluc2VydEFu
bm90YXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZWZyZXNoOiBmdW5jdGlvbigpCisg
ICAgcmVmcmVzaCgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pc0FjdGl2
ZSk7CiAgICAgICAgIGlmICghdGhpcy5faXNBY3RpdmUpCkBAIC03MywzNyArNzAsMzcgQEAgV2Vi
SW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fY2xlYXJU
aW1lb3V0SWZOZWVkZWQoKTsKICAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOwotICAg
IH0sCisgICAgfQogCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICByZXNldCgpCiAgICAgewog
ICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwogICAgICAgICB0aGlzLl9pc0Fj
dGl2ZSA9IHRydWU7CiAgICAgICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgICB0
aGlzLmluc2VydEFubm90YXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjbGVhcjogZnVu
Y3Rpb24oKQorICAgIGNsZWFyKCkKICAgICB7CiAgICAgICAgIHRoaXMucGF1c2UoKTsKICAgICAg
ICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90
ZWN0ZWQKIAotICAgIGluc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgaW5zZXJ0QW5u
b3RhdGlvbnMoKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4K
LSAgICB9LAorICAgIH0KIAotICAgIGNsZWFyQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBj
bGVhckFubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNs
YXNzZXMuCi0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfY2xlYXJUaW1l
b3V0SWZOZWVkZWQ6IGZ1bmN0aW9uKCkKKyAgICBfY2xlYXJUaW1lb3V0SWZOZWVkZWQoKQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBj
bGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qcwppbmRleCA4ZGE2NDljNmExYzJmOTg5ZWE2
YzJkNmE3ODM1NTJiYzU4ZTkwZjkxLi43OTg2NmEyYjliODNkZTRlOThhOTEyODg2N2VmYmM5NjY1
YzM1N2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdl
ci5qcwpAQCAtMjMsNzQgKzIzLDU1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyID0gZnVuY3Rp
b24oKQorV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyID0gY2xhc3MgQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8g
RklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFu
ZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwot
Ci0gICAgaWYgKHdpbmRvdy5BcHBsaWNhdGlvbkNhY2hlQWdlbnQpCi0gICAgICAgIEFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5lbmFibGUoKTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2Us
IHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkZy
YW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LkNoaWxkRnJhbWVX
YXNSZW1vdmVkLCB0aGlzLl9jaGlsZEZyYW1lV2FzUmVtb3ZlZCwgdGhpcyk7Ci0KLSAgICB0aGlz
Ll9vbmxpbmUgPSB0cnVlOworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVy
KCk7CiAKLSAgICB0aGlzLmluaXRpYWxpemUoKTsKLX07CisgICAgICAgIGlmICh3aW5kb3cuQXBw
bGljYXRpb25DYWNoZUFnZW50KQorICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUFnZW50LmVu
YWJsZSgpOwogCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuRXZlbnQgPSB7
Ci0gICAgQ2xlYXJlZDogImFwcGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItY2xlYXJlZCIsCi0gICAg
RnJhbWVNYW5pZmVzdEFkZGVkOiAiYXBwbGljYXRpb24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5p
ZmVzdC1hZGRlZCIsCi0gICAgRnJhbWVNYW5pZmVzdFJlbW92ZWQ6ICJhcHBsaWNhdGlvbi1jYWNo
ZS1tYW5hZ2VyLWZyYW1lLW1hbmlmZXN0LXJlbW92ZWQiLAotICAgIEZyYW1lTWFuaWZlc3RTdGF0
dXNDaGFuZ2VkOiAiYXBwbGljYXRpb24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5pZmVzdC1zdGF0
dXMtY2hhbmdlZCIsCi0gICAgTmV0d29ya1N0YXRlVXBkYXRlZDogImFwcGxpY2F0aW9uLWNhY2hl
LW1hbmFnZXItbmV0d29yay1zdGF0ZS11cGRhdGVkIgotfTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNv
dXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1l
LkV2ZW50LkNoaWxkRnJhbWVXYXNSZW1vdmVkLCB0aGlzLl9jaGlsZEZyYW1lV2FzUmVtb3ZlZCwg
dGhpcyk7CiAKLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5TdGF0dXMgPSB7
Ci0gICAgVW5jYWNoZWQ6IDAsCi0gICAgSWRsZTogMSwKLSAgICBDaGVja2luZzogMiwKLSAgICBE
b3dubG9hZGluZzogMywKLSAgICBVcGRhdGVSZWFkeTogNCwKLSAgICBPYnNvbGV0ZTogNQotfTsK
KyAgICAgICAgdGhpcy5fb25saW5lID0gdHJ1ZTsKIAotV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9y
LkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLAorICAgICAgICB0aGlzLmluaXRpYWxpemUoKTsKKyAg
ICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICBp
bml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ2FjaGVPYmplY3Rz
ID0gW107CiAKICAgICAgICAgaWYgKHdpbmRvdy5BcHBsaWNhdGlvbkNhY2hlQWdlbnQpCiAgICAg
ICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyh0aGlz
Ll9mcmFtZXNXaXRoTWFuaWZlc3RzTG9hZGVkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQog
Ci0gICAgbmV0d29ya1N0YXRlVXBkYXRlZDogZnVuY3Rpb24oaXNOb3dPbmxpbmUpCisgICAgbmV0
d29ya1N0YXRlVXBkYXRlZChpc05vd09ubGluZSkKICAgICB7CiAgICAgICAgIHRoaXMuX29ubGlu
ZSA9IGlzTm93T25saW5lOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5FdmVudC5OZXR3b3JrU3RhdGVV
cGRhdGVkLCB7b25saW5lOiB0aGlzLl9vbmxpbmV9KTsKLSAgICB9LAorICAgIH0KIAogICAgIGdl
dCBvbmxpbmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX29ubGluZTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRhdGVkOiBmdW5jdGlvbihmcmFt
ZUlkLCBtYW5pZmVzdFVSTCwgc3RhdHVzKQorICAgIGFwcGxpY2F0aW9uQ2FjaGVTdGF0dXNVcGRh
dGVkKGZyYW1lSWQsIG1hbmlmZXN0VVJMLCBzdGF0dXMpCiAgICAgewogICAgICAgICB2YXIgZnJh
bWUgPSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIuZnJhbWVGb3JJZGVudGlmaWVy
KGZyYW1lSWQpOwogICAgICAgICBpZiAoIWZyYW1lKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RVcGRhdGVkKGZyYW1lLCBtYW5pZmVzdFVSTCwgc3Rh
dHVzKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlcXVlc3RBcHBsaWNhdGlvbkNhY2hlOiBmdW5j
dGlvbihmcmFtZSwgY2FsbGJhY2spCisgICAgcmVxdWVzdEFwcGxpY2F0aW9uQ2FjaGUoZnJhbWUs
IGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2tXcmFwcGVyKGVycm9y
LCBhcHBsaWNhdGlvbkNhY2hlKQogICAgICAgICB7CkBAIC0xMDMsMTEgKzg0LDExIEBAIFdlYklu
c3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
IAogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0QXBwbGljYXRpb25DYWNoZUZvckZy
YW1lKGZyYW1lLmlkLCBjYWxsYmFja1dyYXBwZXIpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8g
UHJpdmF0ZQogCi0gICAgX21haW5SZXNvdXJjZURpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisg
ICAgX21haW5SZXNvdXJjZURpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5GcmFtZSk7CiAKQEAg
LTEyMiwxNCArMTAzLDE0IEBAIFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHdpbmRvdy5BcHBsaWNhdGlvbkNhY2hlQWdlbnQp
CiAgICAgICAgICAgICBBcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0TWFuaWZlc3RGb3JGcmFtZShl
dmVudC50YXJnZXQuaWQsIHRoaXMuX21hbmlmZXN0Rm9yRnJhbWVMb2FkZWQuYmluZCh0aGlzLCBl
dmVudC50YXJnZXQuaWQpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jaGlsZEZyYW1lV2FzUmVt
b3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2NoaWxkRnJhbWVXYXNSZW1vdmVkKGV2ZW50KQog
ICAgIHsKICAgICAgICAgdGhpcy5fZnJhbWVNYW5pZmVzdFJlbW92ZWQoZXZlbnQuZGF0YS5jaGls
ZEZyYW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYW5pZmVzdEZvckZyYW1lTG9hZGVkOiBm
dW5jdGlvbihmcmFtZUlkLCBlcnJvciwgbWFuaWZlc3RVUkwpCisgICAgX21hbmlmZXN0Rm9yRnJh
bWVMb2FkZWQoZnJhbWVJZCwgZXJyb3IsIG1hbmlmZXN0VVJMKQogICAgIHsKICAgICAgICAgaWYg
KGVycm9yKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTQwLDkgKzEyMSw5IEBAIFdlYkluc3Bl
Y3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYg
KCFtYW5pZmVzdFVSTCkKICAgICAgICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RSZW1vdmVkKGZy
YW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9mcmFtZXNXaXRoTWFuaWZlc3RzTG9hZGVkOiBm
dW5jdGlvbihlcnJvciwgZnJhbWVzV2l0aE1hbmlmZXN0cykKKyAgICBfZnJhbWVzV2l0aE1hbmlm
ZXN0c0xvYWRlZChlcnJvciwgZnJhbWVzV2l0aE1hbmlmZXN0cykKICAgICB7CiAgICAgICAgIGlm
IChlcnJvcikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NCw5ICsxMzUsOSBAQCBXZWJJbnNw
ZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgICAg
ICB0aGlzLl9mcmFtZU1hbmlmZXN0VXBkYXRlZChmcmFtZSwgZnJhbWVzV2l0aE1hbmlmZXN0c1tp
XS5tYW5pZmVzdFVSTCwgZnJhbWVzV2l0aE1hbmlmZXN0c1tpXS5zdGF0dXMpOwogICAgICAgICB9
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZnJhbWVNYW5pZmVzdFVwZGF0ZWQ6IGZ1bmN0aW9uKGZy
YW1lLCBtYW5pZmVzdFVSTCwgc3RhdHVzKQorICAgIF9mcmFtZU1hbmlmZXN0VXBkYXRlZChmcmFt
ZSwgbWFuaWZlc3RVUkwsIHN0YXR1cykKICAgICB7CiAgICAgICAgIGlmIChzdGF0dXMgPT09IFdl
Ykluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5TdGF0dXMuVW5jYWNoZWQpIHsKICAg
ICAgICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RSZW1vdmVkKGZyYW1lKTsKQEAgLTE4NCw5ICsx
NjUsOSBAQCBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0g
ewogCiAgICAgICAgIGlmIChzdGF0dXNDaGFuZ2VkKQogICAgICAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLkV2
ZW50LkZyYW1lTWFuaWZlc3RTdGF0dXNDaGFuZ2VkLCB7ZnJhbWVNYW5pZmVzdDogdGhpcy5fYXBw
bGljYXRpb25DYWNoZU9iamVjdHNbZnJhbWUuaWRdfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
ZnJhbWVNYW5pZmVzdFJlbW92ZWQ6IGZ1bmN0aW9uKGZyYW1lKQorICAgIF9mcmFtZU1hbmlmZXN0
UmVtb3ZlZChmcmFtZSkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fYXBwbGljYXRpb25DYWNo
ZU9iamVjdHNbZnJhbWUuaWRdKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk3LDQgKzE3OCwx
OSBAQCBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CitXZWJJbnNwZWN0
b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuRXZlbnQgPSB7CisgICAgQ2xlYXJlZDogImFwcGxp
Y2F0aW9uLWNhY2hlLW1hbmFnZXItY2xlYXJlZCIsCisgICAgRnJhbWVNYW5pZmVzdEFkZGVkOiAi
YXBwbGljYXRpb24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5pZmVzdC1hZGRlZCIsCisgICAgRnJh
bWVNYW5pZmVzdFJlbW92ZWQ6ICJhcHBsaWNhdGlvbi1jYWNoZS1tYW5hZ2VyLWZyYW1lLW1hbmlm
ZXN0LXJlbW92ZWQiLAorICAgIEZyYW1lTWFuaWZlc3RTdGF0dXNDaGFuZ2VkOiAiYXBwbGljYXRp
b24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5pZmVzdC1zdGF0dXMtY2hhbmdlZCIsCisgICAgTmV0
d29ya1N0YXRlVXBkYXRlZDogImFwcGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItbmV0d29yay1zdGF0
ZS11cGRhdGVkIgorfTsKKworV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLlN0
YXR1cyA9IHsKKyAgICBVbmNhY2hlZDogMCwKKyAgICBJZGxlOiAxLAorICAgIENoZWNraW5nOiAy
LAorICAgIERvd25sb2FkaW5nOiAzLAorICAgIFVwZGF0ZVJlYWR5OiA0LAorICAgIE9ic29sZXRl
OiA1Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQmFzaWNCbG9ja0Fubm90YXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Jhc2ljQmxvY2tBbm5vdGF0b3IuanMKaW5kZXgg
YjMzODI0OWFkZGRmMzQ0YTNlZGYzYWNiZTQ2NjdjNTdjNzE3NTRjZi4uYTA4Zjc5Njk5M2MyYjQz
NTkzMDYzNjk4M2Y2ZmI3NjQ4ZTYwMjBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQmFzaWNCbG9ja0Fubm90YXRvci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9CYXNpY0Js
b2NrQW5ub3RhdG9yLmpzCkBAIC0yNCwzOCArMjQsMzQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQmFzaWNCbG9ja0Fubm90YXRvciA9
IGZ1bmN0aW9uKHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3JpcHQpCitXZWJJbnNwZWN0b3IuQmFz
aWNCbG9ja0Fubm90YXRvciA9IGNsYXNzIEJhc2ljQmxvY2tBbm5vdGF0b3IgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuQW5ub3RhdG9yCiB7Ci0gICAgV2ViSW5zcGVjdG9yLkFubm90YXRvci5jYWxsKHRo
aXMsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKLQotICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsK
LSAgICB0aGlzLl9iYXNpY0Jsb2NrTWFya2VycyA9IG5ldyBNYXA7IC8vIE9ubHkgY29udGFpbnMg
dW5leGVjdXRlZCBiYXNpYyBibG9ja3MuCi19OwotCi1XZWJJbnNwZWN0b3IuQmFzaWNCbG9ja0Fu
bm90YXRvci5IYXNOb3RFeGVjdXRlZENsYXNzTmFtZSA9ICJiYXNpYy1ibG9jay1oYXMtbm90LWV4
ZWN1dGVkIjsKKyAgICBjb25zdHJ1Y3Rvcihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQor
ICAgIHsKKyAgICAgICAgc3VwZXIoc291cmNlQ29kZVRleHRFZGl0b3IpOwogCi1XZWJJbnNwZWN0
b3IuQmFzaWNCbG9ja0Fubm90YXRvci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdl
Ykluc3BlY3Rvci5CYXNpY0Jsb2NrQW5ub3RhdG9yLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLkFubm90YXRvci5wcm90b3R5cGUsCisgICAgICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsK
KyAgICAgICAgdGhpcy5fYmFzaWNCbG9ja01hcmtlcnMgPSBuZXcgTWFwOyAvLyBPbmx5IGNvbnRh
aW5zIHVuZXhlY3V0ZWQgYmFzaWMgYmxvY2tzLgorICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAog
Ci0gICAgY2xlYXJBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIGNsZWFyQW5ub3RhdGlvbnMo
KQogICAgIHsKICAgICAgICAgZm9yICh2YXIga2V5IG9mIHRoaXMuX2Jhc2ljQmxvY2tNYXJrZXJz
LmtleXMoKSkKICAgICAgICAgICAgIHRoaXMuX2NsZWFyUmFuZ2VGb3JCYXNpY0Jsb2NrTWFya2Vy
KGtleSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpbnNlcnRBbm5vdGF0aW9uczogZnVuY3Rpb24o
KQorICAgIGluc2VydEFubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5pc0Fj
dGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9hbm5vdGF0ZUJhc2lj
QmxvY2tFeGVjdXRpb25SYW5nZXMoKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUK
IAotICAgIF9hbm5vdGF0ZUJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXM6IGZ1bmN0aW9uKCkKKyAg
ICBfYW5ub3RhdGVCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2VzKCkKICAgICB7CiAgICAgICAgIHZh
ciBzb3VyY2VJRCA9IHRoaXMuX3NjcmlwdC5pZDsKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERh
dGUubm93KCk7CkBAIC05MCw5ICs4Niw5IEBAIFdlYkluc3BlY3Rvci5CYXNpY0Jsb2NrQW5ub3Rh
dG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciB0aW1lb3V0VGltZSA9IE1hdGgubWlu
KE1hdGgubWF4KDY1MDAsIHRvdGFsVGltZSksIDMwICogdG90YWxUaW1lKTsKICAgICAgICAgICAg
IHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dCh0aGlzLmluc2VydEFubm90YXRp
b25zLmJpbmQodGhpcyksIHRpbWVvdXRUaW1lKTsKICAgICAgICAgfS5iaW5kKHRoaXMpKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIF9oaWdobGlnaHRUZXh0Rm9yQmFzaWNCbG9jazogZnVuY3Rpb24o
YmFzaWNCbG9jaykKKyAgICBfaGlnaGxpZ2h0VGV4dEZvckJhc2ljQmxvY2soYmFzaWNCbG9jaykK
ICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJhc2ljQmxvY2suc3RhcnRPZmZzZXQgPD0g
YmFzaWNCbG9jay5lbmRPZmZzZXQgJiYgYmFzaWNCbG9jay5zdGFydE9mZnNldCA+PSAwICYmIGJh
c2ljQmxvY2suZW5kT2Zmc2V0ID49IDAsICIiICsgYmFzaWNCbG9jay5zdGFydE9mZnNldCArICI6
IiArIGJhc2ljQmxvY2suZW5kT2Zmc2V0KTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIWJhc2lj
QmxvY2suaGFzRXhlY3V0ZWQpOwpAQCAtMTA0LDE1ICsxMDAsMTUgQEAgV2ViSW5zcGVjdG9yLkJh
c2ljQmxvY2tBbm5vdGF0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBtYXJrZXIgPSB0
aGlzLnNvdXJjZUNvZGVUZXh0RWRpdG9yLmFkZFN0eWxlVG9UZXh0UmFuZ2Uoc3RhcnRQb3NpdGlv
biwgZW5kUG9zaXRpb24sIFdlYkluc3BlY3Rvci5CYXNpY0Jsb2NrQW5ub3RhdG9yLkhhc05vdEV4
ZWN1dGVkQ2xhc3NOYW1lKTsKICAgICAgICAgcmV0dXJuIG1hcmtlcjsKLSAgICB9LAorICAgIH0K
IAotICAgIF9pc1RleHRSYW5nZU9ubHlDbG9zaW5nQnJhY2U6IGZ1bmN0aW9uKHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKQorICAgIF9pc1RleHRSYW5nZU9ubHlDbG9zaW5nQnJhY2Uoc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pCiAgICAgewogICAgICAgICB2YXIgaXNPbmx5Q2xvc2luZ0Jy
YWNlID0gL15ccypcfSQvOwogICAgICAgICByZXR1cm4gaXNPbmx5Q2xvc2luZ0JyYWNlLnRlc3Qo
dGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci5nZXRUZXh0SW5SYW5nZShzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbikpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NsZWFyUmFuZ2VGb3JCYXNpY0Js
b2NrTWFya2VyOiBmdW5jdGlvbihrZXkpCisgICAgX2NsZWFyUmFuZ2VGb3JCYXNpY0Jsb2NrTWFy
a2VyKGtleSkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2Jhc2ljQmxvY2tN
YXJrZXJzLmhhcyhrZXkpKTsKICAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMuX2Jhc2ljQmxvY2tN
YXJrZXJzLmdldChrZXkpOwpAQCAtMTIxLDMgKzExNyw1IEBAIFdlYkluc3BlY3Rvci5CYXNpY0Js
b2NrQW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYmFzaWNCbG9ja01hcmtl
cnMuZGVsZXRlKGtleSk7CiAgICAgfQogfTsKKworV2ViSW5zcGVjdG9yLkJhc2ljQmxvY2tBbm5v
dGF0b3IuSGFzTm90RXhlY3V0ZWRDbGFzc05hbWUgPSAiYmFzaWMtYmxvY2staGFzLW5vdC1leGVj
dXRlZCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQnJhbmNoTWFuYWdlci5qcwppbmRleCBiMzIzNWUwNDA2ZTgz
NzQ2MzM4NjZmZDQ0ZTQyNzBhOWIzYjBkYmViLi42ZGM4ZGUxY2E2NTA4OTEyY2JkNzU0M2VkNjQ0
ZWY1MjU3YTA0OWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0JyYW5jaE1hbmFnZXIuanMKQEAgLTIzLDM3
ICsyMywzNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdl
Ykluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyID0gZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9yLkJyYW5j
aE1hbmFnZXIgPSBjbGFzcyBCcmFuY2hNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVj
dAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0
IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5S
ZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAg
ICAgc3VwZXIoKTsKIAotICAgIHRoaXMuaW5pdGlhbGl6ZSgpOwotfTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1h
aW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsK
IAotV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVj
dG9yOiBXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlciwKKyAgICAgICAgdGhpcy5pbml0aWFsaXpl
KCk7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKLSAgICBpbml0aWFsaXplOiBmdW5jdGlvbigp
CisgICAgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICB0aGlzLl9vcmlnaW5hbEJyYW5jaCA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJhbmNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3JpZ2luYWwi
KSwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRCcmFuY2ggPSB0aGlzLl9vcmln
aW5hbEJyYW5jaC5mb3JrKFdlYkluc3BlY3Rvci5VSVN0cmluZygiV29ya2luZyBDb3B5IikpOwog
ICAgICAgICB0aGlzLl9icmFuY2hlcyA9IFt0aGlzLl9vcmlnaW5hbEJyYW5jaCwgdGhpcy5fY3Vy
cmVudEJyYW5jaF07Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgYnJhbmNoZXMoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX2JyYW5jaGVzOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0
IGN1cnJlbnRCcmFuY2goKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRCcmFu
Y2g7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgY3VycmVudEJyYW5jaChicmFuY2gpCiAgICAg
ewpAQCAtNjYsOSArNjQsOSBAQCBXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRCcmFuY2ggPSBicmFuY2g7CiAKICAgICAgICAgdGhp
cy5fY3VycmVudEJyYW5jaC5hcHBseSgpOwotICAgIH0sCisgICAgfQogCi0gICAgY3JlYXRlQnJh
bmNoOiBmdW5jdGlvbihkaXNwbGF5TmFtZSwgZnJvbUJyYW5jaCkKKyAgICBjcmVhdGVCcmFuY2go
ZGlzcGxheU5hbWUsIGZyb21CcmFuY2gpCiAgICAgewogICAgICAgICBpZiAoIWZyb21CcmFuY2gp
CiAgICAgICAgICAgICBmcm9tQnJhbmNoID0gdGhpcy5fb3JpZ2luYWxCcmFuY2g7CkBAIC04MCw5
ICs3OCw5IEBAIFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdmFyIG5ld0JyYW5jaCA9IGZyb21CcmFuY2guZm9yayhkaXNwbGF5TmFtZSk7CiAgICAgICAg
IHRoaXMuX2JyYW5jaGVzLnB1c2gobmV3QnJhbmNoKTsKICAgICAgICAgcmV0dXJuIG5ld0JyYW5j
aDsKLSAgICB9LAorICAgIH0KIAotICAgIGRlbGV0ZUJyYW5jaDogZnVuY3Rpb24oYnJhbmNoKQor
ICAgIGRlbGV0ZUJyYW5jaChicmFuY2gpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChi
cmFuY2ggaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJhbmNoKTsKICAgICAgICAgaWYgKCEoYnJh
bmNoIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyYW5jaCkpCkBAIC05NiwxMSArOTQsMTEgQEAg
V2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChi
cmFuY2ggPT09IHRoaXMuX2N1cnJlbnRCcmFuY2gpCiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50
QnJhbmNoID0gdGhpcy5fb3JpZ2luYWxCcmFuY2g7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQ
cml2YXRlCiAKLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAg
ICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5h
c3NlcnQoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lKTsKIApAQCAt
MTEwLDUgKzEwOCwzIEBAIFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7CiAgICAgfQogfTsKLQotV2ViSW5zcGVjdG9yLkJy
YW5jaE1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJv
dG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCmluZGV4IGZhNmUyZDRi
MDFmNjhjMjg5NDM0OWI4ZGQwNWRkZDEwNjgxNGUxMjguLjdlYjliOTY3NzRjMmE0ZjNjNThjNDlk
MmEwM2NhYWMxZWI5MzUzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMK
QEAgLTIzLDQ5ICsyMyw0NCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLVdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyID0gY2xhc3MgQ1NTU3R5bGVNYW5hZ2VyIGV4dGVuZHMgV2Vi
SW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJ
bnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYklu
c3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIGlmICh3aW5kb3cuQ1NTQWdlbnQpCi0g
ICAgICAgIENTU0FnZW50LmVuYWJsZSgpOwotCi0gICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5n
ZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3Iu
RnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuUmVzb3VyY2VX
YXNBZGRlZCwgdGhpcy5fcmVzb3VyY2VBZGRlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLlJl
c291cmNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuQ29u
dGVudERpZENoYW5nZSwgdGhpcy5fcmVzb3VyY2VDb250ZW50RGlkQ2hhbmdlLCB0aGlzKTsKLSAg
ICBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVz
b3VyY2UuRXZlbnQuVHlwZURpZENoYW5nZSwgdGhpcy5fcmVzb3VyY2VUeXBlRGlkQ2hhbmdlLCB0
aGlzKTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAg
V2ViSW5zcGVjdG9yLkRPTU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NTm9k
ZS5FdmVudC5BdHRyaWJ1dGVNb2RpZmllZCwgdGhpcy5fbm9kZUF0dHJpYnV0ZXNEaWRDaGFuZ2Us
IHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5ET01Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuRXZlbnQuQXR0cmlidXRlUmVtb3ZlZCwgdGhpcy5fbm9kZUF0dHJpYnV0
ZXNEaWRDaGFuZ2UsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5ET01Ob2RlLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRPTU5vZGUuRXZlbnQuRW5hYmxlZFBzZXVkb0NsYXNzZXNDaGFu
Z2VkLCB0aGlzLl9ub2RlUHNldWRvQ2xhc3Nlc0RpZENoYW5nZSwgdGhpcyk7CisgICAgICAgIGlm
ICh3aW5kb3cuQ1NTQWdlbnQpCisgICAgICAgICAgICBDU1NBZ2VudC5lbmFibGUoKTsKIAotICAg
IHRoaXMuX2NvbG9yRm9ybWF0U2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygiZGVm
YXVsdC1jb2xvci1mb3JtYXQiLCBXZWJJbnNwZWN0b3IuQ29sb3IuRm9ybWF0Lk9yaWdpbmFsKTsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlk
Q2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LlJlc291cmNlV2FzQWRkZWQsIHRoaXMuX3Jlc291
cmNlQWRkZWQsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250ZW50RGlkQ2hhbmdlLCB0
aGlzLl9yZXNvdXJjZUNvbnRlbnREaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0
b3IuUmVzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQu
VHlwZURpZENoYW5nZSwgdGhpcy5fcmVzb3VyY2VUeXBlRGlkQ2hhbmdlLCB0aGlzKTsKIAotICAg
IHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVyTWFwID0ge307Ci0gICAgdGhpcy5fc3R5bGVTaGVl
dEZyYW1lVVJMTWFwID0ge307Ci0gICAgdGhpcy5fbm9kZVN0eWxlc01hcCA9IHt9OwotfTsKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLkRPTU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RE9NTm9kZS5FdmVudC5BdHRyaWJ1dGVNb2RpZmllZCwgdGhpcy5fbm9kZUF0dHJpYnV0ZXNEaWRD
aGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuRE9NTm9kZS5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5ET01Ob2RlLkV2ZW50LkF0dHJpYnV0ZVJlbW92ZWQsIHRoaXMuX25v
ZGVBdHRyaWJ1dGVzRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkRPTU5v
ZGUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NTm9kZS5FdmVudC5FbmFibGVkUHNl
dWRvQ2xhc3Nlc0NoYW5nZWQsIHRoaXMuX25vZGVQc2V1ZG9DbGFzc2VzRGlkQ2hhbmdlLCB0aGlz
KTsKIAotV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5Gb3JjZWFibGVQc2V1ZG9DbGFzc2Vz
ID0gWyJhY3RpdmUiLCAiZm9jdXMiLCAiaG92ZXIiLCAidmlzaXRlZCJdOworICAgICAgICB0aGlz
Ll9jb2xvckZvcm1hdFNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoImRlZmF1bHQt
Y29sb3ItZm9ybWF0IiwgV2ViSW5zcGVjdG9yLkNvbG9yLkZvcm1hdC5PcmlnaW5hbCk7CiAKLVdl
Ykluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9y
OiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLk9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVy
TWFwID0ge307CisgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRGcmFtZVVSTE1hcCA9IHt9OworICAg
ICAgICB0aGlzLl9ub2RlU3R5bGVzTWFwID0ge307CisgICAgfQogCiAgICAgLy8gUHVibGljCiAK
ICAgICBnZXQgcHJlZmVycmVkQ29sb3JGb3JtYXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRo
aXMuX2NvbG9yRm9ybWF0U2V0dGluZy52YWx1ZTsKLSAgICB9LAorICAgIH0KIAotICAgIGNhbkZv
cmNlUHNldWRvQ2xhc3NlczogZnVuY3Rpb24oKQorICAgIGNhbkZvcmNlUHNldWRvQ2xhc3Nlcygp
CiAgICAgewogICAgICAgICByZXR1cm4gd2luZG93LkNTU0FnZW50ICYmICEhQ1NTQWdlbnQuZm9y
Y2VQc2V1ZG9TdGF0ZTsKLSAgICB9LAorICAgIH0KIAotICAgIHByb3BlcnR5TmFtZUhhc090aGVy
VmVuZG9yUHJlZml4OiBmdW5jdGlvbihuYW1lKQorICAgIHByb3BlcnR5TmFtZUhhc090aGVyVmVu
ZG9yUHJlZml4KG5hbWUpCiAgICAgewogICAgICAgICBpZiAoIW5hbWUgfHwgbmFtZS5sZW5ndGgg
PCA0IHx8IG5hbWUuY2hhckF0KDApICE9PSAiLSIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC03NSwxOCArNzAsMTggQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwcm9wZXJ0eVZhbHVlSGFzT3RoZXJWZW5kb3JLZXl3b3Jk
OiBmdW5jdGlvbih2YWx1ZSkKKyAgICBwcm9wZXJ0eVZhbHVlSGFzT3RoZXJWZW5kb3JLZXl3b3Jk
KHZhbHVlKQogICAgIHsKICAgICAgICAgdmFyIG1hdGNoID0gdmFsdWUubWF0Y2goLyg/Oi1tb3ot
fC1tcy18LW8tfC1lcHViLSlbLVx3XSsvKTsKICAgICAgICAgaWYgKCFtYXRjaCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAorICAgIH0K
IAotICAgIGNhbm9uaWNhbE5hbWVGb3JQcm9wZXJ0eU5hbWU6IGZ1bmN0aW9uKG5hbWUpCisgICAg
Y2Fub25pY2FsTmFtZUZvclByb3BlcnR5TmFtZShuYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFu
YW1lIHx8IG5hbWUubGVuZ3RoIDwgOCB8fCBuYW1lLmNoYXJBdCgwKSAhPT0gIi0iKQogICAgICAg
ICAgICAgcmV0dXJuIG5hbWU7CkBAIC05Niw5ICs5MSw5IEBAIFdlYkluc3BlY3Rvci5DU1NTdHls
ZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIG5hbWU7CiAKICAgICAg
ICAgcmV0dXJuIG1hdGNoWzFdOwotICAgIH0sCisgICAgfQogCi0gICAgc3R5bGVTaGVldEZvcklk
ZW50aWZpZXI6IGZ1bmN0aW9uKGlkKQorICAgIHN0eWxlU2hlZXRGb3JJZGVudGlmaWVyKGlkKQog
ICAgIHsKICAgICAgICAgaWYgKGlkIGluIHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVyTWFwKQog
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVyTWFwW2lkXTsKQEAg
LTEwNiw5ICsxMDEsOSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hl
ZXQoaWQpOwogICAgICAgICB0aGlzLl9zdHlsZVNoZWV0SWRlbnRpZmllck1hcFtpZF0gPSBzdHls
ZVNoZWV0OwogICAgICAgICByZXR1cm4gc3R5bGVTaGVldDsKLSAgICB9LAorICAgIH0KIAotICAg
IHN0eWxlc0Zvck5vZGU6IGZ1bmN0aW9uKG5vZGUpCisgICAgc3R5bGVzRm9yTm9kZShub2RlKQog
ICAgIHsKICAgICAgICAgaWYgKG5vZGUuaWQgaW4gdGhpcy5fbm9kZVN0eWxlc01hcCkKICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9ub2RlU3R5bGVzTWFwW25vZGUuaWRdOwpAQCAtMTE2LDE5ICsx
MTEsMTkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHZhciBzdHlsZXMgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMobm9kZSk7CiAg
ICAgICAgIHRoaXMuX25vZGVTdHlsZXNNYXBbbm9kZS5pZF0gPSBzdHlsZXM7CiAgICAgICAgIHJl
dHVybiBzdHlsZXM7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90ZWN0ZWQKIAotICAgIG1l
ZGlhUXVlcnlSZXN1bHRDaGFuZ2VkOiBmdW5jdGlvbigpCisgICAgbWVkaWFRdWVyeVJlc3VsdENo
YW5nZWQoKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLkNTU09i
c2VydmVyLgogCiAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9ub2RlU3R5bGVzTWFwKQog
ICAgICAgICAgICAgdGhpcy5fbm9kZVN0eWxlc01hcFtrZXldLm1lZGlhUXVlcnlSZXN1bHREaWRD
aGFuZ2UoKTsKLSAgICB9LAorICAgIH0KIAotICAgIHN0eWxlU2hlZXRDaGFuZ2VkOiBmdW5jdGlv
bihzdHlsZVNoZWV0SWRlbnRpZmllcikKKyAgICBzdHlsZVNoZWV0Q2hhbmdlZChzdHlsZVNoZWV0
SWRlbnRpZmllcikKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5D
U1NPYnNlcnZlci4KIApAQCAtMTM4LDExICsxMzMsMTEgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHN0eWxlU2hlZXQubm90ZUNvbnRlbnREaWRD
aGFuZ2UoKTsKIAogICAgICAgICB0aGlzLl91cGRhdGVSZXNvdXJjZUNvbnRlbnQoc3R5bGVTaGVl
dCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfbm9kZVBzZXVkb0Ns
YXNzZXNEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9ub2RlUHNldWRvQ2xhc3Nlc0Rp
ZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIHZhciBub2RlID0gZXZlbnQudGFyZ2V0Owog
CkBAIC0xNTIsOSArMTQ3LDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBub2RlU3R5bGVz
LnBzZXVkb0NsYXNzZXNEaWRDaGFuZ2Uobm9kZSk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0K
IAotICAgIF9ub2RlQXR0cmlidXRlc0RpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX25v
ZGVBdHRyaWJ1dGVzRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSBl
dmVudC50YXJnZXQ7CiAKQEAgLTE2NCw5ICsxNTksOSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIG5vZGVTdHlsZXMuYXR0cmlidXRlRGlkQ2hhbmdlKG5vZGUsIGV2ZW50LmRhdGEubmFtZSk7
CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCiAgICAg
ewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuRnJhbWUpOwogCkBAIC0xNzgsOSArMTczLDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRJZGVudGlmaWVy
TWFwID0ge307CiAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRGcmFtZVVSTE1hcCA9IHt9OwogICAg
ICAgICB0aGlzLl9ub2RlU3R5bGVzTWFwID0ge307Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcmVz
b3VyY2VBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX3Jlc291cmNlQWRkZWQoZXZlbnQpCiAg
ICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuRnJhbWUpOwogCkBAIC0xOTEsOSArMTg2LDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0
eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
dGhpcy5fY2xlYXJTdHlsZVNoZWV0c0ZvclJlc291cmNlKHJlc291cmNlKTsKLSAgICB9LAorICAg
IH0KIAotICAgIF9yZXNvdXJjZVR5cGVEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9y
ZXNvdXJjZVR5cGVEaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2Vy
dChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UpOwogCkBAIC0y
MDIsMjggKzE5NywyOCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9jbGVhclN0eWxlU2hlZXRz
Rm9yUmVzb3VyY2UocmVzb3VyY2UpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NsZWFyU3R5bGVT
aGVldHNGb3JSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgX2NsZWFyU3R5bGVTaGVl
dHNGb3JSZXNvdXJjZShyZXNvdXJjZSkKICAgICB7CiAgICAgICAgIC8vIENsZWFyIGtub3duIHN0
eWxlc2hlZXRzIGZvciB0aGlzIFVSTCBhbmQgZnJhbWUuIFRoaXMgd2lsbCBjYXVzZSB0aGUgc3R5
bGVzaGVldHMgdG8KICAgICAgICAgLy8gYmUgdXBkYXRlZCBuZXh0IHRpbWUgX2ZldGNoSW5mb0Zv
ckFsbFN0eWxlU2hlZXRzIGlzIGNhbGxlZC4KICAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9T
IDYpOiBUaGUgZnJhbWUncyBpZCB3YXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGtleSwgc28gZGVs
ZXRlIGp1c3QgdGhlIHVybCB0b28uCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9zdHlsZVNoZWV0RnJh
bWVVUkxNYXBbdGhpcy5fZnJhbWVVUkxNYXBLZXkocmVzb3VyY2UucGFyZW50RnJhbWUsIHJlc291
cmNlLnVybCldOwogICAgICAgICBkZWxldGUgdGhpcy5fc3R5bGVTaGVldEZyYW1lVVJMTWFwW3Jl
c291cmNlLnVybF07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZnJhbWVVUkxNYXBLZXk6IGZ1bmN0
aW9uKGZyYW1lLCB1cmwpCisgICAgX2ZyYW1lVVJMTWFwS2V5KGZyYW1lLCB1cmwpCiAgICAgewog
ICAgICAgICByZXR1cm4gKGZyYW1lID8gZnJhbWUuaWQgKyAiOiIgOiAiIikgKyB1cmw7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfbG9va3VwU3R5bGVTaGVldEZvclJlc291cmNlOiBmdW5jdGlvbihy
ZXNvdXJjZSwgY2FsbGJhY2spCisgICAgX2xvb2t1cFN0eWxlU2hlZXRGb3JSZXNvdXJjZShyZXNv
dXJjZSwgY2FsbGJhY2spCiAgICAgewogICAgICAgICB0aGlzLl9sb29rdXBTdHlsZVNoZWV0KHJl
c291cmNlLnBhcmVudEZyYW1lLCByZXNvdXJjZS51cmwsIGNhbGxiYWNrKTsKLSAgICB9LAorICAg
IH0KIAotICAgIF9sb29rdXBTdHlsZVNoZWV0OiBmdW5jdGlvbihmcmFtZSwgdXJsLCBjYWxsYmFj
aykKKyAgICBfbG9va3VwU3R5bGVTaGVldChmcmFtZSwgdXJsLCBjYWxsYmFjaykKICAgICB7CiAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZyYW1lIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1l
KTsKIApAQCAtMjM5LDkgKzIzNCw5IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fc3R5bGVTaGVldEZyYW1lVVJM
TWFwW2tleV0gfHwgdGhpcy5fc3R5bGVTaGVldEZyYW1lVVJMTWFwW3VybF0gfHwgbnVsbCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX2ZldGNoSW5mb0ZvckFsbFN0eWxlU2hlZXRz
KHN5bGVTaGVldHNGZXRjaGVkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgX2Zl
dGNoSW5mb0ZvckFsbFN0eWxlU2hlZXRzOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBfZmV0Y2hJ
bmZvRm9yQWxsU3R5bGVTaGVldHMoY2FsbGJhY2spCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydCh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpOwogCkBAIC0yNjksOSArMjY0LDkg
QEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
IAogICAgICAgICBDU1NBZ2VudC5nZXRBbGxTdHlsZVNoZWV0cyhwcm9jZXNzU3R5bGVTaGVldHMu
YmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcmVzb3VyY2VDb250ZW50RGlkQ2hh
bmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfcmVzb3VyY2VDb250ZW50RGlkQ2hhbmdlKGV2ZW50
KQogICAgIHsKICAgICAgICAgdmFyIHJlc291cmNlID0gZXZlbnQudGFyZ2V0OwogICAgICAgICBp
ZiAocmVzb3VyY2UgPT09IHRoaXMuX2lnbm9yZVJlc291cmNlQ29udGVudERpZENoYW5nZUV2ZW50
Rm9yUmVzb3VyY2UpCkBAIC0zMDQsOSArMjk5LDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChyZXNvdXJjZS5fX3BlbmRpbmdDaGFuZ2VU
aW1lb3V0KQogICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlc291cmNlLl9fcGVuZGluZ0NoYW5n
ZVRpbWVvdXQpOwogICAgICAgICByZXNvdXJjZS5fX3BlbmRpbmdDaGFuZ2VUaW1lb3V0ID0gc2V0
VGltZW91dChhcHBseVN0eWxlU2hlZXRDaGFuZ2VzLmJpbmQodGhpcyksIDUwMCk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfdXBkYXRlUmVzb3VyY2VDb250ZW50OiBmdW5jdGlvbihzdHlsZVNoZWV0
KQorICAgIF91cGRhdGVSZXNvdXJjZUNvbnRlbnQoc3R5bGVTaGVldCkKICAgICB7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHN0eWxlU2hlZXQpOwogCkBAIC0zNjYsMyArMzYxLDUgQEAgV2ViSW5z
cGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHN0eWxlU2hlZXQu
X19wZW5kaW5nQ2hhbmdlVGltZW91dCA9IHNldFRpbWVvdXQoYXBwbHlTdHlsZVNoZWV0Q2hhbmdl
cy5iaW5kKHRoaXMpLCA1MDApOwogICAgIH0KIH07CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1h
bmFnZXIuRm9yY2VhYmxlUHNldWRvQ2xhc3NlcyA9IFsiYWN0aXZlIiwgImZvY3VzIiwgImhvdmVy
IiwgInZpc2l0ZWQiXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJv
ckNvbG9yRWRpdGluZ0NvbnRyb2xsZXIuanMKaW5kZXggNThjNjk5Y2E2MzI4M2FhZGE3YzEzNDY4
OTMxOWI2ZDRmZmIyYjIxNS4uNGE3NWNhNWI0ZjdmODcyZDc3NDBjNzBhODEzNGJiNTcxOWEyYzg0
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvQ29kZU1pcnJvckNvbG9yRWRpdGluZ0NvbnRyb2xsZXIuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckNvbG9yRWRp
dGluZ0NvbnRyb2xsZXIuanMKQEAgLTIzLDQyICsyMyw0MCBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29sb3JFZGl0
aW5nQ29udHJvbGxlciA9IGZ1bmN0aW9uKGNvZGVNaXJyb3IsIG1hcmtlcikKK1dlYkluc3BlY3Rv
ci5Db2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJvbGxlciA9IGNsYXNzIENvZGVNaXJyb3JDb2xv
ckVkaXRpbmdDb250cm9sbGVyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5n
Q29udHJvbGxlcgogewotICAgIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xs
ZXIuY2FsbCh0aGlzLCBjb2RlTWlycm9yLCBtYXJrZXIpOwotfTsKLQotV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1
Y3RvcjogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLAotICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5wcm90
b3R5cGUsCisgICAgY29uc3RydWN0b3IoY29kZU1pcnJvciwgbWFya2VyKQorICAgIHsKKyAgICAg
ICAgc3VwZXIoY29kZU1pcnJvciwgbWFya2VyKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAog
ICAgIGdldCBpbml0aWFsVmFsdWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5Db2xvci5mcm9tU3RyaW5nKHRoaXMudGV4dCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQg
Y3NzQ2xhc3NOYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiAiY29sb3IiOwotICAgIH0sCisg
ICAgfQogCi0gICAgcG9wb3ZlcldpbGxQcmVzZW50OiBmdW5jdGlvbihwb3BvdmVyKQorICAgIHBv
cG92ZXJXaWxsUHJlc2VudChwb3BvdmVyKQogICAgIHsKICAgICAgICAgdGhpcy5fY29sb3JQaWNr
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbG9yUGlja2VyOwogICAgICAgICB0aGlzLl9jb2xvclBp
Y2tlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Db2xvclBpY2tlci5FdmVudC5Db2xv
ckNoYW5nZWQsIHRoaXMuX2NvbG9yUGlja2VyQ29sb3JDaGFuZ2VkLCB0aGlzKTsKICAgICAgICAg
cG9wb3Zlci5jb250ZW50ID0gdGhpcy5fY29sb3JQaWNrZXIuZWxlbWVudDsKLSAgICB9LAorICAg
IH0KIAotICAgIHBvcG92ZXJEaWRQcmVzZW50OiBmdW5jdGlvbihwb3BvdmVyKQorICAgIHBvcG92
ZXJEaWRQcmVzZW50KHBvcG92ZXIpCiAgICAgewogICAgICAgICB0aGlzLl9jb2xvclBpY2tlci5j
b2xvciA9IHRoaXMuX3ZhbHVlOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0g
ICAgX2NvbG9yUGlja2VyQ29sb3JDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKKyAgICBfY29sb3JQ
aWNrZXJDb2xvckNoYW5nZWQoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLnZhbHVlID0gZXZl
bnQudGFyZ2V0LmNvbG9yOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxl
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Nv
ZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5qcwppbmRleCA0ZGE4YzQzY2M1Y2RkZjBkZWVl
NDg5Zjk0MTA5MWU4ZGM3YzcyNWNlLi42ZjlmYjA1MzFmYmQwZTUwM2VkOTE2YmVkNjA0OGYzYTA3
NTVhZTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckNvbXBs
ZXRpb25Db250cm9sbGVyLmpzCkBAIC0yMyw3OSArMjMsNjUgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRp
b25Db250cm9sbGVyID0gZnVuY3Rpb24oY29kZU1pcnJvciwgZGVsZWdhdGUsIHN0b3BDaGFyYWN0
ZXJzUmVnZXgpCitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyID0g
Y2xhc3MgQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyIGV4dGVuZHMgV2ViSW5zcGVjdG9y
Lk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3Iu
T2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5P
YmplY3QuY2FsbCh0aGlzKTsKLQotICAgIGNvbnNvbGUuYXNzZXJ0KGNvZGVNaXJyb3IpOwotCi0g
ICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVNaXJyb3I7Ci0gICAgdGhpcy5fc3RvcENoYXJhY3Rl
cnNSZWdleCA9IHN0b3BDaGFyYWN0ZXJzUmVnZXggfHwgbnVsbDsKLSAgICB0aGlzLl9kZWxlZ2F0
ZSA9IGRlbGVnYXRlIHx8IG51bGw7Ci0KLSAgICB0aGlzLl9zdGFydE9mZnNldCA9IE5hTjsKLSAg
ICB0aGlzLl9lbmRPZmZzZXQgPSBOYU47Ci0gICAgdGhpcy5fbGluZU51bWJlciA9IE5hTjsKLSAg
ICB0aGlzLl9wcmVmaXggPSAiIjsKLSAgICB0aGlzLl9jb21wbGV0aW9ucyA9IFtdOwotICAgIHRo
aXMuX2V4dGVuZGVkQ29tcGxldGlvblByb3ZpZGVycyA9IHt9OwotCi0gICAgdGhpcy5fc3VnZ2Vz
dGlvbnNWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3KHRo
aXMpOwotCi0gICAgdGhpcy5fa2V5TWFwID0gewotICAgICAgICAiVXAiOiB0aGlzLl9oYW5kbGVV
cEtleS5iaW5kKHRoaXMpLAotICAgICAgICAiRG93biI6IHRoaXMuX2hhbmRsZURvd25LZXkuYmlu
ZCh0aGlzKSwKLSAgICAgICAgIlJpZ2h0IjogdGhpcy5faGFuZGxlUmlnaHRPckVudGVyS2V5LmJp
bmQodGhpcyksCi0gICAgICAgICJFc2MiOiB0aGlzLl9oYW5kbGVFc2NhcGVLZXkuYmluZCh0aGlz
KSwKLSAgICAgICAgIkVudGVyIjogdGhpcy5faGFuZGxlUmlnaHRPckVudGVyS2V5LmJpbmQodGhp
cyksCi0gICAgICAgICJUYWIiOiB0aGlzLl9oYW5kbGVUYWJLZXkuYmluZCh0aGlzKSwKLSAgICAg
ICAgIkNtZC1BIjogdGhpcy5faGFuZGxlSGlkZUtleS5iaW5kKHRoaXMpLAotICAgICAgICAiQ21k
LVoiOiB0aGlzLl9oYW5kbGVIaWRlS2V5LmJpbmQodGhpcyksCi0gICAgICAgICJTaGlmdC1DbWQt
WiI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKLSAgICAgICAgIkNtZC1ZIjogdGhp
cy5faGFuZGxlSGlkZUtleS5iaW5kKHRoaXMpCi0gICAgfTsKLQotICAgIHRoaXMuX2hhbmRsZUNo
YW5nZUxpc3RlbmVyID0gdGhpcy5faGFuZGxlQ2hhbmdlLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5f
aGFuZGxlQ3Vyc29yQWN0aXZpdHlMaXN0ZW5lciA9IHRoaXMuX2hhbmRsZUN1cnNvckFjdGl2aXR5
LmJpbmQodGhpcyk7Ci0gICAgdGhpcy5faGFuZGxlSGlkZUFjdGlvbkxpc3RlbmVyID0gdGhpcy5f
aGFuZGxlSGlkZUFjdGlvbi5iaW5kKHRoaXMpOwotCi0gICAgdGhpcy5fY29kZU1pcnJvci5hZGRL
ZXlNYXAodGhpcy5fa2V5TWFwKTsKLQotICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImNoYW5nZSIs
IHRoaXMuX2hhbmRsZUNoYW5nZUxpc3RlbmVyKTsKLSAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJj
dXJzb3JBY3Rpdml0eSIsIHRoaXMuX2hhbmRsZUN1cnNvckFjdGl2aXR5TGlzdGVuZXIpOwotICAg
IHRoaXMuX2NvZGVNaXJyb3Iub24oImJsdXIiLCB0aGlzLl9oYW5kbGVIaWRlQWN0aW9uTGlzdGVu
ZXIpOwotICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oInNjcm9sbCIsIHRoaXMuX2hhbmRsZUhpZGVB
Y3Rpb25MaXN0ZW5lcik7Ci19OworICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJyb3IsIGRlbGVnYXRl
LCBzdG9wQ2hhcmFjdGVyc1JlZ2V4KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5HZW5lcmljU3RvcENoYXJhY3Rl
cnNSZWdleCA9IC9bXHM9OjssXS87Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25D
b250cm9sbGVyLkRlZmF1bHRTdG9wQ2hhcmFjdGVyc1JlZ2V4TW9kZU1hcCA9IHsiY3NzIjogL1tc
czo7LHt9KCldLywgImphdmFzY3JpcHQiOiAvW1xzPTo7LCErXC0qLyUmfF5+Pzw+Lnt9KClbXF1d
L307Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkJhc2VFeHBy
ZXNzaW9uU3RvcENoYXJhY3RlcnNSZWdleE1vZGVNYXAgPSB7ImphdmFzY3JpcHQiOiAvW1xzPTo7
LCErXC0qLyUmfF5+Pzw+XS99OwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29u
dHJvbGxlci5PcGVuQnJhY2tldENoYXJhY3RlcnNSZWdleCA9IC9bKHtbXS87Ci1XZWJJbnNwZWN0
b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkNsb3NlQnJhY2tldENoYXJhY3RlcnNS
ZWdleCA9IC9bKX1cXV0vOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJv
bGxlci5NYXRjaGluZ0JyYWNrZXRzID0geyJ7IjogIn0iLCAiKCI6ICIpIiwgIlsiOiAiXSIsICJ9
IjogInsiLCAiKSI6ICIoIiwgIl0iOiAiWyJ9OwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21w
bGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uSGludFN0eWxlQ2xhc3NOYW1lID0gImNvbXBsZXRp
b24taGludCI7Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkNv
bXBsZXRpb25zSGlkZGVuRGVsYXkgPSAyNTA7Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBs
ZXRpb25Db250cm9sbGVyLkNvbXBsZXRpb25UeXBpbmdEZWxheSA9IDI1MDsKLVdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlvbk9yaWdpbiA9ICIrY29t
cGxldGlvbiI7Ci1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkRl
bGV0ZUNvbXBsZXRpb25PcmlnaW4gPSAiK2RlbGV0ZS1jb21wbGV0aW9uIjsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQoY29kZU1pcnJvcik7CisKKyAgICAgICAgdGhpcy5fY29kZU1pcnJvciA9IGNv
ZGVNaXJyb3I7CisgICAgICAgIHRoaXMuX3N0b3BDaGFyYWN0ZXJzUmVnZXggPSBzdG9wQ2hhcmFj
dGVyc1JlZ2V4IHx8IG51bGw7CisgICAgICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGUgfHwg
bnVsbDsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90
b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxl
dGlvbkNvbnRyb2xsZXIsCisgICAgICAgIHRoaXMuX3N0YXJ0T2Zmc2V0ID0gTmFOOworICAgICAg
ICB0aGlzLl9lbmRPZmZzZXQgPSBOYU47CisgICAgICAgIHRoaXMuX2xpbmVOdW1iZXIgPSBOYU47
CisgICAgICAgIHRoaXMuX3ByZWZpeCA9ICIiOworICAgICAgICB0aGlzLl9jb21wbGV0aW9ucyA9
IFtdOworICAgICAgICB0aGlzLl9leHRlbmRlZENvbXBsZXRpb25Qcm92aWRlcnMgPSB7fTsKKwor
ICAgICAgICB0aGlzLl9zdWdnZXN0aW9uc1ZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbXBsZXRp
b25TdWdnZXN0aW9uc1ZpZXcodGhpcyk7CisKKyAgICAgICAgdGhpcy5fa2V5TWFwID0geworICAg
ICAgICAgICAgIlVwIjogdGhpcy5faGFuZGxlVXBLZXkuYmluZCh0aGlzKSwKKyAgICAgICAgICAg
ICJEb3duIjogdGhpcy5faGFuZGxlRG93bktleS5iaW5kKHRoaXMpLAorICAgICAgICAgICAgIlJp
Z2h0IjogdGhpcy5faGFuZGxlUmlnaHRPckVudGVyS2V5LmJpbmQodGhpcyksCisgICAgICAgICAg
ICAiRXNjIjogdGhpcy5faGFuZGxlRXNjYXBlS2V5LmJpbmQodGhpcyksCisgICAgICAgICAgICAi
RW50ZXIiOiB0aGlzLl9oYW5kbGVSaWdodE9yRW50ZXJLZXkuYmluZCh0aGlzKSwKKyAgICAgICAg
ICAgICJUYWIiOiB0aGlzLl9oYW5kbGVUYWJLZXkuYmluZCh0aGlzKSwKKyAgICAgICAgICAgICJD
bWQtQSI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKKyAgICAgICAgICAgICJDbWQt
WiI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKKyAgICAgICAgICAgICJTaGlmdC1D
bWQtWiI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKKyAgICAgICAgICAgICJDbWQt
WSI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKQorICAgICAgICB9OworCisgICAgICAg
IHRoaXMuX2hhbmRsZUNoYW5nZUxpc3RlbmVyID0gdGhpcy5faGFuZGxlQ2hhbmdlLmJpbmQodGhp
cyk7CisgICAgICAgIHRoaXMuX2hhbmRsZUN1cnNvckFjdGl2aXR5TGlzdGVuZXIgPSB0aGlzLl9o
YW5kbGVDdXJzb3JBY3Rpdml0eS5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVIaWRl
QWN0aW9uTGlzdGVuZXIgPSB0aGlzLl9oYW5kbGVIaWRlQWN0aW9uLmJpbmQodGhpcyk7CisKKyAg
ICAgICAgdGhpcy5fY29kZU1pcnJvci5hZGRLZXlNYXAodGhpcy5fa2V5TWFwKTsKKworICAgICAg
ICB0aGlzLl9jb2RlTWlycm9yLm9uKCJjaGFuZ2UiLCB0aGlzLl9oYW5kbGVDaGFuZ2VMaXN0ZW5l
cik7CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImN1cnNvckFjdGl2aXR5IiwgdGhpcy5f
aGFuZGxlQ3Vyc29yQWN0aXZpdHlMaXN0ZW5lcik7CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iu
b24oImJsdXIiLCB0aGlzLl9oYW5kbGVIaWRlQWN0aW9uTGlzdGVuZXIpOworICAgICAgICB0aGlz
Ll9jb2RlTWlycm9yLm9uKCJzY3JvbGwiLCB0aGlzLl9oYW5kbGVIaWRlQWN0aW9uTGlzdGVuZXIp
OworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCiAgICAgZ2V0IGRlbGVnYXRlKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTsKLSAgICB9LAorICAgIH0KIAotICAgIGFkZEV4
dGVuZGVkQ29tcGxldGlvblByb3ZpZGVyOiBmdW5jdGlvbihtb2RlTmFtZSwgcHJvdmlkZXIpCisg
ICAgYWRkRXh0ZW5kZWRDb21wbGV0aW9uUHJvdmlkZXIobW9kZU5hbWUsIHByb3ZpZGVyKQogICAg
IHsKICAgICAgICAgdGhpcy5fZXh0ZW5kZWRDb21wbGV0aW9uUHJvdmlkZXJzW21vZGVOYW1lXSA9
IHByb3ZpZGVyOwotICAgIH0sCisgICAgfQogCi0gICAgdXBkYXRlQ29tcGxldGlvbnM6IGZ1bmN0
aW9uKGNvbXBsZXRpb25zLCBpbXBsaWNpdFN1ZmZpeCkKKyAgICB1cGRhdGVDb21wbGV0aW9ucyhj
b21wbGV0aW9ucywgaW1wbGljaXRTdWZmaXgpCiAgICAgewogICAgICAgICBpZiAoaXNOYU4odGhp
cy5fc3RhcnRPZmZzZXQpIHx8IGlzTmFOKHRoaXMuX2VuZE9mZnNldCkgfHwgaXNOYU4odGhpcy5f
bGluZU51bWJlcikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzgsMjQgKzEyNCwyNCBAQCBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2FwcGx5Q29tcGxldGlvbkhpbnQoY29tcGxldGlv
bnNbaW5kZXhdKTsKLSAgICB9LAorICAgIH0KIAotICAgIGlzQ29tcGxldGlvbkNoYW5nZTogZnVu
Y3Rpb24oY2hhbmdlKQorICAgIGlzQ29tcGxldGlvbkNoYW5nZShjaGFuZ2UpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5faWdub3JlQ2hhbmdlIHx8IGNoYW5nZS5vcmlnaW4gPT09IFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlvbk9yaWdpbiB8
fCBjaGFuZ2Uub3JpZ2luID09PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250
cm9sbGVyLkRlbGV0ZUNvbXBsZXRpb25PcmlnaW47Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpc1No
b3dpbmdDb21wbGV0aW9uczogZnVuY3Rpb24oKQorICAgIGlzU2hvd2luZ0NvbXBsZXRpb25zKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0aW9uc1ZpZXcudmlzaWJsZSB8fCAo
dGhpcy5fY29tcGxldGlvbkhpbnRNYXJrZXIgJiYgdGhpcy5fY29tcGxldGlvbkhpbnRNYXJrZXIu
ZmluZCgpKTsKLSAgICB9LAorICAgIH0KIAotICAgIGlzSGFuZGxpbmdDbGlja0V2ZW50OiBmdW5j
dGlvbigpCisgICAgaXNIYW5kbGluZ0NsaWNrRXZlbnQoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX3N1Z2dlc3Rpb25zVmlldy5pc0hhbmRsaW5nQ2xpY2tFdmVudCgpOwotICAgIH0sCisg
ICAgfQogCi0gICAgaGlkZUNvbXBsZXRpb25zOiBmdW5jdGlvbigpCisgICAgaGlkZUNvbXBsZXRp
b25zKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zVmlldy5oaWRlKCk7CiAKQEAg
LTE3Niw5ICsxNjIsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9s
bGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBkZWxldGUgdGhpcy5fY3VycmVudENvbXBsZXRp
b247CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pZ25vcmVOZXh0Q3Vyc29yQWN0aXZpdHk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBjbG9zZTogZnVuY3Rpb24oKQorICAgIGNsb3NlKCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX2NvZGVNaXJyb3IucmVtb3ZlS2V5TWFwKHRoaXMuX2tleU1hcCk7CiAKQEAg
LTE4NiwzNyArMTcyLDM3IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRy
b2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9mZigiY3Vyc29y
QWN0aXZpdHkiLCB0aGlzLl9oYW5kbGVDdXJzb3JBY3Rpdml0eUxpc3RlbmVyKTsKICAgICAgICAg
dGhpcy5fY29kZU1pcnJvci5vZmYoImJsdXIiLCB0aGlzLl9oYW5kbGVIaWRlQWN0aW9uTGlzdGVu
ZXIpOwogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9mZigic2Nyb2xsIiwgdGhpcy5faGFuZGxl
SGlkZUFjdGlvbkxpc3RlbmVyKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAog
Ci0gICAgY29tcGxldGlvblN1Z2dlc3Rpb25zU2VsZWN0ZWRDb21wbGV0aW9uOiBmdW5jdGlvbihz
dWdnZXN0aW9uc1ZpZXcsIGNvbXBsZXRpb25UZXh0KQorICAgIGNvbXBsZXRpb25TdWdnZXN0aW9u
c1NlbGVjdGVkQ29tcGxldGlvbihzdWdnZXN0aW9uc1ZpZXcsIGNvbXBsZXRpb25UZXh0KQogICAg
IHsKICAgICAgICAgdGhpcy5fYXBwbHlDb21wbGV0aW9uSGludChjb21wbGV0aW9uVGV4dCk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBjb21wbGV0aW9uU3VnZ2VzdGlvbnNDbGlja2VkQ29tcGxldGlv
bjogZnVuY3Rpb24oc3VnZ2VzdGlvbnNWaWV3LCBjb21wbGV0aW9uVGV4dCkKKyAgICBjb21wbGV0
aW9uU3VnZ2VzdGlvbnNDbGlja2VkQ29tcGxldGlvbihzdWdnZXN0aW9uc1ZpZXcsIGNvbXBsZXRp
b25UZXh0KQogICAgIHsKICAgICAgICAgLy8gVGhlIGNsaWNrZWQgc3VnZ2VzdGlvbiBjYXVzZXMg
dGhlIGVkaXRvciB0byBsb29zZSBmb2N1cy4gUmVzdG9yZSBpdCBzbyB0aGUgdXNlciBjYW4ga2Vl
cCB0eXBpbmcuCiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IuZm9jdXMoKTsKIAogICAgICAgICB0
aGlzLl9hcHBseUNvbXBsZXRpb25IaW50KGNvbXBsZXRpb25UZXh0KTsKICAgICAgICAgdGhpcy5f
Y29tbWl0Q29tcGxldGlvbkhpbnQoKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUK
IAogICAgIGdldCBfY3VycmVudFJlcGxhY2VtZW50VGV4dCgpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fY3VycmVudENvbXBsZXRpb24gKyB0aGlzLl9pbXBsaWNpdFN1ZmZpeDsKLSAgICB9
LAorICAgIH0KIAotICAgIF9oYXNQZW5kaW5nQ29tcGxldGlvbjogZnVuY3Rpb24oKQorICAgIF9o
YXNQZW5kaW5nQ29tcGxldGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gIWlzTmFOKHRoaXMu
X3N0YXJ0T2Zmc2V0KSAmJiAhaXNOYU4odGhpcy5fZW5kT2Zmc2V0KSAmJiAhaXNOYU4odGhpcy5f
bGluZU51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbm90aWZ5Q29tcGxldGlvbnNIaWRk
ZW5Tb29uOiBmdW5jdGlvbigpCisgICAgX25vdGlmeUNvbXBsZXRpb25zSGlkZGVuU29vbigpCiAg
ICAgewogICAgICAgICBmdW5jdGlvbiBub3RpZnkoKQogICAgICAgICB7CkBAIC0yMzAsOSArMjE2
LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9ub3RpZnlDb21wbGV0aW9uc0hpZGRlbklmTmVlZGVk
VGltZW91dCkKICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9ub3RpZnlDb21wbGV0aW9u
c0hpZGRlbklmTmVlZGVkVGltZW91dCk7CiAgICAgICAgIHRoaXMuX25vdGlmeUNvbXBsZXRpb25z
SGlkZGVuSWZOZWVkZWRUaW1lb3V0ID0gc2V0VGltZW91dChub3RpZnkuYmluZCh0aGlzKSwgV2Vi
SW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uc0hpZGRl
bkRlbGF5KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hcHBseUNvbXBsZXRpb25IaW50OiBmdW5j
dGlvbihjb21wbGV0aW9uVGV4dCkKKyAgICBfYXBwbHlDb21wbGV0aW9uSGludChjb21wbGV0aW9u
VGV4dCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbXBsZXRpb25UZXh0KTsKICAg
ICAgICAgaWYgKCFjb21wbGV0aW9uVGV4dCkKQEAgLTI2NSw5ICsyNTEsOSBAQCBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24odXBkYXRlLmJpbmQodGhpcykpOwogCiAgICAgICAg
IGRlbGV0ZSB0aGlzLl9pZ25vcmVDaGFuZ2U7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY29tbWl0
Q29tcGxldGlvbkhpbnQ6IGZ1bmN0aW9uKCkKKyAgICBfY29tbWl0Q29tcGxldGlvbkhpbnQoKQog
ICAgIHsKICAgICAgICAgZnVuY3Rpb24gdXBkYXRlKCkKICAgICAgICAgewpAQCAtMjk5LDkgKzI4
NSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9wZXJhdGlvbih1cGRhdGUuYmluZCh0
aGlzKSk7CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2lnbm9yZUNoYW5nZTsKLSAgICB9LAorICAg
IH0KIAotICAgIF9yZW1vdmVMYXN0Q2hhbmdlRnJvbUhpc3Rvcnk6IGZ1bmN0aW9uKCkKKyAgICBf
cmVtb3ZlTGFzdENoYW5nZUZyb21IaXN0b3J5KCkKICAgICB7CiAgICAgICAgIHZhciBoaXN0b3J5
ID0gdGhpcy5fY29kZU1pcnJvci5nZXRIaXN0b3J5KCk7CiAKQEAgLTMxNCw5ICszMDAsOSBAQCBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgaGlzdG9yeS5kb25lLnBvcCgpOwogCiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iu
c2V0SGlzdG9yeShoaXN0b3J5KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZW1vdmVDb21wbGV0
aW9uSGludDogZnVuY3Rpb24obm9uYXRvbWljLCBkb250UmVzdG9yZVByZWZpeCkKKyAgICBfcmVt
b3ZlQ29tcGxldGlvbkhpbnQobm9uYXRvbWljLCBkb250UmVzdG9yZVByZWZpeCkKICAgICB7CiAg
ICAgICAgIGlmICghdGhpcy5fY29tcGxldGlvbkhpbnRNYXJrZXIpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC0zNTksOSArMzQ1LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9u
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0
aW9uKHVwZGF0ZS5iaW5kKHRoaXMpKTsKIAogICAgICAgICBkZWxldGUgdGhpcy5faWdub3JlQ2hh
bmdlOwotICAgIH0sCisgICAgfQogCi0gICAgX3NjYW5TdHJpbmdGb3JFeHByZXNzaW9uOiBmdW5j
dGlvbihtb2RlTmFtZSwgc3RyaW5nLCBzdGFydE9mZnNldCwgZGlyZWN0aW9uLCBhbGxvd01pZGRs
ZUFuZEVtcHR5LCBpbmNsdWRlU3RvcENoYXJhY3RlciwgaWdub3JlSW5pdGlhbFVubWF0Y2hlZE9w
ZW5CcmFja2V0LCBzdG9wQ2hhcmFjdGVyc1JlZ2V4KQorICAgIF9zY2FuU3RyaW5nRm9yRXhwcmVz
c2lvbihtb2RlTmFtZSwgc3RyaW5nLCBzdGFydE9mZnNldCwgZGlyZWN0aW9uLCBhbGxvd01pZGRs
ZUFuZEVtcHR5LCBpbmNsdWRlU3RvcENoYXJhY3RlciwgaWdub3JlSW5pdGlhbFVubWF0Y2hlZE9w
ZW5CcmFja2V0LCBzdG9wQ2hhcmFjdGVyc1JlZ2V4KQogICAgIHsKICAgICAgICAgY29uc29sZS5h
c3NlcnQoZGlyZWN0aW9uID09PSAtMSB8fCBkaXJlY3Rpb24gPT09IDEpOwogCkBAIC00MzQsOSAr
NDIwLDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4ge3N0cmluZzogc3RyaW5nLnN1
YnN0cmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0KSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldH07
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY29tcGxldGVBdEN1cnJlbnRQb3NpdGlvbjogZnVuY3Rp
b24oZm9yY2UpCisgICAgX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb24oZm9yY2UpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5fY29kZU1pcnJvci5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CiAgICAg
ICAgICAgICB0aGlzLmhpZGVDb21wbGV0aW9ucygpOwpAQCAtNTE1LDkgKzUwMSw5IEBAIFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgdGhpcy5fZGVsZWdhdGUuY29tcGxldGlvbkNvbnRyb2xsZXJDb21wbGV0aW9uc05l
ZWRlZCh0aGlzLCB0aGlzLl9wcmVmaXgsIGRlZmF1bHRDb21wbGV0aW9ucywgYmFzZVNjYW5SZXN1
bHQgPyBiYXNlU2NhblJlc3VsdC5zdHJpbmcgOiBudWxsLCBzdWZmaXgsIGZvcmNlKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0aW9ucyhkZWZhdWx0Q29tcGxl
dGlvbnMpOwotICAgIH0sCisgICAgfQogCi0gICAgX2dlbmVyYXRlQ1NTQ29tcGxldGlvbnM6IGZ1
bmN0aW9uKG1haW5Ub2tlbiwgYmFzZSwgc3VmZml4KQorICAgIF9nZW5lcmF0ZUNTU0NvbXBsZXRp
b25zKG1haW5Ub2tlbiwgYmFzZSwgc3VmZml4KQogICAgIHsKICAgICAgICAgLy8gV2Ugb25seSBz
dXBwb3J0IGNvbXBsZXRpb24gaW5zaWRlIENTUyBibG9jayBjb250ZXh0LgogICAgICAgICBpZiAo
bWFpblRva2VuLnN0YXRlLnN0YXRlID09PSAibWVkaWEiIHx8IG1haW5Ub2tlbi5zdGF0ZS5zdGF0
ZSA9PT0gInRvcCIgfHwgbWFpblRva2VuLnN0YXRlLnN0YXRlID09PSAicGFyZW5zIikKQEAgLTU2
MSw5ICs1NDcsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVy
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBDb21wbGV0ZSBwcm9wZXJ0eSBuYW1lcy4KICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5jc3NOYW1lQ29tcGxldGlv
bnMuc3RhcnRzV2l0aCh0aGlzLl9wcmVmaXgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2dlbmVy
YXRlSmF2YVNjcmlwdENvbXBsZXRpb25zOiBmdW5jdGlvbihtYWluVG9rZW4sIGJhc2UsIHN1ZmZp
eCkKKyAgICBfZ2VuZXJhdGVKYXZhU2NyaXB0Q29tcGxldGlvbnMobWFpblRva2VuLCBiYXNlLCBz
dWZmaXgpCiAgICAgewogICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGJhc2UgZXhwcmVzc2lvbiB0
aGVuIHdlIHNob3VsZCBub3QgYXR0ZW1wdCB0byBtYXRjaCBhbnkga2V5d29yZHMgb3IgdmFyaWFi
bGVzLgogICAgICAgICAvLyBBbGxvdyBvbmx5IG9wZW4gYnJhY2tldCBjaGFyYWN0ZXJzIGF0IHRo
ZSBlbmQgb2YgdGhlIGJhc2UsIG90aGVyd2lzZSBsZWF2ZSBjb21wbGV0aW9ucyB3aXRoCkBAIC01
NzMsMjUgKzU1OSwyNSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9s
bGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgbWF0Y2hpbmdXb3JkcyA9IFtdOwogCi0g
ICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuX3ByZWZpeDsKKyAgICAgICAgdmFyIHByZWZpeCA9
IHRoaXMuX3ByZWZpeDsKIAogICAgICAgICB2YXIgbG9jYWxTdGF0ZSA9IG1haW5Ub2tlbi5zdGF0
ZS5sb2NhbFN0YXRlID8gbWFpblRva2VuLnN0YXRlLmxvY2FsU3RhdGUgOiBtYWluVG9rZW4uc3Rh
dGU7CiAKLSAgICAgICAgY29uc3QgZGVjbGFyaW5nVmFyaWFibGUgPSBsb2NhbFN0YXRlLmxleGlj
YWwudHlwZSA9PT0gInZhcmRlZiI7Ci0gICAgICAgIGNvbnN0IGluc2lkZVN3aXRjaCA9IGxvY2Fs
U3RhdGUubGV4aWNhbC5wcmV2ID8gbG9jYWxTdGF0ZS5sZXhpY2FsLnByZXYuaW5mbyA9PT0gInN3
aXRjaCIgOiBmYWxzZTsKLSAgICAgICAgY29uc3QgaW5zaWRlQmxvY2sgPSBsb2NhbFN0YXRlLmxl
eGljYWwucHJldiA/IGxvY2FsU3RhdGUubGV4aWNhbC5wcmV2LnR5cGUgPT09ICJ9IiA6IGZhbHNl
OwotICAgICAgICBjb25zdCBpbnNpZGVQYXJlbnRoZXNpcyA9IGxvY2FsU3RhdGUubGV4aWNhbC50
eXBlID09PSAiKSI7Ci0gICAgICAgIGNvbnN0IGluc2lkZUJyYWNrZXRzID0gbG9jYWxTdGF0ZS5s
ZXhpY2FsLnR5cGUgPT09ICJdIjsKKyAgICAgICAgdmFyIGRlY2xhcmluZ1ZhcmlhYmxlID0gbG9j
YWxTdGF0ZS5sZXhpY2FsLnR5cGUgPT09ICJ2YXJkZWYiOworICAgICAgICB2YXIgaW5zaWRlU3dp
dGNoID0gbG9jYWxTdGF0ZS5sZXhpY2FsLnByZXYgPyBsb2NhbFN0YXRlLmxleGljYWwucHJldi5p
bmZvID09PSAic3dpdGNoIiA6IGZhbHNlOworICAgICAgICB2YXIgaW5zaWRlQmxvY2sgPSBsb2Nh
bFN0YXRlLmxleGljYWwucHJldiA/IGxvY2FsU3RhdGUubGV4aWNhbC5wcmV2LnR5cGUgPT09ICJ9
IiA6IGZhbHNlOworICAgICAgICB2YXIgaW5zaWRlUGFyZW50aGVzaXMgPSBsb2NhbFN0YXRlLmxl
eGljYWwudHlwZSA9PT0gIikiOworICAgICAgICB2YXIgaW5zaWRlQnJhY2tldHMgPSBsb2NhbFN0
YXRlLmxleGljYWwudHlwZSA9PT0gIl0iOwogCi0gICAgICAgIGNvbnN0IGFsbEtleXdvcmRzID0g
WyJicmVhayIsICJjYXNlIiwgImNhdGNoIiwgImNvbnN0IiwgImNvbnRpbnVlIiwgImRlYnVnZ2Vy
IiwgImRlZmF1bHQiLCAiZGVsZXRlIiwgImRvIiwgImVsc2UiLCAiZmFsc2UiLCAiZmluYWxseSIs
ICJmb3IiLCAiZnVuY3Rpb24iLCAiaWYiLCAiaW4iLAorICAgICAgICB2YXIgYWxsS2V5d29yZHMg
PSBbImJyZWFrIiwgImNhc2UiLCAiY2F0Y2giLCAiY29uc3QiLCAiY29udGludWUiLCAiZGVidWdn
ZXIiLCAiZGVmYXVsdCIsICJkZWxldGUiLCAiZG8iLCAiZWxzZSIsICJmYWxzZSIsICJmaW5hbGx5
IiwgImZvciIsICJmdW5jdGlvbiIsICJpZiIsICJpbiIsCiAgICAgICAgICAgICAiSW5maW5pdHki
LCAiaW5zdGFuY2VvZiIsICJOYU4iLCAibmV3IiwgIm51bGwiLCAicmV0dXJuIiwgInN3aXRjaCIs
ICJ0aGlzIiwgInRocm93IiwgInRydWUiLCAidHJ5IiwgInR5cGVvZiIsICJ1bmRlZmluZWQiLCAi
dmFyIiwgInZvaWQiLCAid2hpbGUiLCAid2l0aCJdOwotICAgICAgICBjb25zdCB2YWx1ZUtleXdv
cmRzID0gWyJmYWxzZSIsICJJbmZpbml0eSIsICJOYU4iLCAibnVsbCIsICJ0aGlzIiwgInRydWUi
LCAidW5kZWZpbmVkIl07CisgICAgICAgIHZhciB2YWx1ZUtleXdvcmRzID0gWyJmYWxzZSIsICJJ
bmZpbml0eSIsICJOYU4iLCAibnVsbCIsICJ0aGlzIiwgInRydWUiLCAidW5kZWZpbmVkIl07CiAK
LSAgICAgICAgY29uc3QgYWxsb3dlZEtleXdvcmRzSW5zaWRlQmxvY2tzID0gYWxsS2V5d29yZHMu
a2V5U2V0KCk7Ci0gICAgICAgIGNvbnN0IGFsbG93ZWRLZXl3b3Jkc1doZW5EZWNsYXJpbmdWYXJp
YWJsZSA9IHZhbHVlS2V5d29yZHMua2V5U2V0KCk7Ci0gICAgICAgIGNvbnN0IGFsbG93ZWRLZXl3
b3Jkc0luc2lkZVBhcmVudGhlc2lzID0gdmFsdWVLZXl3b3Jkcy5jb25jYXQoWyJmdW5jdGlvbiJd
KS5rZXlTZXQoKTsKLSAgICAgICAgY29uc3QgYWxsb3dlZEtleXdvcmRzSW5zaWRlQnJhY2tldHMg
PSBhbGxvd2VkS2V5d29yZHNJbnNpZGVQYXJlbnRoZXNpczsKLSAgICAgICAgY29uc3QgYWxsb3dl
ZEtleXdvcmRzT25seUluc2lkZVN3aXRjaCA9IFsiY2FzZSIsICJkZWZhdWx0Il0ua2V5U2V0KCk7
CisgICAgICAgIHZhciBhbGxvd2VkS2V5d29yZHNJbnNpZGVCbG9ja3MgPSBhbGxLZXl3b3Jkcy5r
ZXlTZXQoKTsKKyAgICAgICAgdmFyIGFsbG93ZWRLZXl3b3Jkc1doZW5EZWNsYXJpbmdWYXJpYWJs
ZSA9IHZhbHVlS2V5d29yZHMua2V5U2V0KCk7CisgICAgICAgIHZhciBhbGxvd2VkS2V5d29yZHNJ
bnNpZGVQYXJlbnRoZXNpcyA9IHZhbHVlS2V5d29yZHMuY29uY2F0KFsiZnVuY3Rpb24iXSkua2V5
U2V0KCk7CisgICAgICAgIHZhciBhbGxvd2VkS2V5d29yZHNJbnNpZGVCcmFja2V0cyA9IGFsbG93
ZWRLZXl3b3Jkc0luc2lkZVBhcmVudGhlc2lzOworICAgICAgICB2YXIgYWxsb3dlZEtleXdvcmRz
T25seUluc2lkZVN3aXRjaCA9IFsiY2FzZSIsICJkZWZhdWx0Il0ua2V5U2V0KCk7CiAKICAgICAg
ICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkcyhrZXl3b3JkcykKICAgICAgICAgewpAQCAtNjczLDkg
KzY1OSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJv
dG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG1hdGNoaW5nV29yZHM7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfaGFuZGxlVXBLZXk6IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisg
ICAgX2hhbmRsZVVwS2V5KGNvZGVNaXJyb3IpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2hh
c1BlbmRpbmdDb21wbGV0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNz
OwpAQCAtNjg0LDkgKzY3MCw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNv
bnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRo
aXMuX3N1Z2dlc3Rpb25zVmlldy5zZWxlY3RQcmV2aW91cygpOwotICAgIH0sCisgICAgfQogCi0g
ICAgX2hhbmRsZURvd25LZXk6IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAgX2hhbmRsZURvd25L
ZXkoY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faGFzUGVuZGluZ0NvbXBs
ZXRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CkBAIC02OTUsOSAr
NjgxLDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fc3VnZ2VzdGlv
bnNWaWV3LnNlbGVjdE5leHQoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVSaWdodE9y
RW50ZXJLZXk6IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAgX2hhbmRsZVJpZ2h0T3JFbnRlcktl
eShjb2RlTWlycm9yKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9oYXNQZW5kaW5nQ29tcGxl
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzczsKQEAgLTcwNiw5ICs2
OTIsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9jb21taXRDb21w
bGV0aW9uSGludCgpOwotICAgIH0sCisgICAgfQogCi0gICAgX2hhbmRsZUVzY2FwZUtleTogZnVu
Y3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlRXNjYXBlS2V5KGNvZGVNaXJyb3IpCiAgICAg
ewogICAgICAgICB2YXIgZGVsZWdhdGVJbXBsZW1lbnRzU2hvdWxkQWxsb3dFc2NhcGVDb21wbGV0
aW9uID0gdGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLmNvbXBsZXRpb25D
b250cm9sbGVyU2hvdWxkQWxsb3dFc2NhcGVDb21wbGV0aW9uID09PSAiZnVuY3Rpb24iOwogICAg
ICAgICBpZiAodGhpcy5faGFzUGVuZGluZ0NvbXBsZXRpb24oKSkKQEAgLTcxOSw5ICs3MDUsOSBA
QCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb24odHJ1ZSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfaGFuZGxlVGFiS2V5OiBmdW5jdGlvbihjb2RlTWlycm9yKQorICAgIF9o
YW5kbGVUYWJLZXkoY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faGFzUGVu
ZGluZ0NvbXBsZXRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CkBA
IC03NjksOSArNzU1LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJv
bGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2VuZE9mZnNldCA9IHRoaXMuX3N0YXJ0
T2Zmc2V0ICsgY29tbW9uUHJlZml4Lmxlbmd0aDsKIAogICAgICAgICB0aGlzLl9hcHBseUNvbXBs
ZXRpb25IaW50KHRoaXMuX2N1cnJlbnRDb21wbGV0aW9uKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9oYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGNvZGVNaXJyb3IsIGNoYW5nZSkKKyAgICBfaGFuZGxl
Q2hhbmdlKGNvZGVNaXJyb3IsIGNoYW5nZSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmlzQ29t
cGxldGlvbkNoYW5nZShjaGFuZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzk2LDkgKzc4
Miw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90
eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY29tcGxldGVBdEN1cnJlbnRQb3NpdGlvbihmYWxz
ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRpb25EZWxheVRpbWVv
dXQgPSBzZXRUaW1lb3V0KHRoaXMuX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb24uYmluZCh0aGlz
LCBmYWxzZSksIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29t
cGxldGlvblR5cGluZ0RlbGF5KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVDdXJzb3JB
Y3Rpdml0eTogZnVuY3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlQ3Vyc29yQWN0aXZpdHko
Y29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pZ25vcmVDaGFuZ2UpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC04MDksMTYgKzc5NSwxNiBAQCBXZWJJbnNwZWN0b3IuQ29kZU1p
cnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAg
ICAgIHRoaXMuaGlkZUNvbXBsZXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGFuZGxl
SGlkZUtleTogZnVuY3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlSGlkZUtleShjb2RlTWly
cm9yKQogICAgIHsKICAgICAgICAgdGhpcy5oaWRlQ29tcGxldGlvbnMoKTsKIAogICAgICAgICBy
ZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgIH0sCisgICAgfQogCi0gICAgX2hhbmRsZUhpZGVB
Y3Rpb246IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAgX2hhbmRsZUhpZGVBY3Rpb24oY29kZU1p
cnJvcikKICAgICB7CiAgICAgICAgIC8vIENsaWNraW5nIGEgc3VnZ2VzdGlvbiBjYXVzZXMgdGhl
IGVkaXRvciB0byBibHVyLiBXZSBkb24ndCB3YW50IHRvIGhpZGUgY29tcGxldGlvbnMgaW4gdGhp
cyBjYXNlLgogICAgICAgICBpZiAodGhpcy5pc0hhbmRsaW5nQ2xpY2tFdmVudCgpKQpAQCAtODI4
LDQgKzgxNCwxNCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBs
ZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0
LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIu
R2VuZXJpY1N0b3BDaGFyYWN0ZXJzUmVnZXggPSAvW1xzPTo7LF0vOworV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5EZWZhdWx0U3RvcENoYXJhY3RlcnNSZWdleE1v
ZGVNYXAgPSB7ImNzcyI6IC9bXHM6Oyx7fSgpXS8sICJqYXZhc2NyaXB0IjogL1tccz06OywhK1wt
Ki8lJnxefj88Pi57fSgpW1xdXS99OworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9u
Q29udHJvbGxlci5CYXNlRXhwcmVzc2lvblN0b3BDaGFyYWN0ZXJzUmVnZXhNb2RlTWFwID0geyJq
YXZhc2NyaXB0IjogL1tccz06OywhK1wtKi8lJnxefj88Pl0vfTsKK1dlYkluc3BlY3Rvci5Db2Rl
TWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuT3BlbkJyYWNrZXRDaGFyYWN0ZXJzUmVnZXggPSAv
Wyh7W10vOworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5DbG9z
ZUJyYWNrZXRDaGFyYWN0ZXJzUmVnZXggPSAvWyl9XF1dLzsKK1dlYkluc3BlY3Rvci5Db2RlTWly
cm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuTWF0Y2hpbmdCcmFja2V0cyA9IHsieyI6ICJ9IiwgIigi
OiAiKSIsICJbIjogIl0iLCAifSI6ICJ7IiwgIikiOiAiKCIsICJdIjogIlsifTsKK1dlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlvbkhpbnRTdHlsZUNs
YXNzTmFtZSA9ICJjb21wbGV0aW9uLWhpbnQiOworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21w
bGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uc0hpZGRlbkRlbGF5ID0gMjUwOworV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uVHlwaW5nRGVsYXkg
PSAyNTA7CitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkNvbXBs
ZXRpb25PcmlnaW4gPSAiK2NvbXBsZXRpb24iOworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21w
bGV0aW9uQ29udHJvbGxlci5EZWxldGVDb21wbGV0aW9uT3JpZ2luID0gIitkZWxldGUtY29tcGxl
dGlvbiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Db2RlTWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJvbGxlci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JE
cmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmpzCmluZGV4IGIxYzNiOTRhNjQ1ZGU2MzJhMjRh
ZDZiZDdiYWZlYzM3MWVjNTgwNjguLmE4MTA1OTk4YWU2ZTIwYjNhZjFhYjUwYTRkZTVhMjcxNTI4
YjRkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJy
b3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmpzCkBAIC0yMywyMiArMjMsMjMgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9y
KQorV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyID0g
Y2xhc3MgQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVNaXJyb3I7Cisg
ICAgY29uc3RydWN0b3IoY29kZU1pcnJvcikKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAg
ICB0aGlzLl9kcmFnVG9BZGp1c3RDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5EcmFnVG9B
ZGp1c3RDb250cm9sbGVyKHRoaXMpOwotfTsKKyAgICAgICAgdGhpcy5fY29kZU1pcnJvciA9IGNv
ZGVNaXJyb3I7CiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJvbGxlciwKKyAgICAgICAgdGhpcy5fZHJhZ1Rv
QWRqdXN0Q29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxl
cih0aGlzKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBlbmFibGVkKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9kcmFnVG9BZGp1c3RDb250cm9sbGVyLmVuYWJsZWQ7
Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZW5hYmxlZChlbmFibGVkKQogICAgIHsKQEAgLTQ3
LDM4ICs0OCwzOCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNv
bnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2RyYWdUb0FkanVzdENvbnRy
b2xsZXIuZWxlbWVudCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0V3JhcHBlckVsZW1lbnQoKTsKICAg
ICAgICAgdGhpcy5fZHJhZ1RvQWRqdXN0Q29udHJvbGxlci5lbmFibGVkID0gZW5hYmxlZDsKLSAg
ICB9LAorICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAogCi0gICAgZHJhZ1RvQWRqdXN0Q29udHJv
bGxlckFjdGl2ZVN0YXRlQ2hhbmdlZDogZnVuY3Rpb24oZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikK
KyAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyQWN0aXZlU3RhdGVDaGFuZ2VkKGRyYWdUb0FkanVz
dENvbnRyb2xsZXIpCiAgICAgewogICAgICAgICBpZiAoIWRyYWdUb0FkanVzdENvbnRyb2xsZXIu
YWN0aXZlKQogICAgICAgICAgICAgdGhpcy5faG92ZXJlZFRva2VuSW5mbyA9IG51bGw7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyQ2FuQmVBY3RpdmF0ZWQ6IGZ1
bmN0aW9uKGRyYWdUb0FkanVzdENvbnRyb2xsZXIpCisgICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxl
ckNhbkJlQWN0aXZhdGVkKGRyYWdUb0FkanVzdENvbnRyb2xsZXIpCiAgICAgewogICAgICAgICBy
ZXR1cm4gIXRoaXMuX2NvZGVNaXJyb3IuZ2V0T3B0aW9uKCJyZWFkT25seSIpOwotICAgIH0sCisg
ICAgfQogCi0gICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxlckNhbkJlQWRqdXN0ZWQ6IGZ1bmN0aW9u
KGRyYWdUb0FkanVzdENvbnRyb2xsZXIpCisgICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxlckNhbkJl
QWRqdXN0ZWQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKICAgICB7CiAKICAgICAgICAgcmV0dXJu
IHRoaXMuX2hvdmVyZWRUb2tlbkluZm8gJiYgdGhpcy5faG92ZXJlZFRva2VuSW5mby5jb250YWlu
c051bWJlcjsKLSAgICB9LAorICAgIH0KIAotICAgIGRyYWdUb0FkanVzdENvbnRyb2xsZXJXYXNB
ZGp1c3RlZEJ5QW1vdW50OiBmdW5jdGlvbihkcmFnVG9BZGp1c3RDb250cm9sbGVyLCBhbW91bnQp
CisgICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxlcldhc0FkanVzdGVkQnlBbW91bnQoZHJhZ1RvQWRq
dXN0Q29udHJvbGxlciwgYW1vdW50KQogICAgIHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5h
bHRlck51bWJlckluUmFuZ2UoYW1vdW50LCB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLnN0YXJ0UG9z
aXRpb24sIHRoaXMuX2hvdmVyZWRUb2tlbkluZm8uZW5kUG9zaXRpb24sIGZhbHNlKTsKLSAgICB9
LAorICAgIH0KIAotICAgIGRyYWdUb0FkanVzdENvbnRyb2xsZXJEaWRSZXNldDogZnVuY3Rpb24o
ZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKKyAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyRGlkUmVz
ZXQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKICAgICB7CiAgICAgICAgIHRoaXMuX2hvdmVyZWRU
b2tlbkluZm8gPSBudWxsOwotICAgIH0sCisgICAgfQogCi0gICAgZHJhZ1RvQWRqdXN0Q29udHJv
bGxlckNhbkFkanVzdE9iamVjdEF0UG9pbnQ6IGZ1bmN0aW9uKGRyYWdUb0FkanVzdENvbnRyb2xs
ZXIsIHBvaW50KQorICAgIGRyYWdUb0FkanVzdENvbnRyb2xsZXJDYW5BZGp1c3RPYmplY3RBdFBv
aW50KGRyYWdUb0FkanVzdENvbnRyb2xsZXIsIHBvaW50KQogICAgIHsKICAgICAgICAgdmFyIHBv
c2l0aW9uID0gdGhpcy5fY29kZU1pcnJvci5jb29yZHNDaGFyKHtsZWZ0OiBwb2ludC54LCB0b3A6
IHBvaW50Lnl9KTsKICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5fY29kZU1pcnJvci5nZXRUb2tl
bkF0KHBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0
aW5nQ29udHJvbGxlci5qcwppbmRleCA5MDYzOWQ1OWM4NWIxN2QzYTY5MzE2MDNjYTgwMWI1YTJk
NTZlZGViLi42OTAyY2E2Yjk1YWVlYTg1NzE3YjBjMDRkYzQzODNjODk2MGU2YjQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2Rl
TWlycm9yRWRpdGluZ0NvbnRyb2xsZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmpzCkBA
IC0yMyw2NiArMjMsNjMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyID0gZnVuY3Rpb24o
Y29kZU1pcnJvciwgbWFya2VyKQorV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJv
bGxlciA9IGNsYXNzIENvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlciBleHRlbmRzIFdlYkluc3Bl
Y3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVj
dG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0
b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLl9jb2RlTWlycm9yID0gY29kZU1pcnJv
cjsKLSAgICB0aGlzLl9tYXJrZXIgPSBtYXJrZXI7Ci0gICAgdGhpcy5fZGVsZWdhdGUgPSBudWxs
OworICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJyb3IsIG1hcmtlcikKKyAgICB7CisgICAgICAgIHN1
cGVyKCk7CiAKLSAgICB0aGlzLl9yYW5nZSA9IG1hcmtlci5yYW5nZTsKKyAgICAgICAgdGhpcy5f
Y29kZU1pcnJvciA9IGNvZGVNaXJyb3I7CisgICAgICAgIHRoaXMuX21hcmtlciA9IG1hcmtlcjsK
KyAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBudWxsOwogCi0gICAgLy8gVGhlIHZhbHVlIG11c3Qg
c3VwcG9ydCAudG9TdHJpbmcoKSBhbmQgLmNvcHkoKSBtZXRob2RzLgotICAgIHRoaXMuX3ZhbHVl
ID0gdGhpcy5pbml0aWFsVmFsdWU7CisgICAgICAgIHRoaXMuX3JhbmdlID0gbWFya2VyLnJhbmdl
OwogCi0gICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dEVzYyA9IG5ldyBXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dChudWxsLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXkuRXNj
YXBlKTsKLX07CisgICAgICAgIC8vIFRoZSB2YWx1ZSBtdXN0IHN1cHBvcnQgLnRvU3RyaW5nKCkg
YW5kIC5jb3B5KCkgbWV0aG9kcy4KKyAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmluaXRpYWxW
YWx1ZTsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5
cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0Nv
bnRyb2xsZXIsCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwK
KyAgICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dEVzYyA9IG5ldyBXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dChudWxsLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXkuRXNj
YXBlKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBtYXJrZXIoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX21hcmtlcjsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBy
YW5nZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcmFuZ2U7Ci0gICAgfSwKKyAgICB9
CiAKICAgICBnZXQgdmFsdWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlOwot
ICAgIH0sCisgICAgfQogCiAgICAgc2V0IHZhbHVlKHZhbHVlKQogICAgIHsKICAgICAgICAgdGhp
cy50ZXh0ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsK
LSAgICB9LAorICAgIH0KIAogICAgIGdldCBkZWxlZ2F0ZSgpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fZGVsZWdhdGU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZGVsZWdhdGUoZGVs
ZWdhdGUpCiAgICAgewogICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotICAgIH0s
CisgICAgfQogCiAgICAgZ2V0IHRleHQoKQogICAgIHsKICAgICAgICAgdmFyIGZyb20gPSB7bGlu
ZTogdGhpcy5fcmFuZ2Uuc3RhcnRMaW5lLCBjaDogdGhpcy5fcmFuZ2Uuc3RhcnRDb2x1bW59Owog
ICAgICAgICB2YXIgdG8gPSB7bGluZTogdGhpcy5fcmFuZ2UuZW5kTGluZSwgY2g6IHRoaXMuX3Jh
bmdlLmVuZENvbHVtbn07CiAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLmdldFJhbmdl
KGZyb20sIHRvKTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCB0ZXh0KHRleHQpCiAgICAgewpA
QCAtOTQsNjMgKzkxLDYzIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xs
ZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3JhbmdlLnN0YXJ0
TGluZSArIGxpbmVzLmxlbmd0aCAtIDE7CiAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBsaW5lcy5s
ZW5ndGggPiAxID8gbGluZXMubGFzdFZhbHVlLmxlbmd0aCA6IHRoaXMuX3JhbmdlLnN0YXJ0Q29s
dW1uICsgdGV4dC5sZW5ndGg7CiAgICAgICAgIHRoaXMuX3JhbmdlID0gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0UmFuZ2UodGhpcy5fcmFuZ2Uuc3RhcnRMaW5lLCB0aGlzLl9yYW5nZS5zdGFydENvbHVt
biwgZW5kTGluZSwgZW5kQ29sdW1uKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBpbml0aWFs
VmFsdWUoKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICAg
ICAgICAgcmV0dXJuIHRoaXMudGV4dDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBjc3NDbGFz
c05hbWUoKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICAg
ICAgICAgcmV0dXJuICIiOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBvcG92ZXIoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXI7Ci0gICAgfSwKKyAgICB9CiAKICAgICBn
ZXQgcG9wb3ZlclByZWZlcnJlZEVkZ2VzKCkKICAgICB7CiAgICAgICAgIC8vIEJlc3QgdG8gZGlz
cGxheSB0aGUgcG9wb3ZlciB0byB0aGUgbGVmdCBvciBhYm92ZSB0aGUgZWRpdGVkIHJhbmdlIHNp
bmNlIGl0cyBlbmQgcG9zaXRpb24gbWF5IGNoYW5nZSwgYnV0IG5vdCBpdHMgc3RhcnQKICAgICAg
ICAgLy8gcG9zaXRpb24uIFRoaXMgd2F5IHdlIG1pbmltaXplIHRoZSBjaGFuY2VzIG9mIG92ZXJs
YXlpbmcgdGhlIGVkaXRlZCByYW5nZSBhcyBpdCBjaGFuZ2VzLgogICAgICAgICByZXR1cm4gW1dl
Ykluc3BlY3Rvci5SZWN0RWRnZS5NSU5fWCwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1JTl9ZLCBX
ZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWF07
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwb3BvdmVyVGFyZ2V0RnJhbWVXaXRoUmVjdHM6IGZ1bmN0
aW9uKHJlY3RzKQorICAgIHBvcG92ZXJUYXJnZXRGcmFtZVdpdGhSZWN0cyhyZWN0cykKICAgICB7
CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMocmVjdHMpOwot
ICAgIH0sCisgICAgfQogCi0gICAgcHJlc2VudEhvdmVyTWVudTogZnVuY3Rpb24oKQorICAgIHBy
ZXNlbnRIb3Zlck1lbnUoKQogICAgIHsKICAgICAgICAgdGhpcy5faG92ZXJNZW51ID0gbmV3IFdl
Ykluc3BlY3Rvci5Ib3Zlck1lbnUodGhpcyk7CiAgICAgICAgIHRoaXMuX2hvdmVyTWVudS5lbGVt
ZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jc3NDbGFzc05hbWUpOwogICAgICAgICB0aGlzLl9yZWN0
cyA9IHRoaXMuX21hcmtlci5yZWN0czsKICAgICAgICAgdGhpcy5faG92ZXJNZW51LnByZXNlbnQo
dGhpcy5fcmVjdHMpOwotICAgIH0sCisgICAgfQogCi0gICAgZGlzbWlzc0hvdmVyTWVudTogZnVu
Y3Rpb24oZGlzY3JldGUpCisgICAgZGlzbWlzc0hvdmVyTWVudShkaXNjcmV0ZSkKICAgICB7CiAg
ICAgICAgIHRoaXMuX2hvdmVyTWVudS5kaXNtaXNzKGRpc2NyZXRlKTsKLSAgICB9LAorICAgIH0K
IAotICAgIHBvcG92ZXJXaWxsUHJlc2VudDogZnVuY3Rpb24ocG9wb3ZlcikKKyAgICBwb3BvdmVy
V2lsbFByZXNlbnQocG9wb3ZlcikKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1
YmNsYXNzZXMuCi0gICAgfSwKKyAgICB9CiAKLSAgICBwb3BvdmVyRGlkUHJlc2VudDogZnVuY3Rp
b24ocG9wb3ZlcikKKyAgICBwb3BvdmVyRGlkUHJlc2VudChwb3BvdmVyKQogICAgIHsKICAgICAg
ICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KLSAgICB9LAorICAgIH0KIAogICAgIC8v
IFByb3RlY3RlZAogCi0gICAgaGFuZGxlS2V5ZG93bkV2ZW50OiBmdW5jdGlvbihldmVudCkKKyAg
ICBoYW5kbGVLZXlkb3duRXZlbnQoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2tl
eWJvYXJkU2hvcnRjdXRFc2MubWF0Y2hlc0V2ZW50KGV2ZW50KSB8fCAhdGhpcy5fcG9wb3Zlci52
aXNpYmxlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU5LDkgKzE1Niw5IEBAIFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLl9wb3BvdmVyLmRpc21pc3MoKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9LAorICAgIH0KIAotICAgIGhvdmVyTWVudUJ1dHRvbldhc1ByZXNzZWQ6IGZ1bmN0aW9uKGhv
dmVyTWVudSkKKyAgICBob3Zlck1lbnVCdXR0b25XYXNQcmVzc2VkKGhvdmVyTWVudSkKICAgICB7
CiAgICAgICAgIHRoaXMuX3BvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIodGhpcyk7
CiAgICAgICAgIHRoaXMucG9wb3ZlcldpbGxQcmVzZW50KHRoaXMuX3BvcG92ZXIpOwpAQCAtMTc2
LDkgKzE3Myw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuZWRpdGluZ0NvbnRyb2xsZXJE
aWRTdGFydEVkaXRpbmcodGhpcyk7CiAKICAgICAgICAgdGhpcy5fb3JpZ2luYWxWYWx1ZSA9IHRo
aXMuX3ZhbHVlLmNvcHkoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGRpZERpc21pc3NQb3BvdmVy
OiBmdW5jdGlvbihwb3BvdmVyKQorICAgIGRpZERpc21pc3NQb3BvdmVyKHBvcG92ZXIpCiAgICAg
ewogICAgICAgICBkZWxldGUgdGhpcy5fcG9wb3ZlcjsKICAgICAgICAgZGVsZXRlIHRoaXMuX29y
aWdpbmFsVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJy
b3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLmpzCmluZGV4IDgzN2FiNjVlODExMzRkODhlZDg0
ZmNiM2U5YmQ4Mzc4NDkwNGZmZGIuLmUxZTE2YTUyM2Y2NDY1ZWJhYWE1MThjYjRlZjQ1MWRlYTFk
YmIwNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0NvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JH
cmFkaWVudEVkaXRpbmdDb250cm9sbGVyLmpzCkBAIC0yMyw3OCArMjMsNjggQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJv
ckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9yLCBtYXJrZXIp
CitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIgPSBjbGFz
cyBDb2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlciBleHRlbmRzIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIKIHsKLSAgICBXZWJJbnNwZWN0b3IuQ29kZU1p
cnJvckVkaXRpbmdDb250cm9sbGVyLmNhbGwodGhpcywgY29kZU1pcnJvciwgbWFya2VyKTsKLQot
ICAgIGlmICghV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVy
LkdyYWRpZW50VHlwZXMpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVu
dEVkaXRpbmdDb250cm9sbGVyLkdyYWRpZW50VHlwZXMgPSB7Ci0gICAgICAgICAgICAibGluZWFy
LWdyYWRpZW50IjogewotICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5MaW5lYXJH
cmFkaWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJM
aW5lYXIgR3JhZGllbnQiKSwKLSAgICAgICAgICAgICAgICByZXBlYXRzOiBmYWxzZQotICAgICAg
ICAgICAgfSwKLQotICAgICAgICAgICAgInJhZGlhbC1ncmFkaWVudCI6IHsKLSAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuUmFkaWFsR3JhZGllbnQsCi0gICAgICAgICAgICAgICAg
bGFiZWw6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmFkaWFsIEdyYWRpZW50IiksCi0gICAgICAg
ICAgICAgICAgcmVwZWF0czogZmFsc2UKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICJy
ZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IjogewotICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5MaW5lYXJHcmFkaWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDogV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJSZXBlYXRpbmcgTGluZWFyIEdyYWRpZW50IiksCi0gICAgICAgICAgICAg
ICAgcmVwZWF0czogdHJ1ZQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgInJlcGVhdGlu
Zy1yYWRpYWwtZ3JhZGllbnQiOiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9y
LlJhZGlhbEdyYWRpZW50LAotICAgICAgICAgICAgICAgIGxhYmVsOiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlJlcGVhdGluZyBSYWRpYWwgR3JhZGllbnQiKSwKLSAgICAgICAgICAgICAgICByZXBl
YXRzOiB0cnVlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgY29uc3RydWN0b3IoY29k
ZU1pcnJvciwgbWFya2VyKQorICAgIHsKKyAgICAgICAgc3VwZXIoY29kZU1pcnJvciwgbWFya2Vy
KTsKKworICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5n
Q29udHJvbGxlci5HcmFkaWVudFR5cGVzKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuR3JhZGllbnRUeXBlcyA9IHsKKyAgICAg
ICAgICAgICAgICAibGluZWFyLWdyYWRpZW50IjogeworICAgICAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuTGluZWFyR3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAgIGxhYmVs
OiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxpbmVhciBHcmFkaWVudCIpLAorICAgICAgICAgICAg
ICAgICAgICByZXBlYXRzOiBmYWxzZQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
ICAgICAicmFkaWFsLWdyYWRpZW50IjogeworICAgICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuUmFkaWFsR3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlJhZGlhbCBHcmFkaWVudCIpLAorICAgICAgICAgICAgICAgICAg
ICByZXBlYXRzOiBmYWxzZQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAi
cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCI6IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLkxpbmVhckdyYWRpZW50LAorICAgICAgICAgICAgICAgICAgICBsYWJlbDog
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXBlYXRpbmcgTGluZWFyIEdyYWRpZW50IiksCisgICAg
ICAgICAgICAgICAgICAgIHJlcGVhdHM6IHRydWUKKyAgICAgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICAgICAgInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQiOiB7CisgICAgICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5SYWRpYWxHcmFkaWVudCwKKyAgICAgICAgICAgICAg
ICAgICAgbGFiZWw6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVwZWF0aW5nIFJhZGlhbCBHcmFk
aWVudCIpLAorICAgICAgICAgICAgICAgICAgICByZXBlYXRzOiB0cnVlCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQogICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5TdHlsZUNsYXNzTmFtZSA9ICJn
cmFkaWVudC1lZGl0aW5nLWNvbnRyb2xsZXIiOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFk
aWVudEVkaXRpbmdDb250cm9sbGVyLkVkaXRzQ29sb3JDbGFzc05hbWUgPSAiZWRpdHMtY29sb3Ii
OwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLlJhZGlh
bEdyYWRpZW50Q2xhc3NOYW1lID0gInJhZGlhbC1ncmFkaWVudCI7Ci0KLS8vIExhemlseSBwb3B1
bGF0ZWQgaW4gdGhlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJv
bGxlciBjb25zdHJ1Y3Rvci4KLS8vIEl0IG5lZWRzIHRvIGJlIGxhenkgdG8gdXNlIFVJU3RyaW5n
IGFmdGVyIE1haW4uanMgYW5kIGxvY2FsaXplZFN0cmluZ3MuanMgbG9hZHMuCi1XZWJJbnNwZWN0
b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuR3JhZGllbnRUeXBlcyA9IG51
bGw7Ci0KLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5w
cm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3Jh
ZGllbnRFZGl0aW5nQ29udHJvbGxlciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yRWRpdGluZ0NvbnRyb2xsZXIucHJvdG90eXBlLAogCiAgICAgLy8gUHVibGljCiAKICAg
ICBnZXQgaW5pdGlhbFZhbHVlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
R3JhZGllbnQuZnJvbVN0cmluZyh0aGlzLnRleHQpOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0
IGNzc0NsYXNzTmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gImdyYWRpZW50IjsKLSAgICB9
LAorICAgIH0KIAogICAgIGdldCBwb3BvdmVyUHJlZmVycmVkRWRnZXMoKQogICAgIHsKICAgICAg
ICAgLy8gU2luY2UgdGhlIGdyYWRpZW50IGVkaXRvciBjYW4gcmVzaXplIHRvIGJlIHF1aXRlIHRh
bGwsIGxldCdzIGF2b2lkIGRpc3BsYXlpbmcgdGhlIHBvcG92ZXIKICAgICAgICAgLy8gYWJvdmUg
dGhlIGVkaXRlZCB2YWx1ZSBzbyB0aGF0IGl0IG1heSBub3QgY2hhbmdlIHdoaWNoIGVkZ2UgaXQg
YXR0YWNoZXMgdG8gdXBvbiBlZGl0aW5nIGEgc3RvcC4KICAgICAgICAgcmV0dXJuIFtXZWJJbnNw
ZWN0b3IuUmVjdEVkZ2UuTUlOX1gsIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhfWSwgV2ViSW5z
cGVjdG9yLlJlY3RFZGdlLk1BWF9YXTsKLSAgICB9LAorICAgIH0KIAotICAgIHBvcG92ZXJUYXJn
ZXRGcmFtZVdpdGhSZWN0czogZnVuY3Rpb24ocmVjdHMpCisgICAgcG9wb3ZlclRhcmdldEZyYW1l
V2l0aFJlY3RzKHJlY3RzKQogICAgIHsKICAgICAgICAgLy8gSWYgYSBncmFkaWVudCBpcyBkZWZp
bmVkIGFjcm9zcyBzZXZlcmFsIGxpbmVzLCB3ZSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgZmly
c3QgbGluZSBvbmx5CiAgICAgICAgIC8vIGFzIGEgdGFyZ2V0IGZyYW1lIGZvciB0aGUgZWRpdG9y
IHNpbmNlIHdlIG1heSByZWZvcm1hdCB0aGUgZ3JhZGllbnQgdmFsdWUgdG8gZml0IG9uIGEgc2lu
Z2xlIGxpbmUuCiAgICAgICAgIHJldHVybiByZWN0c1swXTsKLSAgICB9LAorICAgIH0KIAotICAg
IHBvcG92ZXJXaWxsUHJlc2VudDogZnVuY3Rpb24ocG9wb3ZlcikKKyAgICBwb3BvdmVyV2lsbFBy
ZXNlbnQocG9wb3ZlcikKICAgICB7CiAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1l
ID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLlN0eWxl
Q2xhc3NOYW1lOwpAQCAtMTMwLDkgKzEyMCw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3Jh
ZGllbnRFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3VwZGF0
ZUNTU0NsYXNzRm9yR3JhZGllbnRUeXBlKCk7CiAKICAgICAgICAgcG9wb3Zlci5jb250ZW50ID0g
dGhpcy5fY29udGFpbmVyOwotICAgIH0sCisgICAgfQogCi0gICAgcG9wb3ZlckRpZFByZXNlbnQ6
IGZ1bmN0aW9uKHBvcG92ZXIpCisgICAgcG9wb3ZlckRpZFByZXNlbnQocG9wb3ZlcikKICAgICB7
CiAgICAgICAgIHRoaXMuX2dyYWRpZW50U2xpZGVyLnN0b3BzID0gdGhpcy52YWx1ZS5zdG9wczsK
IApAQCAtMTQzLDI0ICsxMzMsMjQgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVk
aXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2dyYWRpZW50
VHlwZVBpY2tlci52YWx1ZSA9IHRoaXMudmFsdWUucmVwZWF0cyA/ICJyZXBlYXRpbmctcmFkaWFs
LWdyYWRpZW50IiA6ICJyYWRpYWwtZ3JhZGllbnQiOwogCiAgICAgICAgIHRoaXMuX2dyYWRpZW50
U2xpZGVyLmRlbGVnYXRlID0gdGhpczsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByb3RlY3Rl
ZAogCi0gICAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIGhhbmRsZUV2ZW50KGV2
ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJpbnB1dCIpCiAgICAgICAg
ICAgICB0aGlzLl9oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKICAgICAgICAgZWxzZSBpZiAoZXZl
bnQudHlwZSA9PT0gImNoYW5nZSIpCiAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDaGFuZ2VFdmVu
dChldmVudCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBncmFkaWVudFNsaWRlclN0b3BzRGlkQ2hh
bmdlOiBmdW5jdGlvbihncmFkaWVudFNsaWRlcikKKyAgICBncmFkaWVudFNsaWRlclN0b3BzRGlk
Q2hhbmdlKGdyYWRpZW50U2xpZGVyKQogICAgIHsKICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy52
YWx1ZS50b1N0cmluZygpOwotICAgIH0sCisgICAgfQogCi0gICAgZ3JhZGllbnRTbGlkZXJTdG9w
V2FzU2VsZWN0ZWQ6IGZ1bmN0aW9uKGdyYWRpZW50U2xpZGVyLCBzdG9wKQorICAgIGdyYWRpZW50
U2xpZGVyU3RvcFdhc1NlbGVjdGVkKGdyYWRpZW50U2xpZGVyLCBzdG9wKQogICAgIHsKICAgICAg
ICAgdmFyIHNlbGVjdGVkU3RvcCA9IGdyYWRpZW50U2xpZGVyLnNlbGVjdGVkU3RvcDsKIApAQCAt
MTc4LDkgKzE2OCw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2FuZ2xlSW5wdXQuYmx1cigpOwog
CiAgICAgICAgIHRoaXMucG9wb3Zlci51cGRhdGUoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGRy
YWdUb0FkanVzdENvbnRyb2xsZXJXYXNBZGp1c3RlZEJ5QW1vdW50OiBmdW5jdGlvbihkcmFnVG9B
ZGp1c3RDb250cm9sbGVyLCBhbW91bnQpCisgICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxlcldhc0Fk
anVzdGVkQnlBbW91bnQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlciwgYW1vdW50KQogICAgIHsKICAg
ICAgICAgdmFyIGFuZ2xlID0gcGFyc2VGbG9hdCh0aGlzLl9hbmdsZUlucHV0LnZhbHVlKSArIGFt
b3VudDsKICAgICAgICAgaWYgKE1hdGgucm91bmQoYW5nbGUpICE9PSBhbmdsZSkKQEAgLTE4OCwy
MCArMTc4LDIwIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJv
bGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fYW5nbGVJbnB1dC52YWx1ZSA9IGFu
Z2xlOwogICAgICAgICB0aGlzLl9hbmdsZUlucHV0VmFsdWVEaWRDaGFuZ2UoYW5nbGUpOwotICAg
IH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2hhbmRsZUlucHV0RXZlbnQ6IGZ1
bmN0aW9uKGV2ZW50KQorICAgIF9oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KQogICAgIHsKICAgICAg
ICAgdmFyIGFuZ2xlID0gcGFyc2VGbG9hdCh0aGlzLl9hbmdsZUlucHV0LnZhbHVlKTsKICAgICAg
ICAgaWYgKGlzTmFOKGFuZ2xlKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlz
Ll9hbmdsZUlucHV0VmFsdWVEaWRDaGFuZ2UoYW5nbGUpOwotICAgIH0sCisgICAgfQogCi0gICAg
X2FuZ2xlSW5wdXRWYWx1ZURpZENoYW5nZTogZnVuY3Rpb24oYW5nbGUpCisgICAgX2FuZ2xlSW5w
dXRWYWx1ZURpZENoYW5nZShhbmdsZSkKICAgICB7CiAgICAgICAgIHRoaXMudmFsdWUuYW5nbGUg
PSBhbmdsZTsKICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy52YWx1ZS50b1N0cmluZygpOwpAQCAt
MjEzLDkgKzIwMyw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9hbmdsZUlucHV0LnNlbGVj
dGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgICAgICB0aGlzLl9hbmdsZUlucHV0
LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvblN0YXJ0OwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfaGFuZGxlQ2hhbmdlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9oYW5kbGVD
aGFuZ2VFdmVudChldmVudCkKICAgICB7CiAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkdyYWRpZW50VHlwZXNb
dGhpcy5fZ3JhZGllbnRUeXBlUGlja2VyLnZhbHVlXTsKICAgICAgICAgaWYgKCEodGhpcy52YWx1
ZSBpbnN0YW5jZW9mIGRlc2NyaXB0b3IudHlwZSkpIHsKQEAgLTIzMCwxNiArMjIwLDE2IEBAIFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy52YWx1ZS5yZXBlYXRzID0gZGVzY3JpcHRvci5y
ZXBlYXRzOwogICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfY29sb3JQaWNrZXJDb2xvckNoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIF9jb2xvclBpY2tlckNvbG9yQ2hhbmdlZChldmVudCkKICAgICB7CiAgICAgICAgIHRo
aXMuX2dyYWRpZW50U2xpZGVyLnNlbGVjdGVkU3RvcC5jb2xvciA9IGV2ZW50LnRhcmdldC5jb2xv
cjsKICAgICAgICAgdGhpcy5fZ3JhZGllbnRTbGlkZXIuc3RvcHMgPSB0aGlzLnZhbHVlLnN0b3Bz
OwogICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfdXBkYXRlQ1NTQ2xhc3NGb3JHcmFkaWVudFR5cGU6IGZ1bmN0aW9uKCkKKyAg
ICBfdXBkYXRlQ1NTQ2xhc3NGb3JHcmFkaWVudFR5cGUoKQogICAgIHsKICAgICAgICAgaWYgKHRo
aXMudmFsdWUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuTGluZWFyR3JhZGllbnQpCiAgICAgICAg
ICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQ29kZU1p
cnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuUmFkaWFsR3JhZGllbnRDbGFzc05hbWUpOwpA
QCAtMjQ3LDMgKzIzNywxMSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGlu
Z0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNs
YXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9s
bGVyLlJhZGlhbEdyYWRpZW50Q2xhc3NOYW1lKTsKICAgICB9CiB9OworCitXZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuU3R5bGVDbGFzc05hbWUgPSAiZ3Jh
ZGllbnQtZWRpdGluZy1jb250cm9sbGVyIjsKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGll
bnRFZGl0aW5nQ29udHJvbGxlci5FZGl0c0NvbG9yQ2xhc3NOYW1lID0gImVkaXRzLWNvbG9yIjsK
K1dlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5SYWRpYWxH
cmFkaWVudENsYXNzTmFtZSA9ICJyYWRpYWwtZ3JhZGllbnQiOworCisvLyBMYXppbHkgcG9wdWxh
dGVkIGluIHRoZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xs
ZXIgY29uc3RydWN0b3IuCisvLyBJdCBuZWVkcyB0byBiZSBsYXp5IHRvIHVzZSBVSVN0cmluZyBh
ZnRlciBNYWluLmpzIGFuZCBsb2NhbGl6ZWRTdHJpbmdzLmpzIGxvYWRzLgorV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkdyYWRpZW50VHlwZXMgPSBudWxs
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tp
bmdDb250cm9sbGVyLmpzCmluZGV4IDM0ZWNlMTdkY2I5ZjhjNDE4YmQ0Mzg3MjE5MjE4Y2ZkOWI2
ODk2MDYuLmU1NTc4MmE4ZjRhYmJlMDFmZGZkN2I1NzAyMWViNTkyMGUyYTU3OGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVN
aXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIuanMKQEAgLTIzLDU2ICsyMyw0NCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9yLCBkZWxlZ2F0ZSkKK1dlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIgPSBjbGFzcyBDb2RlTWlycm9yVG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklY
TUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBj
YWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0g
ICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJvcik7Ci0KLSAgICB0aGlzLl9jb2RlTWlycm9yID0g
Y29kZU1pcnJvcjsKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlIHx8IG51bGw7Ci0gICAg
dGhpcy5fbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xs
ZXIuTW9kZS5Ob25lOwotCi0gICAgdGhpcy5fbW91c2VPdmVyRGVsYXlEdXJhdGlvbiA9IDA7Ci0g
ICAgdGhpcy5fbW91c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9IDA7Ci0gICAgdGhpcy5fY2xh
c3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZSA9IG51bGw7CisgICAgY29uc3RydWN0b3IoY29kZU1p
cnJvciwgZGVsZWdhdGUpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAgdGhpcy5fZW5h
YmxlZCA9IGZhbHNlOwotICAgIHRoaXMuX3RyYWNraW5nID0gZmFsc2U7Ci0gICAgdGhpcy5faG92
ZXJlZFRva2VuSW5mbyA9IG51bGw7Ci0gICAgdGhpcy5faG92ZXJlZE1hcmtlciA9IG51bGw7Ci19
OworICAgICAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKIAotV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5KdW1wVG9TeW1ib2xIaWdobGlnaHRTdHls
ZUNsYXNzTmFtZSA9ICJqdW1wLXRvLXN5bWJvbC1oaWdobGlnaHQiOworICAgICAgICB0aGlzLl9j
b2RlTWlycm9yID0gY29kZU1pcnJvcjsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0
ZSB8fCBudWxsOworICAgICAgICB0aGlzLl9tb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JU
b2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vbmU7CiAKLVdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZSA9IHsKLSAgICBOb25lOiAibm9uZSIsCi0g
ICAgTm9uU3ltYm9sVG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAotICAgIEphdmFTY3JpcHRF
eHByZXNzaW9uOiAiamF2YXNjcmlwdC1leHByZXNzaW9uIiwKLSAgICBKYXZhU2NyaXB0VHlwZUlu
Zm9ybWF0aW9uOiAiamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIiwKLSAgICBNYXJrZWRUb2tl
bnM6ICJtYXJrZWQtdG9rZW5zIgotfTsKKyAgICAgICAgdGhpcy5fbW91c2VPdmVyRGVsYXlEdXJh
dGlvbiA9IDA7CisgICAgICAgIHRoaXMuX21vdXNlT3V0UmVsZWFzZURlbGF5RHVyYXRpb24gPSAw
OworICAgICAgICB0aGlzLl9jbGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdlID0gbnVsbDsKIAot
V2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUg
PSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIsCisgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fdHJhY2tpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faG92ZXJlZFRva2VuSW5mbyA9IG51
bGw7CisgICAgICAgIHRoaXMuX2hvdmVyZWRNYXJrZXIgPSBudWxsOworICAgIH0KIAogICAgIC8v
IFB1YmxpYwogCiAgICAgZ2V0IGRlbGVnYXRlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9kZWxlZ2F0ZTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBkZWxlZ2F0ZSh4KQogICAgIHsK
ICAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSB4OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGVu
YWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7Ci0gICAgfSwKKyAg
ICB9CiAKICAgICBzZXQgZW5hYmxlZChlbmFibGVkKQogICAgIHsKQEAgLTkyLDEyICs4MCwxMiBA
QCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHdyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2
ZSIsIHRoaXMpOwogICAgICAgICAgICAgdGhpcy5fc3RvcFRyYWNraW5nKCk7CiAgICAgICAgIH0K
LSAgICB9LAorICAgIH0KIAogICAgIGdldCBtb2RlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0
aGlzLl9tb2RlOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IG1vZGUobW9kZSkKICAgICB7CkBA
IC0xMDcsNjIgKzk1LDYyIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChvbGRNb2RlICE9PSB0aGlzLl9t
b2RlICYmIHRoaXMuX3RyYWNraW5nICYmIHRoaXMuX2hvdmVyZWRUb2tlbkluZm8pCiAgICAgICAg
ICAgICB0aGlzLl9wcm9jZXNzTmV3SG92ZXJlZFRva2VuKCk7Ci0gICAgfSwKKyAgICB9CiAKICAg
ICBnZXQgbW91c2VPdmVyRGVsYXlEdXJhdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhp
cy5fbW91c2VPdmVyRGVsYXlEdXJhdGlvbjsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBtb3Vz
ZU92ZXJEZWxheUR1cmF0aW9uKHgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh4ID49
IDApOwogICAgICAgICB0aGlzLl9tb3VzZU92ZXJEZWxheUR1cmF0aW9uID0gTWF0aC5tYXgoeCwg
MCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbW91c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlv
bigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbW91c2VPdXRSZWxlYXNlRGVsYXlEdXJh
dGlvbjsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBtb3VzZU91dFJlbGVhc2VEZWxheUR1cmF0
aW9uKHgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh4ID49IDApOwogICAgICAgICB0
aGlzLl9tb3VzZU91dFJlbGVhc2VEZWxheUR1cmF0aW9uID0gTWF0aC5tYXgoeCwgMCk7Ci0gICAg
fSwKKyAgICB9CiAKICAgICBnZXQgY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZTsKLSAg
ICB9LAorICAgIH0KIAogICAgIHNldCBjbGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdlKHgpCiAg
ICAgewogICAgICAgICB0aGlzLl9jbGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdlID0geCB8fCBu
dWxsOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGNhbmRpZGF0ZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fY2FuZGlkYXRlOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGhvdmVy
ZWRNYXJrZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2hvdmVyZWRNYXJrZXI7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICBzZXQgaG92ZXJlZE1hcmtlcihob3ZlcmVkTWFya2VyKQogICAg
IHsKICAgICAgICAgdGhpcy5faG92ZXJlZE1hcmtlciA9IGhvdmVyZWRNYXJrZXI7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBoaWdobGlnaHRMYXN0SG92ZXJlZFJhbmdlOiBmdW5jdGlvbigpCisgICAg
aGlnaGxpZ2h0TGFzdEhvdmVyZWRSYW5nZSgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY2Fu
ZGlkYXRlKQogICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRSYW5nZSh0aGlzLl9jYW5kaWRhdGUu
aG92ZXJlZFRva2VuUmFuZ2UpOwotICAgIH0sCisgICAgfQogCi0gICAgaGlnaGxpZ2h0UmFuZ2U6
IGZ1bmN0aW9uKHJhbmdlKQorICAgIGhpZ2hsaWdodFJhbmdlKHJhbmdlKQogICAgIHsKICAgICAg
ICAgLy8gTm90aGluZyB0byBkbyBpZiB3ZSdyZSB0cnlpbmcgdG8gaGlnaGxpZ2h0IHRoZSBzYW1l
IHJhbmdlLgogICAgICAgICBpZiAodGhpcy5fY29kZU1pcnJvck1hcmtlZFRleHQgJiYgdGhpcy5f
Y29kZU1pcnJvck1hcmtlZFRleHQuY2xhc3NOYW1lID09PSB0aGlzLl9jbGFzc05hbWVGb3JIaWdo
bGlnaHRlZFJhbmdlKSB7CkBAIC0xNzgsOSArMTY2LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2Nv
ZGVNaXJyb3JNYXJrZWRUZXh0ID0gdGhpcy5fY29kZU1pcnJvci5tYXJrVGV4dChyYW5nZS5zdGFy
dCwgcmFuZ2UuZW5kLCB7Y2xhc3NOYW1lfSk7CiAKICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMsIHRydWUpOwotICAgIH0sCisgICAgfQogCi0gICAgcmVt
b3ZlSGlnaGxpZ2h0ZWRSYW5nZTogZnVuY3Rpb24oKQorICAgIHJlbW92ZUhpZ2hsaWdodGVkUmFu
Z2UoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9jb2RlTWlycm9yTWFya2VkVGV4dCkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTE4OSwxMSArMTc3LDExIEBAIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICBkZWxl
dGUgdGhpcy5fY29kZU1pcnJvck1hcmtlZFRleHQ7CiAKICAgICAgICAgd2luZG93LnJlbW92ZUV2
ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMsIHRydWUpOwotICAgIH0sCisgICAgfQogCiAg
ICAgLy8gUHJpdmF0ZQogCi0gICAgX3N0YXJ0VHJhY2tpbmc6IGZ1bmN0aW9uKCkKKyAgICBfc3Rh
cnRUcmFja2luZygpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fdHJhY2tp
bmcpOwogICAgICAgICBpZiAodGhpcy5fdHJhY2tpbmcpCkBAIC0yMDcsOSArMTk1LDkgQEAgV2Vi
SW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcywgZmFs
c2UpOwogICAgICAgICB3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLCBm
YWxzZSk7CiAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgdGhpcywgdHJ1
ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc3RvcFRyYWNraW5nOiBmdW5jdGlvbigpCisgICAg
X3N0b3BUcmFja2luZygpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90cmFj
a2luZyk7CiAgICAgICAgIGlmICghdGhpcy5fdHJhY2tpbmcpCkBAIC0yMjcsOSArMjE1LDkgQEAg
V2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlz
LCB0cnVlKTsKIAogICAgICAgICB0aGlzLl9yZXNldFRyYWNraW5nU3RhdGVzKCk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBoYW5kbGVFdmVudDogZnVuY3Rpb24oZXZlbnQpCisgICAgaGFuZGxlRXZl
bnQoZXZlbnQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKICAgICAgICAg
Y2FzZSAibW91c2VlbnRlciI6CkBAIC0yNTksMjAgKzI0NywyMCBAQCBXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IHRoaXMuX3dpbmRvd0xvc3RGb2N1cyhldmVudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX21vdXNlRW50ZXJlZDogZnVuY3Rpb24oZXZlbnQp
CisgICAgX21vdXNlRW50ZXJlZChldmVudCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fdHJh
Y2tpbmcpCiAgICAgICAgICAgICB0aGlzLl9zdGFydFRyYWNraW5nKCk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfbW91c2VMZWZ0OiBmdW5jdGlvbihldmVudCkKKyAgICBfbW91c2VMZWZ0KGV2ZW50
KQogICAgIHsKICAgICAgICAgdGhpcy5fc3RvcFRyYWNraW5nKCk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfbW91c2VNb3ZlZFdpdGhNYXJrZWRUZXh0OiBmdW5jdGlvbihldmVudCkKKyAgICBfbW91
c2VNb3ZlZFdpdGhNYXJrZWRUZXh0KGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIHNob3VsZFJl
bGVhc2UgPSAhZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyh0aGlzLl9jbGFzc05hbWVG
b3JIaWdobGlnaHRlZFJhbmdlKTsKICAgICAgICAgaWYgKHNob3VsZFJlbGVhc2UgJiYgdGhpcy5f
ZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRva2VuVHJhY2tpbmdDb250cm9sbGVy
Q2FuUmVsZWFzZUhpZ2hsaWdodGVkUmFuZ2UgPT09ICJmdW5jdGlvbiIpCkBAIC0yODYsMjEgKzI3
NCwyMSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbWFya2VkVGV4dE1vdXNl
b3V0VGltZXIpOwogICAgICAgICBkZWxldGUgdGhpcy5fbWFya2VkVGV4dE1vdXNlb3V0VGltZXI7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbWFya2VkVGV4dElzTm9Mb25nZXJIb3ZlcmVkOiBmdW5j
dGlvbigpCisgICAgX21hcmtlZFRleHRJc05vTG9uZ2VySG92ZXJlZCgpCiAgICAgewogICAgICAg
ICBpZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRva2VuVHJhY2tp
bmdDb250cm9sbGVySGlnaGxpZ2h0ZWRSYW5nZVJlbGVhc2VkID09PSAiZnVuY3Rpb24iKQogICAg
ICAgICAgICAgdGhpcy5fZGVsZWdhdGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRl
ZFJhbmdlUmVsZWFzZWQodGhpcyk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXJrZWRUZXh0TW91
c2VvdXRUaW1lcjsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZU1vdmVkT3ZlckVkaXRvcjog
ZnVuY3Rpb24oZXZlbnQpCisgICAgX21vdXNlTW92ZWRPdmVyRWRpdG9yKGV2ZW50KQogICAgIHsK
ICAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXJlZFRva2VuSW5mbyh7bGVmdDogZXZlbnQucGFnZVgs
IHRvcDogZXZlbnQucGFnZVl9KTsKLSAgICB9LAorICAgIH0KIAotICAgIF91cGRhdGVIb3ZlcmVk
VG9rZW5JbmZvOiBmdW5jdGlvbihtb3VzZUNvb3JkcykKKyAgICBfdXBkYXRlSG92ZXJlZFRva2Vu
SW5mbyhtb3VzZUNvb3JkcykKICAgICB7CiAgICAgICAgIC8vIEdldCB0aGUgcG9zaXRpb24gaW4g
dGhlIHRleHQgYW5kIHRoZSB0b2tlbiBhdCB0aGF0IHBvc2l0aW9uLgogICAgICAgICB2YXIgcG9z
aXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0NoYXIobW91c2VDb29yZHMpOwpAQCAtMzM5
LDIxICszMjcsMjEgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJv
bGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzTmV3SG92ZXJlZFRv
a2VuKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX3Rva2VuSG92ZXJUaW1lciA9
IHNldFRpbWVvdXQodGhpcy5fcHJvY2Vzc05ld0hvdmVyZWRUb2tlbi5iaW5kKHRoaXMpLCB0aGlz
Ll9tb3VzZU92ZXJEZWxheUR1cmF0aW9uKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZU1v
dmVkT3V0T2ZFZGl0b3I6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tb3VzZU1vdmVkT3V0T2ZFZGl0
b3IoZXZlbnQpCiAgICAgewogICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdG9rZW5Ib3ZlclRp
bWVyKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2hvdmVyZWRUb2tlbkluZm87CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9zZWxlY3Rpb25NYXlCZUluUHJvZ3Jlc3M7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfbW91c2VCdXR0b25XYXNQcmVzc2VkT3ZlckVkaXRvcjogZnVuY3Rpb24oZXZlbnQpCisgICAg
X21vdXNlQnV0dG9uV2FzUHJlc3NlZE92ZXJFZGl0b3IoZXZlbnQpCiAgICAgewogICAgICAgICB0
aGlzLl9zZWxlY3Rpb25NYXlCZUluUHJvZ3Jlc3MgPSB0cnVlOwotICAgIH0sCisgICAgfQogCi0g
ICAgX21vdXNlQnV0dG9uV2FzUmVsZWFzZWRPdmVyRWRpdG9yOiBmdW5jdGlvbihldmVudCkKKyAg
ICBfbW91c2VCdXR0b25XYXNSZWxlYXNlZE92ZXJFZGl0b3IoZXZlbnQpCiAgICAgewogICAgICAg
ICBkZWxldGUgdGhpcy5fc2VsZWN0aW9uTWF5QmVJblByb2dyZXNzOwogICAgICAgICB0aGlzLl9t
b3VzZU1vdmVkT3ZlckVkaXRvcihldmVudCk7CkBAIC0zNzEsMTQgKzM1OSwxNCBAQCBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0K
IAotICAgIF93aW5kb3dMb3N0Rm9jdXM6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF93aW5kb3dMb3N0
Rm9jdXMoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9yZXNldFRyYWNraW5nU3RhdGVzKCk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc05ld0hvdmVyZWRUb2tlbjogZnVuY3Rpb24o
KQorICAgIF9wcm9jZXNzTmV3SG92ZXJlZFRva2VuKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMuX2hvdmVyZWRUb2tlbkluZm8pOwogCkBAIC00MDgsOSArMzk2LDkgQEAgV2Vi
SW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS50
b2tlblRyYWNraW5nQ29udHJvbGxlck5ld0hpZ2hsaWdodENhbmRpZGF0ZSA9PT0gImZ1bmN0aW9u
IikKICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnRva2VuVHJhY2tpbmdDb250cm9sbGVyTmV3
SGlnaGxpZ2h0Q2FuZGlkYXRlKHRoaXMsIHRoaXMuX2NhbmRpZGF0ZSk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfcHJvY2Vzc05vblN5bWJvbFRva2VuOiBmdW5jdGlvbigpCisgICAgX3Byb2Nlc3NO
b25TeW1ib2xUb2tlbigpCiAgICAgewogICAgICAgICAvLyBJZ25vcmUgYW55IHN5bWJvbCB0b2tl
bnMuCiAgICAgICAgIHZhciB0eXBlID0gdGhpcy5faG92ZXJlZFRva2VuSW5mby50b2tlbi50eXBl
OwpAQCAtNDI0LDkgKzQxMiw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgaG92ZXJlZFRva2VuOiB0aGlz
Ll9ob3ZlcmVkVG9rZW5JbmZvLnRva2VuLAogICAgICAgICAgICAgaG92ZXJlZFRva2VuUmFuZ2U6
IHtzdGFydDogc3RhcnRQb3NpdGlvbiwgZW5kOiBlbmRQb3NpdGlvbn0sCiAgICAgICAgIH07Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc0phdmFTY3JpcHRFeHByZXNzaW9uOiBmdW5jdGlv
bigpCisgICAgX3Byb2Nlc3NKYXZhU2NyaXB0RXhwcmVzc2lvbigpCiAgICAgewogICAgICAgICAv
LyBPbmx5IHZhbGlkIHdpdGhpbiBKYXZhU2NyaXB0LgogICAgICAgICBpZiAodGhpcy5faG92ZXJl
ZFRva2VuSW5mby5tb2RlTmFtZSAhPT0gImphdmFzY3JpcHQiKQpAQCAtNDM1LDYgKzQyMywxMiBA
QCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdmFyIHN0YXJ0UG9zaXRpb24gPSB7bGluZTogdGhpcy5faG92ZXJlZFRv
a2VuSW5mby5wb3NpdGlvbi5saW5lLCBjaDogdGhpcy5faG92ZXJlZFRva2VuSW5mby50b2tlbi5z
dGFydH07CiAgICAgICAgIHZhciBlbmRQb3NpdGlvbiA9IHtsaW5lOiB0aGlzLl9ob3ZlcmVkVG9r
ZW5JbmZvLnBvc2l0aW9uLmxpbmUsIGNoOiB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLnRva2VuLmVu
ZH07CiAKKyAgICAgICAgZnVuY3Rpb24gdG9rZW5Jc0luUmFuZ2UodG9rZW4sIHJhbmdlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdG9rZW4ubGluZSA+PSByYW5nZS5zdGFydC5saW5l
ICYmIHRva2VuLmNoID49IHJhbmdlLnN0YXJ0LmNoICYmCisgICAgICAgICAgICAgICAgICAgdG9r
ZW4ubGluZSA8PSByYW5nZS5lbmQubGluZSAmJiB0b2tlbi5jaCA8PSByYW5nZS5lbmQuY2g7Cisg
ICAgICAgIH0KKwogICAgICAgICAvLyBJZiB0aGUgaG92ZXJlZCB0b2tlbiBpcyB3aXRoaW4gYSBz
ZWxlY3Rpb24sIHVzZSB0aGUgc2VsZWN0aW9uIGFzIG91ciBleHByZXNzaW9uLgogICAgICAgICBp
ZiAodGhpcy5fY29kZU1pcnJvci5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CiAgICAgICAgICAgICB2
YXIgc2VsZWN0aW9uUmFuZ2UgPSB7CkBAIC00NDIsMTIgKzQzNiw2IEBAIFdlYkluc3BlY3Rvci5D
b2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgICAgIGVuZDogdGhpcy5fY29kZU1pcnJvci5nZXRDdXJzb3IoImVuZCIpCiAgICAgICAgICAg
ICB9OwogCi0gICAgICAgICAgICBmdW5jdGlvbiB0b2tlbklzSW5SYW5nZSh0b2tlbiwgcmFuZ2Up
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLmxpbmUgPj0gcmFu
Z2Uuc3RhcnQubGluZSAmJiB0b2tlbi5jaCA+PSByYW5nZS5zdGFydC5jaCAmJgotICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi5saW5lIDw9IHJhbmdlLmVuZC5saW5lICYmIHRva2VuLmNoIDw9
IHJhbmdlLmVuZC5jaDsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYgKHRva2VuSXNJ
blJhbmdlKHN0YXJ0UG9zaXRpb24sIHNlbGVjdGlvblJhbmdlKSB8fCB0b2tlbklzSW5SYW5nZShl
bmRQb3NpdGlvbiwgc2VsZWN0aW9uUmFuZ2UpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHsK
ICAgICAgICAgICAgICAgICAgICAgaG92ZXJlZFRva2VuOiB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZv
LnRva2VuLApAQCAtNTAzLDE0ICs0OTEsMTQgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBleHByZXNzaW9u
LAogICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdlOiB7c3RhcnQ6IGV4cHJlc3Npb25TdGFydFBv
c2l0aW9uLCBlbmQ6IGVuZFBvc2l0aW9ufSwKICAgICAgICAgfTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9wcm9jZXNzTWFya2VkVG9rZW46IGZ1bmN0aW9uKCkKKyAgICBfcHJvY2Vzc01hcmtlZFRv
a2VuKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzTm9uU3ltYm9sVG9rZW4o
KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZXNldFRyYWNraW5nU3RhdGVzOiBmdW5jdGlvbigp
CisgICAgX3Jlc2V0VHJhY2tpbmdTdGF0ZXMoKQogICAgIHsKICAgICAgICAgY2xlYXJUaW1lb3V0
KHRoaXMuX3Rva2VuSG92ZXJUaW1lcik7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb25N
YXlCZUluUHJvZ3Jlc3M7CkBAIC01MTksNCArNTA3LDEyIEBAIFdlYkluc3BlY3Rvci5Db2RlTWly
cm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5KdW1wVG9TeW1ib2xIaWdobGlnaHRTdHlsZUNs
YXNzTmFtZSA9ICJqdW1wLXRvLXN5bWJvbC1oaWdobGlnaHQiOworCitXZWJJbnNwZWN0b3IuQ29k
ZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUgPSB7CisgICAgTm9uZTogIm5vbmUi
LAorICAgIE5vblN5bWJvbFRva2VuczogIm5vbi1zeW1ib2wtdG9rZW5zIiwKKyAgICBKYXZhU2Ny
aXB0RXhwcmVzc2lvbjogImphdmFzY3JpcHQtZXhwcmVzc2lvbiIsCisgICAgSmF2YVNjcmlwdFR5
cGVJbmZvcm1hdGlvbjogImphdmFzY3JpcHQtdHlwZS1pbmZvcm1hdGlvbiIsCisgICAgTWFya2Vk
VG9rZW5zOiAibWFya2VkLXRva2VucyIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9ET01UcmVlTWFuYWdlci5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTVRyZWVNYW5hZ2Vy
LmpzCmluZGV4IDcxMTZmZmJkMmM1ODk5OTQ4ZjJmZThmMjVmNzBkZWQ4OGY5YTMyY2UuLmMwZjNk
MmNmNDJiN2E3MzFhMGViODE3OTU3ZWY2ODA2ZTU4OWNlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTVRyZWVNYW5hZ2VyLmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RP
TVRyZWVNYW5hZ2VyLmpzCkBAIC0zMCw0NCArMzAsMzMgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5f
aWRUb0RPTU5vZGUgPSB7fTsKLSAgICB0aGlzLl9kb2N1bWVudCA9IG51bGw7Ci0gICAgdGhpcy5f
YXR0cmlidXRlTG9hZE5vZGVJZHMgPSB7fTsKLSAgICB0aGlzLl9mbG93cyA9IG5ldyBNYXA7Ci0g
ICAgdGhpcy5fY29udGVudE5vZGVzVG9GbG93c01hcCA9IG5ldyBNYXA7Ci0gICAgdGhpcy5fcmVz
dG9yZVNlbGVjdGVkTm9kZUlzQWxsb3dlZCA9IHRydWU7Ci0KLSAgICBXZWJJbnNwZWN0b3IuRnJh
bWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNl
RGlkQ2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOwotfTsKK1dlYklu
c3BlY3Rvci5ET01UcmVlTWFuYWdlciA9IGNsYXNzIERPTVRyZWVNYW5hZ2VyIGV4dGVuZHMgV2Vi
SW5zcGVjdG9yLk9iamVjdAoreworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1
cGVyKCk7CiAKLS8vIEZJWE1FOiBNb3ZlIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFz
cyBhbmQgd2UgY2FuIHJlbW92ZSB0aGlzLgotV2ViSW5zcGVjdG9yLk9iamVjdC5kZXByZWNhdGVk
QWRkQ29uc3RydWN0b3JGdW5jdGlvbnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyKTsKKyAg
ICAgICAgdGhpcy5faWRUb0RPTU5vZGUgPSB7fTsKKyAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSBu
dWxsOworICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkcyA9IHt9OworICAgICAgICB0
aGlzLl9mbG93cyA9IG5ldyBNYXA7CisgICAgICAgIHRoaXMuX2NvbnRlbnROb2Rlc1RvRmxvd3NN
YXAgPSBuZXcgTWFwOworICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0ZWROb2RlSXNBbGxvd2Vk
ID0gdHJ1ZTsKIAotV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLkV2ZW50ID0gewotICAgIEF0
dHJpYnV0ZU1vZGlmaWVkOiAiZG9tLXRyZWUtbWFuYWdlci1hdHRyaWJ1dGUtbW9kaWZpZWQiLAot
ICAgIEF0dHJpYnV0ZVJlbW92ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWF0dHJpYnV0ZS1yZW1vdmVk
IiwKLSAgICBDaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNoYXJhY3Rl
ci1kYXRhLW1vZGlmaWVkIiwKLSAgICBOb2RlSW5zZXJ0ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLW5v
ZGUtaW5zZXJ0ZWQiLAotICAgIE5vZGVSZW1vdmVkOiAiZG9tLXRyZWUtbWFuYWdlci1ub2RlLXJl
bW92ZWQiLAotICAgIERvY3VtZW50VXBkYXRlZDogImRvbS10cmVlLW1hbmFnZXItZG9jdW1lbnQt
dXBkYXRlZCIsCi0gICAgQ2hpbGROb2RlQ291bnRVcGRhdGVkOiAiZG9tLXRyZWUtbWFuYWdlci1j
aGlsZC1ub2RlLWNvdW50LXVwZGF0ZWQiLAotICAgIERPTU5vZGVXYXNJbnNwZWN0ZWQ6ICJkb20t
dHJlZS1tYW5hZ2VyLWRvbS1ub2RlLXdhcy1pbnNwZWN0ZWQiLAotICAgIEluc3BlY3RNb2RlU3Rh
dGVDaGFuZ2VkOiAiZG9tLXRyZWUtbWFuYWdlci1pbnNwZWN0LW1vZGUtc3RhdGUtY2hhbmdlZCIs
Ci0gICAgQ29udGVudEZsb3dMaXN0V2FzVXBkYXRlZDogImRvbS10cmVlLW1hbmFnZXItY29udGVu
dC1mbG93LWxpc3Qtd2FzLXVwZGF0ZWQiLAotICAgIENvbnRlbnRGbG93V2FzQWRkZWQ6ICJkb20t
dHJlZS1tYW5hZ2VyLWNvbnRlbnQtZmxvdy13YXMtYWRkZWQiLAotICAgIENvbnRlbnRGbG93V2Fz
UmVtb3ZlZDogImRvbS10cmVlLW1hbmFnZXItY29udGVudC1mbG93LXdhcy1yZW1vdmVkIiwKLSAg
ICBSZWdpb25PdmVyc2V0Q2hhbmdlZDogImRvbS10cmVlLW1hbmFnZXItcmVnaW9uLW92ZXJzZXQt
Y2hhbmdlZCIKLX07CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21h
aW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CisgICAgfQogCi1XZWJJbnNwZWN0b3IuRE9NVHJl
ZU1hbmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleSA9IGZ1bmN0aW9uKGZsb3dQYXlsb2FkKQotewot
ICAgIC8vIFVzZSB0aGUgZmxvdyBub2RlIGlkLCB0byBhdm9pZCBjb2xsaXNpb25zIHdoZW4gd2Ug
Y2hhbmdlIG1haW4gZG9jdW1lbnQgaWQuCi0gICAgcmV0dXJuIGZsb3dQYXlsb2FkLmRvY3VtZW50
Tm9kZUlkICsgIjoiICsgZmxvd1BheWxvYWQubmFtZTsKLX07CisgICAgLy8gU3RhdGljCisKKyAg
ICBzdGF0aWMgX2Zsb3dQYXlsb2FkSGFzaEtleShmbG93UGF5bG9hZCkKKyAgICB7CisgICAgICAg
IC8vIFVzZSB0aGUgZmxvdyBub2RlIGlkLCB0byBhdm9pZCBjb2xsaXNpb25zIHdoZW4gd2UgY2hh
bmdlIG1haW4gZG9jdW1lbnQgaWQuCisgICAgICAgIHJldHVybiBmbG93UGF5bG9hZC5kb2N1bWVu
dE5vZGVJZCArICI6IiArIGZsb3dQYXlsb2FkLm5hbWU7CisgICAgfQogCi1XZWJJbnNwZWN0b3Iu
RE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIHJlcXVlc3REb2N1bWVudDogZnVuY3Rp
b24oY2FsbGJhY2spCisgICAgLy8gUHVibGljCisKKyAgICByZXF1ZXN0RG9jdW1lbnQoY2FsbGJh
Y2spCiAgICAgewogICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpIHsKICAgICAgICAgICAgIGlm
IChjYWxsYmFjaykKQEAgLTk2LDIwICs4NSwyMiBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgRE9NQWdlbnQuZ2V0RG9jdW1l
bnQob25Eb2N1bWVudEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAg
IHB1c2hOb2RlVG9Gcm9udGVuZDogZnVuY3Rpb24ob2JqZWN0SWQsIGNhbGxiYWNrKQorICAgIHB1
c2hOb2RlVG9Gcm9udGVuZChvYmplY3RJZCwgY2FsbGJhY2spCiAgICAgewogICAgICAgICB0aGlz
Ll9kaXNwYXRjaFdoZW5Eb2N1bWVudEF2YWlsYWJsZShET01BZ2VudC5yZXF1ZXN0Tm9kZS5iaW5k
KERPTUFnZW50LCBvYmplY3RJZCksIGNhbGxiYWNrKTsKLSAgICB9LAorICAgIH0KIAotICAgIHB1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZDogZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2spCisgICAgcHVz
aE5vZGVCeVBhdGhUb0Zyb250ZW5kKHBhdGgsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFy
IGNhbGxiYWNrQ2FzdCA9IGNhbGxiYWNrOwogICAgICAgICB0aGlzLl9kaXNwYXRjaFdoZW5Eb2N1
bWVudEF2YWlsYWJsZShET01BZ2VudC5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQuYmluZChET01B
Z2VudCwgcGF0aCksIGNhbGxiYWNrQ2FzdCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfd3JhcENs
aWVudENhbGxiYWNrOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICAvLyBQcml2YXRlCisKKyAgICBf
d3JhcENsaWVudENhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsYmFj
aykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExOCw5ICsxMDksOSBAQCBXZWJJbnNwZWN0b3Iu
RE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IoIkVycm9yIGR1cmluZyBET01BZ2VudCBvcGVyYXRpb246ICIgKyBlcnJvcik7CiAgICAgICAg
ICAgICBjYWxsYmFjayhlcnJvciA/IG51bGwgOiByZXN1bHQpOwogICAgICAgICB9OwotICAgIH0s
CisgICAgfQogCi0gICAgX2Rpc3BhdGNoV2hlbkRvY3VtZW50QXZhaWxhYmxlOiBmdW5jdGlvbihm
dW5jLCBjYWxsYmFjaykKKyAgICBfZGlzcGF0Y2hXaGVuRG9jdW1lbnRBdmFpbGFibGUoZnVuYywg
Y2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgY2FsbGJhY2tXcmFwcGVyID0gdGhpcy5fd3Jh
cENsaWVudENhbGxiYWNrKGNhbGxiYWNrKTsKIApAQCAtMTM0LDkgKzEyNSw5IEBAIFdlYkluc3Bl
Y3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgdGhpcy5yZXF1ZXN0RG9jdW1lbnQob25Eb2N1bWVudEF2YWlsYWJsZS5iaW5k
KHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hdHRyaWJ1dGVNb2RpZmllZDogZnVuY3Rp
b24obm9kZUlkLCBuYW1lLCB2YWx1ZSkKKyAgICBfYXR0cmlidXRlTW9kaWZpZWQobm9kZUlkLCBu
YW1lLCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHZhciBub2RlID0gdGhpcy5faWRUb0RPTU5vZGVb
bm9kZUlkXTsKICAgICAgICAgaWYgKCFub2RlKQpAQCAtMTQ0LDkgKzEzNSw5IEBAIFdlYkluc3Bl
Y3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIG5vZGUuX3NldEF0dHJp
YnV0ZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudC5BdHRyaWJ1dGVNb2RpZmllZCwge25v
ZGUsIG5hbWV9KTsKICAgICAgICAgbm9kZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuRXZlbnQuQXR0cmlidXRlTW9kaWZpZWQsIHtuYW1lfSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfYXR0cmlidXRlUmVtb3ZlZDogZnVuY3Rpb24obm9kZUlkLCBuYW1lKQor
ICAgIF9hdHRyaWJ1dGVSZW1vdmVkKG5vZGVJZCwgbmFtZSkKICAgICB7CiAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKICAgICAgICAgaWYgKCFub2RlKQpAQCAt
MTU0LDE4ICsxNDUsMTggQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgbm9kZS5fcmVtb3ZlQXR0cmlidXRlKG5hbWUpOwogICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQu
QXR0cmlidXRlUmVtb3ZlZCwge25vZGUsIG5hbWV9KTsKICAgICAgICAgbm9kZS5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTU5vZGUuRXZlbnQuQXR0cmlidXRlUmVtb3Zl
ZCwge25hbWV9KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9pbmxpbmVTdHlsZUludmFsaWRhdGVk
OiBmdW5jdGlvbihub2RlSWRzKQorICAgIF9pbmxpbmVTdHlsZUludmFsaWRhdGVkKG5vZGVJZHMp
CiAgICAgewogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyArK2kp
CiAgICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkc1tub2RlSWRzW2ldXSA9IHRy
dWU7CiAgICAgICAgIGlmICgiX2xvYWROb2RlQXR0cmlidXRlc1RpbWVvdXQiIGluIHRoaXMpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX2xvYWROb2RlQXR0cmlidXRlc1RpbWVv
dXQgPSBzZXRUaW1lb3V0KHRoaXMuX2xvYWROb2RlQXR0cmlidXRlcy5iaW5kKHRoaXMpLCAwKTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9sb2FkTm9kZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uKCkKKyAg
ICBfbG9hZE5vZGVBdHRyaWJ1dGVzKCkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KG5vZGVJZCwgZXJyb3IsIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKQEAgLTE4OCwyNiArMTc5LDI2
IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICBET01BZ2VudC5nZXRBdHRyaWJ1dGVzKG5vZGVJZEFzTnVtYmVyLCBjYWxsYmFjay5iaW5kKHRo
aXMsIG5vZGVJZEFzTnVtYmVyKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5fYXR0cmlidXRl
TG9hZE5vZGVJZHMgPSB7fTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jaGFyYWN0ZXJEYXRhTW9k
aWZpZWQ6IGZ1bmN0aW9uKG5vZGVJZCwgbmV3VmFsdWUpCisgICAgX2NoYXJhY3RlckRhdGFNb2Rp
ZmllZChub2RlSWQsIG5ld1ZhbHVlKQogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9p
ZFRvRE9NTm9kZVtub2RlSWRdOwogICAgICAgICBub2RlLl9ub2RlVmFsdWUgPSBuZXdWYWx1ZTsK
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVRy
ZWVNYW5hZ2VyLkV2ZW50LkNoYXJhY3RlckRhdGFNb2RpZmllZCwge25vZGV9KTsKLSAgICB9LAor
ICAgIH0KIAotICAgIG5vZGVGb3JJZDogZnVuY3Rpb24obm9kZUlkKQorICAgIG5vZGVGb3JJZChu
b2RlSWQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9kb2N1bWVudFVwZGF0ZWQ6IGZ1bmN0aW9uKCkKKyAgICBf
ZG9jdW1lbnRVcGRhdGVkKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NldERvY3VtZW50KG51bGwp
OwotICAgIH0sCisgICAgfQogCi0gICAgX3NldERvY3VtZW50OiBmdW5jdGlvbihwYXlsb2FkKQor
ICAgIF9zZXREb2N1bWVudChwYXlsb2FkKQogICAgIHsKICAgICAgICAgdGhpcy5faWRUb0RPTU5v
ZGUgPSB7fTsKICAgICAgICAgaWYgKHBheWxvYWQgJiYgIm5vZGVJZCIgaW4gcGF5bG9hZCkKQEAg
LTIxNSwxNCArMjA2LDE0IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50ID0gbnVsbDsKICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVN
YW5hZ2VyLkV2ZW50LkRvY3VtZW50VXBkYXRlZCwgdGhpcy5fZG9jdW1lbnQpOwotICAgIH0sCisg
ICAgfQogCi0gICAgX3NldERldGFjaGVkUm9vdDogZnVuY3Rpb24ocGF5bG9hZCkKKyAgICBfc2V0
RGV0YWNoZWRSb290KHBheWxvYWQpCiAgICAgewogICAgICAgICBuZXcgV2ViSW5zcGVjdG9yLkRP
TU5vZGUodGhpcywgbnVsbCwgZmFsc2UsIHBheWxvYWQpOwotICAgIH0sCisgICAgfQogCi0gICAg
X3NldENoaWxkTm9kZXM6IGZ1bmN0aW9uKHBhcmVudElkLCBwYXlsb2FkcykKKyAgICBfc2V0Q2hp
bGROb2RlcyhwYXJlbnRJZCwgcGF5bG9hZHMpCiAgICAgewogICAgICAgICBpZiAoIXBhcmVudElk
ICYmIHBheWxvYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgdGhpcy5fc2V0RGV0YWNoZWRSb290
KHBheWxvYWRzWzBdKTsKQEAgLTIzMSw0OCArMjIyLDQ4IEBAIFdlYkluc3BlY3Rvci5ET01UcmVl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuX2lkVG9E
T01Ob2RlW3BhcmVudElkXTsKICAgICAgICAgcGFyZW50Ll9zZXRDaGlsZHJlblBheWxvYWQocGF5
bG9hZHMpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NoaWxkTm9kZUNvdW50VXBkYXRlZDogZnVu
Y3Rpb24obm9kZUlkLCBuZXdWYWx1ZSkKKyAgICBfY2hpbGROb2RlQ291bnRVcGRhdGVkKG5vZGVJ
ZCwgbmV3VmFsdWUpCiAgICAgewogICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX2lkVG9ET01Ob2Rl
W25vZGVJZF07CiAgICAgICAgIG5vZGUuY2hpbGROb2RlQ291bnQgPSBuZXdWYWx1ZTsKICAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyLkV2ZW50LkNoaWxkTm9kZUNvdW50VXBkYXRlZCwgbm9kZSk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfY2hpbGROb2RlSW5zZXJ0ZWQ6IGZ1bmN0aW9uKHBhcmVudElkLCBwcmV2SWQsIHBheWxv
YWQpCisgICAgX2NoaWxkTm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIHBheWxvYWQpCiAg
ICAgewogICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5faWRUb0RPTU5vZGVbcGFyZW50SWRdOwog
ICAgICAgICB2YXIgcHJldiA9IHRoaXMuX2lkVG9ET01Ob2RlW3ByZXZJZF07CiAgICAgICAgIHZh
ciBub2RlID0gcGFyZW50Ll9pbnNlcnRDaGlsZChwcmV2LCBwYXlsb2FkKTsKICAgICAgICAgdGhp
cy5faWRUb0RPTU5vZGVbbm9kZS5pZF0gPSBub2RlOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQuTm9kZUluc2Vy
dGVkLCB7bm9kZSwgcGFyZW50fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY2hpbGROb2RlUmVt
b3ZlZDogZnVuY3Rpb24ocGFyZW50SWQsIG5vZGVJZCkKKyAgICBfY2hpbGROb2RlUmVtb3ZlZChw
YXJlbnRJZCwgbm9kZUlkKQogICAgIHsKICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuX2lkVG9E
T01Ob2RlW3BhcmVudElkXTsKICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9pZFRvRE9NTm9kZVtu
b2RlSWRdOwogICAgICAgICBwYXJlbnQuX3JlbW92ZUNoaWxkKG5vZGUpOwogICAgICAgICB0aGlz
Ll91bmJpbmQobm9kZSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudC5Ob2RlUmVtb3ZlZCwge25vZGU6bm9kZSwg
cGFyZW50fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfdW5iaW5kOiBmdW5jdGlvbihub2RlKQor
ICAgIF91bmJpbmQobm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3JlbW92ZUNvbnRlbnROb2Rl
RnJvbUZsb3dJZk5lZWRlZChub2RlKTsKIAogICAgICAgICBkZWxldGUgdGhpcy5faWRUb0RPTU5v
ZGVbbm9kZS5pZF07CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBub2RlLmNoaWxkcmVuICYmIGkg
PCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgdGhpcy5fdW5iaW5kKG5v
ZGUuY2hpbGRyZW5baV0pOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHJlc3RvcmVTZWxlY3Rl
ZE5vZGVJc0FsbG93ZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3RvcmVTZWxl
Y3RlZE5vZGVJc0FsbG93ZWQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpbnNwZWN0RWxlbWVudDog
ZnVuY3Rpb24obm9kZUlkKQorICAgIGluc3BlY3RFbGVtZW50KG5vZGVJZCkKICAgICB7CiAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKICAgICAgICAgaWYgKG5v
ZGUpCkBAIC0yODAsOSArMjcxLDkgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9pbnNwZWN0TW9kZUVuYWJsZWQgPSBmYWxzZTsKICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVN
YW5hZ2VyLkV2ZW50Lkluc3BlY3RNb2RlU3RhdGVDaGFuZ2VkKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIGluc3BlY3ROb2RlT2JqZWN0OiBmdW5jdGlvbihyZW1vdGVPYmplY3QpCisgICAgaW5zcGVj
dE5vZGVPYmplY3QocmVtb3RlT2JqZWN0KQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzdG9yZVNl
bGVjdGVkTm9kZUlzQWxsb3dlZCA9IGZhbHNlOwogCkBAIC0yOTgsOSArMjg5LDkgQEAgV2ViSW5z
cGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAg
IHJlbW90ZU9iamVjdC5wdXNoTm9kZVRvRnJvbnRlbmQobm9kZUF2YWlsYWJsZS5iaW5kKHRoaXMp
KTsKLSAgICB9LAorICAgIH0KIAotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBz
ZWFyY2hDYWxsYmFjaykKKyAgICBwZXJmb3JtU2VhcmNoKHF1ZXJ5LCBzZWFyY2hDYWxsYmFjaykK
ICAgICB7CiAgICAgICAgIHRoaXMuY2FuY2VsU2VhcmNoKCk7CiAKQEAgLTMxMCw0OSArMzAxLDUw
IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICBzZWFyY2hDYWxsYmFjayhyZXN1bHRzQ291bnQpOwogICAgICAgICB9CiAgICAgICAgIERPTUFn
ZW50LnBlcmZvcm1TZWFyY2gocXVlcnksIGNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgIH0sCisg
ICAgfQogCi0gICAgc2VhcmNoUmVzdWx0OiBmdW5jdGlvbihpbmRleCwgY2FsbGJhY2spCisgICAg
c2VhcmNoUmVzdWx0KGluZGV4LCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9z
ZWFyY2hJZCkgewotICAgICAgICAgICAgZnVuY3Rpb24gbXljYWxsYmFjayhlcnJvciwgbm9kZUlk
cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKG51bGwpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmIChub2RlSWRzLmxlbmd0aCAhPT0gMSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5faWRU
b0RPTU5vZGVbbm9kZUlkc1swXV0pOworICAgICAgICBmdW5jdGlvbiBteWNhbGxiYWNrKGVycm9y
LCBub2RlSWRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhu
dWxsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobm9kZUlkcy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRzWzBdXSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodGhpcy5fc2VhcmNoSWQpCiAgICAgICAgICAgICBET01BZ2Vu
dC5nZXRTZWFyY2hSZXN1bHRzKHRoaXMuX3NlYXJjaElkLCBpbmRleCwgaW5kZXggKyAxLCBteWNh
bGxiYWNrLmJpbmQodGhpcykpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAg
ICAgICAgY2FsbGJhY2sobnVsbCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjYW5jZWxTZWFyY2g6
IGZ1bmN0aW9uKCkKKyAgICBjYW5jZWxTZWFyY2goKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMu
X3NlYXJjaElkKSB7CiAgICAgICAgICAgICBET01BZ2VudC5kaXNjYXJkU2VhcmNoUmVzdWx0cyh0
aGlzLl9zZWFyY2hJZCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2VhcmNoSWQ7CiAgICAg
ICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKG5vZGVJ
ZCwgc2VsZWN0b3JzLCBjYWxsYmFjaykKKyAgICBxdWVyeVNlbGVjdG9yKG5vZGVJZCwgc2VsZWN0
b3JzLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBjYWxsYmFja0Nhc3QgPSBjYWxsYmFj
azsKICAgICAgICAgRE9NQWdlbnQucXVlcnlTZWxlY3Rvcihub2RlSWQsIHNlbGVjdG9ycywgdGhp
cy5fd3JhcENsaWVudENhbGxiYWNrKGNhbGxiYWNrQ2FzdCkpOwotICAgIH0sCisgICAgfQogCi0g
ICAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24obm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxiYWNr
KQorICAgIHF1ZXJ5U2VsZWN0b3JBbGwobm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxiYWNrKQogICAg
IHsKICAgICAgICAgdmFyIGNhbGxiYWNrQ2FzdCA9IGNhbGxiYWNrOwogICAgICAgICBET01BZ2Vu
dC5xdWVyeVNlbGVjdG9yQWxsKG5vZGVJZCwgc2VsZWN0b3JzLCB0aGlzLl93cmFwQ2xpZW50Q2Fs
bGJhY2soY2FsbGJhY2tDYXN0KSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoaWdobGlnaHRET01O
b2RlOiBmdW5jdGlvbihub2RlSWQsIG1vZGUpCisgICAgaGlnaGxpZ2h0RE9NTm9kZShub2RlSWQs
IG1vZGUpCiAgICAgewogICAgICAgICBpZiAodGhpcy5faGlkZURPTU5vZGVIaWdobGlnaHRUaW1l
b3V0KSB7CiAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlkZURPTU5vZGVIaWdobGln
aHRUaW1lb3V0KTsKQEAgLTM2NCw5ICszNTYsOSBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgRE9NQWdlbnQuaGlnaGxpZ2h0Tm9kZS5pbnZv
a2Uoe25vZGVJZCwgaGlnaGxpZ2h0Q29uZmlnOiB0aGlzLl9idWlsZEhpZ2hsaWdodENvbmZpZyht
b2RlKX0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBET01BZ2VudC5oaWRlSGlnaGxpZ2h0
KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoaWdobGlnaHRSZWN0OiBmdW5jdGlvbihyZWN0LCB1
c2VQYWdlQ29vcmRpbmF0ZXMpCisgICAgaGlnaGxpZ2h0UmVjdChyZWN0LCB1c2VQYWdlQ29vcmRp
bmF0ZXMpCiAgICAgewogICAgICAgICBET01BZ2VudC5oaWdobGlnaHRSZWN0Lmludm9rZSh7CiAg
ICAgICAgICAgICB4OiByZWN0LngsCkBAIC0zNzcsMjMgKzM2OSwyMyBAQCBXZWJJbnNwZWN0b3Iu
RE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgb3V0bGluZUNvbG9yOiB7
cjogMjU1LCBnOiAyMjksIGI6IDE1MywgYTogMC42Nn0sCiAgICAgICAgICAgICB1c2VQYWdlQ29v
cmRpbmF0ZXMKICAgICAgICAgfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoaWRlRE9NTm9kZUhp
Z2hsaWdodDogZnVuY3Rpb24oKQorICAgIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCkKICAgICB7CiAg
ICAgICAgIHRoaXMuaGlnaGxpZ2h0RE9NTm9kZSgwKTsKLSAgICB9LAorICAgIH0KIAotICAgIGhp
Z2hsaWdodERPTU5vZGVGb3JUd29TZWNvbmRzOiBmdW5jdGlvbihub2RlSWQpCisgICAgaGlnaGxp
Z2h0RE9NTm9kZUZvclR3b1NlY29uZHMobm9kZUlkKQogICAgIHsKICAgICAgICAgdGhpcy5oaWdo
bGlnaHRET01Ob2RlKG5vZGVJZCk7CiAgICAgICAgIHRoaXMuX2hpZGVET01Ob2RlSGlnaGxpZ2h0
VGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5oaWRlRE9NTm9kZUhpZ2hsaWdodC5iaW5kKHRoaXMp
LCAyMDAwKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBpbnNwZWN0TW9kZUVuYWJsZWQoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2luc3BlY3RNb2RlRW5hYmxlZDsKLSAgICB9LAor
ICAgIH0KIAogICAgIHNldCBpbnNwZWN0TW9kZUVuYWJsZWQoZW5hYmxlZCkKICAgICB7CkBAIC00
MDQsOSArMzk2LDkgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgfQogCiAgICAgICAgIERPTUFnZW50LnNldEluc3BlY3RNb2RlRW5hYmxlZChlbmFi
bGVkLCB0aGlzLl9idWlsZEhpZ2hsaWdodENvbmZpZygpLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9idWlsZEhpZ2hsaWdodENvbmZpZzogZnVuY3Rpb24obW9k
ZSkKKyAgICBfYnVpbGRIaWdobGlnaHRDb25maWcobW9kZSkKICAgICB7CiAgICAgICAgIG1vZGUg
PSBtb2RlIHx8ICJhbGwiOwogICAgICAgICB2YXIgaGlnaGxpZ2h0Q29uZmlnID0geyBzaG93SW5m
bzogbW9kZSA9PT0gImFsbCIgfTsKQEAgLTQyMyw5ICs0MTUsOSBAQCBXZWJJbnNwZWN0b3IuRE9N
VHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLm1h
cmdpbkNvbG9yID0ge3I6IDI0NiwgZzogMTc4LCBiOiAxMDcsIGE6IDAuNjZ9OwogCiAgICAgICAg
IHJldHVybiBoaWdobGlnaHRDb25maWc7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY3JlYXRlQ29u
dGVudEZsb3dGcm9tUGF5bG9hZDogZnVuY3Rpb24oZmxvd1BheWxvYWQpCisgICAgX2NyZWF0ZUNv
bnRlbnRGbG93RnJvbVBheWxvYWQoZmxvd1BheWxvYWQpCiAgICAgewogICAgICAgICAvLyBGSVhN
RTogQ29sbGVjdCB0aGUgcmVnaW9ucyBmcm9tIHRoZSBwYXlsb2FkLgogICAgICAgICB2YXIgZmxv
dyA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGVudEZsb3coZmxvd1BheWxvYWQuZG9jdW1lbnROb2Rl
SWQsIGZsb3dQYXlsb2FkLm5hbWUsIGZsb3dQYXlsb2FkLm92ZXJzZXQsIGZsb3dQYXlsb2FkLmNv
bnRlbnQubWFwKHRoaXMubm9kZUZvcklkLmJpbmQodGhpcykpKTsKQEAgLTQzNiwxOCArNDI4LDE4
IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0K
IAogICAgICAgICByZXR1cm4gZmxvdzsKLSAgICB9LAorICAgIH0KIAotICAgIF91cGRhdGVDb250
ZW50Rmxvd0Zyb21QYXlsb2FkOiBmdW5jdGlvbihjb250ZW50RmxvdywgZmxvd1BheWxvYWQpCisg
ICAgX3VwZGF0ZUNvbnRlbnRGbG93RnJvbVBheWxvYWQoY29udGVudEZsb3csIGZsb3dQYXlsb2Fk
KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoY29udGVudEZsb3cuY29udGVudE5vZGVz
Lmxlbmd0aCA9PT0gZmxvd1BheWxvYWQuY29udGVudC5sZW5ndGgpOwogICAgICAgICBjb25zb2xl
LmFzc2VydChjb250ZW50Rmxvdy5jb250ZW50Tm9kZXMuZXZlcnkoZnVuY3Rpb24obm9kZSwgaSkg
eyBub2RlLmlkID09PSBmbG93UGF5bG9hZC5jb250ZW50W2ldOyB9KSk7CiAKICAgICAgICAgLy8g
RklYTUU6IENvbGxlY3QgdGhlIHJlZ2lvbnMgZnJvbSB0aGUgcGF5bG9hZC4KICAgICAgICAgY29u
dGVudEZsb3cub3ZlcnNldCA9IGZsb3dQYXlsb2FkLm92ZXJzZXQ7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBnZXROYW1lZEZsb3dDb2xsZWN0aW9uOiBmdW5jdGlvbihkb2N1bWVudE5vZGVJZGVudGlm
aWVyKQorICAgIGdldE5hbWVkRmxvd0NvbGxlY3Rpb24oZG9jdW1lbnROb2RlSWRlbnRpZmllcikK
ICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIG9uTmFtZWRGbG93Q29sbGVjdGlvbkF2YWlsYWJsZShl
cnJvciwgZmxvd3MpCiAgICAgICAgIHsKQEAgLTQ3NCwxOCArNDY2LDE4IEBAIFdlYkluc3BlY3Rv
ci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHdpbmRvdy5DU1NB
Z2VudCAmJiBDU1NBZ2VudC5nZXROYW1lZEZsb3dDb2xsZWN0aW9uKQogICAgICAgICAgICAgQ1NT
QWdlbnQuZ2V0TmFtZWRGbG93Q29sbGVjdGlvbihkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBvbk5h
bWVkRmxvd0NvbGxlY3Rpb25BdmFpbGFibGUuYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBuYW1lZEZsb3dDcmVhdGVkOiBmdW5jdGlvbihmbG93UGF5bG9hZCkKKyAgICBuYW1lZEZs
b3dDcmVhdGVkKGZsb3dQYXlsb2FkKQogICAgIHsKICAgICAgICAgdmFyIGZsb3dLZXkgPSBXZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleShmbG93UGF5bG9hZCk7
CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9mbG93cy5oYXMoZmxvd0tleSkpOwogICAg
ICAgICB2YXIgY29udGVudEZsb3cgPSB0aGlzLl9jcmVhdGVDb250ZW50Rmxvd0Zyb21QYXlsb2Fk
KGZsb3dQYXlsb2FkKTsKICAgICAgICAgdGhpcy5fZmxvd3Muc2V0KGZsb3dLZXksIGNvbnRlbnRG
bG93KTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LkRPTVRyZWVNYW5hZ2VyLkV2ZW50LkNvbnRlbnRGbG93V2FzQWRkZWQsIHtmbG93OiBjb250ZW50
Rmxvd30pOwotICAgIH0sCisgICAgfQogCi0gICAgbmFtZWRGbG93UmVtb3ZlZDogZnVuY3Rpb24o
ZG9jdW1lbnROb2RlSWRlbnRpZmllciwgZmxvd05hbWUpCisgICAgbmFtZWRGbG93UmVtb3ZlZChk
b2N1bWVudE5vZGVJZGVudGlmaWVyLCBmbG93TmFtZSkKICAgICB7CiAgICAgICAgIHZhciBmbG93
S2V5ID0gV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLl9mbG93UGF5bG9hZEhhc2hLZXkoe2Rv
Y3VtZW50Tm9kZUlkOiBkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBuYW1lOiBmbG93TmFtZX0pOwog
ICAgICAgICB2YXIgY29udGVudEZsb3cgPSB0aGlzLl9mbG93cy5nZXQoZmxvd0tleSk7CkBAIC00
OTcsMjEgKzQ4OSwyMSBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgdGhpcy5fY29udGVudE5vZGVzVG9GbG93c01hcC5kZWxldGUoY29udGVu
dE5vZGUuaWQpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudC5Db250ZW50Rmxvd1dhc1JlbW92ZWQsIHtmbG93
OiBjb250ZW50Rmxvd30pOwotICAgIH0sCisgICAgfQogCi0gICAgX3NlbmROYW1lZEZsb3dVcGRh
dGVFdmVudHM6IGZ1bmN0aW9uKGZsb3dQYXlsb2FkKQorICAgIF9zZW5kTmFtZWRGbG93VXBkYXRl
RXZlbnRzKGZsb3dQYXlsb2FkKQogICAgIHsKICAgICAgICAgdmFyIGZsb3dLZXkgPSBXZWJJbnNw
ZWN0b3IuRE9NVHJlZU1hbmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleShmbG93UGF5bG9hZCk7CiAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2Zsb3dzLmhhcyhmbG93S2V5KSk7CiAgICAgICAg
IHRoaXMuX3VwZGF0ZUNvbnRlbnRGbG93RnJvbVBheWxvYWQodGhpcy5fZmxvd3MuZ2V0KGZsb3dL
ZXkpLCBmbG93UGF5bG9hZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZWdpb25PdmVyc2V0Q2hh
bmdlZDogZnVuY3Rpb24oZmxvd1BheWxvYWQpCisgICAgcmVnaW9uT3ZlcnNldENoYW5nZWQoZmxv
d1BheWxvYWQpCiAgICAgewogICAgICAgICB0aGlzLl9zZW5kTmFtZWRGbG93VXBkYXRlRXZlbnRz
KGZsb3dQYXlsb2FkKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlZ2lzdGVyZWROYW1lZEZsb3dD
b250ZW50RWxlbWVudDogZnVuY3Rpb24oZG9jdW1lbnROb2RlSWRlbnRpZmllciwgZmxvd05hbWUs
IGNvbnRlbnROb2RlSWQsIG5leHRDb250ZW50RWxlbWVudE5vZGVJZCkKKyAgICByZWdpc3RlcmVk
TmFtZWRGbG93Q29udGVudEVsZW1lbnQoZG9jdW1lbnROb2RlSWRlbnRpZmllciwgZmxvd05hbWUs
IGNvbnRlbnROb2RlSWQsIG5leHRDb250ZW50RWxlbWVudE5vZGVJZCkKICAgICB7CiAgICAgICAg
IHZhciBmbG93S2V5ID0gV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLl9mbG93UGF5bG9hZEhh
c2hLZXkoe2RvY3VtZW50Tm9kZUlkOiBkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBuYW1lOiBmbG93
TmFtZX0pOwogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9mbG93cy5oYXMoZmxvd0tleSkp
OwpAQCAtNTI2LDE4ICs1MTgsMTggQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIGZsb3cuaW5zZXJ0Q29udGVudE5vZGVCZWZvcmUoY29udGVu
dE5vZGUsIHRoaXMubm9kZUZvcklkKG5leHRDb250ZW50RWxlbWVudE5vZGVJZCkpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBmbG93LmFwcGVuZENvbnRlbnROb2RlKGNvbnRlbnROb2RlKTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9yZW1vdmVDb250ZW50Tm9kZUZyb21GbG93SWZOZWVkZWQ6
IGZ1bmN0aW9uKG5vZGUpCisgICAgX3JlbW92ZUNvbnRlbnROb2RlRnJvbUZsb3dJZk5lZWRlZChu
b2RlKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9jb250ZW50Tm9kZXNUb0Zsb3dzTWFwLmhh
cyhub2RlLmlkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmFyIGZsb3cgPSB0aGlz
Ll9jb250ZW50Tm9kZXNUb0Zsb3dzTWFwLmdldChub2RlLmlkKTsKICAgICAgICAgdGhpcy5fY29u
dGVudE5vZGVzVG9GbG93c01hcC5kZWxldGUobm9kZS5pZCk7CiAgICAgICAgIGZsb3cucmVtb3Zl
Q29udGVudE5vZGUobm9kZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB1bnJlZ2lzdGVyZWROYW1l
ZEZsb3dDb250ZW50RWxlbWVudDogZnVuY3Rpb24oZG9jdW1lbnROb2RlSWRlbnRpZmllciwgZmxv
d05hbWUsIGNvbnRlbnROb2RlSWQpCisgICAgdW5yZWdpc3RlcmVkTmFtZWRGbG93Q29udGVudEVs
ZW1lbnQoZG9jdW1lbnROb2RlSWRlbnRpZmllciwgZmxvd05hbWUsIGNvbnRlbnROb2RlSWQpCiAg
ICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jb250ZW50Tm9kZXNUb0Zsb3dzTWFw
Lmhhcyhjb250ZW50Tm9kZUlkKSk7CiAKQEAgLTU0Niw5ICs1MzgsOSBAQCBXZWJJbnNwZWN0b3Iu
RE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2NvbnRlbnROb2Rl
c1RvRmxvd3NNYXAuZGVsZXRlKGNvbnRlbnROb2RlSWQpOwogICAgICAgICBmbG93LnJlbW92ZUNv
bnRlbnROb2RlKHRoaXMubm9kZUZvcklkKGNvbnRlbnROb2RlSWQpKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9jb2VyY2VSZW1vdGVBcnJheU9mRE9NTm9kZXM6IGZ1bmN0aW9uKG9iamVjdElkLCBj
YWxsYmFjaykKKyAgICBfY29lcmNlUmVtb3RlQXJyYXlPZkRPTU5vZGVzKG9iamVjdElkLCBjYWxs
YmFjaykKICAgICB7CiAgICAgICAgIHZhciBsZW5ndGgsIG5vZGVzLCByZWNlaXZlZCA9IDAsIGxh
c3RFcnJvciA9IG51bGwsIGRvbVRyZWVNYW5hZ2VyID0gdGhpczsKIApAQCAtNTg3LDkgKzU3OSw5
IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgRE9NQWdlbnQucmVxdWVzdE5vZGUobm9kZVByb3BlcnR5LnZhbHVlLm9iamVjdElkLCBu
b2RlUmVxdWVzdGVkLmJpbmQobnVsbCwgaSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsK
LSAgICB9LAorICAgIH0KIAotICAgIGdldE5vZGVDb250ZW50Rmxvd0luZm86IGZ1bmN0aW9uKGRv
bU5vZGUsIHJlc3VsdFJlYWR5Q2FsbGJhY2spCisgICAgZ2V0Tm9kZUNvbnRlbnRGbG93SW5mbyhk
b21Ob2RlLCByZXN1bHRSZWFkeUNhbGxiYWNrKQogICAgIHsKICAgICAgICAgRE9NQWdlbnQucmVz
b2x2ZU5vZGUoZG9tTm9kZS5pZCwgZG9tTm9kZVJlc29sdmVkLmJpbmQodGhpcykpOwogCkBAIC03
MTIsMTUgKzcwNCwyOSBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0g
ewogCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9
CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlOiBmdW5jdGlv
bihldmVudCkKKyAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAg
ICAgaWYgKGV2ZW50LnRhcmdldC5pc01haW5GcmFtZSgpKQogICAgICAgICAgICAgdGhpcy5fcmVz
dG9yZVNlbGVjdGVkTm9kZUlzQWxsb3dlZCA9IHRydWU7CiAgICAgfQogfTsKIAotV2ViSW5zcGVj
dG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudCA9IHsKKyAg
ICBBdHRyaWJ1dGVNb2RpZmllZDogImRvbS10cmVlLW1hbmFnZXItYXR0cmlidXRlLW1vZGlmaWVk
IiwKKyAgICBBdHRyaWJ1dGVSZW1vdmVkOiAiZG9tLXRyZWUtbWFuYWdlci1hdHRyaWJ1dGUtcmVt
b3ZlZCIsCisgICAgQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiAiZG9tLXRyZWUtbWFuYWdlci1jaGFy
YWN0ZXItZGF0YS1tb2RpZmllZCIsCisgICAgTm9kZUluc2VydGVkOiAiZG9tLXRyZWUtbWFuYWdl
ci1ub2RlLWluc2VydGVkIiwKKyAgICBOb2RlUmVtb3ZlZDogImRvbS10cmVlLW1hbmFnZXItbm9k
ZS1yZW1vdmVkIiwKKyAgICBEb2N1bWVudFVwZGF0ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWRvY3Vt
ZW50LXVwZGF0ZWQiLAorICAgIENoaWxkTm9kZUNvdW50VXBkYXRlZDogImRvbS10cmVlLW1hbmFn
ZXItY2hpbGQtbm9kZS1jb3VudC11cGRhdGVkIiwKKyAgICBET01Ob2RlV2FzSW5zcGVjdGVkOiAi
ZG9tLXRyZWUtbWFuYWdlci1kb20tbm9kZS13YXMtaW5zcGVjdGVkIiwKKyAgICBJbnNwZWN0TW9k
ZVN0YXRlQ2hhbmdlZDogImRvbS10cmVlLW1hbmFnZXItaW5zcGVjdC1tb2RlLXN0YXRlLWNoYW5n
ZWQiLAorICAgIENvbnRlbnRGbG93TGlzdFdhc1VwZGF0ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNv
bnRlbnQtZmxvdy1saXN0LXdhcy11cGRhdGVkIiwKKyAgICBDb250ZW50Rmxvd1dhc0FkZGVkOiAi
ZG9tLXRyZWUtbWFuYWdlci1jb250ZW50LWZsb3ctd2FzLWFkZGVkIiwKKyAgICBDb250ZW50Rmxv
d1dhc1JlbW92ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNvbnRlbnQtZmxvdy13YXMtcmVtb3ZlZCIs
CisgICAgUmVnaW9uT3ZlcnNldENoYW5nZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLXJlZ2lvbi1vdmVy
c2V0LWNoYW5nZWQiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvRGFzaGJvYXJkTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Rhc2hib2FyZE1hbmFnZXIuanMKaW5k
ZXggYzg0OGIyNzdiYWZiNGQyMDFiYmUxMjFlYTNjNWEyN2RiZWE2ZmUxNS4uNDhjNGE4ZmQ1YjY1
Zjc1NjM3ZDZlOWQxNmViNTk3ODg4YmMwYzdlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGFzaGJvYXJkTWFuYWdlci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9EYXNoYm9h
cmRNYW5hZ2VyLmpzCkBAIC0yMywxOSArMjMsMTcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlciA9IGZ1bmN0
aW9uKCkgewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2Jq
ZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmpl
Y3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX2Rhc2hib2FyZHMgPSB7fTsKLSAgICB0aGlzLl9k
YXNoYm9hcmRzLmRlZmF1bHQgPSBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1bHREYXNoYm9hcmQ7Ci0g
ICAgdGhpcy5fZGFzaGJvYXJkcy5kZWJ1Z2dlciA9IG5ldyBXZWJJbnNwZWN0b3IuRGVidWdnZXJE
YXNoYm9hcmQ7Ci0gICAgdGhpcy5fZGFzaGJvYXJkcy5yZXBsYXkgPSBuZXcgV2ViSW5zcGVjdG9y
LlJlcGxheURhc2hib2FyZDsKLX07CitXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlciA9IGNs
YXNzIERhc2hib2FyZE1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Cit7CisgICAg
Y29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotV2ViSW5zcGVjdG9yLkRh
c2hib2FyZE1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0
b3IuRGFzaGJvYXJkTWFuYWdlciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlLAorICAgICAgICB0aGlzLl9kYXNoYm9hcmRzID0ge307CisgICAgICAgIHRoaXMu
X2Rhc2hib2FyZHMuZGVmYXVsdCA9IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdERhc2hib2FyZDsK
KyAgICAgICAgdGhpcy5fZGFzaGJvYXJkcy5kZWJ1Z2dlciA9IG5ldyBXZWJJbnNwZWN0b3IuRGVi
dWdnZXJEYXNoYm9hcmQ7CisgICAgICAgIHRoaXMuX2Rhc2hib2FyZHMucmVwbGF5ID0gbmV3IFdl
Ykluc3BlY3Rvci5SZXBsYXlEYXNoYm9hcmQ7CisgICAgfQogCiAgICAgZ2V0IGRhc2hib2FyZHMo
KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcwppbmRleCBlZmZkOGI1
YjNiYzhhNGMxZTBkNGU5NDNkNGU5NDNhN2MyYjBhYjJlLi4wODgzYTM4ZTEzMDI2Yjg1ZTJhMTRh
MTBkNDA0OTAzNjlkODM4NzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9EZWJ1Z2dlck1hbmFnZXIuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpz
CkBAIC0yMyw5OCArMjMsNzMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi1XZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyID0gZnVuY3Rpb24oKQorV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlciA9IGNsYXNzIERlYnVnZ2VyTWFuYWdlciBleHRlbmRzIFdl
Ykluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2Vi
SW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJ
bnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBpZiAod2luZG93LkRlYnVnZ2VyQWdl
bnQpCi0gICAgICAgIERlYnVnZ2VyQWdlbnQuZW5hYmxlKCk7Ci0KLSAgICBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50
LkRpc3BsYXlMb2NhdGlvbkRpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludERpc3BsYXlMb2NhdGlv
bkRpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5EaXNhYmxlZFN0YXRlRGlkQ2hh
bmdlLCB0aGlzLl9icmVha3BvaW50RGlzYWJsZWRTdGF0ZURpZENoYW5nZSwgdGhpcyk7Ci0gICAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5FdmVudC5Db25kaXRpb25EaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRFZGl0YWJs
ZVByb3BlcnR5RGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkF1dG9Db250aW51
ZURpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludEVkaXRhYmxlUHJvcGVydHlEaWRDaGFuZ2UsIHRo
aXMpOwotICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuQWN0aW9uc0RpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2lu
dEVkaXRhYmxlUHJvcGVydHlEaWRDaGFuZ2UsIHRoaXMpOwotCi0gICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoInBhZ2VoaWRlIiwgdGhpcy5faW5zcGVjdG9yQ2xvc2luZy5iaW5kKHRoaXMpKTsK
KyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAgdGhpcy5f
YWxsRXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFibGVkU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3Iu
U2V0dGluZygiYnJlYWstb24tYWxsLWV4Y2VwdGlvbnMiLCBmYWxzZSk7Ci0gICAgdGhpcy5fYWxs
VW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludEVuYWJsZWRTZXR0aW5nID0gbmV3IFdlYkluc3Bl
Y3Rvci5TZXR0aW5nKCJicmVhay1vbi1hbGwtdW5jYXVnaHQtZXhjZXB0aW9ucyIsIGZhbHNlKTsK
KyAgICAgICAgaWYgKHdpbmRvdy5EZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAgRGVidWdnZXJB
Z2VudC5lbmFibGUoKTsKIAotICAgIHZhciBzcGVjaWFsQnJlYWtwb2ludExvY2F0aW9uID0gbmV3
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24obnVsbCwgSW5maW5pdHksIEluZmluaXR5
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5EaXNwbGF5TG9jYXRpb25EaWRDaGFuZ2UsIHRoaXMu
X2JyZWFrcG9pbnREaXNwbGF5TG9jYXRpb25EaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LkV2ZW50LkRpc2FibGVkU3RhdGVEaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnREaXNhYmxl
ZFN0YXRlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5Db25kaXRpb25E
aWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hhbmdlLCB0aGlz
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BdXRvQ29udGludWVEaWRDaGFuZ2UsIHRoaXMuX2Jy
ZWFrcG9pbnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dC5FdmVudC5BY3Rpb25zRGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50RWRpdGFibGVQcm9wZXJ0
eURpZENoYW5nZSwgdGhpcyk7CiAKLSAgICB0aGlzLl9hbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChzcGVjaWFsQnJlYWtwb2ludExvY2F0aW9uLCAh
dGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFibGVkU2V0dGluZy52YWx1ZSk7Ci0gICAg
dGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQucmVzb2x2ZWQgPSB0cnVlOworICAgICAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLCB0aGlzLl9pbnNwZWN0b3JDbG9zaW5n
LmJpbmQodGhpcykpOwogCi0gICAgdGhpcy5fYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2lu
dCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChzcGVjaWFsQnJlYWtwb2ludExvY2F0aW9u
LCAhdGhpcy5fYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludEVuYWJsZWRTZXR0aW5nLnZh
bHVlKTsKKyAgICAgICAgdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFibGVkU2V0dGlu
ZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygiYnJlYWstb24tYWxsLWV4Y2VwdGlvbnMiLCBm
YWxzZSk7CisgICAgICAgIHRoaXMuX2FsbFVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFi
bGVkU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygiYnJlYWstb24tYWxsLXVuY2F1
Z2h0LWV4Y2VwdGlvbnMiLCBmYWxzZSk7CiAKLSAgICB0aGlzLl9icmVha3BvaW50cyA9IFtdOwot
ICAgIHRoaXMuX2JyZWFrcG9pbnRVUkxNYXAgPSB7fTsKLSAgICB0aGlzLl9icmVha3BvaW50U2Ny
aXB0SWRlbnRpZmllck1hcCA9IHt9OwotICAgIHRoaXMuX2JyZWFrcG9pbnRJZE1hcCA9IHt9Owor
ICAgICAgICB2YXIgc3BlY2lhbEJyZWFrcG9pbnRMb2NhdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZUxvY2F0aW9uKG51bGwsIEluZmluaXR5LCBJbmZpbml0eSk7CiAKLSAgICB0aGlz
Ll9uZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIgPSAxOworICAgICAgICB0aGlzLl9hbGxF
eGNlcHRpb25zQnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChzcGVjaWFs
QnJlYWtwb2ludExvY2F0aW9uLCAhdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFibGVk
U2V0dGluZy52YWx1ZSk7CisgICAgICAgIHRoaXMuX2FsbEV4Y2VwdGlvbnNCcmVha3BvaW50LnJl
c29sdmVkID0gdHJ1ZTsKIAotICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlOwotICAgIHRoaXMuX3Bh
dXNlUmVhc29uID0gbnVsbDsKLSAgICB0aGlzLl9wYXVzZURhdGEgPSBudWxsOworICAgICAgICB0
aGlzLl9hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5C
cmVha3BvaW50KHNwZWNpYWxCcmVha3BvaW50TG9jYXRpb24sICF0aGlzLl9hbGxVbmNhdWdodEV4
Y2VwdGlvbnNCcmVha3BvaW50RW5hYmxlZFNldHRpbmcudmFsdWUpOwogCi0gICAgdGhpcy5fc2Ny
aXB0SWRNYXAgPSB7fTsKLSAgICB0aGlzLl9zY3JpcHRVUkxNYXAgPSB7fTsKKyAgICAgICAgdGhp
cy5fYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFVSTE1hcCA9IHt9
OworICAgICAgICB0aGlzLl9icmVha3BvaW50U2NyaXB0SWRlbnRpZmllck1hcCA9IHt9OworICAg
ICAgICB0aGlzLl9icmVha3BvaW50SWRNYXAgPSB7fTsKIAotICAgIHRoaXMuX2JyZWFrcG9pbnRz
U2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygiYnJlYWtwb2ludHMiLCBbXSk7Ci0g
ICAgdGhpcy5fYnJlYWtwb2ludHNFbmFibGVkU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0
dGluZygiYnJlYWtwb2ludHMtZW5hYmxlZCIsIHRydWUpOworICAgICAgICB0aGlzLl9uZXh0QnJl
YWtwb2ludEFjdGlvbklkZW50aWZpZXIgPSAxOwogCi0gICAgaWYgKHdpbmRvdy5EZWJ1Z2dlckFn
ZW50KQotICAgICAgICBEZWJ1Z2dlckFnZW50LnNldEJyZWFrcG9pbnRzQWN0aXZlKHRoaXMuX2Jy
ZWFrcG9pbnRzRW5hYmxlZFNldHRpbmcudmFsdWUpOworICAgICAgICB0aGlzLl9wYXVzZWQgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5fcGF1c2VSZWFzb24gPSBudWxsOworICAgICAgICB0aGlzLl9w
YXVzZURhdGEgPSBudWxsOwogCi0gICAgdGhpcy5fdXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0
ZSgpOworICAgICAgICB0aGlzLl9zY3JpcHRJZE1hcCA9IHt9OworICAgICAgICB0aGlzLl9zY3Jp
cHRVUkxNYXAgPSB7fTsKIAotICAgIGZ1bmN0aW9uIHJlc3RvcmVCcmVha3BvaW50c1Nvb24oKSB7
Ci0gICAgICAgIHRoaXMuX3Jlc3RvcmluZ0JyZWFrcG9pbnRzID0gdHJ1ZTsKLSAgICAgICAgZm9y
ICh2YXIgY29va2llIG9mIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1ZSkKLSAgICAgICAg
ICAgIHRoaXMuYWRkQnJlYWtwb2ludChuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQoY29va2ll
KSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9yZXN0b3JpbmdCcmVha3BvaW50czsKLSAgICB9Cisg
ICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGlu
ZygiYnJlYWtwb2ludHMiLCBbXSk7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzRW5hYmxlZFNl
dHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoImJyZWFrcG9pbnRzLWVuYWJsZWQiLCB0
cnVlKTsKIAotICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBtYW5hZ2VycyBsZWFybiBhYm91dCByZXN0
b3JlZCBicmVha3BvaW50cywKLSAgICAvLyByZWdhcmRsZXNzIG9mIHRoZWlyIGluaXRpYWxpemF0
aW9uIG9yZGVyLgotICAgIHNldFRpbWVvdXQocmVzdG9yZUJyZWFrcG9pbnRzU29vbi5iaW5kKHRo
aXMpLCAwKTsKLX07CisgICAgICAgIGlmICh3aW5kb3cuRGVidWdnZXJBZ2VudCkKKyAgICAgICAg
ICAgIERlYnVnZ2VyQWdlbnQuc2V0QnJlYWtwb2ludHNBY3RpdmUodGhpcy5fYnJlYWtwb2ludHNF
bmFibGVkU2V0dGluZy52YWx1ZSk7CiAKLVdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZl
bnQgPSB7Ci0gICAgQnJlYWtwb2ludEFkZGVkOiAiZGVidWdnZXItbWFuYWdlci1icmVha3BvaW50
LWFkZGVkIiwKLSAgICBCcmVha3BvaW50UmVtb3ZlZDogImRlYnVnZ2VyLW1hbmFnZXItYnJlYWtw
b2ludC1yZW1vdmVkIiwKLSAgICBCcmVha3BvaW50TW92ZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLWJy
ZWFrcG9pbnQtbW92ZWQiLAotICAgIFBhdXNlZDogImRlYnVnZ2VyLW1hbmFnZXItcGF1c2VkIiwK
LSAgICBSZXN1bWVkOiAiZGVidWdnZXItbWFuYWdlci1yZXN1bWVkIiwKLSAgICBDYWxsRnJhbWVz
RGlkQ2hhbmdlOiAiZGVidWdnZXItbWFuYWdlci1jYWxsLWZyYW1lcy1kaWQtY2hhbmdlIiwKLSAg
ICBBY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2U6ICJkZWJ1Z2dlci1tYW5hZ2VyLWFjdGl2ZS1jYWxs
LWZyYW1lLWRpZC1jaGFuZ2UiLAotICAgIFNjcmlwdEFkZGVkOiAiZGVidWdnZXItbWFuYWdlci1z
Y3JpcHQtYWRkZWQiLAotICAgIFNjcmlwdHNDbGVhcmVkOiAiZGVidWdnZXItbWFuYWdlci1zY3Jp
cHRzLWNsZWFyZWQiLAotICAgIEJyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZTogImRlYnVnZ2Vy
LW1hbmFnZXItYnJlYWtwb2ludHMtZW5hYmxlZC1kaWQtY2hhbmdlIgotfTsKKyAgICAgICAgdGhp
cy5fdXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0ZSgpOwogCi1XZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLlBhdXNlUmVhc29uID0gewotICAgIEFzc2VydGlvbjogImFzc2VydGlvbiIsCi0g
ICAgQnJlYWtwb2ludDogImJyZWFrcG9pbnQiLAotICAgIENTUFZpb2xhdGlvbjogIkNTUC12aW9s
YXRpb24iLAotICAgIERlYnVnZ2VyU3RhdGVtZW50OiAiZGVidWdnZXItc3RhdGVtZW50IiwKLSAg
ICBFeGNlcHRpb246ICJleGNlcHRpb24iLAotICAgIFBhdXNlT25OZXh0U3RhdGVtZW50OiAicGF1
c2Utb24tbmV4dC1zdGF0ZW1lbnQiLAotICAgIE90aGVyOiAib3RoZXIiLAotfQorICAgICAgICBm
dW5jdGlvbiByZXN0b3JlQnJlYWtwb2ludHNTb29uKCkgeworICAgICAgICAgICAgdGhpcy5fcmVz
dG9yaW5nQnJlYWtwb2ludHMgPSB0cnVlOworICAgICAgICAgICAgZm9yICh2YXIgY29va2llIG9m
IHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1ZSkKKyAgICAgICAgICAgICAgICB0aGlzLmFk
ZEJyZWFrcG9pbnQobmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KGNvb2tpZSkpOworICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX3Jlc3RvcmluZ0JyZWFrcG9pbnRzOworICAgICAgICB9CiAKLVdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9y
OiBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLAorICAgICAgICAvLyBFbnN1cmUgdGhhdCBh
bGwgbWFuYWdlcnMgbGVhcm4gYWJvdXQgcmVzdG9yZWQgYnJlYWtwb2ludHMsCisgICAgICAgIC8v
IHJlZ2FyZGxlc3Mgb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gb3JkZXIuCisgICAgICAgIHNldFRp
bWVvdXQocmVzdG9yZUJyZWFrcG9pbnRzU29vbi5iaW5kKHRoaXMpLCAwKTsKKyAgICB9CiAKICAg
ICAvLyBQdWJsaWMKIAogICAgIGdldCBicmVha3BvaW50c0VuYWJsZWQoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzRW5hYmxlZFNldHRpbmcudmFsdWU7Ci0gICAgfSwK
KyAgICB9CiAKICAgICBzZXQgYnJlYWtwb2ludHNFbmFibGVkKGVuYWJsZWQpCiAgICAgewpAQCAt
MTI4LDMyICsxMDMsMzIgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIERlYnVnZ2VyQWdlbnQuc2V0QnJlYWtwb2ludHNBY3RpdmUoZW5hYmxlZCk7
CiAKICAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0ZSgpOwotICAgIH0s
CisgICAgfQogCiAgICAgZ2V0IHBhdXNlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5f
cGF1c2VkOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBhdXNlUmVhc29uKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9wYXVzZVJlYXNvbjsKLSAgICB9LAorICAgIH0KIAogICAgIGdl
dCBwYXVzZURhdGEoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdXNlRGF0YTsKLSAg
ICB9LAorICAgIH0KIAogICAgIGdldCBjYWxsRnJhbWVzKCkKICAgICB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9jYWxsRnJhbWVzOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGFjdGl2ZUNhbGxG
cmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlQ2FsbEZyYW1lOwotICAg
IH0sCisgICAgfQogCiAgICAgc2V0IGFjdGl2ZUNhbGxGcmFtZShjYWxsRnJhbWUpCiAgICAgewpA
QCAtMTYzLDkgKzEzOCw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLl9hY3RpdmVDYWxsRnJhbWUgPSBjYWxsRnJhbWUgfHwgbnVsbDsK
IAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVi
dWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBwYXVzZTogZnVuY3Rpb24oKQorICAgIHBhdXNlKCkKICAgICB7CiAgICAgICAg
IGlmICh0aGlzLl9wYXVzZWQpCiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7
CkBAIC0xODQsOSArMTU5LDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW21h
bmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXN1
bWU6IGZ1bmN0aW9uKCkKKyAgICByZXN1bWUoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9w
YXVzZWQpCiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CkBAIC0yMDUsOSAr
MTgwLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQs
IHByb3RvY29sUmVzdWx0XSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzdGVwT3ZlcjogZnVuY3Rp
b24oKQorICAgIHN0ZXBPdmVyKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQog
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAg
b3ZlciBiZWNhdXNlIGRlYnVnZ2VyIGlzIG5vdCBwYXVzZWQuIikpOwpAQCAtMjI2LDkgKzIwMSw5
IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90
b2NvbFJlc3VsdF0pOwotICAgIH0sCisgICAgfQogCi0gICAgc3RlcEludG86IGZ1bmN0aW9uKCkK
KyAgICBzdGVwSW50bygpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkKICAgICAg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNhbm5vdCBzdGVwIGludG8g
YmVjYXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIpKTsKQEAgLTI0Nyw5ICsyMjIsOSBAQCBX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0p
OwogCiAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xS
ZXN1bHRdKTsKLSAgICB9LAorICAgIH0KIAotICAgIHN0ZXBPdXQ6IGZ1bmN0aW9uKCkKKyAgICBz
dGVwT3V0KCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQogICAgICAgICAgICAg
cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3V0IGJlY2F1c2Ug
ZGVidWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CkBAIC0yNjgsMjQgKzI0MywyNCBAQCBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRd
KTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCgpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQ7Ci0gICAg
fSwKKyAgICB9CiAKICAgICBnZXQgYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCgpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2lu
dDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBicmVha3BvaW50cygpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBicmVha3Bv
aW50c0ZvclNvdXJjZUNvZGU6IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCisgICAgYnJlYWtwb2ludHNG
b3JTb3VyY2VDb2RlKHNvdXJjZUNvZGUpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChz
b3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlc291cmNlIHx8IHNvdXJjZUNvZGUg
aW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KTsKIApAQCAtMzEwLDMwICsyODUsMzAgQEAg
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gW107Ci0gICAgfSwKKyAgICB9CiAKLSAgICBicmVha3BvaW50Rm9ySWRl
bnRpZmllcjogZnVuY3Rpb24oaWQpCisgICAgYnJlYWtwb2ludEZvcklkZW50aWZpZXIoaWQpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludElkTWFwW2lkXTsKLSAgICB9LAor
ICAgIH0KIAotICAgIHNjcmlwdEZvcklkZW50aWZpZXI6IGZ1bmN0aW9uKGlkKQorICAgIHNjcmlw
dEZvcklkZW50aWZpZXIoaWQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0SWRN
YXBbaWRdIHx8IG51bGw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzY3JpcHRzRm9yVVJMOiBmdW5j
dGlvbih1cmwpCisgICAgc2NyaXB0c0ZvclVSTCh1cmwpCiAgICAgewogICAgICAgICAvLyBGSVhN
RTogVGhpcyBtYXkgbm90IGJlIHNhZmUuIEEgUmVzb3VyY2UncyBVUkwgbWF5IGRpZmZlciBmcm9t
IGEgU2NyaXB0J3MgVVJMLgogICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0VVJMTWFwW3VybF0g
fHwgW107Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjb250aW51ZVRvTG9jYXRpb246IGZ1bmN0aW9u
KHNjcmlwdElkZW50aWZpZXIsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICBjb250aW51
ZVRvTG9jYXRpb24oc2NyaXB0SWRlbnRpZmllciwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQog
ICAgIHsKICAgICAgICAgRGVidWdnZXJBZ2VudC5jb250aW51ZVRvTG9jYXRpb24oe3NjcmlwdElk
OiBzY3JpcHRJZGVudGlmaWVyLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXJ9KTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIHNraXBFdmVu
dERpc3BhdGNoLCBzaG91bGRTcGVjdWxhdGl2ZWx5UmVzb2x2ZSkKKyAgICBhZGRCcmVha3BvaW50
KGJyZWFrcG9pbnQsIHNraXBFdmVudERpc3BhdGNoLCBzaG91bGRTcGVjdWxhdGl2ZWx5UmVzb2x2
ZSkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIkJhZCBhcmd1bWVudCB0byBEZWJ1Z2dlck1hbmdlci5h
ZGRCcmVha3BvaW50OiAiLCBicmVha3BvaW50KTsKICAgICAgICAgaWYgKCFicmVha3BvaW50KQpA
QCAtMzY0LDkgKzMzOSw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBl
ID0gewogCiAgICAgICAgIGlmICghc2tpcEV2ZW50RGlzcGF0Y2gpCiAgICAgICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2
ZW50LkJyZWFrcG9pbnRBZGRlZCwge2JyZWFrcG9pbnR9KTsKLSAgICB9LAorICAgIH0KIAotICAg
IHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgcmVtb3ZlQnJlYWtw
b2ludChicmVha3BvaW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoYnJlYWtwb2lu
dCk7CiAgICAgICAgIGlmICghYnJlYWtwb2ludCkKQEAgLTQwNCw5ICszNzksOSBAQCBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgYnJlYWtwb2ludC5j
bGVhckFjdGlvbnMoKTsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRSZW1vdmVkLCB7YnJl
YWtwb2ludH0pOwotICAgIH0sCisgICAgfQogCi0gICAgYnJlYWtwb2ludFJlc29sdmVkOiBmdW5j
dGlvbihicmVha3BvaW50SWRlbnRpZmllciwgbG9jYXRpb24pCisgICAgYnJlYWtwb2ludFJlc29s
dmVkKGJyZWFrcG9pbnRJZGVudGlmaWVyLCBsb2NhdGlvbikKICAgICB7CiAgICAgICAgIC8vIENh
bGxlZCBmcm9tIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLgogCkBAIC00MjMsOSArMzk4
LDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KIAogICAgICAgICBicmVha3BvaW50LnJlc29sdmVkID0gdHJ1ZTsKLSAgICB9LAorICAgIH0K
IAotICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgcmVzZXQoKQogICAgIHsKICAgICAgICAgLy8g
Q2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIuCiAKQEAgLTQ1Nyw5ICs0
MzIsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICBpZiAod2FzUGF1c2VkKQogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5SZXN1bWVkKTsKLSAgICB9
LAorICAgIH0KIAotICAgIGRlYnVnZ2VyRGlkUGF1c2U6IGZ1bmN0aW9uKGNhbGxGcmFtZXNQYXls
b2FkLCByZWFzb24sIGRhdGEpCisgICAgZGVidWdnZXJEaWRQYXVzZShjYWxsRnJhbWVzUGF5bG9h
ZCwgcmVhc29uLCBkYXRhKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyT2JzZXJ2ZXIuCiAKQEAgLTQ5OSw5ICs0NzQsOSBAQCBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuUGF1c2Vk
KTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVzRGlkQ2hhbmdlKTsKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOwotICAgIH0sCisgICAgfQogCi0gICAgZGVidWdn
ZXJEaWRSZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICBkZWJ1Z2dlckRpZFJlc3VtZSgpCiAgICAgewog
ICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlci4KIApA
QCAtNTIxLDE0ICs0OTYsMTQgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIC8vIFdlIGRlbGF5IGNsZWFyaW5nIHRoZSBzdGF0ZSBhbmQgZmlyaW5n
IGV2ZW50cyBzbyB0aGUgdXNlciBpbnRlcmZhY2UgZG9lcyBub3QgZmxhc2gKICAgICAgICAgLy8g
YmV0d2VlbiBicmllZiBzdGVwcyBvciBzdWNjZXNzaXZlIGJyZWFrcG9pbnRzLgogICAgICAgICB0
aGlzLl9kZWxheWVkUmVzdW1lVGltZW91dCA9IHNldFRpbWVvdXQoZGVsYXllZFdvcmsuYmluZCh0
aGlzKSwgNTApOwotICAgIH0sCisgICAgfQogCi0gICAgcGxheUJyZWFrcG9pbnRBY3Rpb25Tb3Vu
ZDogZnVuY3Rpb24oYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpCisgICAgcGxheUJyZWFrcG9p
bnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcikKICAgICB7CiAgICAgICAg
IEluc3BlY3RvckZyb250ZW5kSG9zdC5iZWVwKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzY3Jp
cHREaWRQYXJzZTogZnVuY3Rpb24oc2NyaXB0SWRlbnRpZmllciwgdXJsLCBpc0NvbnRlbnRTY3Jp
cHQsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbiwgc291cmNlTWFw
VVJMKQorICAgIHNjcmlwdERpZFBhcnNlKHNjcmlwdElkZW50aWZpZXIsIHVybCwgaXNDb250ZW50
U2NyaXB0LCBzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1bW4sIHNvdXJj
ZU1hcFVSTCkKICAgICB7CiAgICAgICAgIC8vIERvbid0IGFkZCB0aGUgc2NyaXB0IGFnYWluIGlm
IGl0IGlzIGFscmVhZHkga25vd24uCiAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRJZE1hcFtzY3Jp
cHRJZGVudGlmaWVyXSkgewpAQCAtNTUyLDI2ICs1MjcsMjYgQEAgV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNj
cmlwdEFkZGVkLCB7c2NyaXB0fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpc0JyZWFrcG9pbnRS
ZW1vdmFibGU6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgaXNCcmVha3BvaW50UmVtb3ZhYmxl
KGJyZWFrcG9pbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYnJlYWtwb2ludCAhPT0gdGhpcy5f
YWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQgJiYgYnJlYWtwb2ludCAhPT0gdGhpcy5fYWxsVW5jYXVn
aHRFeGNlcHRpb25zQnJlYWtwb2ludDsKLSAgICB9LAorICAgIH0KIAotICAgIGlzQnJlYWtwb2lu
dEVkaXRhYmxlOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIGlzQnJlYWtwb2ludEVkaXRhYmxl
KGJyZWFrcG9pbnQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5pc0JyZWFrcG9pbnRSZW1v
dmFibGUoYnJlYWtwb2ludCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbmV4dEJyZWFrcG9p
bnRBY3Rpb25JZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9uZXh0QnJl
YWtwb2ludEFjdGlvbklkZW50aWZpZXIrKzsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZh
dGUKIAotICAgIF9zb3VyY2VDb2RlTG9jYXRpb25Gcm9tUGF5bG9hZDogZnVuY3Rpb24ocGF5bG9h
ZCkKKyAgICBfc291cmNlQ29kZUxvY2F0aW9uRnJvbVBheWxvYWQocGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIHZhciBzY3JpcHQgPSB0aGlzLl9zY3JpcHRJZE1hcFtwYXlsb2FkLnNjcmlwdElkXTsK
ICAgICAgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0KTsKQEAgLTU3OSwxNyArNTU0LDE3IEBAIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0
dXJuIG51bGw7CiAKICAgICAgICAgcmV0dXJuIHNjcmlwdC5jcmVhdGVTb3VyY2VDb2RlTG9jYXRp
b24ocGF5bG9hZC5saW5lTnVtYmVyLCBwYXlsb2FkLmNvbHVtbk51bWJlcik7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfc2NvcGVDaGFpbkZyb21QYXlsb2FkOiBmdW5jdGlvbihwYXlsb2FkKQorICAg
IF9zY29wZUNoYWluRnJvbVBheWxvYWQocGF5bG9hZCkKICAgICB7CiAgICAgICAgIHZhciBzY29w
ZUNoYWluID0gW107CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZC5sZW5ndGg7
ICsraSkKICAgICAgICAgICAgIHNjb3BlQ2hhaW4ucHVzaCh0aGlzLl9zY29wZUNoYWluTm9kZUZy
b21QYXlsb2FkKHBheWxvYWRbaV0pKTsKICAgICAgICAgcmV0dXJuIHNjb3BlQ2hhaW47Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfc2NvcGVDaGFpbk5vZGVGcm9tUGF5bG9hZDogZnVuY3Rpb24ocGF5
bG9hZCkKKyAgICBfc2NvcGVDaGFpbk5vZGVGcm9tUGF5bG9hZChwYXlsb2FkKQogICAgIHsKICAg
ICAgICAgdmFyIHR5cGUgPSBudWxsOwogICAgICAgICBzd2l0Y2ggKHBheWxvYWQudHlwZSkgewpA
QCAtNjE3LDkgKzU5Miw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBl
ID0gewogCiAgICAgICAgIHZhciBvYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZy
b21QYXlsb2FkKHBheWxvYWQub2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuU2NvcGVDaGFpbk5vZGUodHlwZSwgb2JqZWN0KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9w
YXVzZVJlYXNvbkZyb21QYXlsb2FkOiBmdW5jdGlvbihwYXlsb2FkKQorICAgIF9wYXVzZVJlYXNv
bkZyb21QYXlsb2FkKHBheWxvYWQpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogSGFuZGxlIG90
aGVyIGJhY2tlbmQgcGF1c2Ugc2Vhc29ucy4KICAgICAgICAgc3dpdGNoIChwYXlsb2FkKSB7CkBA
IC02MzgsOSArNjEzLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5PdGhlcjsKICAgICAgICAgfQotICAgIH0sCisgICAg
fQogCi0gICAgX2RlYnVnZ2VyQnJlYWtwb2ludEFjdGlvblR5cGU6IGZ1bmN0aW9uKHR5cGUpCisg
ICAgX2RlYnVnZ2VyQnJlYWtwb2ludEFjdGlvblR5cGUodHlwZSkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5CcmVha3BvaW50QWN0aW9u
LlR5cGUuTG9nOgpAQCAtNjU1LDkgKzYzMCw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZmFsc2UpOwogICAg
ICAgICAgICAgcmV0dXJuIERlYnVnZ2VyQWdlbnQuQnJlYWtwb2ludEFjdGlvblR5cGUuTG9nOwog
ICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24o
YnJlYWtwb2ludCwgY2FsbGJhY2spCisgICAgX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludCwgY2Fs
bGJhY2spCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghYnJlYWtwb2ludC5pZGVudGlm
aWVyKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIWJyZWFrcG9pbnQuZGlzYWJsZWQpOwpAQCAt
NzI0LDkgKzY5OSw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgIG9wdGlvbnMKICAgICAgICAgICAgIH0sIGRpZFNldEJyZWFrcG9p
bnQuYmluZCh0aGlzKSk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIF9yZW1vdmVC
cmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50LCBjYWxsYmFjaykKKyAgICBfcmVtb3ZlQnJl
YWtwb2ludChicmVha3BvaW50LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlmICghYnJlYWtw
b2ludC5pZGVudGlmaWVyKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzQ4LDkgKzcyMyw5IEBA
IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAK
ICAgICAgICAgRGVidWdnZXJBZ2VudC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuaWRlbnRp
ZmllciwgZGlkUmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9icmVha3BvaW50RGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkK
KyAgICBfYnJlYWtwb2ludERpc3BsYXlMb2NhdGlvbkRpZENoYW5nZShldmVudCkKICAgICB7CiAg
ICAgICAgIGlmICh0aGlzLl9pZ25vcmVCcmVha3BvaW50RGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdl
RXZlbnQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC03NjksOSArNzQ0LDkgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQu
QnJlYWtwb2ludE1vdmVkLCB7YnJlYWtwb2ludH0pOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfYnJlYWtwb2ludERpc2FibGVkU3RhdGVEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIF9icmVha3BvaW50RGlzYWJsZWRTdGF0ZURpZENoYW5nZShldmVudCkKICAgICB7CiAg
ICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwogCkBAIC03OTUsOSArNzcwLDkg
QEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgIH0sCisgICAgfQog
Ci0gICAgX2JyZWFrcG9pbnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hhbmdlOiBmdW5jdGlvbihldmVu
dCkKKyAgICBfYnJlYWtwb2ludEVkaXRhYmxlUHJvcGVydHlEaWRDaGFuZ2UoZXZlbnQpCiAgICAg
ewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgaWYgKGJy
ZWFrcG9pbnQuZGlzYWJsZWQpCkBAIC04MTUsOSArNzkwLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIGJyZWFrcG9p
bnQgd2l0aCBpdHMgbmV3IGNvbmRpdGlvbiBhbmQgZ2V0IGEgbmV3IGlkLgogICAgICAgICAgICAg
dGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICAgICAgfQotICAgIH0sCisgICAg
fQogCi0gICAgX3VwZGF0ZUJyZWFrT25FeGNlcHRpb25zU3RhdGU6IGZ1bmN0aW9uKCkKKyAgICBf
dXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0ZSgpCiAgICAgewogICAgICAgICB2YXIgc3RhdGUg
PSAibm9uZSI7CiAKQEAgLTg0MiwxNCArODE3LDE0IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1h
bmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgRGVidWdnZXJBZ2VudC5z
ZXRQYXVzZU9uRXhjZXB0aW9ucyhzdGF0ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaW5zcGVj
dG9yQ2xvc2luZzogZnVuY3Rpb24oZXZlbnQpCisgICAgX2luc3BlY3RvckNsb3NpbmcoZXZlbnQp
CiAgICAgewogICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9zYXZlQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKKyAgICBfc2F2ZUJyZWFrcG9pbnRz
KCkKICAgICB7CiAgICAgICAgIHZhciBzYXZlZEJyZWFrcG9pbnRzID0gW107CiAKQEAgLTg2NCw5
ICs4MzksOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgfQogCiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1ZSA9IHNhdmVk
QnJlYWtwb2ludHM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXNzb2NpYXRlQnJlYWtwb2ludHNX
aXRoU291cmNlQ29kZTogZnVuY3Rpb24oYnJlYWtwb2ludHMsIHNvdXJjZUNvZGUpCisgICAgX2Fz
c29jaWF0ZUJyZWFrcG9pbnRzV2l0aFNvdXJjZUNvZGUoYnJlYWtwb2ludHMsIHNvdXJjZUNvZGUp
CiAgICAgewogICAgICAgICB0aGlzLl9pZ25vcmVCcmVha3BvaW50RGlzcGxheUxvY2F0aW9uRGlk
Q2hhbmdlRXZlbnQgPSB0cnVlOwogCkBAIC04ODIsNCArODU3LDI1IEBAIFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudCA9IHsKKyAgICBC
cmVha3BvaW50QWRkZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLWJyZWFrcG9pbnQtYWRkZWQiLAorICAg
IEJyZWFrcG9pbnRSZW1vdmVkOiAiZGVidWdnZXItbWFuYWdlci1icmVha3BvaW50LXJlbW92ZWQi
LAorICAgIEJyZWFrcG9pbnRNb3ZlZDogImRlYnVnZ2VyLW1hbmFnZXItYnJlYWtwb2ludC1tb3Zl
ZCIsCisgICAgUGF1c2VkOiAiZGVidWdnZXItbWFuYWdlci1wYXVzZWQiLAorICAgIFJlc3VtZWQ6
ICJkZWJ1Z2dlci1tYW5hZ2VyLXJlc3VtZWQiLAorICAgIENhbGxGcmFtZXNEaWRDaGFuZ2U6ICJk
ZWJ1Z2dlci1tYW5hZ2VyLWNhbGwtZnJhbWVzLWRpZC1jaGFuZ2UiLAorICAgIEFjdGl2ZUNhbGxG
cmFtZURpZENoYW5nZTogImRlYnVnZ2VyLW1hbmFnZXItYWN0aXZlLWNhbGwtZnJhbWUtZGlkLWNo
YW5nZSIsCisgICAgU2NyaXB0QWRkZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLXNjcmlwdC1hZGRlZCIs
CisgICAgU2NyaXB0c0NsZWFyZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLXNjcmlwdHMtY2xlYXJlZCIs
CisgICAgQnJlYWtwb2ludHNFbmFibGVkRGlkQ2hhbmdlOiAiZGVidWdnZXItbWFuYWdlci1icmVh
a3BvaW50cy1lbmFibGVkLWRpZC1jaGFuZ2UiCit9OworCitXZWJJbnNwZWN0b3IuRGVidWdnZXJN
YW5hZ2VyLlBhdXNlUmVhc29uID0geworICAgIEFzc2VydGlvbjogImFzc2VydGlvbiIsCisgICAg
QnJlYWtwb2ludDogImJyZWFrcG9pbnQiLAorICAgIENTUFZpb2xhdGlvbjogIkNTUC12aW9sYXRp
b24iLAorICAgIERlYnVnZ2VyU3RhdGVtZW50OiAiZGVidWdnZXItc3RhdGVtZW50IiwKKyAgICBF
eGNlcHRpb246ICJleGNlcHRpb24iLAorICAgIFBhdXNlT25OZXh0U3RhdGVtZW50OiAicGF1c2Ut
b24tbmV4dC1zdGF0ZW1lbnQiLAorICAgIE90aGVyOiAib3RoZXIiLAorfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RyYWdUb0Fk
anVzdENvbnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9EcmFnVG9BZGp1c3RDb250cm9sbGVyLmpzCmluZGV4IGExZDkwNDZmYWE5Zjgz
OGExZDFhMzBiNDVkMmM0NjFlOGNjYjcxZjAuLmE4NjAwOWVhZDJkMDhhNTJiNGIxM2Q2NzY4ZWM2
OTQzMjVkNDg0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0RyYWdUb0FkanVzdENvbnRyb2xsZXIuanMKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRHJhZ1RvQWRqdXN0Q29udHJv
bGxlci5qcwpAQCAtMjMsMzggKzIzLDM1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIgPSBmdW5j
dGlvbihkZWxlZ2F0ZSkKK1dlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyID0gY2xh
c3MgRHJhZ1RvQWRqdXN0Q29udHJvbGxlcgogewotICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdh
dGU7Ci0KLSAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDsKLSAgICB0aGlzLl9hY3RpdmUgPSBmYWxz
ZTsKLSAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7Ci0gICAgdGhpcy5fZHJhZ2dpbmcgPSBmYWxz
ZTsKLSAgICB0aGlzLl90cmFja3NNb3VzZUNsaWNrQW5kRHJhZyA9IGZhbHNlOwotfTsKLQotV2Vi
SW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIuU3R5bGVDbGFzc05hbWUgPSAiZHJhZy10
by1hZGp1c3QiOworICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKQorICAgIHsKKyAgICAgICAgdGhp
cy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIAotV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRy
b2xsZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuRHJhZ1Rv
QWRqdXN0Q29udHJvbGxlciwKKyAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7CisgICAgICAg
IHRoaXMuX2FjdGl2ZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7Cisg
ICAgICAgIHRoaXMuX2RyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3RyYWNrc01vdXNl
Q2xpY2tBbmREcmFnID0gZmFsc2U7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKICAgICBnZXQg
ZWxlbWVudCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsKLSAgICB9LAor
ICAgIH0KIAogICAgIHNldCBlbGVtZW50KGVsZW1lbnQpCiAgICAgewogICAgICAgICB0aGlzLl9l
bGVtZW50ID0gZWxlbWVudDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBlbmFibGVkKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOwotICAgIH0sCisgICAgfQogCiAgICAg
c2V0IGVuYWJsZWQoZW5hYmxlZCkKICAgICB7CkBAIC02OCwxMiArNjUsMTIgQEAgV2ViSW5zcGVj
dG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhp
cy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgdGhpcyk7CiAgICAg
ICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB0
aGlzKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGFjdGl2ZSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0
IGFjdGl2ZShhY3RpdmUpCiAgICAgewpAQCAtOTYsMjAgKzkzLDIwIEBAIFdlYkluc3BlY3Rvci5E
cmFnVG9BZGp1c3RDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAodGhpcy5f
ZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENvbnRyb2xsZXJB
Y3RpdmVTdGF0ZUNoYW5nZWQgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICB0aGlzLl9kZWxl
Z2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVyQWN0aXZlU3RhdGVDaGFuZ2VkKHRoaXMpOwotICAg
IH0sCisgICAgfQogCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICByZXNldCgpCiAgICAgewog
ICAgICAgICB0aGlzLl9zZXRUcmFja3NNb3VzZUNsaWNrQW5kRHJhZyhmYWxzZSk7CiAgICAgICAg
IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0
Q29udHJvbGxlci5TdHlsZUNsYXNzTmFtZSk7CiAKICAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRl
ICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVyRGlkUmVzZXQg
PT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RD
b250cm9sbGVyRGlkUmVzZXQodGhpcyk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90ZWN0
ZWQKIAotICAgIGhhbmRsZUV2ZW50OiBmdW5jdGlvbihldmVudCkKKyAgICBoYW5kbGVFdmVudChl
dmVudCkKICAgICB7CiAgICAgICAgIHN3aXRjaChldmVudC50eXBlKSB7CiAgICAgICAgIGNhc2Ug
Im1vdXNlZW50ZXIiOgpAQCAtMTQwLDExICsxMzcsMTEgQEAgV2ViSW5zcGVjdG9yLkRyYWdUb0Fk
anVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAK
ICAgICAvLyBQcml2YXRlCiAKLSAgICBfc2V0RHJhZ2dpbmc6IGZ1bmN0aW9uKGRyYWdnaW5nKQor
ICAgIF9zZXREcmFnZ2luZyhkcmFnZ2luZykKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9kcmFn
Z2luZyA9PT0gZHJhZ2dpbmcpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTYsOSArMTUzLDkg
QEAgV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKHdpbmRvdy5ldmVudCk7CiAKICAg
ICAgICAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZzsKLSAgICB9LAorICAgIH0KIAotICAgIF9z
ZXRUcmFja3NNb3VzZUNsaWNrQW5kRHJhZzogZnVuY3Rpb24odHJhY2tzTW91c2VDbGlja0FuZERy
YWcpCisgICAgX3NldFRyYWNrc01vdXNlQ2xpY2tBbmREcmFnKHRyYWNrc01vdXNlQ2xpY2tBbmRE
cmFnKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3RyYWNrc01vdXNlQ2xpY2tBbmREcmFnID09
PSB0cmFja3NNb3VzZUNsaWNrQW5kRHJhZykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3NSwy
NyArMTcyLDI3IEBAIFdlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX3RyYWNrc01vdXNlQ2xpY2tBbmREcmFn
ID0gdHJhY2tzTW91c2VDbGlja0FuZERyYWc7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbW9kaWZp
ZXJzRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfbW9kaWZpZXJzRGlkQ2hhbmdlKGV2
ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNhbkJlQWRqdXN0ZWQgPSBXZWJJbnNwZWN0b3IubW9k
aWZpZXJLZXlzLmFsdEtleTsKICAgICAgICAgaWYgKGNhbkJlQWRqdXN0ZWQgJiYgdGhpcy5fZGVs
ZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENvbnRyb2xsZXJDYW5C
ZUFkanVzdGVkID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgY2FuQmVBZGp1c3RlZCA9IHRo
aXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENvbnRyb2xsZXJDYW5CZUFkanVzdGVkKHRoaXMpOwog
CiAgICAgICAgIHRoaXMuX3NldFRyYWNrc01vdXNlQ2xpY2tBbmREcmFnKGNhbkJlQWRqdXN0ZWQp
OwotICAgIH0sCisgICAgfQogCi0gICAgX21vdXNlTW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAg
IF9tb3VzZU1vdmVkKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNhbkJlQWRqdXN0ZWQgPSBl
dmVudC5hbHRLZXk7CiAgICAgICAgIGlmIChjYW5CZUFkanVzdGVkICYmIHRoaXMuX2RlbGVnYXRl
ICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVyQ2FuQWRqdXN0
T2JqZWN0QXRQb2ludCA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgIGNhbkJlQWRqdXN0ZWQg
PSB0aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVyQ2FuQWRqdXN0T2JqZWN0QXRQ
b2ludCh0aGlzLCBXZWJJbnNwZWN0b3IuUG9pbnQuZnJvbUV2ZW50KGV2ZW50KSk7CiAKICAgICAg
ICAgdGhpcy5fc2V0VHJhY2tzTW91c2VDbGlja0FuZERyYWcoY2FuQmVBZGp1c3RlZCk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfbW91c2VXYXNQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKKyAgICBf
bW91c2VXYXNQcmVzc2VkKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fbGFzdFggPSBldmVu
dC5zY3JlZW5YOwogCkBAIC0yMDMsOSArMjAwLDkgQEAgV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVz
dENvbnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0sCisgICAgfQogCi0g
ICAgX21vdXNlV2FzRHJhZ2dlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX21vdXNlV2FzRHJhZ2dl
ZChldmVudCkKICAgICB7CiAgICAgICAgIHZhciB4ID0gZXZlbnQuc2NyZWVuWDsKICAgICAgICAg
dmFyIGFtb3VudCA9IHggLSB0aGlzLl9sYXN0WDsKQEAgLTIyNSw5ICsyMjIsOSBAQCBXZWJJbnNw
ZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfbW91c2VXYXNSZWxlYXNlZDogZnVuY3Rpb24oZXZlbnQpCisg
ICAgX21vdXNlV2FzUmVsZWFzZWQoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9zZXREcmFn
Z2luZyhmYWxzZSk7CiAKQEAgLTIzNywzICsyMzQsNSBAQCBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRq
dXN0Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICB9
CiB9OworCitXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5TdHlsZUNsYXNzTmFt
ZSA9ICJkcmFnLXRvLWFkanVzdCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMKaW5kZXggNWE3ZjJk
ODBhMmY1NTQxZWIzNzVmNzk1YmQwNDU5ZTRlZTE4NWNlMC4uYmZhOTk4ZWZmODJkYjczNDVmM2Nk
YmE4MzA3MjUwZTEwYzhlNTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlci5qcwpAQCAtMjMsMjQg
KzIzLDIzIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotZnVu
Y3Rpb24gRm9ybWF0dGVyKGNvZGVNaXJyb3IsIGJ1aWxkZXIpCitjbGFzcyBGb3JtYXR0ZXIKIHsK
LSAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKLSAgICBjb25zb2xlLmFzc2VydChidWls
ZGVyKTsKLQotICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOwotICAgIHRoaXMuX2J1
aWxkZXIgPSBidWlsZGVyOworICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJyb3IsIGJ1aWxkZXIpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoYnVpbGRlcik7CiAKLSAgICB0aGlzLl9sYXN0VG9rZW4gPSBudWxsOwotICAgIHRo
aXMuX2xhc3RDb250ZW50ID0gIiI7Ci19CisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2Rl
TWlycm9yOworICAgICAgICB0aGlzLl9idWlsZGVyID0gYnVpbGRlcjsKIAotRm9ybWF0dGVyLnBy
b3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogRm9ybWF0dGVyLAorICAgICAgICB0aGlzLl9s
YXN0VG9rZW4gPSBudWxsOworICAgICAgICB0aGlzLl9sYXN0Q29udGVudCA9ICIiOworICAgIH0K
IAogICAgIC8vIFB1YmxpYwogCi0gICAgZm9ybWF0OiBmdW5jdGlvbihmcm9tLCB0bykKKyAgICBm
b3JtYXQoZnJvbSwgdG8pCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9idWls
ZGVyLm9yaWdpbmFsQ29udGVudCA9PT0gbnVsbCk7CiAgICAgICAgIGlmICh0aGlzLl9idWlsZGVy
Lm9yaWdpbmFsQ29udGVudCAhPT0gbnVsbCkKQEAgLTc3LDExICs3NiwxMSBAQCBGb3JtYXR0ZXIu
cHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fYnVpbGRlci5maW5pc2go
KTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9oYW5kbGVUb2tlbjog
ZnVuY3Rpb24obW9kZSwgdG9rZW4sIHN0YXRlLCBzdHJlYW0sIG9yaWdpbmFsUG9zaXRpb24sIGlz
V2hpdGVTcGFjZSwgc3RhcnRPZk5ld0xpbmUsIGZpcnN0VG9rZW5PbkxpbmUpCisgICAgX2hhbmRs
ZVRva2VuKG1vZGUsIHRva2VuLCBzdGF0ZSwgc3RyZWFtLCBvcmlnaW5hbFBvc2l0aW9uLCBpc1do
aXRlU3BhY2UsIHN0YXJ0T2ZOZXdMaW5lLCBmaXJzdFRva2VuT25MaW5lKQogICAgIHsKICAgICAg
ICAgLy8gU3RyaW5nIGNvbnRlbnQgb2YgdGhlIHRva2VuLgogICAgICAgICB2YXIgY29udGVudCA9
IHN0cmVhbS5jdXJyZW50KCk7CkBAIC0xNDYsMTcgKzE0NSwxNyBAQCBGb3JtYXR0ZXIucHJvdG90
eXBlID0gewogICAgICAgICAvLyBSZWNvcmQgdGhpcyB0b2tlbiBhcyB0aGUgbGFzdCB0b2tlbi4K
ICAgICAgICAgdGhpcy5fbGFzdFRva2VuID0gdG9rZW47CiAgICAgICAgIHRoaXMuX2xhc3RDb250
ZW50ID0gY29udGVudDsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVFbXB0eUxpbmU6IGZ1
bmN0aW9uKCkKKyAgICBfaGFuZGxlRW1wdHlMaW5lKCkKICAgICB7CiAgICAgICAgIC8vIFByZXNl
cnZlIG9yaWdpbmFsIHdoaXRlc3BhY2Ugb25seSBsaW5lcyBieSBhZGRpbmcgYSBuZXdsaW5lLgog
ICAgICAgICAvLyBIb3dldmVyLCBkb24ndCBkbyB0aGlzIGlmIHRoZSBidWlsZGVyIGp1c3QgYWRk
ZWQgbXVsdGlwbGUgbmV3bGluZXMuCiAgICAgICAgIGlmICghKHRoaXMuX2J1aWxkZXIubGFzdFRv
a2VuV2FzTmV3bGluZSAmJiB0aGlzLl9idWlsZGVyLmxhc3ROZXdsaW5lQXBwZW5kV2FzTXVsdGlw
bGUpKQogICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hcHBlbmROZXdsaW5lKHRydWUpOwotICAg
IH0sCisgICAgfQogCi0gICAgX2hhbmRsZUxpbmVFbmRpbmc6IGZ1bmN0aW9uKG9yaWdpbmFsTmV3
TGluZVBvc2l0aW9uKQorICAgIF9oYW5kbGVMaW5lRW5kaW5nKG9yaWdpbmFsTmV3TGluZVBvc2l0
aW9uKQogICAgIHsKICAgICAgICAgLy8gUmVjb3JkIHRoZSBvcmlnaW5hbCBsaW5lIGVuZGluZy4K
ICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRPcmlnaW5hbExpbmVFbmRpbmcob3JpZ2luYWxOZXdM
aW5lUG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50QnVp
bGRlci5qcwppbmRleCAzYzM2YTJiYjNmMzg0NGU4MzdjNmIwYTg2ZmY4YThjOGU1ZTMwMGI0Li44
MjkxYzM0YTQ2MDZmMGE4MDJkYTA2NGE4M2VjM2JhMTMxNDg4YzZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJDb250
ZW50QnVpbGRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcwpAQCAtMjMsNzAgKzIzLDY5IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotZnVuY3Rpb24gRm9y
bWF0dGVyQ29udGVudEJ1aWxkZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0
dGVkTGluZUVuZGluZ3MsIG9yaWdpbmFsT2Zmc2V0LCBmb3JtYXR0ZWRPZmZzZXQsIGluZGVudFN0
cmluZykKK2NsYXNzIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyCiB7Ci0gICAgdGhpcy5fb3JpZ2lu
YWxDb250ZW50ID0gbnVsbDsKLSAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50ID0gW107Ci0gICAg
dGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCA9IDA7Ci0KLSAgICB0aGlzLl9zdGFydE9mTGlu
ZSA9IHRydWU7Ci0gICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7Ci0gICAgdGhp
cy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7Ci0gICAgdGhpcy5sYXN0TmV3bGluZUFw
cGVuZFdhc011bHRpcGxlID0gZmFsc2U7CisgICAgY29uc3RydWN0b3IobWFwcGluZywgb3JpZ2lu
YWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGluZUVuZGluZ3MsIG9yaWdpbmFsT2Zmc2V0LCBmb3Jt
YXR0ZWRPZmZzZXQsIGluZGVudFN0cmluZykKKyAgICB7CisgICAgICAgIHRoaXMuX29yaWdpbmFs
Q29udGVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQgPSBbXTsKKyAg
ICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCA9IDA7CiAKLSAgICB0aGlzLl9pbmRl
bnQgPSAwOwotICAgIHRoaXMuX2luZGVudFN0cmluZyA9IGluZGVudFN0cmluZzsKLSAgICB0aGlz
Ll9pbmRlbnRDYWNoZSA9IFsiIiwgdGhpcy5faW5kZW50U3RyaW5nXTsKKyAgICAgICAgdGhpcy5f
c3RhcnRPZkxpbmUgPSB0cnVlOworICAgICAgICB0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7CisgICAg
ICAgIHRoaXMubGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBsZSA9IGZhbHNlOwogCi0gICAgdGhp
cy5fbWFwcGluZyA9IG1hcHBpbmc7Ci0gICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncyA9IG9y
aWdpbmFsTGluZUVuZGluZ3MgfHwgW107Ci0gICAgdGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3Mg
PSBmb3JtYXR0ZWRMaW5lRW5kaW5ncyB8fCBbXTsKLSAgICB0aGlzLl9vcmlnaW5hbE9mZnNldCA9
IG9yaWdpbmFsT2Zmc2V0IHx8IDA7Ci0gICAgdGhpcy5fZm9ybWF0dGVkT2Zmc2V0ID0gZm9ybWF0
dGVkT2Zmc2V0IHx8IDA7CisgICAgICAgIHRoaXMuX2luZGVudCA9IDA7CisgICAgICAgIHRoaXMu
X2luZGVudFN0cmluZyA9IGluZGVudFN0cmluZzsKKyAgICAgICAgdGhpcy5faW5kZW50Q2FjaGUg
PSBbIiIsIHRoaXMuX2luZGVudFN0cmluZ107CiAKLSAgICB0aGlzLl9sYXN0T3JpZ2luYWxQb3Np
dGlvbiA9IDA7Ci0gICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gMDsKLX0KKyAgICAg
ICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7CisgICAgICAgIHRoaXMuX29yaWdpbmFsTGluZUVu
ZGluZ3MgPSBvcmlnaW5hbExpbmVFbmRpbmdzIHx8IFtdOworICAgICAgICB0aGlzLl9mb3JtYXR0
ZWRMaW5lRW5kaW5ncyA9IGZvcm1hdHRlZExpbmVFbmRpbmdzIHx8IFtdOworICAgICAgICB0aGlz
Ll9vcmlnaW5hbE9mZnNldCA9IG9yaWdpbmFsT2Zmc2V0IHx8IDA7CisgICAgICAgIHRoaXMuX2Zv
cm1hdHRlZE9mZnNldCA9IGZvcm1hdHRlZE9mZnNldCB8fCAwOwogCi1Gb3JtYXR0ZXJDb250ZW50
QnVpbGRlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IEZvcm1hdHRlckNvbnRlbnRC
dWlsZGVyLAorICAgICAgICB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlvbiA9IDA7CisgICAgICAg
IHRoaXMuX2xhc3RGb3JtYXR0ZWRQb3NpdGlvbiA9IDA7CisgICAgfQogCiAgICAgLy8gUHVibGlj
CiAKICAgICBnZXQgb3JpZ2luYWxDb250ZW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9vcmlnaW5hbENvbnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZm9ybWF0dGVkQ29u
dGVudCgpCiAgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5fZm9ybWF0dGVkQ29u
dGVudC5qb2luKCIiKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZm9ybWF0dGVkLmxlbmd0aCA9
PT0gdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCk7CiAgICAgICAgIHJldHVybiBmb3JtYXR0
ZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbWFwcGluZygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gdGhpcy5fbWFwcGluZzsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBvcmlnaW5hbExp
bmVFbmRpbmdzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9vcmlnaW5hbExpbmVFbmRp
bmdzOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGZvcm1hdHRlZExpbmVFbmRpbmdzKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5nczsKLSAgICB9LAor
ICAgIH0KIAotICAgIHNldE9yaWdpbmFsQ29udGVudDogZnVuY3Rpb24ob3JpZ2luYWxDb250ZW50
KQorICAgIHNldE9yaWdpbmFsQ29udGVudChvcmlnaW5hbENvbnRlbnQpCiAgICAgewogICAgICAg
ICBjb25zb2xlLmFzc2VydCghdGhpcy5fb3JpZ2luYWxDb250ZW50KTsKICAgICAgICAgdGhpcy5f
b3JpZ2luYWxDb250ZW50ID0gb3JpZ2luYWxDb250ZW50OwotICAgIH0sCisgICAgfQogCi0gICAg
YXBwZW5kVG9rZW46IGZ1bmN0aW9uKHN0cmluZywgb3JpZ2luYWxQb3NpdGlvbikKKyAgICBhcHBl
bmRUb2tlbihzdHJpbmcsIG9yaWdpbmFsUG9zaXRpb24pCiAgICAgewogICAgICAgICBpZiAodGhp
cy5fc3RhcnRPZkxpbmUpCiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRJbmRlbnQoKTsKQEAgLTk3
LDE4ICs5NiwxOCBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX3N0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgICAgIHRoaXMubGFzdFRva2VuV2Fz
TmV3bGluZSA9IGZhbHNlOwogICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3BhY2UgPSBm
YWxzZTsKLSAgICB9LAorICAgIH0KIAotICAgIGFwcGVuZFNwYWNlOiBmdW5jdGlvbigpCisgICAg
YXBwZW5kU3BhY2UoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9zdGFydE9mTGluZSkgewog
ICAgICAgICAgICAgdGhpcy5fYXBwZW5kKCIgIik7CiAgICAgICAgICAgICB0aGlzLmxhc3RUb2tl
bldhc05ld2xpbmUgPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVz
cGFjZSA9IHRydWU7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIGFwcGVuZE5ld2xp
bmU6IGZ1bmN0aW9uKGZvcmNlKQorICAgIGFwcGVuZE5ld2xpbmUoZm9yY2UpCiAgICAgewogICAg
ICAgICBpZiAoKCF0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgJiYgIXRoaXMuX3N0YXJ0T2ZMaW5l
KSB8fCBmb3JjZSkgewogICAgICAgICAgICAgdGhpcy5fYXBwZW5kKCJcbiIpOwpAQCAtMTE4LDkg
KzExNyw5IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgdGhp
cy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9
LAorICAgIH0KIAotICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXM6IGZ1bmN0aW9uKG5ld2xpbmVz
KQorICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXMobmV3bGluZXMpCiAgICAgewogICAgICAgICBj
b25zb2xlLmFzc2VydChuZXdsaW5lcyA+IDApOwogCkBAIC0xMzEsOSArMTMwLDkgQEAgRm9ybWF0
dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh3YXNNdWx0aXBs
ZSkKICAgICAgICAgICAgIHRoaXMubGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBsZSA9IHRydWU7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZW1vdmVMYXN0TmV3bGluZTogZnVuY3Rpb24oKQorICAg
IHJlbW92ZUxhc3ROZXdsaW5lKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
bGFzdFRva2VuV2FzTmV3bGluZSk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2Zvcm1h
dHRlZENvbnRlbnQubGFzdFZhbHVlID09PSAiXG4iKTsKQEAgLTE0Myw0OCArMTQyLDQ4IEBAIEZv
cm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMubGFz
dFRva2VuV2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNX
aGl0ZXNwYWNlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIGluZGVu
dDogZnVuY3Rpb24oKQorICAgIGluZGVudCgpCiAgICAgewogICAgICAgICArK3RoaXMuX2luZGVu
dDsKLSAgICB9LAorICAgIH0KIAotICAgIGRlZGVudDogZnVuY3Rpb24oKQorICAgIGRlZGVudCgp
CiAgICAgewogICAgICAgICAtLXRoaXMuX2luZGVudDsKIAogICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0aGlzLl9pbmRlbnQgPj0gMCk7CiAgICAgICAgIGlmICh0aGlzLl9pbmRlbnQgPCAwKQogICAg
ICAgICAgICAgdGhpcy5faW5kZW50ID0gMDsKLSAgICB9LAorICAgIH0KIAotICAgIGFkZE9yaWdp
bmFsTGluZUVuZGluZzogZnVuY3Rpb24ob3JpZ2luYWxQb3NpdGlvbikKKyAgICBhZGRPcmlnaW5h
bExpbmVFbmRpbmcob3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIHRoaXMuX29yaWdp
bmFsTGluZUVuZGluZ3MucHVzaChvcmlnaW5hbFBvc2l0aW9uKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIGZpbmlzaDogZnVuY3Rpb24oKQorICAgIGZpbmlzaCgpCiAgICAgewogICAgICAgICB0aGlz
LmFwcGVuZE5ld2xpbmUoKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAg
IF9wb3BOZXdMaW5lOiBmdW5jdGlvbigpCisgICAgX3BvcE5ld0xpbmUoKQogICAgIHsKICAgICAg
ICAgdmFyIHJlbW92ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LnBvcCgpOwogICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoIC09IHJlbW92ZWQubGVuZ3RoOwogICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wb3AoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9h
cHBlbmQ6IGZ1bmN0aW9uKHN0cikKKyAgICBfYXBwZW5kKHN0cikKICAgICB7CiAgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZENvbnRlbnQucHVzaChzdHIpOwogICAgICAgICB0aGlzLl9mb3JtYXR0ZWRD
b250ZW50TGVuZ3RoICs9IHN0ci5sZW5ndGg7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXBwZW5k
SW5kZW50OiBmdW5jdGlvbigpCisgICAgX2FwcGVuZEluZGVudCgpCiAgICAgewogICAgICAgICAv
LyBJbmRlbnQgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUuCiAgICAgICAgIGlmICh0aGlzLl9pbmRl
bnQgPCB0aGlzLl9pbmRlbnRDYWNoZS5sZW5ndGgpIHsKQEAgLTE5Myw3ICsxOTIsNyBAQCBGb3Jt
YXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBJbmRlbnQgd2FzIG5vdCBpbiB0aGUgY2FjaGUsIGZpbGwgdXAgdGhlIGNhY2hlIHVwIHdpdGgg
d2hhdCB3YXMgbmVlZGVkLgotICAgICAgICBjb25zdCBtYXhDYWNoZUluZGVudCA9IDIwOworICAg
ICAgICB2YXIgbWF4Q2FjaGVJbmRlbnQgPSAyMDsKICAgICAgICAgdmFyIG1heCA9IE1hdGgubWlu
KHRoaXMuX2luZGVudCwgbWF4Q2FjaGVJbmRlbnQpOwogICAgICAgICBmb3IgKHZhciBpID0gdGhp
cy5faW5kZW50Q2FjaGUubGVuZ3RoOyBpIDw9IG1heDsgKytpKQogICAgICAgICAgICAgdGhpcy5f
aW5kZW50Q2FjaGVbaV0gPSB0aGlzLl9pbmRlbnRDYWNoZVtpIC0gMV0gKyB0aGlzLl9pbmRlbnRT
dHJpbmc7CkBAIC0yMDcsOSArMjA2LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90
eXBlID0gewogICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZCh0aGlzLl9pbmRlbnRDYWNoZVtp
bmRlbnRdKTsKICAgICAgICAgICAgIGluZGVudCAtPSBtYXhDYWNoZUluZGVudDsKICAgICAgICAg
fSB3aGlsZSAoaW5kZW50ID4gMCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYWRkTWFwcGluZ0lm
TmVlZGVkOiBmdW5jdGlvbihvcmlnaW5hbFBvc2l0aW9uKQorICAgIF9hZGRNYXBwaW5nSWZOZWVk
ZWQob3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGlmIChvcmlnaW5hbFBvc2l0aW9u
IC0gdGhpcy5fbGFzdE9yaWdpbmFsUG9zaXRpb24gPT09IHRoaXMuX2Zvcm1hdHRlZENvbnRlbnRM
ZW5ndGggLSB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0yMTksOSArMjE4LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0g
ewogCiAgICAgICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID0gb3JpZ2luYWxQb3NpdGlv
bjsKICAgICAgICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5fZm9ybWF0dGVk
Q29udGVudExlbmd0aDsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRGb3JtYXR0ZWRMaW5lRW5k
aW5nOiBmdW5jdGlvbigpCisgICAgX2FkZEZvcm1hdHRlZExpbmVFbmRpbmcoKQogICAgIHsKICAg
ICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fZm9ybWF0dGVkQ29udGVudC5sYXN0VmFsdWUgPT09
ICJcbiIpOwogICAgICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wdXNoKHRoaXMuX2Zv
cm1hdHRlZENvbnRlbnRMZW5ndGggLSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1hcC5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNv
dXJjZU1hcC5qcwppbmRleCBhODBmNmNhN2QzZmRjM2ZjMzMxMGNlNzg0NWZjNDAzODM3OTExYTVk
Li45MzRlMDQ2MzNkZjBiMWRhNDI3MmFiY2M3YTAwNTMxM2QzYTkyZTk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJT
b3VyY2VNYXAuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCkBAIC0yMyw2MSArMjMsNjEgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuRm9ybWF0
dGVyU291cmNlTWFwID0gZnVuY3Rpb24ob3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGlu
ZUVuZGluZ3MsIG1hcHBpbmcpCitXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwID0gY2xh
c3MgRm9ybWF0dGVyU291cmNlTWFwIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAg
IC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNz
LCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlz
KTsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5k
aW5ncywgbWFwcGluZykKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9vcmln
aW5hbExpbmVFbmRpbmdzID0gb3JpZ2luYWxMaW5lRW5kaW5nczsKLSAgICB0aGlzLl9mb3JtYXR0
ZWRMaW5lRW5kaW5ncyA9IGZvcm1hdHRlZExpbmVFbmRpbmdzOwotICAgIHRoaXMuX21hcHBpbmcg
PSBtYXBwaW5nOwotfTsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncyA9IG9yaWdp
bmFsTGluZUVuZGluZ3M7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gZm9y
bWF0dGVkTGluZUVuZGluZ3M7CisgICAgICAgIHRoaXMuX21hcHBpbmcgPSBtYXBwaW5nOworICAg
IH0KIAotV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5mcm9tQnVpbGRlciA9IGZ1bmN0
aW9uKGJ1aWxkZXIpCi17Ci0gICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291
cmNlTWFwKGJ1aWxkZXIub3JpZ2luYWxMaW5lRW5kaW5ncywgYnVpbGRlci5mb3JtYXR0ZWRMaW5l
RW5kaW5ncywgYnVpbGRlci5tYXBwaW5nKTsKLX07CisgICAgLy8gU3RhdGljCiAKLVdlYkluc3Bl
Y3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBX
ZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLAorICAgIHN0YXRpYyBmcm9tQnVpbGRlcihi
dWlsZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRm9ybWF0dGVy
U291cmNlTWFwKGJ1aWxkZXIub3JpZ2luYWxMaW5lRW5kaW5ncywgYnVpbGRlci5mb3JtYXR0ZWRM
aW5lRW5kaW5ncywgYnVpbGRlci5tYXBwaW5nKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAot
ICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
cikKKyAgICBvcmlnaW5hbFRvRm9ybWF0dGVkKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAg
ICB7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0
aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVt
YmVyIHx8IDApOwogICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFBvc2l0aW9uVG9Gb3JtYXR0
ZWQob3JpZ2luYWxQb3NpdGlvbik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBvcmlnaW5hbFBvc2l0
aW9uVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRpb24pCisgICAgb3JpZ2luYWxQ
b3NpdGlvblRvRm9ybWF0dGVkKG9yaWdpbmFsUG9zaXRpb24pCiAgICAgewogICAgICAgICB2YXIg
Zm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5v
cmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIG9yaWdpbmFsUG9zaXRpb24pOwogICAg
ICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVF
bmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7Ci0gICAgfSwKKyAgICB9CiAKIAotICAgIGZvcm1h
dHRlZFRvT3JpZ2luYWw6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICBm
b3JtYXR0ZWRUb09yaWdpbmFsKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAg
ICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0
KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlv
blRvTG9jYXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBmb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0OiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgZm9ybWF0dGVkVG9PcmlnaW5hbE9mZnNl
dChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVk
UG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVu
ZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOwogICAgICAgICB2YXIg
b3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZv
cm1hdHRlZCwgdGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgZm9ybWF0dGVkUG9zaXRpb24pOwogICAg
ICAgICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFBy
aXZhdGUKIAotICAgIF9sb2NhdGlvblRvUG9zaXRpb246IGZ1bmN0aW9uKGxpbmVFbmRpbmdzLCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgX2xvY2F0aW9uVG9Qb3NpdGlvbihsaW5lRW5k
aW5ncywgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgdmFyIGxpbmVP
ZmZzZXQgPSBsaW5lTnVtYmVyID8gbGluZUVuZGluZ3NbbGluZU51bWJlciAtIDFdICsgMSA6IDA7
CiAgICAgICAgIHJldHVybiBsaW5lT2Zmc2V0ICsgY29sdW1uTnVtYmVyOwotICAgIH0sCisgICAg
fQogCi0gICAgX3Bvc2l0aW9uVG9Mb2NhdGlvbjogZnVuY3Rpb24obGluZUVuZGluZ3MsIHBvc2l0
aW9uKQorICAgIF9wb3NpdGlvblRvTG9jYXRpb24obGluZUVuZGluZ3MsIHBvc2l0aW9uKQogICAg
IHsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lRW5kaW5ncy51cHBlckJvdW5kKHBvc2l0
aW9uIC0gMSk7CiAgICAgICAgIGlmICghbGluZU51bWJlcikKQEAgLTg1LDkgKzg1LDkgQEAgV2Vi
SW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBwb3NpdGlvbiAtIGxpbmVFbmRpbmdzW2xp
bmVOdW1iZXIgLSAxXSAtIDE7CiAgICAgICAgIHJldHVybiB7bGluZU51bWJlciwgY29sdW1uTnVt
YmVyfTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jb252ZXJ0UG9zaXRpb246IGZ1bmN0aW9uKHBv
c2l0aW9uczEsIHBvc2l0aW9uczIsIHBvc2l0aW9uSW5Qb3NpdGlvbjEpCisgICAgX2NvbnZlcnRQ
b3NpdGlvbihwb3NpdGlvbnMxLCBwb3NpdGlvbnMyLCBwb3NpdGlvbkluUG9zaXRpb24xKQogICAg
IHsKICAgICAgICAgdmFyIGluZGV4ID0gcG9zaXRpb25zMS51cHBlckJvdW5kKHBvc2l0aW9uSW5Q
b3NpdGlvbjEpIC0gMTsKICAgICAgICAgdmFyIGNvbnZlcnRlZFBvc2l0aW9uID0gcG9zaXRpb25z
MltpbmRleF0gKyBwb3NpdGlvbkluUG9zaXRpb24xIC0gcG9zaXRpb25zMVtpbmRleF07CkBAIC05
Niw1ICs5NiwzIEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gY29udmVydGVkUG9zaXRpb247CiAgICAgfQogfTsKLQotV2ViSW5z
cGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9GcmFtZVJlc291cmNlTWFuYWdlci5qcwppbmRleCA5MTFi
NTRiZTg3Y2JjYjA5MDI3ZDAyNzlhZmFhNzQyZmJjZWVkMDVhLi42NjQyODVjN2Q3NzYyMGI0Nzky
NGMzOGI0YTYwMzViODQ1MGU5ZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9GcmFtZVJlc291cmNlTWFuYWdlci5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9GcmFtZVJlc291
cmNlTWFuYWdlci5qcwpAQCAtMjMsMzYgKzIzLDI1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyID0g
ZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyID0gY2xhc3MgRnJh
bWVSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8g
RklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFu
ZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwot
Ci0gICAgaWYgKHdpbmRvdy5QYWdlQWdlbnQpCi0gICAgICAgIFBhZ2VBZ2VudC5lbmFibGUoKTsK
LSAgICBpZiAod2luZG93Lk5ldHdvcmtBZ2VudCkKLSAgICAgICAgTmV0d29ya0FnZW50LmVuYWJs
ZSgpOwotCi0gICAgV2ViSW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0
cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzKTsKLQotICAgIHRoaXMuaW5pdGlhbGl6ZSgpOwotfTsK
KyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0vLyBGSVhNRTog
TW92ZSB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MgYW5kIHdlIGNhbiByZW1vdmUg
dGhpcy4KLVdlYkluc3BlY3Rvci5PYmplY3QuZGVwcmVjYXRlZEFkZENvbnN0cnVjdG9yRnVuY3Rp
b25zKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlcik7CisgICAgICAgIGlmICh3aW5k
b3cuUGFnZUFnZW50KQorICAgICAgICAgICAgUGFnZUFnZW50LmVuYWJsZSgpOworICAgICAgICBp
ZiAod2luZG93Lk5ldHdvcmtBZ2VudCkKKyAgICAgICAgICAgIE5ldHdvcmtBZ2VudC5lbmFibGUo
KTsKIAotV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLkV2ZW50ID0gewotICAgIEZy
YW1lV2FzQWRkZWQ6ICJmcmFtZS1yZXNvdXJjZS1tYW5hZ2VyLWZyYW1lLXdhcy1hZGRlZCIsCi0g
ICAgRnJhbWVXYXNSZW1vdmVkOiAiZnJhbWUtcmVzb3VyY2UtbWFuYWdlci1mcmFtZS13YXMtcmVt
b3ZlZCIsCi0gICAgTWFpbkZyYW1lRGlkQ2hhbmdlOiAiZnJhbWUtcmVzb3VyY2UtbWFuYWdlci1t
YWluLWZyYW1lLWRpZC1jaGFuZ2UiCi19OworICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0
aW9ucy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3RpZmljYXRpb24uRXh0cmFEb21h
aW5zQWN0aXZhdGVkLCB0aGlzLl9leHRyYURvbWFpbnNBY3RpdmF0ZWQsIHRoaXMpOwogCi1XZWJJ
bnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVj
dG9yOiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIsCisgICAgICAgIHRoaXMuaW5p
dGlhbGl6ZSgpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgaW5pdGlhbGl6ZTogZnVu
Y3Rpb24oKQorICAgIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgdmFyIG9sZE1haW5GcmFt
ZSA9IHRoaXMuX21haW5GcmFtZTsKIApAQCAtNjYsMTIgKzU1LDEyIEBAIFdlYkluc3BlY3Rvci5G
cmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3dhaXRpbmdG
b3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkID0gdHJ1ZTsKICAgICAgICAgaWYgKHdpbmRv
dy5QYWdlQWdlbnQpCiAgICAgICAgICAgICBQYWdlQWdlbnQuZ2V0UmVzb3VyY2VUcmVlKHRoaXMu
X3Byb2Nlc3NNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkLmJpbmQodGhpcykpOwotICAgIH0s
CisgICAgfQogCiAgICAgZ2V0IG1haW5GcmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhp
cy5fbWFpbkZyYW1lOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGZyYW1lcygpCiAgICAgewpA
QCAtODAsMTQgKzY5LDE0IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICBmcmFtZXMucHVzaCh0aGlzLl9mcmFtZUlkZW50aWZpZXJN
YXBba2V5XSk7CiAKICAgICAgICAgcmV0dXJuIGZyYW1lczsKLSAgICB9LAorICAgIH0KIAotICAg
IGZyYW1lRm9ySWRlbnRpZmllcjogZnVuY3Rpb24oZnJhbWVJZCkKKyAgICBmcmFtZUZvcklkZW50
aWZpZXIoZnJhbWVJZCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUlkZW50aWZp
ZXJNYXBbZnJhbWVJZF0gfHwgbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIGZyYW1lRGlkTmF2
aWdhdGU6IGZ1bmN0aW9uKGZyYW1lUGF5bG9hZCkKKyAgICBmcmFtZURpZE5hdmlnYXRlKGZyYW1l
UGF5bG9hZCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5QYWdl
T2JzZXJ2ZXIuCiAKQEAgLTE0OCw5ICsxMzcsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJj
ZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChmcmFtZVdhc0xvYWRlZEluc3Rh
bnRseSkKICAgICAgICAgICAgIGZyYW1lLm1haW5SZXNvdXJjZS5tYXJrQXNGaW5pc2hlZCgpOwot
ICAgIH0sCisgICAgfQogCi0gICAgZnJhbWVEaWREZXRhY2g6IGZ1bmN0aW9uKGZyYW1lSWQpCisg
ICAgZnJhbWVEaWREZXRhY2goZnJhbWVJZCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9t
IFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIuCiAKQEAgLTE3OCw5ICsxNjcsOSBAQCBXZWJJbnNw
ZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh0
aGlzLl9tYWluRnJhbWUgIT09IG9sZE1haW5GcmFtZSkKICAgICAgICAgICAgIHRoaXMuX21haW5G
cmFtZURpZENoYW5nZShvbGRNYWluRnJhbWUpOwotICAgIH0sCisgICAgfQogCi0gICAgcmVzb3Vy
Y2VSZXF1ZXN0V2lsbEJlU2VudDogZnVuY3Rpb24ocmVxdWVzdElkZW50aWZpZXIsIGZyYW1lSWRl
bnRpZmllciwgbG9hZGVySWRlbnRpZmllciwgcmVxdWVzdCwgdHlwZSwgcmVkaXJlY3RSZXNwb25z
ZSwgdGltZXN0YW1wLCBpbml0aWF0b3IpCisgICAgcmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudChy
ZXF1ZXN0SWRlbnRpZmllciwgZnJhbWVJZGVudGlmaWVyLCBsb2FkZXJJZGVudGlmaWVyLCByZXF1
ZXN0LCB0eXBlLCByZWRpcmVjdFJlc3BvbnNlLCB0aW1lc3RhbXAsIGluaXRpYXRvcikKICAgICB7
CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5OZXR3b3JrT2JzZXJ2ZXIuCiAK
QEAgLTIwNCw5ICsxOTMsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJv
dG90eXBlID0gewogCiAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgcmVzb3VyY2Ugd2l0aCB0aGUg
cmVxdWVzdElkZW50aWZpZXIgc28gaXQgY2FuIGJlIGZvdW5kIGluIGZ1dHVyZSBsb2FkaW5nIGV2
ZW50cy4KICAgICAgICAgdGhpcy5fcmVzb3VyY2VSZXF1ZXN0SWRlbnRpZmllck1hcFtyZXF1ZXN0
SWRlbnRpZmllcl0gPSByZXNvdXJjZTsKLSAgICB9LAorICAgIH0KIAotICAgIG1hcmtSZXNvdXJj
ZVJlcXVlc3RBc1NlcnZlZEZyb21NZW1vcnlDYWNoZTogZnVuY3Rpb24ocmVxdWVzdElkZW50aWZp
ZXIpCisgICAgbWFya1Jlc291cmNlUmVxdWVzdEFzU2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVl
c3RJZGVudGlmaWVyKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9y
Lk5ldHdvcmtPYnNlcnZlci4KIApAQCAtMjIzLDkgKzIxMiw5IEBAIFdlYkluc3BlY3Rvci5GcmFt
ZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgcmVzb3VyY2UubWFya0FzQ2FjaGVkKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXNv
dXJjZVJlcXVlc3RXYXNTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGU6IGZ1bmN0aW9uKHJlcXVlc3RJZGVu
dGlmaWVyLCBmcmFtZUlkZW50aWZpZXIsIGxvYWRlcklkZW50aWZpZXIsIGNhY2hlZFJlc291cmNl
UGF5bG9hZCwgdGltZXN0YW1wLCBpbml0aWF0b3IpCisgICAgcmVzb3VyY2VSZXF1ZXN0V2FzU2Vy
dmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZGVudGlmaWVyLCBmcmFtZUlkZW50aWZpZXIsIGxv
YWRlcklkZW50aWZpZXIsIGNhY2hlZFJlc291cmNlUGF5bG9hZCwgdGltZXN0YW1wLCBpbml0aWF0
b3IpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuTmV0d29ya09i
c2VydmVyLgogCkBAIC0yNDgsOSArMjM3LDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBObyBuZWVkIHRvIGFzc29jaWF0ZSB0
aGUgcmVzb3VyY2Ugd2l0aCB0aGUgcmVxdWVzdElkZW50aWZpZXIsIHNpbmNlIHRoaXMgaXMgdGhl
IG9ubHkgZXZlbnQKICAgICAgICAgLy8gc2VudCBmb3IgbWVtb3J5IGNhY2hlIHJlc291cmNlIGxv
YWRzLgotICAgIH0sCisgICAgfQogCi0gICAgcmVzb3VyY2VSZXF1ZXN0RGlkUmVjZWl2ZVJlc3Bv
bnNlOiBmdW5jdGlvbihyZXF1ZXN0SWRlbnRpZmllciwgZnJhbWVJZGVudGlmaWVyLCBsb2FkZXJJ
ZGVudGlmaWVyLCB0eXBlLCByZXNwb25zZSwgdGltZXN0YW1wKQorICAgIHJlc291cmNlUmVxdWVz
dERpZFJlY2VpdmVSZXNwb25zZShyZXF1ZXN0SWRlbnRpZmllciwgZnJhbWVJZGVudGlmaWVyLCBs
b2FkZXJJZGVudGlmaWVyLCB0eXBlLCByZXNwb25zZSwgdGltZXN0YW1wKQogICAgIHsKICAgICAg
ICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci4KIApAQCAtMjkx
LDkgKzI4MCw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICByZXNvdXJjZS5tYXJrQXNDYWNoZWQoKTsKIAogICAgICAgICByZXNv
dXJjZS51cGRhdGVGb3JSZXNwb25zZShyZXNwb25zZS51cmwsIHJlc3BvbnNlLm1pbWVUeXBlLCB0
eXBlLCByZXNwb25zZS5oZWFkZXJzLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1Rl
eHQsIGVsYXBzZWRUaW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlc291cmNlUmVxdWVzdERp
ZFJlY2VpdmVEYXRhOiBmdW5jdGlvbihyZXF1ZXN0SWRlbnRpZmllciwgZGF0YUxlbmd0aCwgZW5j
b2RlZERhdGFMZW5ndGgsIHRpbWVzdGFtcCkKKyAgICByZXNvdXJjZVJlcXVlc3REaWRSZWNlaXZl
RGF0YShyZXF1ZXN0SWRlbnRpZmllciwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFMZW5ndGgsIHRp
bWVzdGFtcCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5OZXR3
b3JrT2JzZXJ2ZXIuCiAKQEAgLTMxNCw5ICszMDMsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNv
dXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChlbmNvZGVkRGF0YUxlbmd0
aCAhPT0gLTEpCiAgICAgICAgICAgICByZXNvdXJjZS5pbmNyZWFzZVRyYW5zZmVyU2l6ZShlbmNv
ZGVkRGF0YUxlbmd0aCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXNvdXJjZVJlcXVlc3REaWRG
aW5pc2hMb2FkaW5nOiBmdW5jdGlvbihyZXF1ZXN0SWRlbnRpZmllciwgdGltZXN0YW1wLCBzb3Vy
Y2VNYXBVUkwpCisgICAgcmVzb3VyY2VSZXF1ZXN0RGlkRmluaXNoTG9hZGluZyhyZXF1ZXN0SWRl
bnRpZmllciwgdGltZXN0YW1wLCBzb3VyY2VNYXBVUkwpCiAgICAgewogICAgICAgICAvLyBDYWxs
ZWQgZnJvbSBXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLgogCkBAIC0zMzgsOSArMzI3LDkg
QEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5zb3VyY2VNYXBNYW5hZ2VyLmRvd25sb2FkU291cmNlTWFwKHNv
dXJjZU1hcFVSTCwgcmVzb3VyY2UudXJsLCByZXNvdXJjZSk7CiAKICAgICAgICAgZGVsZXRlIHRo
aXMuX3Jlc291cmNlUmVxdWVzdElkZW50aWZpZXJNYXBbcmVxdWVzdElkZW50aWZpZXJdOwotICAg
IH0sCisgICAgfQogCi0gICAgcmVzb3VyY2VSZXF1ZXN0RGlkRmFpbExvYWRpbmc6IGZ1bmN0aW9u
KHJlcXVlc3RJZGVudGlmaWVyLCBjYW5jZWxlZCwgdGltZXN0YW1wKQorICAgIHJlc291cmNlUmVx
dWVzdERpZEZhaWxMb2FkaW5nKHJlcXVlc3RJZGVudGlmaWVyLCBjYW5jZWxlZCwgdGltZXN0YW1w
KQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNl
cnZlci4KIApAQCAtMzYyLDkgKzM1MSw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXNvdXJjZS5wYXJlbnRGcmFtZS5jbGVh
clByb3Zpc2lvbmFsTG9hZCgpOwogCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXNvdXJjZVJlcXVl
c3RJZGVudGlmaWVyTWFwW3JlcXVlc3RJZGVudGlmaWVyXTsKLSAgICB9LAorICAgIH0KIAotICAg
IGV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkOiBmdW5jdGlvbihjb250ZXh0UGF5bG9hZCkKKyAgICBl
eGVjdXRpb25Db250ZXh0Q3JlYXRlZChjb250ZXh0UGF5bG9hZCkKICAgICB7CiAgICAgICAgIC8v
IENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5SdW50aW1lT2JzZXJ2ZXIuCiAKQEAgLTM3Niw5ICsz
NjUsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBjb250ZXh0UGF5bG9hZC5uYW1lIHx8IGZyYW1lLm1h
aW5SZXNvdXJjZS5kaXNwbGF5TmFtZTsKICAgICAgICAgdmFyIGV4ZWN1dGlvbkNvbnRleHQgPSBu
ZXcgV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHQoY29udGV4dFBheWxvYWQuaWQsIGRpc3Bs
YXlOYW1lLCBjb250ZXh0UGF5bG9hZC5pc1BhZ2VDb250ZXh0LCBmcmFtZSk7CiAgICAgICAgIGZy
YW1lLmFkZEV4ZWN1dGlvbkNvbnRleHQoZXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICByZXNvdXJjZUZvclVSTDogZnVuY3Rpb24odXJsKQorICAgIHJlc291cmNlRm9yVVJM
KHVybCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fbWFpbkZyYW1lKQogICAgICAgICAgICAg
cmV0dXJuIG51bGw7CkBAIC0zODcsMTEgKzM3NiwxMSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNv
dXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21haW5G
cmFtZS5tYWluUmVzb3VyY2U7CiAKICAgICAgICAgcmV0dXJuIHRoaXMuX21haW5GcmFtZS5yZXNv
dXJjZUZvclVSTCh1cmwsIHRydWUpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQog
Ci0gICAgX2FkZE5ld1Jlc291cmNlVG9GcmFtZTogZnVuY3Rpb24ocmVxdWVzdElkZW50aWZpZXIs
IGZyYW1lSWRlbnRpZmllciwgbG9hZGVySWRlbnRpZmllciwgdXJsLCB0eXBlLCByZXF1ZXN0TWV0
aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdERhdGEsIGVsYXBzZWRUaW1lLCBmcmFtZU5hbWUs
IGZyYW1lU2VjdXJpdHlPcmlnaW4sIGluaXRpYXRvclNvdXJjZUNvZGVMb2NhdGlvbikKKyAgICBf
YWRkTmV3UmVzb3VyY2VUb0ZyYW1lKHJlcXVlc3RJZGVudGlmaWVyLCBmcmFtZUlkZW50aWZpZXIs
IGxvYWRlcklkZW50aWZpZXIsIHVybCwgdHlwZSwgcmVxdWVzdE1ldGhvZCwgcmVxdWVzdEhlYWRl
cnMsIHJlcXVlc3REYXRhLCBlbGFwc2VkVGltZSwgZnJhbWVOYW1lLCBmcmFtZVNlY3VyaXR5T3Jp
Z2luLCBpbml0aWF0b3JTb3VyY2VDb2RlTG9jYXRpb24pCiAgICAgewogICAgICAgICBjb25zb2xl
LmFzc2VydCghdGhpcy5fd2FpdGluZ0Zvck1haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQpOwog
CkBAIC00MjcsOSArNDE2LDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgY29uc29sZS5hc3NlcnQocmVzb3VyY2UpOwogCiAgICAgICAg
IHJldHVybiByZXNvdXJjZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRSZXNvdXJjZVRvRnJh
bWU6IGZ1bmN0aW9uKGZyYW1lLCByZXNvdXJjZSkKKyAgICBfYWRkUmVzb3VyY2VUb0ZyYW1lKGZy
YW1lLCByZXNvdXJjZSkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl93YWl0
aW5nRm9yTWFpbkZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCk7CiAgICAgICAgIGlmICh0aGlzLl93
YWl0aW5nRm9yTWFpbkZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCkKQEAgLTQ0OCw5ICs0MzcsOSBA
QCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICAvLyBUaGlzIGlzIGp1c3QgYW5vdGhlciByZXNvdXJjZSwgZWl0aGVyIGZvciB0aGUgbWFpbiBs
b2FkZXIgb3IgdGhlIHByb3Zpc2lvbmFsIGxvYWRlci4KICAgICAgICAgY29uc29sZS5hc3NlcnQo
cmVzb3VyY2UubG9hZGVySWRlbnRpZmllciA9PT0gZnJhbWUubG9hZGVySWRlbnRpZmllciB8fCBy
ZXNvdXJjZS5sb2FkZXJJZGVudGlmaWVyID09PSBmcmFtZS5wcm92aXNpb25hbExvYWRlcklkZW50
aWZpZXIpOwogICAgICAgICBmcmFtZS5hZGRSZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfaW5pdGlhdG9yU291cmNlQ29kZUxvY2F0aW9uRnJvbVBheWxvYWQ6IGZ1bmN0
aW9uKGluaXRpYXRvclBheWxvYWQpCisgICAgX2luaXRpYXRvclNvdXJjZUNvZGVMb2NhdGlvbkZy
b21QYXlsb2FkKGluaXRpYXRvclBheWxvYWQpCiAgICAgewogICAgICAgICBpZiAoIWluaXRpYXRv
clBheWxvYWQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTQ5Myw5ICs0ODIsOSBAQCBX
ZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgcmV0dXJuIHNvdXJjZUNvZGUuY3JlYXRlU291cmNl
Q29kZUxvY2F0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfcHJvY2Vzc01haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQ6IGZ1bmN0aW9uKGVycm9y
LCBtYWluRnJhbWVQYXlsb2FkKQorICAgIF9wcm9jZXNzTWFpbkZyYW1lUmVzb3VyY2VUcmVlUGF5
bG9hZChlcnJvciwgbWFpbkZyYW1lUGF5bG9hZCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuX3dhaXRpbmdGb3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkKTsKICAgICAg
ICAgZGVsZXRlIHRoaXMuX3dhaXRpbmdGb3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkOwpA
QCAtNTE3LDkgKzUwNiw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHRoaXMuX21haW5GcmFtZSAhPT0gb2xkTWFpbkZyYW1l
KQogICAgICAgICAgICAgdGhpcy5fbWFpbkZyYW1lRGlkQ2hhbmdlKG9sZE1haW5GcmFtZSk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfY3JlYXRlRnJhbWU6IGZ1bmN0aW9uKHBheWxvYWQpCisgICAg
X2NyZWF0ZUZyYW1lKHBheWxvYWQpCiAgICAgewogICAgICAgICAvLyBJZiBwYXlsb2FkLnVybCBp
cyBtaXNzaW5nIG9yIGVtcHR5IHRoZW4gdGhpcyBwYWdlIGlzIGxpa2VseSB0aGUgc3BlY2lhbCBl
bXB0eSBwYWdlLiBJbiB0aGF0IGNhc2UKICAgICAgICAgLy8gd2Ugd2lsbCBqdXN0IHNheSBpdCBp
cyAiYWJvdXQ6YmxhbmsiIHNvIHdlIGhhdmUgYSBVUkwsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBy
ZXNvdXJjZXMuCkBAIC01MzEsOSArNTIwLDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgbWFpblJlc291cmNlLm1hcmtBc0ZpbmlzaGVk
KCk7CiAKICAgICAgICAgcmV0dXJuIGZyYW1lOwotICAgIH0sCisgICAgfQogCi0gICAgX2NyZWF0
ZVJlc291cmNlOiBmdW5jdGlvbihwYXlsb2FkLCBmcmFtZVBheWxvYWQpCisgICAgX2NyZWF0ZVJl
c291cmNlKHBheWxvYWQsIGZyYW1lUGF5bG9hZCkKICAgICB7CiAgICAgICAgIHZhciByZXNvdXJj
ZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2UocGF5bG9hZC51cmwsIHBheWxvYWQubWltZVR5
cGUsIHBheWxvYWQudHlwZSwgZnJhbWVQYXlsb2FkLmxvYWRlcklkKTsKIApAQCAtNTQxLDkgKzUz
MCw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc291cmNlTWFwTWFuYWdlci5kb3dubG9hZFNvdXJjZU1h
cChwYXlsb2FkLnNvdXJjZU1hcFVSTCwgcmVzb3VyY2UudXJsLCByZXNvdXJjZSk7CiAKICAgICAg
ICAgcmV0dXJuIHJlc291cmNlOwotICAgIH0sCisgICAgfQogCi0gICAgX2FkZEZyYW1lVHJlZUZy
b21GcmFtZVJlc291cmNlVHJlZVBheWxvYWQ6IGZ1bmN0aW9uKHBheWxvYWQsIGlzTWFpbkZyYW1l
KQorICAgIF9hZGRGcmFtZVRyZWVGcm9tRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkKHBheWxvYWQs
IGlzTWFpbkZyYW1lKQogICAgIHsKICAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5fY3JlYXRlRnJh
bWUocGF5bG9hZC5mcmFtZSk7CiAgICAgICAgIGlmIChpc01haW5GcmFtZSkKQEAgLTU3MywyNyAr
NTYyLDMxIEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRnJhbWVXYXNBZGRlZEV2ZW50KGZyYW1lKTsKIAogICAg
ICAgICByZXR1cm4gZnJhbWU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZGlzcGF0Y2hGcmFtZVdh
c0FkZGVkRXZlbnQ6IGZ1bmN0aW9uKGZyYW1lKQorICAgIF9kaXNwYXRjaEZyYW1lV2FzQWRkZWRF
dmVudChmcmFtZSkKICAgICB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5FdmVudC5GcmFtZVdhc0FkZGVkLCB7
ZnJhbWV9KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYWluRnJhbWVEaWRDaGFuZ2U6IGZ1bmN0
aW9uKG9sZE1haW5GcmFtZSkKKyAgICBfbWFpbkZyYW1lRGlkQ2hhbmdlKG9sZE1haW5GcmFtZSkK
ICAgICB7CiAgICAgICAgIGlmIChvbGRNYWluRnJhbWUpCiAgICAgICAgICAgICBvbGRNYWluRnJh
bWUudW5tYXJrQXNNYWluRnJhbWUoKTsKICAgICAgICAgaWYgKHRoaXMuX21haW5GcmFtZSkKICAg
ICAgICAgICAgIHRoaXMuX21haW5GcmFtZS5tYXJrQXNNYWluRnJhbWUoKTsKICAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5h
Z2VyLkV2ZW50Lk1haW5GcmFtZURpZENoYW5nZSwge29sZE1haW5GcmFtZX0pOwotICAgIH0sCisg
ICAgfQogCi0gICAgX2V4dHJhRG9tYWluc0FjdGl2YXRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAg
X2V4dHJhRG9tYWluc0FjdGl2YXRlZChldmVudCkKICAgICB7CiAgICAgICAgIGlmIChldmVudC5k
YXRhLmRvbWFpbnMuY29udGFpbnMoIlBhZ2UiKSAmJiB3aW5kb3cuUGFnZUFnZW50KQogICAgICAg
ICAgICAgUGFnZUFnZW50LmdldFJlc291cmNlVHJlZSh0aGlzLl9wcm9jZXNzTWFpbkZyYW1lUmVz
b3VyY2VUcmVlUGF5bG9hZC5iaW5kKHRoaXMpKTsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3Iu
RnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5P
YmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLkV2ZW50
ID0geworICAgIEZyYW1lV2FzQWRkZWQ6ICJmcmFtZS1yZXNvdXJjZS1tYW5hZ2VyLWZyYW1lLXdh
cy1hZGRlZCIsCisgICAgRnJhbWVXYXNSZW1vdmVkOiAiZnJhbWUtcmVzb3VyY2UtbWFuYWdlci1m
cmFtZS13YXMtcmVtb3ZlZCIsCisgICAgTWFpbkZyYW1lRGlkQ2hhbmdlOiAiZnJhbWUtcmVzb3Vy
Y2UtbWFuYWdlci1tYWluLWZyYW1lLWRpZC1jaGFuZ2UiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSXNzdWVNYW5hZ2VyLmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSXNzdWVN
YW5hZ2VyLmpzCmluZGV4IGYyMGU5NTk2MjA3MWY4NzQ4YWRhNWU3ZDYxZGExNzZkYTE1MTgxZmYu
LjVmNzMyMDdmYjBmZmFhMDkxYWQyZDE2YzZkNDU2ZDRiMWIwNjg0NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0lzc3VlTWFuYWdl
ci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9Jc3N1ZU1hbmFnZXIuanMKQEAgLTIzLDM1ICsyMywyOCBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIgPSBmdW5j
dGlvbigpCitXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyID0gY2xhc3MgSXNzdWVNYW5hZ2VyIGV4
dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMg
dG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAg
IC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIFdlYkluc3BlY3Rvci5G
cmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3Vy
Y2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2Vi
SW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTG9nTWFu
YWdlci5FdmVudC5BY3RpdmVMb2dDbGVhcmVkLCB0aGlzLl9hY3RpdmVMb2dDbGVhcmVkLCB0aGlz
KTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAgdGhp
cy5pbml0aWFsaXplKCk7Ci19OworICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0
aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3Iu
bG9nTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50
LkFjdGl2ZUxvZ0NsZWFyZWQsIHRoaXMuX2FjdGl2ZUxvZ0NsZWFyZWQsIHRoaXMpOwogCi1XZWJJ
bnNwZWN0b3IuSXNzdWVNYW5hZ2VyLkV2ZW50ID0gewotICAgIElzc3VlV2FzQWRkZWQ6ICJpc3N1
ZS1tYW5hZ2VyLWlzc3VlLXdhcy1hZGRlZCIsCi0gICAgQ2xlYXJlZDogImlzc3VlLW1hbmFnZXIt
Y2xlYXJlZCIKLX07Ci0KLVdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBlID0gewot
ICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLAorICAgICAgICB0aGlz
LmluaXRpYWxpemUoKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAgIGluaXRpYWxpemU6
IGZ1bmN0aW9uKCkKKyAgICBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2lzc3Vl
cyA9IFtdOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5Jc3N1ZU1hbmFnZXIuRXZlbnQuQ2xlYXJlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBp
c3N1ZVdhc0FkZGVkOiBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCB0ZXh0LCB1cmwsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlciwgcGFyYW1ldGVycykKKyAgICBpc3N1ZVdhc0FkZGVkKHNvdXJjZSwg
bGV2ZWwsIHRleHQsIHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBwYXJhbWV0ZXJzKQog
ICAgIHsKICAgICAgICAgdmFyIG1vZGlmaWVkTGluZU51bWJlcjsKICAgICAgICAgaWYgKGxpbmVO
dW1iZXIpIHsKQEAgLTYzLDkgKzU2LDkgQEAgV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2lzc3Vlcy5wdXNoKGlzc3VlKTsKIAogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLkV2
ZW50Lklzc3VlV2FzQWRkZWQsIHtpc3N1ZX0pOwotICAgIH0sCisgICAgfQogCi0gICAgaXNzdWVz
Rm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291cmNlQ29kZSkKKyAgICBpc3N1ZXNGb3JTb3VyY2VD
b2RlKHNvdXJjZUNvZGUpCiAgICAgewogICAgICAgICB2YXIgaXNzdWVzID0gW107CiAKQEAgLTc3
LDE2ICs3MCwxNiBAQCBXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgfQogCiAgICAgICAgIHJldHVybiBpc3N1ZXM7Ci0gICAgfSwKKyAgICB9CiAKICAgICAv
LyBQcml2YXRlCiAKLSAgICBfYWN0aXZlTG9nQ2xlYXJlZDogZnVuY3Rpb24oZXZlbnQpCisgICAg
X2FjdGl2ZUxvZ0NsZWFyZWQoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLmluaXRpYWxpemUo
KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2U6IGZ1bmN0aW9u
KGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAg
ICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJh
bWUpOwogCkBAIC05Nyw0ICs5MCw3IEBAIFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9y
Lklzc3VlTWFuYWdlci5FdmVudCA9IHsKKyAgICBJc3N1ZVdhc0FkZGVkOiAiaXNzdWUtbWFuYWdl
ci1pc3N1ZS13YXMtYWRkZWQiLAorICAgIENsZWFyZWQ6ICJpc3N1ZS1tYW5hZ2VyLWNsZWFyZWQi
Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9s
bGVyLmpzCmluZGV4IDkyNjgyN2YxNGI3N2VkYTk4ZGI2M2NkZDg5N2ZiYzhmNmRkMGRjMmEuLmU1
YjQwNmViNDExMjJlYjY1YzFhMjM4OTYwNDZlYWIyNmU4ZjU4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRMb2dW
aWV3Q29udHJvbGxlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanMKQEAgLTIzLDY0ICsy
Myw2MCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIgPSBmdW5jdGlvbihlbGVtZW50LCBz
Y3JvbGxFbGVtZW50LCB0ZXh0UHJvbXB0LCBkZWxlZ2F0ZSwgaGlzdG9yeVNldHRpbmdJZGVudGlm
aWVyKQorV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciA9IGNsYXNzIEph
dmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsK
LSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJj
bGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwo
dGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydCh0ZXh0UHJvbXB0IGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLkNvbnNvbGVQcm9tcHQpOwotICAgIGNvbnNvbGUuYXNzZXJ0KGhpc3RvcnlTZXR0aW5n
SWRlbnRpZmllcik7CisgICAgY29uc3RydWN0b3IoZWxlbWVudCwgc2Nyb2xsRWxlbWVudCwgdGV4
dFByb21wdCwgZGVsZWdhdGUsIGhpc3RvcnlTZXR0aW5nSWRlbnRpZmllcikKKyAgICB7CisgICAg
ICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLSAgICB0aGlzLl9z
Y3JvbGxFbGVtZW50ID0gc2Nyb2xsRWxlbWVudDsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGV4
dFByb21wdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0KTsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoaGlzdG9yeVNldHRpbmdJZGVudGlmaWVyKTsKIAotICAgIHRoaXMuX3By
b21wdEhpc3RvcnlTZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKGhpc3RvcnlTZXR0
aW5nSWRlbnRpZmllciwgbnVsbCk7CisgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50Owor
ICAgICAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gc2Nyb2xsRWxlbWVudDsKIAotICAgIHRoaXMu
X3Byb21wdCA9IHRleHRQcm9tcHQ7Ci0gICAgdGhpcy5fcHJvbXB0LmRlbGVnYXRlID0gdGhpczsK
LSAgICB0aGlzLl9wcm9tcHQuaGlzdG9yeSA9IHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5nLnZh
bHVlOworICAgICAgICB0aGlzLl9wcm9tcHRIaXN0b3J5U2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0
b3IuU2V0dGluZyhoaXN0b3J5U2V0dGluZ0lkZW50aWZpZXIsIG51bGwpOwogCi0gICAgdGhpcy5k
ZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgICAgICB0aGlzLl9wcm9tcHQgPSB0ZXh0UHJvbXB0Owor
ICAgICAgICB0aGlzLl9wcm9tcHQuZGVsZWdhdGUgPSB0aGlzOworICAgICAgICB0aGlzLl9wcm9t
cHQuaGlzdG9yeSA9IHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5nLnZhbHVlOwogCi0gICAgdGhp
cy5fY2xlYXJlZCA9IHRydWU7Ci0gICAgdGhpcy5fcHJldmlvdXNNZXNzYWdlID0gbnVsbDsKLSAg
ICB0aGlzLl9yZXBlYXRDb3VudFdhc0ludGVycnVwdGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMu
ZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIAotICAgIHRoaXMuX3Nlc3Npb25zID0gW107CisgICAgICAg
IHRoaXMuX2NsZWFyZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9wcmV2aW91c01lc3NhZ2UgPSBu
dWxsOworICAgICAgICB0aGlzLl9yZXBlYXRDb3VudFdhc0ludGVycnVwdGVkID0gZmFsc2U7CiAK
LSAgICB0aGlzLm1lc3NhZ2VzQ2xlYXJLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVy
LkNvbW1hbmRPckNvbnRyb2wsICJLIiwgdGhpcy5faGFuZGxlQ2xlYXJTaG9ydGN1dC5iaW5kKHRo
aXMpKTsKLSAgICB0aGlzLm1lc3NhZ2VzQWx0ZXJuYXRlQ2xlYXJLZXlib2FyZFNob3J0Y3V0ID0g
bmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNo
b3J0Y3V0Lk1vZGlmaWVyLkNvbnRyb2wsICJMIiwgdGhpcy5faGFuZGxlQ2xlYXJTaG9ydGN1dC5i
aW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKKyAgICAgICAgdGhpcy5fc2Vzc2lvbnMgPSBbXTsK
IAotICAgIHRoaXMuX21lc3NhZ2VzRmluZEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXIuQ29tbWFuZE9yQ29udHJvbCwgIkYiLCB0aGlzLl9oYW5kbGVGaW5kU2hvcnRjdXQuYmluZCh0
aGlzKSwgdGhpcy5fZWxlbWVudCk7Ci0gICAgdGhpcy5fbWVzc2FnZXNGaW5kTmV4dEtleWJvYXJk
U2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9o
YW5kbGVGaW5kTmV4dFNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX2VsZW1lbnQpOwotICAgIHRo
aXMuX21lc3NhZ2VzRmluZFByZXZpb3VzS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmll
ci5Db21tYW5kT3JDb250cm9sIHwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXIuU2hpZnQsICJHIiwgdGhpcy5faGFuZGxlRmluZFByZXZpb3VzU2hvcnRjdXQuYmluZCh0aGlz
KSwgdGhpcy5fZWxlbWVudCk7CisgICAgICAgIHRoaXMubWVzc2FnZXNDbGVhcktleWJvYXJkU2hv
cnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIksiLCB0aGlzLl9oYW5k
bGVDbGVhclNob3J0Y3V0LmJpbmQodGhpcykpOworICAgICAgICB0aGlzLm1lc3NhZ2VzQWx0ZXJu
YXRlQ2xlYXJLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbnRyb2wsICJMIiwg
dGhpcy5faGFuZGxlQ2xlYXJTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKIAot
ICAgIHRoaXMuX3Byb21wdEFsdGVybmF0ZUNsZWFyS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5N
b2RpZmllci5Db250cm9sLCAiTCIsIHRoaXMuX2hhbmRsZUNsZWFyU2hvcnRjdXQuYmluZCh0aGlz
KSwgdGhpcy5fcHJvbXB0LmVsZW1lbnQpOwotICAgIHRoaXMuX3Byb21wdEZpbmRLZXlib2FyZFNo
b3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsICJGIiwgdGhpcy5faGFu
ZGxlRmluZFNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsKLSAgICB0
aGlzLl9wcm9tcHRGaW5kTmV4dEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29t
bWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0LmJpbmQodGhp
cyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsKLSAgICB0aGlzLl9wcm9tcHRGaW5kUHJldmlvdXNL
ZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkciLCB0aGlzLl9oYW5k
bGVGaW5kUHJldmlvdXNTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9wcm9tcHQuZWxlbWVudCk7
CisgICAgICAgIHRoaXMuX21lc3NhZ2VzRmluZEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9k
aWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkYiLCB0aGlzLl9oYW5kbGVGaW5kU2hvcnRjdXQuYmlu
ZCh0aGlzKSwgdGhpcy5fZWxlbWVudCk7CisgICAgICAgIHRoaXMuX21lc3NhZ2VzRmluZE5leHRL
ZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsICJHIiwg
dGhpcy5faGFuZGxlRmluZE5leHRTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsK
KyAgICAgICAgdGhpcy5fbWVzc2FnZXNGaW5kUHJldmlvdXNLZXlib2FyZFNob3J0Y3V0ID0gbmV3
IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5Nb2RpZmllci5TaGlmdCwgIkciLCB0aGlzLl9oYW5kbGVGaW5kUHJldmlvdXNTaG9ydGN1
dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKIAotICAgIHRoaXMuc3RhcnROZXdTZXNzaW9u
KCk7Ci19OworICAgICAgICB0aGlzLl9wcm9tcHRBbHRlcm5hdGVDbGVhcktleWJvYXJkU2hvcnRj
dXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29udHJvbCwgIkwiLCB0aGlzLl9oYW5kbGVDbGVhclNob3J0
Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsKKyAgICAgICAgdGhpcy5fcHJv
bXB0RmluZEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJv
bCwgIkYiLCB0aGlzLl9oYW5kbGVGaW5kU2hvcnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fcHJvbXB0
LmVsZW1lbnQpOworICAgICAgICB0aGlzLl9wcm9tcHRGaW5kTmV4dEtleWJvYXJkU2hvcnRjdXQg
PSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9oYW5kbGVGaW5k
TmV4dFNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsKKyAgICAgICAg
dGhpcy5fcHJvbXB0RmluZFByZXZpb3VzS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmll
ci5Db21tYW5kT3JDb250cm9sIHwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZp
ZXIuU2hpZnQsICJHIiwgdGhpcy5faGFuZGxlRmluZFByZXZpb3VzU2hvcnRjdXQuYmluZCh0aGlz
KSwgdGhpcy5fcHJvbXB0LmVsZW1lbnQpOwogCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1Zp
ZXdDb250cm9sbGVyLkNhY2hlZFByb3BlcnRpZXNEdXJhdGlvbiA9IDMwMDAwOwotCi1XZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25z
dHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciwKKyAgICAg
ICAgdGhpcy5zdGFydE5ld1Nlc3Npb24oKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAg
IGdldCBwcm9tcHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdDsKLSAgICB9
LAorICAgIH0KIAogICAgIGdldCBjdXJyZW50Q29uc29sZUdyb3VwKCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9jdXJyZW50Q29uc29sZUdyb3VwOwotICAgIH0sCisgICAgfQogCi0gICAg
Y2xlYXI6IGZ1bmN0aW9uKCkKKyAgICBjbGVhcigpCiAgICAgewogICAgICAgICB0aGlzLl9jbGVh
cmVkID0gdHJ1ZTsKIApAQCAtOTAsOSArODYsOSBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExv
Z1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAodGhpcy5kZWxlZ2F0
ZSAmJiB0eXBlb2YgdGhpcy5kZWxlZ2F0ZS5kaWRDbGVhck1lc3NhZ2VzID09PSAiZnVuY3Rpb24i
KQogICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5kaWRDbGVhck1lc3NhZ2VzKCk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBzdGFydE5ld1Nlc3Npb246IGZ1bmN0aW9uKGNsZWFyUHJldmlvdXNTZXNz
aW9ucykKKyAgICBzdGFydE5ld1Nlc3Npb24oY2xlYXJQcmV2aW91c1Nlc3Npb25zKQogICAgIHsK
ICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25zLmxlbmd0aCAmJiBjbGVhclByZXZpb3VzU2Vzc2lv
bnMpIHsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2Vzc2lvbnMubGVu
Z3RoOyArK2kpCkBAIC0xMjIsOSArMTE4LDkgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dW
aWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBu
ZXcgc2Vzc2lvbiBpcyB2aXNpYmxlLgogICAgICAgICBjb25zb2xlU2Vzc2lvbi5lbGVtZW50LnNj
cm9sbEludG9WaWV3KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBhcHBlbmRJbW1lZGlhdGVFeGVj
dXRpb25XaXRoUmVzdWx0OiBmdW5jdGlvbih0ZXh0LCByZXN1bHQpCisgICAgYXBwZW5kSW1tZWRp
YXRlRXhlY3V0aW9uV2l0aFJlc3VsdCh0ZXh0LCByZXN1bHQpCiAgICAgewogICAgICAgICBjb25z
b2xlLmFzc2VydChyZXN1bHQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KTsK
IApAQCAtMTM4LDkgKzEzNCw5IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRy
b2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLnJ1
bnRpbWVNYW5hZ2VyLnNhdmVSZXN1bHQocmVzdWx0LCBzYXZlUmVzdWx0Q2FsbGJhY2suYmluZCh0
aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBhcHBlbmRDb25zb2xlTWVzc2FnZTogZnVuY3Rp
b24oY29uc29sZU1lc3NhZ2UpCisgICAgYXBwZW5kQ29uc29sZU1lc3NhZ2UoY29uc29sZU1lc3Nh
Z2UpCiAgICAgewogICAgICAgICAvLyBDbG9uZSB0aGUgbWVzc2FnZSBzaW5jZSB0aGVyZSBtaWdo
dCBiZSBtdWx0aXBsZSBjbGllbnRzIHVzaW5nIHRoZSBtZXNzYWdlLAogICAgICAgICAvLyBhbmQg
c2luY2UgdGhlIG1lc3NhZ2UgaGFzIGEgRE9NIGVsZW1lbnQgaXQgY2FuJ3QgYmUgdHdvIHBsYWNl
cyBhdCBvbmNlLgpAQCAtMTQ5LDkgKzE0NSw5IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9n
Vmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xl
TWVzc2FnZShtZXNzYWdlQ2xvbmUpOwogCiAgICAgICAgIHJldHVybiBtZXNzYWdlQ2xvbmU7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICB1cGRhdGVQcmV2aW91c01lc3NhZ2VSZXBlYXRDb3VudDogZnVu
Y3Rpb24oY291bnQpCisgICAgdXBkYXRlUHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnQoY291bnQp
CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9wcmV2aW91c01lc3NhZ2UpOwog
ICAgICAgICBpZiAoIXRoaXMuX3ByZXZpb3VzTWVzc2FnZSkKQEAgLTE3MiwxNSArMTY4LDE1IEBA
IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0gewog
CiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2FnZShuZXdNZXNzYWdlKTsKICAg
ICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgaXNTY3JvbGxlZFRvQm90dG9tOiBmdW5jdGlv
bigpCisgICAgaXNTY3JvbGxlZFRvQm90dG9tKCkKICAgICB7CiAgICAgICAgIC8vIExpZSBhYm91
dCBiZWluZyBzY3JvbGxlZCB0byB0aGUgYm90dG9tIGlmIHdlIGhhdmUgYSBwZW5kaW5nIHJlcXVl
c3QgdG8gc2Nyb2xsIHRvIHRoZSBib3R0b20gc29vbi4KICAgICAgICAgcmV0dXJuIHRoaXMuX3Nj
cm9sbFRvQm90dG9tVGltZW91dCB8fCB0aGlzLl9zY3JvbGxFbGVtZW50LmlzU2Nyb2xsZWRUb0Jv
dHRvbSgpOwotICAgIH0sCisgICAgfQogCi0gICAgc2Nyb2xsVG9Cb3R0b206IGZ1bmN0aW9uKCkK
KyAgICBzY3JvbGxUb0JvdHRvbSgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fc2Nyb2xsVG9C
b3R0b21UaW1lb3V0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk0LDE2ICsxOTAsMTYgQEAg
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIC8vIERvbid0IHNjcm9sbCBpbW1lZGlhdGVseSBzbyB3ZSBhcmUgbm90IGNhdXNpbmcg
ZXhjZXNzaXZlIGxheW91dHMgd2hlbiB0aGVyZQogICAgICAgICAvLyBhcmUgbWFueSBtZXNzYWdl
cyBiZWluZyBhZGRlZCBhdCBvbmNlLgogICAgICAgICB0aGlzLl9zY3JvbGxUb0JvdHRvbVRpbWVv
dXQgPSBzZXRUaW1lb3V0KGRlbGF5ZWRXb3JrLmJpbmQodGhpcyksIDApOwotICAgIH0sCisgICAg
fQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBjb25zb2xlUHJvbXB0SGlzdG9yeURpZENoYW5n
ZTogZnVuY3Rpb24ocHJvbXB0KQorICAgIGNvbnNvbGVQcm9tcHRIaXN0b3J5RGlkQ2hhbmdlKHBy
b21wdCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5nLnZhbHVlID0g
dGhpcy5wcm9tcHQuaGlzdG9yeTsKLSAgICB9LAorICAgIH0KIAotICAgIGNvbnNvbGVQcm9tcHRT
aG91bGRDb21taXRUZXh0OiBmdW5jdGlvbihwcm9tcHQsIHRleHQsIGN1cnNvcklzQXRMYXN0UG9z
aXRpb24sIGhhbmRsZXIpCisgICAgY29uc29sZVByb21wdFNob3VsZENvbW1pdFRleHQocHJvbXB0
LCB0ZXh0LCBjdXJzb3JJc0F0TGFzdFBvc2l0aW9uLCBoYW5kbGVyKQogICAgIHsKICAgICAgICAg
Ly8gQWx3YXlzIGNvbW1pdCB0aGUgdGV4dCBpZiB3ZSBhcmUgbm90IGF0IHRoZSBsYXN0IHBvc2l0
aW9uLgogICAgICAgICBpZiAoIWN1cnNvcklzQXRMYXN0UG9zaXRpb24pIHsKQEAgLTIyMyw5ICsy
MTksOSBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIFJ1bnRpbWVBZ2VudC5wYXJzZSh0ZXh0LCBwYXJz
ZUZpbmlzaGVkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgY29uc29sZVByb21w
dFRleHRDb21taXR0ZWQ6IGZ1bmN0aW9uKHByb21wdCwgdGV4dCkKKyAgICBjb25zb2xlUHJvbXB0
VGV4dENvbW1pdHRlZChwcm9tcHQsIHRleHQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0ZXh0KTsKIApAQCAtMjQzLDMxICsyMzksMzEgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRM
b2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRleHQgKz0gIlxuLy8jIHNv
dXJjZVVSTD1fX1dlYkluc3BlY3RvckNvbnNvbGVfX1xuIjsKIAogICAgICAgICBXZWJJbnNwZWN0
b3IucnVudGltZU1hbmFnZXIuZXZhbHVhdGVJbkluc3BlY3RlZFdpbmRvdyh0ZXh0LCAiY29uc29s
ZSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgcHJpbnRSZXN1bHQuYmluZCh0aGlz
KSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfaGFuZGxlQ2xlYXJT
aG9ydGN1dDogZnVuY3Rpb24oKQorICAgIF9oYW5kbGVDbGVhclNob3J0Y3V0KCkKICAgICB7CiAg
ICAgICAgIHRoaXMuY2xlYXIoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVGaW5kU2hv
cnRjdXQ6IGZ1bmN0aW9uKCkKKyAgICBfaGFuZGxlRmluZFNob3J0Y3V0KCkKICAgICB7CiAgICAg
ICAgIHRoaXMuZGVsZWdhdGUuZm9jdXNTZWFyY2hCYXIoKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0OiBmdW5jdGlvbigpCisgICAgX2hhbmRsZUZpbmROZXh0
U2hvcnRjdXQoKQogICAgIHsKICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5oaWdobGlnaHROZXh0U2Vh
cmNoTWF0Y2goKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVGaW5kUHJldmlvdXNTaG9y
dGN1dDogZnVuY3Rpb24oKQorICAgIF9oYW5kbGVGaW5kUHJldmlvdXNTaG9ydGN1dCgpCiAgICAg
ewogICAgICAgICB0aGlzLmRlbGVnYXRlLmhpZ2hsaWdodFByZXZpb3VzU2VhcmNoTWF0Y2goKTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9hcHBlbmRDb25zb2xlTWVzc2FnZTogZnVuY3Rpb24obXNn
LCByZXBlYXRDb3VudFdhc0ludGVycnVwdGVkKQorICAgIF9hcHBlbmRDb25zb2xlTWVzc2FnZSht
c2csIHJlcGVhdENvdW50V2FzSW50ZXJydXB0ZWQpCiAgICAgewogICAgICAgICB2YXIgd2FzU2Ny
b2xsZWRUb0JvdHRvbSA9IHRoaXMuaXNTY3JvbGxlZFRvQm90dG9tKCk7CiAKQEAgLTI5OSw0ICsy
OTUsNCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlw
ZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9s
bGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsK
K1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuQ2FjaGVkUHJvcGVydGll
c0R1cmF0aW9uID0gMzAwMDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRl
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0ph
dmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzCmluZGV4IDdkNTExMmQzNjZkZWFh
NTMyMzJkOGNjNzA1OGIwYzAwNjJmMDk2ZmEuLmIwOTgyZmFhZjk2ZDYyMzk2MjFjZDU3ZTU4Yzlj
ODAxYTdiZDk4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFT
Y3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzCkBAIC0yMywxNiArMjMsNiBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICAvLyBG
SVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5k
IGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0K
LSAgICBjb25zb2xlLmFzc2VydCghV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRSdW50aW1lQ29tcGxl
dGlvblByb3ZpZGVyLl9pbnN0YW5jZSk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5h
Z2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5B
Y3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2NsZWFyTGFzdFByb3BlcnRpZXMsIHRoaXMp
OwotfTsKLQogT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYkluc3BlY3RvciwgImphdmFTY3JpcHRS
dW50aW1lQ29tcGxldGlvblByb3ZpZGVyIiwKIHsKICAgICBnZXQ6IGZ1bmN0aW9uKCkKQEAgLTQz
LDEyICszMywyMCBAQCBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViSW5zcGVjdG9yLCAiamF2YVNj
cmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIiLAogICAgIH0KIH0pOwogCi1XZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90eXBlID0gewotICAg
IGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJv
dmlkZXIsCitXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIg
PSBjbGFzcyBKYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciBleHRlbmRzIFdlYklu
c3BlY3Rvci5PYmplY3QKK3sKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBl
cigpOworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1
bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuX2luc3RhbmNlKTsKKworICAgICAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2NsZWFyTGFzdFBy
b3BlcnRpZXMsIHRoaXMpOworICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAogCi0gICAgY29tcGxl
dGlvbkNvbnRyb2xsZXJDb21wbGV0aW9uc05lZWRlZDogZnVuY3Rpb24oY29tcGxldGlvbkNvbnRy
b2xsZXIsIGRlZmF1bHRDb21wbGV0aW9ucywgYmFzZSwgcHJlZml4LCBzdWZmaXgsIGZvcmNlZCkK
KyAgICBjb21wbGV0aW9uQ29udHJvbGxlckNvbXBsZXRpb25zTmVlZGVkKGNvbXBsZXRpb25Db250
cm9sbGVyLCBkZWZhdWx0Q29tcGxldGlvbnMsIGJhc2UsIHByZWZpeCwgc3VmZml4LCBmb3JjZWQp
CiAgICAgewogICAgICAgICAvLyBEb24ndCBhbGxvdyBub24tZm9yY2VkIGVtcHR5IHByZWZpeCBj
b21wbGV0aW9ucyB1bmxlc3MgdGhlIGJhc2UgaXMgdGhhdCBzdGFydCBvZiBwcm9wZXJ0eSBhY2Nl
c3MuCiAgICAgICAgIGlmICghZm9yY2VkICYmICFwcmVmaXggJiYgIS9bLltdJC8udGVzdChiYXNl
KSkgewpAQCAtMjMxLDExICsyMjksMTEgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRSdW50aW1l
Q29tcGxldGlvblByb3ZpZGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgY29tcGxldGlv
bkNvbnRyb2xsZXIudXBkYXRlQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGltcGxpY2l0U3VmZml4
KTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2Ns
ZWFyTGFzdFByb3BlcnRpZXM6IGZ1bmN0aW9uKCkKKyAgICBfY2xlYXJMYXN0UHJvcGVydGllcygp
CiAgICAgewogICAgICAgICBpZiAodGhpcy5fY2xlYXJMYXN0UHJvcGVydGllc1RpbWVvdXQpIHsK
ICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckxhc3RQcm9wZXJ0aWVzVGltZW91
dCk7CkBAIC0yNDcsNSArMjQ1LDMgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRSdW50aW1lQ29t
cGxldGlvblByb3ZpZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbGFzdFByb3BlcnR5
TmFtZXMgPSBudWxsOwogICAgIH0KIH07Ci0KLVdlYkluc3BlY3Rvci5KYXZhU2NyaXB0UnVudGlt
ZUNvbXBsZXRpb25Qcm92aWRlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdlci5qcwppbmRl
eCAxYjM4NzQ5MzdlZTBiODA4NjczMjBjMzVkNmRmY2M5NjU3OWUyMDY0Li5kNmU0NGZjZGE4YTQy
ZDg3YTlkZTI2MDc5ODc1MDc2MjY2N2VhNWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xheWVyVHJl
ZU1hbmFnZXIuanMKQEAgLTIzLDMxICsyMywyNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyID0gZnVuY3Rp
b24oKSB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmpl
Y3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVj
dC5jYWxsKHRoaXMpOwotCi0gICAgdGhpcy5fc3VwcG9ydGVkID0gISF3aW5kb3cuTGF5ZXJUcmVl
QWdlbnQ7Ci0KLSAgICBpZiAodGhpcy5fc3VwcG9ydGVkKQotICAgICAgICBMYXllclRyZWVBZ2Vu
dC5lbmFibGUoKTsKLX07CitXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlciA9IGNsYXNzIExh
eWVyVHJlZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Cit7CisgICAgY29uc3Ry
dWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotV2ViSW5zcGVjdG9yLkxheWVyVHJl
ZU1hbmFnZXIuRXZlbnQgPSB7Ci0gICAgTGF5ZXJUcmVlRGlkQ2hhbmdlOiAibGF5ZXItdHJlZS1k
aWQtY2hhbmdlIgotfTsKKyAgICAgICAgdGhpcy5fc3VwcG9ydGVkID0gISF3aW5kb3cuTGF5ZXJU
cmVlQWdlbnQ7CiAKLVdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
LSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIsCisgICAgICAg
IGlmICh0aGlzLl9zdXBwb3J0ZWQpCisgICAgICAgICAgICBMYXllclRyZWVBZ2VudC5lbmFibGUo
KTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBzdXBwb3J0ZWQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRlZDsKLSAgICB9LAorICAgIH0KIAotICAgIGxh
eWVyVHJlZU11dGF0aW9uczogZnVuY3Rpb24ocHJldmlvdXNMYXllcnMsIG5ld0xheWVycykKKyAg
ICBsYXllclRyZWVNdXRhdGlvbnMocHJldmlvdXNMYXllcnMsIG5ld0xheWVycykKICAgICB7CiAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc3VwcG9ydGVkKTsKIApAQCAtMTIxLDkgKzExNiw5
IEBAIFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
fSk7CiAKICAgICAgICAgcmV0dXJuIHtwcmVzZXJ2ZWQsIGFkZGl0aW9ucywgcmVtb3ZhbHN9Owot
ICAgIH0sCisgICAgfQogCi0gICAgbGF5ZXJzRm9yTm9kZTogZnVuY3Rpb24obm9kZSwgY2FsbGJh
Y2spCisgICAgbGF5ZXJzRm9yTm9kZShub2RlLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHRoaXMuc3VwcG9ydGVkKTsKIApAQCAtMTM3LDIxICsxMzIsMjMgQEAgV2Vi
SW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdmFy
IGxheWVyRm9yTm9kZSA9IGZpcnN0TGF5ZXIubm9kZUlkID09PSBub2RlLmlkICYmICFmaXJzdExh
eWVyLmlzR2VuZXJhdGVkQ29udGVudCA/IGxheWVycy5zaGlmdCgpIDogbnVsbDsKICAgICAgICAg
ICAgIGNhbGxiYWNrKGxheWVyRm9yTm9kZSwgbGF5ZXJzKTsKICAgICAgICAgfSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcjogZnVuY3Rpb24obGF5ZXIs
IGNhbGxiYWNrKQorICAgIHJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKGxheWVyLCBjYWxsYmFj
aykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc3VwcG9ydGVkKTsKIAogICAg
ICAgICBMYXllclRyZWVBZ2VudC5yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihsYXllci5sYXll
cklkLCBmdW5jdGlvbihlcnJvciwgcmVhc29ucykgewogICAgICAgICAgICAgY2FsbGJhY2soZXJy
b3IgPyAwIDogcmVhc29ucyk7CiAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQogCi0gICAgbGF5
ZXJUcmVlRGlkQ2hhbmdlOiBmdW5jdGlvbigpCisgICAgbGF5ZXJUcmVlRGlkQ2hhbmdlKCkKICAg
ICB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5M
YXllclRyZWVNYW5hZ2VyLkV2ZW50LkxheWVyVHJlZURpZENoYW5nZSk7CiAgICAgfQogfTsKIAot
V2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYklu
c3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIu
RXZlbnQgPSB7CisgICAgTGF5ZXJUcmVlRGlkQ2hhbmdlOiAibGF5ZXItdHJlZS1kaWQtY2hhbmdl
IgorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0xvZ01hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCmluZGV4IDRhY2Q1YmFiODE2MzI5Y2RlMzky
OWJhYjIyZjc5MWQ3OTE1NmJlYTMuLmE2YWFiOWU4M2YxM2QwOWIxMTc2Y2NlNzE2MjQ4OWJhMTRm
ZWU2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0xvZ01hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcwpAQCAtMjMsMjggKzIzLDE4IEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkxv
Z01hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuTG9nTWFuYWdlciA9IGNsYXNzIExv
Z01hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENv
bnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1
cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgV2Vi
SW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50
Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlz
KTsKLX07Ci0KLVdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50ID0gewotICAgIFNlc3Npb25T
dGFydGVkOiAibG9nLW1hbmFnZXItc2Vzc2lvbi13YXMtc3RhcnRlZCIsCi0gICAgQ2xlYXJlZDog
ImxvZy1tYW5hZ2VyLWNsZWFyZWQiLAotICAgIE1lc3NhZ2VBZGRlZDogImxvZy1tYW5hZ2VyLW1l
c3NhZ2UtYWRkZWQiLAotICAgIEFjdGl2ZUxvZ0NsZWFyZWQ6ICJsb2ctbWFuYWdlci1jdXJyZW50
LWxvZy1jbGVhcmVkIiwKLSAgICBQcmV2aW91c01lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQ6ICJs
b2ctbWFuYWdlci1wcmV2aW91cy1tZXNzYWdlLXJlcGVhdC1jb3VudC11cGRhdGVkIgotfTsKKyAg
ICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi1XZWJJbnNwZWN0b3Iu
TG9nTWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5M
b2dNYW5hZ2VyLAorICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzLl9tYWlu
UmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAg
bWVzc2FnZVdhc0FkZGVkOiBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCB0ZXh0LCB0eXBlLCB1cmws
IGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJhY2UsIHJlcXVl
c3RJZCkKKyAgICBtZXNzYWdlV2FzQWRkZWQoc291cmNlLCBsZXZlbCwgdGV4dCwgdHlwZSwgdXJs
LCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1
ZXN0SWQpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU9ic2VydmVyLgogCkBAIC01NCw5ICs0NCw5IEBAIFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCB7bWVzc2FnZTogY29uc29sZU1l
c3NhZ2V9KTsKIAogICAgICAgICBjb25zb2xlLmFzc2VydCghY29uc29sZU1lc3NhZ2UuX2VsZW1l
bnQgfHwgIWNvbnNvbGVNZXNzYWdlLl9lbGVtZW50LnBhcmVudE5vZGUsICJUaGlzIGNvbnNvbGUg
bWVzc2FnZSBzaG91bGRuJ3QgYmUgYWRkZWQgdG8gYSB2aWV3LiBUbyBhZGQgaXQgeW91IG5lZWQg
dG8gdXNlIGNsb25lKCkuIik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBtZXNzYWdlc0NsZWFyZWQ6
IGZ1bmN0aW9uKCkKKyAgICBtZXNzYWdlc0NsZWFyZWQoKQogICAgIHsKICAgICAgICAgLy8gQ2Fs
bGVkIGZyb20gV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlci4KIApAQCAtNzAsMjMgKzYwLDIz
IEBAIFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuTG9nTWFuYWdlci5F
dmVudC5BY3RpdmVMb2dDbGVhcmVkKTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zaG91bGRD
bGVhck1lc3NhZ2VzOwogICAgICAgICB9LmJpbmQodGhpcyksIDApOwotICAgIH0sCisgICAgfQog
Ci0gICAgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZDogZnVuY3Rpb24oY291bnQpCisgICAgbWVz
c2FnZVJlcGVhdENvdW50VXBkYXRlZChjb3VudCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBm
cm9tIFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIuCiAKICAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuUHJldmlvdXNN
ZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkLCB7Y291bnR9KTsKLSAgICB9LAorICAgIH0KIAotICAg
IHJlcXVlc3RDbGVhck1lc3NhZ2VzOiBmdW5jdGlvbigpCisgICAgcmVxdWVzdENsZWFyTWVzc2Fn
ZXMoKQogICAgIHsKICAgICAgICAgQ29uc29sZUFnZW50LmNsZWFyTWVzc2FnZXMoKTsKLSAgICB9
LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCiAgICAg
ewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuRnJhbWUpOwogCkBAIC0xMDYsNCArOTYsMTAgQEAgV2ViSW5zcGVjdG9yLkxvZ01hbmFn
ZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYklu
c3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50ID0geworICAgIFNlc3Npb25TdGFydGVkOiAibG9nLW1h
bmFnZXItc2Vzc2lvbi13YXMtc3RhcnRlZCIsCisgICAgQ2xlYXJlZDogImxvZy1tYW5hZ2VyLWNs
ZWFyZWQiLAorICAgIE1lc3NhZ2VBZGRlZDogImxvZy1tYW5hZ2VyLW1lc3NhZ2UtYWRkZWQiLAor
ICAgIEFjdGl2ZUxvZ0NsZWFyZWQ6ICJsb2ctbWFuYWdlci1jdXJyZW50LWxvZy1jbGVhcmVkIiwK
KyAgICBQcmV2aW91c01lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQ6ICJsb2ctbWFuYWdlci1wcmV2
aW91cy1tZXNzYWdlLXJlcGVhdC1jb3VudC11cGRhdGVkIgorfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1Byb2JlTWFuYWdlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1Byb2Jl
TWFuYWdlci5qcwppbmRleCAwMDVkYmQ4ZmM5YmE3NTUyODljNjM5OTBmMjdhYzk3ZmU5Yzg3NjE0
Li5kNWU0M2QzMTg4NmU3NzczZmQ5ODZmN2M2Mjc5YTQ4YjUzNTQ5NGZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Qcm9iZU1hbmFn
ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvUHJvYmVNYW5hZ2VyLmpzCkBAIC0yNCw2MSArMjQsNTMgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlciA9IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rv
ci5Qcm9iZU1hbmFnZXIgPSBjbGFzcyBQcm9iZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3Iu
T2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5P
YmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9i
amVjdC5jYWxsKHRoaXMpOwotCi0gICAgLy8gVXNlZCB0byBkZXRlY3QgZGVsZXRlZCBwcm9iZSBh
Y3Rpb25zLgotICAgIHRoaXMuX2tub3duUHJvYmVJZGVudGlmaWVyc0ZvckJyZWFrcG9pbnQgPSBu
ZXcgTWFwOwotCi0gICAgLy8gTWFpbiBsb29rdXAgdGFibGVzIGZvciBwcm9iZXMgYW5kIHByb2Jl
IHNldHMuCi0gICAgdGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyID0gbmV3IE1hcDsKLSAgICB0aGlz
Ll9wcm9iZVNldHNCeUJyZWFrcG9pbnQgPSBuZXcgTWFwOworICAgIGNvbnN0cnVjdG9yKCkKKyAg
ICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVh
a3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVk
LCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNEaWRDaGFuZ2UsIHRoaXMuX2JyZWFr
cG9pbnRBY3Rpb25zQ2hhbmdlZCwgdGhpcyk7CisgICAgICAgIC8vIFVzZWQgdG8gZGV0ZWN0IGRl
bGV0ZWQgcHJvYmUgYWN0aW9ucy4KKyAgICAgICAgdGhpcy5fa25vd25Qcm9iZUlkZW50aWZpZXJz
Rm9yQnJlYWtwb2ludCA9IG5ldyBNYXA7CiAKLSAgICAvLyBTYXZlZCBicmVha3BvaW50cyBzaG91
bGQgbm90IGJlIHJlc3RvcmVkIG9uIHRoZSBmaXJzdCBldmVudCBsb29wIHR1cm4sIGJlY2F1c2Ug
aXQKLSAgICAvLyBtYWtlcyBtYW5hZ2VyIGluaXRpYWxpemF0aW9uIG9yZGVyIHZlcnkgZnJhZ2ls
ZS4gTm8gYnJlYWtwb2ludHMgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICBjb25zb2xlLmFzc2Vy
dCghV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50cy5sZW5ndGgsICJObyBi
cmVha3BvaW50cyBzaG91bGQgZXhpc3QgYmVmb3JlIGFsbCB0aGUgbWFuYWdlcnMgYXJlIGNvbnN0
cnVjdGVkLiIpOwotfQorICAgICAgICAvLyBNYWluIGxvb2t1cCB0YWJsZXMgZm9yIHByb2JlcyBh
bmQgcHJvYmUgc2V0cy4KKyAgICAgICAgdGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyID0gbmV3IE1h
cDsKKyAgICAgICAgdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50ID0gbmV3IE1hcDsKIAotV2Vi
SW5zcGVjdG9yLlByb2JlTWFuYWdlci5FdmVudCA9IHsKLSAgICBQcm9iZVNldEFkZGVkOiAicHJv
YmUtbWFuYWdlci1wcm9iZS1zZXQtYWRkZWQiLAotICAgIFByb2JlU2V0UmVtb3ZlZDogInByb2Jl
LW1hbmFnZXItcHJvYmUtc2V0LXJlbW92ZWQiLAotfTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIuRXZlbnQuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOwor
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50UmVtb3ZlZCwgdGhpcy5f
YnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNE
aWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRBY3Rpb25zQ2hhbmdlZCwgdGhpcyk7CiAKLVdlYklu
c3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJ
bnNwZWN0b3IuUHJvYmVNYW5hZ2VyLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVj
dC5wcm90b3R5cGUsCisgICAgICAgIC8vIFNhdmVkIGJyZWFrcG9pbnRzIHNob3VsZCBub3QgYmUg
cmVzdG9yZWQgb24gdGhlIGZpcnN0IGV2ZW50IGxvb3AgdHVybiwgYmVjYXVzZSBpdAorICAgICAg
ICAvLyBtYWtlcyBtYW5hZ2VyIGluaXRpYWxpemF0aW9uIG9yZGVyIHZlcnkgZnJhZ2lsZS4gTm8g
YnJlYWtwb2ludHMgc2hvdWxkIGJlIGF2YWlsYWJsZS4KKyAgICAgICAgY29uc29sZS5hc3NlcnQo
IVdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHMubGVuZ3RoLCAiTm8gYnJl
YWtwb2ludHMgc2hvdWxkIGV4aXN0IGJlZm9yZSBhbGwgdGhlIG1hbmFnZXJzIGFyZSBjb25zdHJ1
Y3RlZC4iKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBwcm9iZVNldHMoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9wcm9iZVNldHNCeUJyZWFrcG9pbnQudmFs
dWVzKCldOwotICAgIH0sCisgICAgfQogCi0gICAgcHJvYmVGb3JJZGVudGlmaWVyOiBmdW5jdGlv
bihpZGVudGlmaWVyKQorICAgIHByb2JlRm9ySWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5nZXQoaWRlbnRpZmllcik7
Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90ZWN0ZWQgKGNhbGxlZCBieSBXZWJJbnNwZWN0
b3IuRGVidWdnZXJPYnNlcnZlcikKIAotICAgIGRpZFNhbXBsZVByb2JlOiBmdW5jdGlvbihzYW1w
bGUpCisgICAgZGlkU2FtcGxlUHJvYmUoc2FtcGxlKQogICAgIHsKICAgICAgICAgY29uc29sZS5h
c3NlcnQodGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyLmhhcyhzYW1wbGUucHJvYmVJZCksICJVbmtu
b3duIHByb2JlIGlkZW50aWZpZXIgc3BlY2lmaWVkIGZvciBzYW1wbGU6ICIsIHNhbXBsZSk7CiAg
ICAgICAgIHZhciBwcm9iZSA9IHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5nZXQoc2FtcGxlLnBy
b2JlSWQpOwogICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBXZWJJbnNwZWN0b3IudGltZWxpbmVN
YW5hZ2VyLmNvbXB1dGVFbGFwc2VkVGltZShzYW1wbGUudGltZXN0YW1wKTsKICAgICAgICAgcHJv
YmUuYWRkU2FtcGxlKG5ldyBXZWJJbnNwZWN0b3IuUHJvYmVTYW1wbGUoc2FtcGxlLnNhbXBsZUlk
LCBzYW1wbGUuYmF0Y2hJZCwgZWxhcHNlZFRpbWUsIHNhbXBsZS5wYXlsb2FkKSk7Ci0gICAgfSwK
KyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfYnJlYWtwb2ludEFkZGVkOiBmdW5jdGlv
bihicmVha3BvaW50T3JFdmVudCkKKyAgICBfYnJlYWtwb2ludEFkZGVkKGJyZWFrcG9pbnRPckV2
ZW50KQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQ7CiAgICAgICAgIGlmIChicmVha3Bv
aW50T3JFdmVudCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50KQpAQCAtOTQsMTgg
Kzg2LDE4IEBAIFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JCcmVha3BvaW50LnNldChicmVha3BvaW50
LCBuZXcgU2V0KTsKIAogICAgICAgICB0aGlzLl9icmVha3BvaW50QWN0aW9uc0NoYW5nZWQoYnJl
YWtwb2ludCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZChldmVudCkKICAgICB7CiAgICAgICAg
IHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YS5icmVha3BvaW50OwogICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JCcmVha3BvaW50LmhhcyhicmVh
a3BvaW50KSk7CiAKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFjdGlvbnNDaGFuZ2VkKGJyZWFr
cG9pbnQpOwogICAgICAgICB0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JCcmVha3BvaW50
LmRlbGV0ZShicmVha3BvaW50KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9icmVha3BvaW50QWN0
aW9uc0NoYW5nZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRPckV2ZW50KQorICAgIF9icmVha3BvaW50
QWN0aW9uc0NoYW5nZWQoYnJlYWtwb2ludE9yRXZlbnQpCiAgICAgewogICAgICAgICB2YXIgYnJl
YWtwb2ludDsKICAgICAgICAgaWYgKGJyZWFrcG9pbnRPckV2ZW50IGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQpCkBAIC0xNjQsOSArMTU2LDkgQEAgV2ViSW5zcGVjdG9yLlByb2Jl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5FdmVudC5Qcm9iZVNldFJlbW92
ZWQsIHtwcm9iZVNldH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9LCB0aGlzKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9wcm9iZVNldEZvckJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9p
bnQpCisgICAgX3Byb2JlU2V0Rm9yQnJlYWtwb2ludChicmVha3BvaW50KQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2ludC5oYXMoYnJlYWtwb2ludCkpCiAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50LmdldChicmVha3BvaW50
KTsKQEAgLTE3NywzICsxNjksOCBAQCBXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIG5ld1Byb2JlU2V0OwogICAgIH0KIH07CisKK1dlYkluc3Bl
Y3Rvci5Qcm9iZU1hbmFnZXIuRXZlbnQgPSB7CisgICAgUHJvYmVTZXRBZGRlZDogInByb2JlLW1h
bmFnZXItcHJvYmUtc2V0LWFkZGVkIiwKKyAgICBQcm9iZVNldFJlbW92ZWQ6ICJwcm9iZS1tYW5h
Z2VyLXByb2JlLXNldC1yZW1vdmVkIiwKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvUmVwbGF5TWFuYWdlci5q
cwppbmRleCA0ODA0YWUyMjMxOTY5MDMwNGM4Y2VjMmYzNGFkNzM5ODFiOTc3OWRlLi4xYmIwYmE1
MjhlMjgxZWEzNzE3MTE3NTRjOTJmYWYxMGQyODNkZDYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1JlcGxh
eU1hbmFnZXIuanMKQEAgLTI0LDk4ICsyNCw1OCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyID0gZnVuY3Rpb24o
KQorV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIgPSBjbGFzcyBSZXBsYXlNYW5hZ2VyIGV4dGVu
ZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8g
YSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8v
IFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX3Nlc3Npb25TdGF0
ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5JbmFjdGl2ZTsKLSAg
ICB0aGlzLl9zZWdtZW50U3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50
U3RhdGUuVW5sb2FkZWQ7Ci0KLSAgICB0aGlzLl9hY3RpdmVTZXNzaW9uSWRlbnRpZmllciA9IG51
bGw7Ci0gICAgdGhpcy5fYWN0aXZlU2VnbWVudElkZW50aWZpZXIgPSBudWxsOwotICAgIHRoaXMu
X2N1cnJlbnRQb3NpdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuUmVwbGF5UG9zaXRpb24oMCwgMCk7
Ci0gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIFRoZXNlIGhvbGQgYWN0
dWFsIGluc3RhbmNlcyBvZiBzZXNzaW9ucyBhbmQgc2VnbWVudHMuCi0gICAgdGhpcy5fc2Vzc2lv
bnMgPSBuZXcgTWFwOwotICAgIHRoaXMuX3NlZ21lbnRzID0gbmV3IE1hcDsKLSAgICAvLyBUaGVz
ZSBob2xkIHByb21pc2VzIHRoYXQgcmVzb2x2ZSB3aGVuIHRoZSBpbnN0YW5jZSBkYXRhIGlzIHJl
Y2lldmVkLgotICAgIHRoaXMuX3Nlc3Npb25Qcm9taXNlcyA9IG5ldyBNYXA7Ci0gICAgdGhpcy5f
c2VnbWVudFByb21pc2VzID0gbmV3IE1hcDsKLQotICAgIC8vIFBsYXliYWNrIHNwZWVkIGlzIHNw
ZWNpZmllZCBpbiByZXBsYXlUb1Bvc2l0aW9uIGNvbW1hbmRzLCBhbmQgcGVyc2lzdHMKLSAgICAv
LyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwbGF5YmFjayBjb21tYW5kIHVudGlsIGFub3RoZXIg
cGxheWJhY2sgYmVnaW5zLgotICAgIHRoaXMuX3BsYXliYWNrU3BlZWQgPSBXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5QbGF5YmFja1NwZWVkLlJlYWxUaW1lOwotCi0gICAgaWYgKCF3aW5kb3cu
UmVwbGF5QWdlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7
Ci0KLSAgICB0aGlzLl9pbml0aWFsaXphdGlvblByb21pc2UgPSBSZXBsYXlBZ2VudC5jdXJyZW50
UmVwbGF5U3RhdGUoKQotICAgICAgICAudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7Ci0gICAgICAg
ICAgICBjb25zb2xlLmFzc2VydChwYXlsb2FkLnNlc3Npb25TdGF0ZSBpbiBXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUsICJVbmtub3duIHNlc3Npb24gc3RhdGU6ICIgKyBw
YXlsb2FkLnNlc3Npb25TdGF0ZSk7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXlsb2Fk
LnNlZ21lbnRTdGF0ZSBpbiBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUs
ICJVbmtub3duIHNlZ21lbnQgc3RhdGU6ICIgKyBwYXlsb2FkLnNlZ21lbnRTdGF0ZSk7Ci0KLSAg
ICAgICAgICAgIGluc3RhbmNlLl9hY3RpdmVTZXNzaW9uSWRlbnRpZmllciA9IHBheWxvYWQuc2Vz
c2lvbklkZW50aWZpZXI7Ci0gICAgICAgICAgICBpbnN0YW5jZS5fYWN0aXZlU2VnbWVudElkZW50
aWZpZXIgPSBwYXlsb2FkLnNlZ21lbnRJZGVudGlmaWVyOwotICAgICAgICAgICAgaW5zdGFuY2Uu
X3Nlc3Npb25TdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZVtw
YXlsb2FkLnNlc3Npb25TdGF0ZV07Ci0gICAgICAgICAgICBpbnN0YW5jZS5fc2VnbWVudFN0YXRl
ID0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlW3BheWxvYWQuc2VnbWVu
dFN0YXRlXTsKLSAgICAgICAgICAgIGluc3RhbmNlLl9jdXJyZW50UG9zaXRpb24gPSBwYXlsb2Fk
LnJlcGxheVBvc2l0aW9uOwotCi0gICAgICAgICAgICBpbnN0YW5jZS5faW5pdGlhbGl6ZWQgPSB0
cnVlOwotICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIFJl
cGxheUFnZW50LmdldEF2YWlsYWJsZVNlc3Npb25zKCk7Ci0gICAgICAgIH0pLnRoZW4oZnVuY3Rp
b24ocGF5bG9hZCkgewotICAgICAgICAgICAgZm9yICh2YXIgc2Vzc2lvbklkIG9mIHBheWxvYWQu
aWRzKQotICAgICAgICAgICAgICAgIGluc3RhbmNlLnNlc3Npb25DcmVhdGVkKHNlc3Npb25JZCk7
Ci0gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAgICAgICBjb25zb2xl
LmVycm9yKCJSZXBsYXlNYW5hZ2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZDogIiwgZXJyb3IpOwot
ICAgICAgICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgICAgIH0pOwotfTsKKyAgICBjb25zdHJ1Y3Rv
cigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi1XZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5FdmVudCA9IHsKLSAgICBDYXB0dXJlU3RhcnRlZDogInJlcGxheS1tYW5hZ2VyLWNhcHR1cmUt
c3RhcnRlZCIsCi0gICAgQ2FwdHVyZVN0b3BwZWQ6ICJyZXBsYXktbWFuYWdlci1jYXB0dXJlLXN0
b3BwZWQiLAorICAgICAgICB0aGlzLl9zZXNzaW9uU3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5TZXNzaW9uU3RhdGUuSW5hY3RpdmU7CisgICAgICAgIHRoaXMuX3NlZ21lbnRTdGF0
ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZS5VbmxvYWRlZDsKIAot
ICAgIFBsYXliYWNrU3RhcnRlZDogInJlcGxheS1tYW5hZ2VyLXBsYXliYWNrLXN0YXJ0ZWQiLAot
ICAgIFBsYXliYWNrUGF1c2VkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stcGF1c2VkIiwKLSAg
ICBQbGF5YmFja0ZpbmlzaGVkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stZmluaXNoZWQiLAot
ICAgIFBsYXliYWNrUG9zaXRpb25DaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItcGxheS1iYWNrLXBv
c2l0aW9uLWNoYW5nZWQiLAorICAgICAgICB0aGlzLl9hY3RpdmVTZXNzaW9uSWRlbnRpZmllciA9
IG51bGw7CisgICAgICAgIHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fY3VycmVudFBvc2l0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5SZXBsYXlQb3Np
dGlvbigwLCAwKTsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAotICAgIEFj
dGl2ZVNlc3Npb25DaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItYWN0aXZlLXNlc3Npb24tY2hhbmdl
ZCIsCi0gICAgQWN0aXZlU2VnbWVudENoYW5nZWQ6ICJyZXBsYXktbWFuYWdlci1hY3RpdmUtc2Vn
bWVudC1jaGFuZ2VkIiwKKyAgICAgICAgLy8gVGhlc2UgaG9sZCBhY3R1YWwgaW5zdGFuY2VzIG9m
IHNlc3Npb25zIGFuZCBzZWdtZW50cy4KKyAgICAgICAgdGhpcy5fc2Vzc2lvbnMgPSBuZXcgTWFw
OworICAgICAgICB0aGlzLl9zZWdtZW50cyA9IG5ldyBNYXA7CisgICAgICAgIC8vIFRoZXNlIGhv
bGQgcHJvbWlzZXMgdGhhdCByZXNvbHZlIHdoZW4gdGhlIGluc3RhbmNlIGRhdGEgaXMgcmVjaWV2
ZWQuCisgICAgICAgIHRoaXMuX3Nlc3Npb25Qcm9taXNlcyA9IG5ldyBNYXA7CisgICAgICAgIHRo
aXMuX3NlZ21lbnRQcm9taXNlcyA9IG5ldyBNYXA7CiAKLSAgICBTZXNzaW9uU2VnbWVudEFkZGVk
OiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1zZWdtZW50LWFkZGVkIiwKLSAgICBTZXNzaW9uU2Vn
bWVudFJlbW92ZWQ6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9uLXNlZ21lbnQtcmVtb3ZlZCIsCisg
ICAgICAgIC8vIFBsYXliYWNrIHNwZWVkIGlzIHNwZWNpZmllZCBpbiByZXBsYXlUb1Bvc2l0aW9u
IGNvbW1hbmRzLCBhbmQgcGVyc2lzdHMKKyAgICAgICAgLy8gZm9yIHRoZSBkdXJhdGlvbiBvZiB0
aGUgcGxheWJhY2sgY29tbWFuZCB1bnRpbCBhbm90aGVyIHBsYXliYWNrIGJlZ2lucy4KKyAgICAg
ICAgdGhpcy5fcGxheWJhY2tTcGVlZCA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlBsYXli
YWNrU3BlZWQuUmVhbFRpbWU7CiAKLSAgICBTZXNzaW9uQWRkZWQ6ICJyZXBsYXktbWFuYWdlci1z
ZXNzaW9uLWFkZGVkIiwKLSAgICBTZXNzaW9uUmVtb3ZlZDogInJlcGxheS1tYW5hZ2VyLXNlc3Np
b24tcmVtb3ZlZCIsCi19OworICAgICAgICBpZiAoIXdpbmRvdy5SZXBsYXlBZ2VudCkKKyAgICAg
ICAgICAgIHJldHVybjsKIAotV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRl
ID0gewotICAgIENhcHR1cmluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtY2FwdHVy
aW5nIiwKLSAgICBJbmFjdGl2ZTogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtaW5hY3Rp
dmUiLAotICAgIFJlcGxheWluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtcmVwbGF5
aW5nIiwKLX07CisgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7CiAKLVdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZSA9IHsKLSAgICBBcHBlbmRpbmc6ICJyZXBsYXktbWFu
YWdlci1zZWdtZW50LXN0YXRlLWFwcGVuZGluZyIsCi0gICAgVW5sb2FkZWQ6ICJyZXBsYXktbWFu
YWdlci1zZWdtZW50LXN0YXRlLXVubG9hZGVkIiwKLSAgICBMb2FkZWQ6ICJyZXBsYXktbWFuYWdl
ci1zZWdtZW50LXN0YXRlLWxvYWRlZCIsCi0gICAgRGlzcGF0Y2hpbmc6ICJyZXBsYXktbWFuYWdl
ci1zZWdtZW50LXN0YXRlLWRpc3BhdGNoaW5nIiwKLX07CisgICAgICAgIHRoaXMuX2luaXRpYWxp
emF0aW9uUHJvbWlzZSA9IFJlcGxheUFnZW50LmN1cnJlbnRSZXBsYXlTdGF0ZSgpCisgICAgICAg
ICAgICAudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5h
c3NlcnQocGF5bG9hZC5zZXNzaW9uU3RhdGUgaW4gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIu
U2Vzc2lvblN0YXRlLCAiVW5rbm93biBzZXNzaW9uIHN0YXRlOiAiICsgcGF5bG9hZC5zZXNzaW9u
U3RhdGUpOworICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBheWxvYWQuc2VnbWVudFN0
YXRlIGluIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZSwgIlVua25vd24g
c2VnbWVudCBzdGF0ZTogIiArIHBheWxvYWQuc2VnbWVudFN0YXRlKTsKIAotV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIuUGxheWJhY2tTcGVlZCA9IHsKLSAgICBSZWFsVGltZTogInJlcGxheS1t
YW5hZ2VyLXBsYXliYWNrLXNwZWVkLXJlYWwtdGltZSIsCi0gICAgRmFzdEZvcndhcmQ6ICJyZXBs
YXktbWFuYWdlci1wbGF5YmFjay1zcGVlZC1mYXN0LWZvcndhcmQiLAotfTsKKyAgICAgICAgICAg
ICAgICBpbnN0YW5jZS5fYWN0aXZlU2Vzc2lvbklkZW50aWZpZXIgPSBwYXlsb2FkLnNlc3Npb25J
ZGVudGlmaWVyOworICAgICAgICAgICAgICAgIGluc3RhbmNlLl9hY3RpdmVTZWdtZW50SWRlbnRp
ZmllciA9IHBheWxvYWQuc2VnbWVudElkZW50aWZpZXI7CisgICAgICAgICAgICAgICAgaW5zdGFu
Y2UuX3Nlc3Npb25TdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0
ZVtwYXlsb2FkLnNlc3Npb25TdGF0ZV07CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuX3NlZ21l
bnRTdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZVtwYXlsb2Fk
LnNlZ21lbnRTdGF0ZV07CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2N1cnJlbnRQb3NpdGlv
biA9IHBheWxvYWQucmVwbGF5UG9zaXRpb247CiAKLVdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFn
ZXIsCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKyAgICAg
ICAgICAgICAgICBpbnN0YW5jZS5faW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgfSku
dGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVwbGF5QWdlbnQuZ2V0
QXZhaWxhYmxlU2Vzc2lvbnMoKTsKKyAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocGF5bG9h
ZCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHNlc3Npb25JZCBvZiBwYXlsb2FkLmlkcykK
KyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2Vzc2lvbkNyZWF0ZWQoc2Vzc2lvbklkKTsK
KyAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUmVwbGF5TWFuYWdlciBpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICIsIGVy
cm9yKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAgIH0pOworICAg
IH0KIAogICAgIC8vIFB1YmxpYwogCkBAIC0xMjUsNTIgKzg1LDUyIEBAIFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRoaXMuX2luaXRpYWxpemVkKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25TdGF0ZTsK
LSAgICB9LAorICAgIH0KIAogICAgIGdldCBzZWdtZW50U3RhdGUoKQogICAgIHsKICAgICAgICAg
Y29uc29sZS5hc3NlcnQodGhpcy5faW5pdGlhbGl6ZWQpOwogICAgICAgICByZXR1cm4gdGhpcy5f
c2VnbWVudFN0YXRlOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGFjdGl2ZVNlc3Npb25JZGVu
dGlmaWVyKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVk
KTsKICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNlc3Npb25JZGVudGlmaWVyOwotICAgIH0s
CisgICAgfQogCiAgICAgZ2V0IGFjdGl2ZVNlZ21lbnRJZGVudGlmaWVyKCkKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsKICAgICAgICAgcmV0dXJuIHRo
aXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBs
YXliYWNrU3BlZWQoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faW5pdGlh
bGl6ZWQpOwogICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tTcGVlZDsKLSAgICB9LAorICAg
IH0KIAogICAgIHNldCBwbGF5YmFja1NwZWVkKHZhbHVlKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5faW5pdGlhbGl6ZWQpOwogICAgICAgICB0aGlzLl9wbGF5YmFja1NwZWVk
ID0gdmFsdWU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgY3VycmVudFBvc2l0aW9uKCkKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsKICAgICAgICAg
cmV0dXJuIHRoaXMuX2N1cnJlbnRQb3NpdGlvbjsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFRo
ZXNlIHJldHVybiBwcm9taXNlcyBldmVuIGlmIHRoZSByZWxldmFudCBpbnN0YW5jZSBpcyBhbHJl
YWR5IGNyZWF0ZWQuCi0gICAgd2FpdFVudGlsSW5pdGlhbGl6ZWQ6IGZ1bmN0aW9uKCkgIC8vIC0t
PiAoKQorICAgIHdhaXRVbnRpbEluaXRpYWxpemVkKCkgIC8vIC0tPiAoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemF0aW9uUHJvbWlzZTsKLSAgICB9LAorICAgIH0KIAog
ICAgIC8vIFJldHVybiBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHNlc3Npb24sIGlmIGl0
IGV4aXN0cy4KLSAgICBnZXRTZXNzaW9uOiBmdW5jdGlvbihzZXNzaW9uSWQpIC8vIC0tPiAoV2Vi
SW5zcGVjdG9yLlJlcGxheVNlc3Npb24pCisgICAgZ2V0U2Vzc2lvbihzZXNzaW9uSWQpIC8vIC0t
PiAoV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24pCiAgICAgewogICAgICAgICBpZiAodGhpcy5f
c2Vzc2lvblByb21pc2VzLmhhcyhzZXNzaW9uSWQpKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3Nlc3Npb25Qcm9taXNlcy5nZXQoc2Vzc2lvbklkKTsKQEAgLTE4MiwxMCArMTQyLDEwIEBAIFdl
Ykluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9z
ZXNzaW9uUHJvbWlzZXMuc2V0KHNlc3Npb25JZCwgbmV3UHJvbWlzZSk7CiAgICAgICAgIHJldHVy
biBuZXdQcm9taXNlOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUmV0dXJuIGEgcHJvbWlzZSB0
aGF0IHJlc29sdmVzIHRvIGEgc2Vzc2lvbiBzZWdtZW50LCBpZiBpdCBleGlzdHMuCi0gICAgZ2V0
U2VnbWVudDogZnVuY3Rpb24oc2VnbWVudElkKSAgLy8gLS0+IChXZWJJbnNwZWN0b3IuUmVwbGF5
U2Vzc2lvblNlZ21lbnQpCisgICAgZ2V0U2VnbWVudChzZWdtZW50SWQpICAvLyAtLT4gKFdlYklu
c3BlY3Rvci5SZXBsYXlTZXNzaW9uU2VnbWVudCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9z
ZWdtZW50UHJvbWlzZXMuaGFzKHNlZ21lbnRJZCkpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
c2VnbWVudFByb21pc2VzLmdldChzZWdtZW50SWQpOwpAQCAtMTk3LDExICsxNTcsMTEgQEAgV2Vi
SW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX3Nl
Z21lbnRQcm9taXNlcy5zZXQoc2VnbWVudElkLCBuZXdQcm9taXNlKTsKICAgICAgICAgcmV0dXJu
IG5ld1Byb21pc2U7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBTd2l0Y2ggdG8gdGhlIHNwZWNp
ZmllZCBzZXNzaW9uLgogICAgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hl
biB0aGUgc3dpdGNoIGNvbXBsZXRlcy4KLSAgICBzd2l0Y2hTZXNzaW9uOiBmdW5jdGlvbihzZXNz
aW9uSWQpIC8vIC0tPiAoKQorICAgIHN3aXRjaFNlc3Npb24oc2Vzc2lvbklkKSAvLyAtLT4gKCkK
ICAgICB7CiAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpczsKICAgICAgICAgdmFyIHJlc3VsdCA9
IHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKTsKQEAgLTIzMSwxMSArMTkxLDExIEBAIFdlYklu
c3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBTdGFydCBjYXB0
dXJpbmcgaW50byB0aGUgY3VycmVudCBzZXNzaW9uIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICAg
Ly8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGNhcHR1cmluZyBiZWdpbnMu
Ci0gICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0aW9uKCkgLy8gLS0+ICgpCisgICAgc3RhcnRDYXB0
dXJpbmcoKSAvLyAtLT4gKCkKICAgICB7CiAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpczsKICAg
ICAgICAgdmFyIHJlc3VsdCA9IHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKTsKQEAgLTI2Miwx
MSArMjIyLDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKKyAgICB9CiAK
ICAgICAvLyBTdG9wIGNhcHR1cmluZyBpbnRvIHRoZSBjdXJyZW50IHNlc3Npb24gYXMgc29vbiBh
cyBwb3NzaWJsZS4KICAgICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4g
Y2FwdHVyaW5nIGVuZHMuCi0gICAgc3RvcENhcHR1cmluZzogZnVuY3Rpb24oKSAvLyAtLT4gKCkK
KyAgICBzdG9wQ2FwdHVyaW5nKCkgLy8gLS0+ICgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydCh0aGlzLnNlc3Npb25TdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vz
c2lvblN0YXRlLkNhcHR1cmluZywgIkNhbm5vdCBzdG9wIGNhcHR1cmluZyB1bmxlc3MgY2FwdHVy
ZSBpcyBhY3RpdmUuIik7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2VnbWVudFN0YXRl
ID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUuQXBwZW5kaW5nKTsK
QEAgLTI3NiwxMSArMjM2LDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gc3RvcCBjYXB0
dXJpbmc6ICIsIGVycm9yKTsKICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAg
ICAgIH0pOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUGF1c2UgcGxheWJhY2sgYXMgc29vbiBh
cyBwb3NzaWJsZS4KICAgICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4g
cGxheWJhY2sgaXMgcGF1c2VkLgotICAgIHBhdXNlUGxheWJhY2s6IGZ1bmN0aW9uKCkgLy8gLS0+
ICgpCisgICAgcGF1c2VQbGF5YmFjaygpIC8vIC0tPiAoKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5zZXNzaW9uU3RhdGUgIT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2Vy
LlNlc3Npb25TdGF0ZS5DYXB0dXJpbmcsICJDYW5ub3QgcGF1c2UgcGxheWJhY2sgd2hpbGUgY2Fw
dHVyaW5nLiIpOwogCkBAIC0zMDQsMTEgKzI2NCwxMSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUGF1c2UgcGxheWJhY2sgYW5kIHVubG9hZCB0
aGUgY3VycmVudCBzZXNzaW9uIHNlZ21lbnQgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICAvLyBS
ZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGN1cnJlbnQgc2VnbWVudCBp
cyB1bmxvYWRlZC4KLSAgICBjYW5jZWxQbGF5YmFjazogZnVuY3Rpb24oKSAvLyAtLT4gKCkKKyAg
ICBjYW5jZWxQbGF5YmFjaygpIC8vIC0tPiAoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3Nl
cnQodGhpcy5zZXNzaW9uU3RhdGUgIT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Np
b25TdGF0ZS5DYXB0dXJpbmcsICJDYW5ub3Qgc3RvcCBwbGF5YmFjayB3aGlsZSBjYXB0dXJpbmcu
Iik7CiAKQEAgLTMyOSwxMSArMjg5LDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICAvLyBSZXBsYXkgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBh
cyBzb29uIGFzIHBvc3NpYmxlIHVzaW5nIHRoZSBjdXJyZW50IHJlcGxheSBzcGVlZC4KICAgICAv
LyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gcmVwbGF5IGhhcyBiZWd1biAo
Tk9UIHdoZW4gdGhlIHBvc2l0aW9uIGlzIHJlYWNoZWQpLgotICAgIHJlcGxheVRvUG9zaXRpb246
IGZ1bmN0aW9uKHJlcGxheVBvc2l0aW9uKSAvLyAtLT4gKCkKKyAgICByZXBsYXlUb1Bvc2l0aW9u
KHJlcGxheVBvc2l0aW9uKSAvLyAtLT4gKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHJlcGxheVBvc2l0aW9uIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlcGxheVBvc2l0aW9uLCAi
Q2Fubm90IHJlcGxheSB0byBhIHBvc2l0aW9uIHdoaWxlIGNhcHR1cmluZy4iKTsKIApAQCAtMzU5
LDExICszMTksMTEgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAorICAgIH0K
IAogICAgIC8vIFJlcGxheSB0byB0aGUgZW5kIG9mIHRoZSBzZXNzaW9uIGFzIHNvb24gYXMgcG9z
c2libGUgdXNpbmcgdGhlIGN1cnJlbnQgcmVwbGF5IHNwZWVkLgogICAgIC8vIFJldHVybnMgYSBw
cm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiByZXBsYXkgaGFzIGJlZ3VuIChOT1Qgd2hlbiB0aGUg
ZW5kIGlzIHJlYWNoZWQpLgotICAgIHJlcGxheVRvQ29tcGxldGlvbjogZnVuY3Rpb24oKSAvLyAt
LT4gKCkKKyAgICByZXBsYXlUb0NvbXBsZXRpb24oKSAvLyAtLT4gKCkKICAgICB7CiAgICAgICAg
IHZhciBtYW5hZ2VyID0gdGhpczsKICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMud2FpdFVudGls
SW5pdGlhbGl6ZWQoKTsKQEAgLTM5MCw3ICszNTAsNyBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkIChjYWxsZWQgYnkgUmVwbGF5
T2JzZXJ2ZXIpCiAKQEAgLTM5OCw3ICszNTgsNyBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgLy8gYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFNvLCBl
YWNoIGZ1bmN0aW9uIGJvZHkgaXMgcHJlcGVuZGVkIHdpdGggYSByZXRyeSBndWFyZC4KICAgICAv
LyBUaGlzIG1ha2VzIGNhbGwgc2l0ZXMgc2ltcGxlciBhbmQgYXZvaWRzIGFuIGV4dHJhIGV2ZW50
IGxvb3AgdHVybiBpbiB0aGUgY29tbW9uIGNhc2UuCiAKLSAgICBjYXB0dXJlU3RhcnRlZDogZnVu
Y3Rpb24oKQorICAgIGNhcHR1cmVTdGFydGVkKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5f
aW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXpl
ZCgpLnRoZW4odGhpcy5jYXB0dXJlU3RhcnRlZC5iaW5kKHRoaXMpKTsKQEAgLTQwNiw5ICszNjYs
OSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuX2NoYW5nZVNlc3Npb25TdGF0ZShXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9u
U3RhdGUuQ2FwdHVyaW5nKTsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5DYXB0dXJlU3RhcnRlZCk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBjYXB0dXJlU3RvcHBlZDogZnVuY3Rpb24oKQorICAgIGNhcHR1cmVT
dG9wcGVkKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAg
ICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5jYXB0dXJl
U3RvcHBlZC5iaW5kKHRoaXMpKTsKQEAgLTQyMiw5ICszODIsOSBAQCBXZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5DYXB0
dXJlU3RvcHBlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwbGF5YmFja1N0YXJ0ZWQ6IGZ1bmN0
aW9uKCkKKyAgICBwbGF5YmFja1N0YXJ0ZWQoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9p
bml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVk
KCkudGhlbih0aGlzLnBsYXliYWNrU3RhcnRlZC5iaW5kKHRoaXMpKTsKQEAgLTQzNSw5ICszOTUs
OSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuX2NoYW5nZVNlZ21lbnRTdGF0ZShXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50
U3RhdGUuRGlzcGF0Y2hpbmcpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlBsYXliYWNrU3RhcnRlZCk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBwbGF5YmFja0hpdFBvc2l0aW9uOiBmdW5jdGlvbihyZXBsYXlQ
b3NpdGlvbiwgdGltZXN0YW1wKQorICAgIHBsYXliYWNrSGl0UG9zaXRpb24ocmVwbGF5UG9zaXRp
b24sIHRpbWVzdGFtcCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5w
bGF5YmFja0hpdFBvc2l0aW9uLmJpbmQodGhpcywgcmVwbGF5UG9zaXRpb24sIHRpbWVzdGFtcCkp
OwpAQCAtNDQ4LDkgKzQwOCw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKIAogICAgICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSByZXBsYXlQb3NpdGlvbjsK
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxh
eU1hbmFnZXIuRXZlbnQuUGxheWJhY2tQb3NpdGlvbkNoYW5nZWQpOwotICAgIH0sCisgICAgfQog
Ci0gICAgcGxheWJhY2tQYXVzZWQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIHBsYXliYWNrUGF1
c2VkKHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAg
ICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCkudGhlbih0aGlzLnBs
YXliYWNrUGF1c2VkLmJpbmQodGhpcywgcG9zaXRpb24pKTsKQEAgLTQ2NCw5ICs0MjQsOSBAQCBX
ZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFu
YWdlci5FdmVudC5QbGF5YmFja1BhdXNlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwbGF5YmFj
a0ZpbmlzaGVkOiBmdW5jdGlvbigpCisgICAgcGxheWJhY2tGaW5pc2hlZCgpCiAgICAgewogICAg
ICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMud2Fp
dFVudGlsSW5pdGlhbGl6ZWQoKS50aGVuKHRoaXMucGxheWJhY2tGaW5pc2hlZC5iaW5kKHRoaXMp
KTsKQEAgLTQ4MCw5ICs0NDAsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja0ZpbmlzaGVkKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIHNlc3Npb25DcmVhdGVkOiBmdW5jdGlvbihzZXNzaW9uSWQpCisg
ICAgc2Vzc2lvbkNyZWF0ZWQoc2Vzc2lvbklkKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9p
bml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVk
KCkudGhlbih0aGlzLnNlc3Npb25DcmVhdGVkLmJpbmQodGhpcywgc2Vzc2lvbklkKSk7CkBAIC00
OTgsOSArNDU4LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuU2Vzc2lvbkFkZGVkLCB7c2Vzc2lvbklk
fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZXNzaW9uTW9kaWZpZWQ6IGZ1bmN0aW9uKHNlc3Np
b25JZCkKKyAgICBzZXNzaW9uTW9kaWZpZWQoc2Vzc2lvbklkKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbElu
aXRpYWxpemVkKCkudGhlbih0aGlzLnNlc3Npb25Nb2RpZmllZC5iaW5kKHRoaXMsIHNlc3Npb25J
ZCkpOwpAQCAtNTA4LDkgKzQ2OCw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudGhlbihmdW5jdGlv
bihzZXNzaW9uKSB7CiAgICAgICAgICAgICBzZXNzaW9uLnNlZ21lbnRzQ2hhbmdlZCgpOwogICAg
ICAgICB9KTsKLSAgICB9LAorICAgIH0KIAotICAgIHNlc3Npb25SZW1vdmVkOiBmdW5jdGlvbihz
ZXNzaW9uSWQpCisgICAgc2Vzc2lvblJlbW92ZWQoc2Vzc2lvbklkKQogICAgIHsKICAgICAgICAg
aWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRp
bEluaXRpYWxpemVkKCkudGhlbih0aGlzLnNlc3Npb25SZW1vdmVkLmJpbmQodGhpcywgc2Vzc2lv
bklkKSk7CkBAIC01MzEsOSArNDkxLDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlbW92ZWRTZXNzaW9u
KTsKICAgICAgICAgICAgICAgICBtYW5hZ2VyLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5TZXNzaW9uUmVtb3ZlZCwge3JlbW92ZWRTZXNz
aW9ufSk7CiAgICAgICAgICAgICB9KTsKLSAgICB9LAorICAgIH0KIAotICAgIHNlZ21lbnRDcmVh
dGVkOiBmdW5jdGlvbihzZWdtZW50SWQpCisgICAgc2VnbWVudENyZWF0ZWQoc2VnbWVudElkKQog
ICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVy
biB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCkudGhlbih0aGlzLnNlZ21lbnRDcmVhdGVkLmJp
bmQodGhpcywgc2VnbWVudElkKSk7CkBAIC01NDksOSArNTA5LDkgQEAgV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zZWdtZW50UHJvbWlzZXMu
c2V0KHNlZ21lbnRJZCwgUHJvbWlzZS5yZXNvbHZlKGluY29tcGxldGVTZWdtZW50KSk7CiAKICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxheU1h
bmFnZXIuRXZlbnQuU2Vzc2lvblNlZ21lbnRBZGRlZCwge3NlZ21lbnRJZGVudGlmaWVyOiBzZWdt
ZW50SWR9KTsKLSAgICB9LAorICAgIH0KIAotICAgIHNlZ21lbnRDb21wbGV0ZWQ6IGZ1bmN0aW9u
KHNlZ21lbnRJZCkKKyAgICBzZWdtZW50Q29tcGxldGVkKHNlZ21lbnRJZCkKICAgICB7CiAgICAg
ICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0
VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5zZWdtZW50Q29tcGxldGVkLmJpbmQodGhpcywg
c2VnbWVudElkKSk7CkBAIC01NjgsOSArNTI4LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIG9i
dGFpbmluZyBzZWdtZW50IGRhdGE6ICIsIGVycm9yKTsKICAgICAgICAgICAgICAgICB0aHJvdyBl
cnJvcjsKICAgICAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQogCi0gICAgc2VnbWVudFJlbW92
ZWQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAgICBzZWdtZW50UmVtb3ZlZChzZWdtZW50SWQpCiAg
ICAgewogICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKQogICAgICAgICAgICAgcmV0dXJu
IHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKS50aGVuKHRoaXMuc2VnbWVudFJlbW92ZWQuYmlu
ZCh0aGlzLCBzZWdtZW50SWQpKTsKQEAgLTU5Miw5ICs1NTIsOSBAQCBXZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
cmVtb3ZlZFNlZ21lbnQpOwogICAgICAgICAgICAgICAgIG1hbmFnZXIuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNlc3Npb25TZWdtZW50
UmVtb3ZlZCwge3JlbW92ZWRTZWdtZW50fSk7CiAgICAgICAgICAgICB9KTsKLSAgICB9LAorICAg
IH0KIAotICAgIHNlZ21lbnRMb2FkZWQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAgICBzZWdtZW50
TG9hZGVkKHNlZ21lbnRJZCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQp
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhp
cy5zZWdtZW50TG9hZGVkLmJpbmQodGhpcywgc2VnbWVudElkKSk7CkBAIC02MDcsOSArNTY3LDkg
QEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIg
cHJldmlvdXNJZGVudGlmaWVyID0gdGhpcy5fYWN0aXZlU2VnbWVudElkZW50aWZpZXI7CiAgICAg
ICAgIHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyID0gc2VnbWVudElkOwogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5F
dmVudC5BY3RpdmVTZWdtZW50Q2hhbmdlZCwge3ByZXZpb3VzU2VnbWVudElkZW50aWZpZXI6IHBy
ZXZpb3VzSWRlbnRpZmllcn0pOwotICAgfSwKKyAgICB9CiAKLSAgICBzZWdtZW50VW5sb2FkZWQ6
IGZ1bmN0aW9uKCkKKyAgICBzZWdtZW50VW5sb2FkZWQoKQogICAgIHsKICAgICAgICAgaWYgKCF0
aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRp
YWxpemVkKCkudGhlbih0aGlzLnNlZ21lbnRVbmxvYWRlZC5iaW5kKHRoaXMpKTsKQEAgLTYyMCwx
MSArNTgwLDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdmFyIHByZXZpb3VzSWRlbnRpZmllciA9IHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlm
aWVyOwogICAgICAgICB0aGlzLl9hY3RpdmVTZWdtZW50SWRlbnRpZmllciA9IG51bGw7CiAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5h
Z2VyLkV2ZW50LkFjdGl2ZVNlZ21lbnRDaGFuZ2VkLCB7cHJldmlvdXNTZWdtZW50SWRlbnRpZmll
cjogcHJldmlvdXNJZGVudGlmaWVyfSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRl
CiAKLSAgICBfY2hhbmdlU2Vzc2lvblN0YXRlOiBmdW5jdGlvbihuZXdTdGF0ZSkKKyAgICBfY2hh
bmdlU2Vzc2lvblN0YXRlKG5ld1N0YXRlKQogICAgIHsKICAgICAgICAgLy8gV2FybiBhYm91dCBu
by1vcCBzdGF0ZSBjaGFuZ2VzLiBXZSBzaG91bGRuJ3QgYmUgc2VlaW5nIHRoZW0uCiAgICAgICAg
IHZhciBpc0FsbG93ZWQgPSB0aGlzLl9zZXNzaW9uU3RhdGUgIT09IG5ld1N0YXRlOwpAQCAtNjQy
LDkgKzYwMiw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgY29uc29sZS5hc3NlcnQoaXNBbGxvd2VkLCAiSW52YWxpZCBzZXNzaW9uIHN0YXRlIGNo
YW5nZTogIiwgdGhpcy5fc2Vzc2lvblN0YXRlLCAiIHRvICIsIG5ld1N0YXRlKTsKICAgICAgICAg
aWYgKGlzQWxsb3dlZCkKICAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdGF0ZSA9IG5ld1N0YXRl
OwotICAgIH0sCisgICAgfQogCi0gICAgX2NoYW5nZVNlZ21lbnRTdGF0ZTogZnVuY3Rpb24obmV3
U3RhdGUpCisgICAgX2NoYW5nZVNlZ21lbnRTdGF0ZShuZXdTdGF0ZSkKICAgICB7CiAgICAgICAg
IC8vIFdhcm4gYWJvdXQgbm8tb3Agc3RhdGUgY2hhbmdlcy4gV2Ugc2hvdWxkbid0IGJlIHNlZWlu
ZyB0aGVtLgogICAgICAgICB2YXIgaXNBbGxvd2VkID0gdGhpcy5fc2VnbWVudFN0YXRlICE9PSBu
ZXdTdGF0ZTsKQEAgLTY2Nyw5ICs2MjcsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGlzQWxsb3dlZCwgIkludmFsaWQg
c2VnbWVudCBzdGF0ZSBjaGFuZ2U6ICIsIHRoaXMuX3NlZ21lbnRTdGF0ZSwgIiB0byAiLCBuZXdT
dGF0ZSk7CiAgICAgICAgIGlmIChpc0FsbG93ZWQpCiAgICAgICAgICAgICB0aGlzLl9zZWdtZW50
U3RhdGUgPSBuZXdTdGF0ZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9zdXBwcmVzc0JyZWFrcG9p
bnRzQW5kUmVzdW1lSWZOZWVkZWQ6IGZ1bmN0aW9uKCkKKyAgICBfc3VwcHJlc3NCcmVha3BvaW50
c0FuZFJlc3VtZUlmTmVlZGVkKCkKICAgICB7CiAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpczsK
IApAQCAtNjgyLDMgKzY0MiwzOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgfQogfTsKIAorV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQgPSB7
CisgICAgQ2FwdHVyZVN0YXJ0ZWQ6ICJyZXBsYXktbWFuYWdlci1jYXB0dXJlLXN0YXJ0ZWQiLAor
ICAgIENhcHR1cmVTdG9wcGVkOiAicmVwbGF5LW1hbmFnZXItY2FwdHVyZS1zdG9wcGVkIiwKKwor
ICAgIFBsYXliYWNrU3RhcnRlZDogInJlcGxheS1tYW5hZ2VyLXBsYXliYWNrLXN0YXJ0ZWQiLAor
ICAgIFBsYXliYWNrUGF1c2VkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stcGF1c2VkIiwKKyAg
ICBQbGF5YmFja0ZpbmlzaGVkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stZmluaXNoZWQiLAor
ICAgIFBsYXliYWNrUG9zaXRpb25DaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItcGxheS1iYWNrLXBv
c2l0aW9uLWNoYW5nZWQiLAorCisgICAgQWN0aXZlU2Vzc2lvbkNoYW5nZWQ6ICJyZXBsYXktbWFu
YWdlci1hY3RpdmUtc2Vzc2lvbi1jaGFuZ2VkIiwKKyAgICBBY3RpdmVTZWdtZW50Q2hhbmdlZDog
InJlcGxheS1tYW5hZ2VyLWFjdGl2ZS1zZWdtZW50LWNoYW5nZWQiLAorCisgICAgU2Vzc2lvblNl
Z21lbnRBZGRlZDogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc2VnbWVudC1hZGRlZCIsCisgICAg
U2Vzc2lvblNlZ21lbnRSZW1vdmVkOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1zZWdtZW50LXJl
bW92ZWQiLAorCisgICAgU2Vzc2lvbkFkZGVkOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1hZGRl
ZCIsCisgICAgU2Vzc2lvblJlbW92ZWQ6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9uLXJlbW92ZWQi
LAorfTsKKworV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRlID0geworICAg
IENhcHR1cmluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtY2FwdHVyaW5nIiwKKyAg
ICBJbmFjdGl2ZTogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtaW5hY3RpdmUiLAorICAg
IFJlcGxheWluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtcmVwbGF5aW5nIiwKK307
CisKK1dlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZSA9IHsKKyAgICBBcHBl
bmRpbmc6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWFwcGVuZGluZyIsCisgICAgVW5s
b2FkZWQ6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLXVubG9hZGVkIiwKKyAgICBMb2Fk
ZWQ6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWxvYWRlZCIsCisgICAgRGlzcGF0Y2hp
bmc6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWRpc3BhdGNoaW5nIiwKK307CisKK1dl
Ykluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlBsYXliYWNrU3BlZWQgPSB7CisgICAgUmVhbFRpbWU6
ICJyZXBsYXktbWFuYWdlci1wbGF5YmFjay1zcGVlZC1yZWFsLXRpbWUiLAorICAgIEZhc3RGb3J3
YXJkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stc3BlZWQtZmFzdC1mb3J3YXJkIiwKK307CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9SdW50aW1lTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL1J1bnRpbWVNYW5hZ2VyLmpzCmluZGV4IGM5YjIwYzc3YzgzZGQ2Yzc0YWRh
NzFhMTE2NDAwMjQ3MmEzMjk1ZTEuLjA4MjAyYTlmOTMyMjQ4N2YxMDMwZmExYzgxNGZiMTQ4OTBk
ZTljNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL1J1bnRpbWVNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1J1bnRpbWVNYW5hZ2VyLmpzCkBAIC0yMywyNiArMjMs
MjAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNw
ZWN0b3IuUnVudGltZU1hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuUnVudGltZU1h
bmFnZXIgPSBjbGFzcyBSdW50aW1lTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QK
IHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBz
dWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNh
bGwodGhpcyk7Ci0KLSAgICAvLyBFbmFibGUgdGhlIFJ1bnRpbWVBZ2VudCB0byByZWNlaXZlIG5v
dGlmaWNhdGlvbiBvZiBleGVjdXRpb24gY29udGV4dHMuCi0gICAgaWYgKFJ1bnRpbWVBZ2VudC5l
bmFibGUpCi0gICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGUoKTsKLX07Ci0KLVdlYkluc3BlY3Rv
ci5SdW50aW1lTWFuYWdlci5FdmVudCA9IHsKLSAgICBEaWRFdmFsdWF0ZTogInJ1bnRpbWUtbWFu
YWdlci1kaWQtZXZhbHVhdGUiCi19OworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAg
IHN1cGVyKCk7CiAKLVdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlci5wcm90b3R5cGUgPSB7Ci0g
ICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlciwKKyAgICAgICAgLy8g
RW5hYmxlIHRoZSBSdW50aW1lQWdlbnQgdG8gcmVjZWl2ZSBub3RpZmljYXRpb24gb2YgZXhlY3V0
aW9uIGNvbnRleHRzLgorICAgICAgICBpZiAoUnVudGltZUFnZW50LmVuYWJsZSkKKyAgICAgICAg
ICAgIFJ1bnRpbWVBZ2VudC5lbmFibGUoKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAg
IGV2YWx1YXRlSW5JbnNwZWN0ZWRXaW5kb3c6IGZ1bmN0aW9uKGV4cHJlc3Npb24sIG9iamVjdEdy
b3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0LCBjYWxs
YmFjaykKKyAgICBldmFsdWF0ZUluSW5zcGVjdGVkV2luZG93KGV4cHJlc3Npb24sIG9iamVjdEdy
b3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0LCBjYWxs
YmFjaykKICAgICB7CiAgICAgICAgIGlmICghZXhwcmVzc2lvbikgewogICAgICAgICAgICAgLy8g
VGhlcmUgaXMgbm8gZXhwcmVzc2lvbiwgc28gdGhlIGNvbXBsZXRpb24gc2hvdWxkIGhhcHBlbiBh
Z2FpbnN0IGdsb2JhbCBwcm9wZXJ0aWVzLgpAQCAtNzgsOSArNzIsOSBAQCBXZWJJbnNwZWN0b3Iu
UnVudGltZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAvLyBDT01QQVRJQklMSVRZIChp
T1MgOCk6ICJzYXZlUmVzdWx0IiBkaWQgbm90IGV4aXN0LgogICAgICAgICB2YXIgY29udGV4dElk
ID0gV2ViSW5zcGVjdG9yLnF1aWNrQ29uc29sZS5leGVjdXRpb25Db250ZXh0SWRlbnRpZmllcjsK
ICAgICAgICAgUnVudGltZUFnZW50LmV2YWx1YXRlLmludm9rZSh7ZXhwcmVzc2lvbiwgb2JqZWN0
R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11
dGVDb25zb2xlLCBjb250ZXh0SWQsIGZyYW1lSWQ6IGNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwg
Z2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0fSwgZXZhbENhbGxiYWNrLmJpbmQodGhpcykpOwot
ICAgIH0sCisgICAgfQogCi0gICAgc2F2ZVJlc3VsdDogZnVuY3Rpb24ocmVtb3RlT2JqZWN0LCBj
YWxsYmFjaykKKyAgICBzYXZlUmVzdWx0KHJlbW90ZU9iamVjdCwgY2FsbGJhY2spCiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydChyZW1vdGVPYmplY3QgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuUmVtb3RlT2JqZWN0KTsKIApAQCAtOTgsOSArOTIsOSBAQCBXZWJJbnNwZWN0b3IuUnVudGlt
ZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgUnVudGltZUFnZW50LnNhdmVSZXN1
bHQocmVtb3RlT2JqZWN0LmFzQ2FsbEFyZ3VtZW50KCksIG15Y2FsbGJhY2spOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBSdW50aW1lQWdlbnQuc2F2ZVJlc3VsdChyZW1vdGVPYmplY3QuYXND
YWxsQXJndW1lbnQoKSwgV2ViSW5zcGVjdG9yLnF1aWNrQ29uc29sZS5leGVjdXRpb25Db250ZXh0
SWRlbnRpZmllciwgbXljYWxsYmFjayk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBnZXRQcm9wZXJ0
aWVzRm9yUmVtb3RlT2JqZWN0OiBmdW5jdGlvbihvYmplY3RJZCwgY2FsbGJhY2spCisgICAgZ2V0
UHJvcGVydGllc0ZvclJlbW90ZU9iamVjdChvYmplY3RJZCwgY2FsbGJhY2spCiAgICAgewogICAg
ICAgICBSdW50aW1lQWdlbnQuZ2V0UHJvcGVydGllcyhvYmplY3RJZCwgZnVuY3Rpb24oZXJyb3Is
IHJlc3VsdCkgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC0xMTcsNCArMTExLDYgQEAg
V2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1X
ZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyLkV2ZW50
ID0geworICAgIERpZEV2YWx1YXRlOiAicnVudGltZS1tYW5hZ2VyLWRpZC1ldmFsdWF0ZSIKK307
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvU291cmNlTWFwTWFuYWdlci5qcwppbmRleCBjYWVlNzc3ZWUzOWUz
NjU3YzhkNDJiOWZjOWJmNDM4NTBkYzU5MzdiLi5kM2NhODQzNDI5MTg1NGU2OGZmMDIwYWVkOWZk
MTg5OTM4YzRjMDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIuanMKQEAg
LTIzLDI4ICsyMywyNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyID0gZnVuY3Rpb24oKQorV2ViSW5zcGVj
dG9yLlNvdXJjZU1hcE1hbmFnZXIgPSBjbGFzcyBTb3VyY2VNYXBNYW5hZ2VyIGV4dGVuZHMgV2Vi
SW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJ
bnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYklu
c3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX3NvdXJjZU1hcFVSTE1hcCA9
IHt9OwotICAgIHRoaXMuX2Rvd25sb2FkaW5nU291cmNlTWFwcyA9IHt9OworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICBXZWJJbnNwZWN0b3IuRnJhbWUu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlk
Q2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOwotfTsKKyAgICAgICAg
dGhpcy5fc291cmNlTWFwVVJMTWFwID0ge307CisgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nU291
cmNlTWFwcyA9IHt9OwogCi1XZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90b3R5cGUg
PSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLAorICAg
ICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJh
bWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFu
Z2UsIHRoaXMpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgc291cmNlTWFwRm9yVVJM
OiBmdW5jdGlvbihzb3VyY2VNYXBVUkwpCisgICAgc291cmNlTWFwRm9yVVJMKHNvdXJjZU1hcFVS
TCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNYXBVUkxNYXBbc291cmNlTWFw
VVJMXTsKLSAgICB9LAorICAgIH0KIAotICAgIGRvd25sb2FkU291cmNlTWFwOiBmdW5jdGlvbihz
b3VyY2VNYXBVUkwsIGJhc2VVUkwsIG9yaWdpbmFsU291cmNlQ29kZSkKKyAgICBkb3dubG9hZFNv
dXJjZU1hcChzb3VyY2VNYXBVUkwsIGJhc2VVUkwsIG9yaWdpbmFsU291cmNlQ29kZSkKICAgICB7
CiAgICAgICAgIHNvdXJjZU1hcFVSTCA9IGFic29sdXRlVVJMKHNvdXJjZU1hcFVSTCwgYmFzZVVS
TCk7CiAgICAgICAgIGlmICghc291cmNlTWFwVVJMKQpAQCAtNzUsMTEgKzczLDExIEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAg
ICAgIGxvYWRBbmRQYXJzZVNvdXJjZU1hcC5jYWxsKHRoaXMpOwotICAgIH0sCisgICAgfQogCiAg
ICAgLy8gUHJpdmF0ZQogCi0gICAgX2xvYWRBbmRQYXJzZVNvdXJjZU1hcDogZnVuY3Rpb24oc291
cmNlTWFwVVJMLCBiYXNlVVJMLCBvcmlnaW5hbFNvdXJjZUNvZGUpCisgICAgX2xvYWRBbmRQYXJz
ZVNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIGJhc2VVUkwsIG9yaWdpbmFsU291cmNlQ29kZSkKICAg
ICB7CiAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nU291cmNlTWFwc1tzb3VyY2VNYXBVUkxdID0g
dHJ1ZTsKIApAQCAtMTE5LDE0ICsxMTcsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1hbmFn
ZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChOZXR3b3JrQWdlbnQubG9hZFJlc291cmNl
KQogICAgICAgICAgICAgTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZShmcmFtZUlkZW50aWZpZXIs
IHNvdXJjZU1hcFVSTCwgc291cmNlTWFwTG9hZGVkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAg
fQogCi0gICAgX2xvYWRBbmRQYXJzZUZhaWxlZDogZnVuY3Rpb24oc291cmNlTWFwVVJMKQorICAg
IF9sb2FkQW5kUGFyc2VGYWlsZWQoc291cmNlTWFwVVJMKQogICAgIHsKICAgICAgICAgZGVsZXRl
IHRoaXMuX2Rvd25sb2FkaW5nU291cmNlTWFwc1tzb3VyY2VNYXBVUkxdOwotICAgIH0sCisgICAg
fQogCi0gICAgX2xvYWRBbmRQYXJzZVN1Y2NlZWRlZDogZnVuY3Rpb24oc291cmNlTWFwVVJMLCBz
b3VyY2VNYXApCisgICAgX2xvYWRBbmRQYXJzZVN1Y2NlZWRlZChzb3VyY2VNYXBVUkwsIHNvdXJj
ZU1hcCkKICAgICB7CiAgICAgICAgIGlmICghKHNvdXJjZU1hcFVSTCBpbiB0aGlzLl9kb3dubG9h
ZGluZ1NvdXJjZU1hcHMpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUyLDkgKzE1MCw5IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGlmIChyZXNvdXJjZSkKICAgICAgICAgICAgICAgICByZXNvdXJjZS5hZGRTb3VyY2VNYXAoc291
cmNlTWFwKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX21haW5SZXNvdXJjZURp
ZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX21haW5SZXNvdXJjZURpZENoYW5nZShldmVu
dCkKICAgICB7CiAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmlzTWFpbkZyYW1lKCkpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xNjMsNSArMTYxLDMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9kb3dubG9hZGluZ1NvdXJjZU1h
cHMgPSB7fTsKICAgICB9CiB9OwotCi1XZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9TdG9y
YWdlTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzCmluZGV4IGE1OGFjYzBkMTRmODRmNzQ3ODg3YWNiZTU5
M2RlMTgwNjkwYWFkMWIuLmM0ZmI0OGUyMDhhNDQwMWRhZDkwMzBmYjMzNGUyMjliY2YyNDk3Zjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzCkBAIC0yNCwxMTcgKzI0LDEwNCBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rv
ci5TdG9yYWdlTWFuYWdlciA9IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdl
ciA9IGNsYXNzIFN0b3JhZ2VNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewot
ICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNs
YXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0
aGlzKTsKLQotICAgIGlmICh3aW5kb3cuRE9NU3RvcmFnZUFnZW50KQotICAgICAgICBET01TdG9y
YWdlQWdlbnQuZW5hYmxlKCk7Ci0gICAgaWYgKHdpbmRvdy5EYXRhYmFzZUFnZW50KQotICAgICAg
ICBEYXRhYmFzZUFnZW50LmVuYWJsZSgpOwotICAgIGlmICh3aW5kb3cuSW5kZXhlZERCQWdlbnQp
Ci0gICAgICAgIEluZGV4ZWREQkFnZW50LmVuYWJsZSgpOwotCi0gICAgV2ViSW5zcGVjdG9yLkZy
YW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJj
ZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICBjb25z
dHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAgV2ViSW5zcGVjdG9yLm5v
dGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZpY2F0aW9uLkV4
dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzKTsK
KyAgICAgICAgaWYgKHdpbmRvdy5ET01TdG9yYWdlQWdlbnQpCisgICAgICAgICAgICBET01TdG9y
YWdlQWdlbnQuZW5hYmxlKCk7CisgICAgICAgIGlmICh3aW5kb3cuRGF0YWJhc2VBZ2VudCkKKyAg
ICAgICAgICAgIERhdGFiYXNlQWdlbnQuZW5hYmxlKCk7CisgICAgICAgIGlmICh3aW5kb3cuSW5k
ZXhlZERCQWdlbnQpCisgICAgICAgICAgICBJbmRleGVkREJBZ2VudC5lbmFibGUoKTsKIAotICAg
IC8vIENPTVBBVElCSUxJVFkgKGlPUyA2KTogRE9NU3RvcmFnZSB3YXMgZGlzY292ZXJlZCB2aWEg
YSBET01TdG9yYWdlT2JzZXJ2ZXIgZXZlbnQuIE5vdyBET00gU3RvcmFnZQotICAgIC8vIGlzIGFk
ZGVkIHdoZW5ldmVyIGEgbmV3IHNlY3VyaXR5T3JpZ2luIGlzIGRpc2NvdmVyZWQuIENoZWNrIGZv
ciBET01TdG9yYWdlQWdlbnQuZ2V0RE9NU3RvcmFnZUl0ZW1zLAotICAgIC8vIHdoaWNoIHdhcyBy
ZW5hbWVkIGF0IHRoZSBzYW1lIHRpbWUgdGhlIGNoYW5nZSB0byBzdGFydCB1c2luZyBzZWN1cml0
eU9yaWdpbiB3YXMgbWFkZS4KLSAgICBpZiAod2luZG93LkRPTVN0b3JhZ2VBZ2VudCAmJiBET01T
dG9yYWdlQWdlbnQuZ2V0RE9NU3RvcmFnZUl0ZW1zKQotICAgICAgICBXZWJJbnNwZWN0b3IuRnJh
bWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuU2VjdXJpdHlPcmln
aW5EaWRDaGFuZ2UsIHRoaXMuX3NlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1l
LkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdl
LCB0aGlzKTsKIAotICAgIHRoaXMuaW5pdGlhbGl6ZSgpOwotfTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZpY2F0
aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFEb21haW5zQWN0aXZhdGVkLCB0
aGlzKTsKIAotV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLkV2ZW50ID0gewotICAgIENvb2tp
ZVN0b3JhZ2VPYmplY3RXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdlci1jb29raWUtc3RvcmFnZS1v
YmplY3Qtd2FzLWFkZGVkIiwKLSAgICBET01TdG9yYWdlT2JqZWN0V2FzQWRkZWQ6ICJzdG9yYWdl
LW1hbmFnZXItZG9tLXN0b3JhZ2Utb2JqZWN0LXdhcy1hZGRlZCIsCi0gICAgRE9NU3RvcmFnZU9i
amVjdFdhc0luc3BlY3RlZDogInN0b3JhZ2UtZG9tLW9iamVjdC13YXMtaW5zcGVjdGVkIiwKLSAg
ICBEYXRhYmFzZVdhc0FkZGVkOiAic3RvcmFnZS1tYW5hZ2VyLWRhdGFiYXNlLXdhcy1hZGRlZCIs
Ci0gICAgRGF0YWJhc2VXYXNJbnNwZWN0ZWQ6ICJzdG9yYWdlLW9iamVjdC13YXMtaW5zcGVjdGVk
IiwKLSAgICBJbmRleGVkRGF0YWJhc2VXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdlci1pbmRleGVk
LWRhdGFiYXNlLXdhcy1hZGRlZCIsCi0gICAgQ2xlYXJlZDogInN0b3JhZ2UtbWFuYWdlci1jbGVh
cmVkIgotfTsKKyAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDYpOiBET01TdG9yYWdlIHdh
cyBkaXNjb3ZlcmVkIHZpYSBhIERPTVN0b3JhZ2VPYnNlcnZlciBldmVudC4gTm93IERPTSBTdG9y
YWdlCisgICAgICAgIC8vIGlzIGFkZGVkIHdoZW5ldmVyIGEgbmV3IHNlY3VyaXR5T3JpZ2luIGlz
IGRpc2NvdmVyZWQuIENoZWNrIGZvciBET01TdG9yYWdlQWdlbnQuZ2V0RE9NU3RvcmFnZUl0ZW1z
LAorICAgICAgICAvLyB3aGljaCB3YXMgcmVuYW1lZCBhdCB0aGUgc2FtZSB0aW1lIHRoZSBjaGFu
Z2UgdG8gc3RhcnQgdXNpbmcgc2VjdXJpdHlPcmlnaW4gd2FzIG1hZGUuCisgICAgICAgIGlmICh3
aW5kb3cuRE9NU3RvcmFnZUFnZW50ICYmIERPTVN0b3JhZ2VBZ2VudC5nZXRET01TdG9yYWdlSXRl
bXMpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRnJhbWUuRXZlbnQuU2VjdXJpdHlPcmlnaW5EaWRDaGFuZ2UsIHRoaXMuX3NlY3Vy
aXR5T3JpZ2luRGlkQ2hhbmdlLCB0aGlzKTsKIAotV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5h
Z2VyLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisgICAg
ICAgIHRoaXMuaW5pdGlhbGl6ZSgpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24oKQorICAgIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgdGhp
cy5fZG9tU3RvcmFnZU9iamVjdHMgPSBbXTsKICAgICAgICAgdGhpcy5fZGF0YWJhc2VPYmplY3Rz
ID0gW107CiAgICAgICAgIHRoaXMuX2luZGV4ZWREYXRhYmFzZXMgPSBbXTsKICAgICAgICAgdGhp
cy5fY29va2llU3RvcmFnZU9iamVjdHMgPSB7fTsKLSAgICB9LAorICAgIH0KIAotICAgIGRvbVN0
b3JhZ2VXYXNBZGRlZDogZnVuY3Rpb24oaWQsIGhvc3QsIGlzTG9jYWxTdG9yYWdlKQorICAgIGRv
bVN0b3JhZ2VXYXNBZGRlZChpZCwgaG9zdCwgaXNMb2NhbFN0b3JhZ2UpCiAgICAgewogICAgICAg
ICB2YXIgZG9tU3RvcmFnZSA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9iamVjdChpZCwg
aG9zdCwgaXNMb2NhbFN0b3JhZ2UpOwogCiAgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2VPYmplY3Rz
LnB1c2goZG9tU3RvcmFnZSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5FdmVudC5ET01TdG9yYWdlT2JqZWN0V2FzQWRk
ZWQsIHtkb21TdG9yYWdlfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBkYXRhYmFzZVdhc0FkZGVk
OiBmdW5jdGlvbihpZCwgaG9zdCwgbmFtZSwgdmVyc2lvbikKKyAgICBkYXRhYmFzZVdhc0FkZGVk
KGlkLCBob3N0LCBuYW1lLCB2ZXJzaW9uKQogICAgIHsKICAgICAgICAgdmFyIGRhdGFiYXNlID0g
bmV3IFdlYkluc3BlY3Rvci5EYXRhYmFzZU9iamVjdChpZCwgaG9zdCwgbmFtZSwgdmVyc2lvbik7
CiAKICAgICAgICAgdGhpcy5fZGF0YWJhc2VPYmplY3RzLnB1c2goZGF0YWJhc2UpOwogICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFn
ZXIuRXZlbnQuRGF0YWJhc2VXYXNBZGRlZCwge2RhdGFiYXNlfSk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBkb21TdG9yYWdlV2FzVXBkYXRlZDogZnVuY3Rpb24oaWQpCisgICAgZG9tU3RvcmFnZVdh
c1VwZGF0ZWQoaWQpCiAgICAgewogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIuRXZlbnQuRE9NU3RvcmFnZVdhc1VwZGF0ZWQs
IGlkKTsKLSAgICB9LAorICAgIH0KIAotICAgIGl0ZW1zQ2xlYXJlZDogZnVuY3Rpb24oc3RvcmFn
ZUlkKQorICAgIGl0ZW1zQ2xlYXJlZChzdG9yYWdlSWQpCiAgICAgewogICAgICAgICB0aGlzLl9k
b21TdG9yYWdlRm9ySWRlbnRpZmllcihzdG9yYWdlSWQpLml0ZW1zQ2xlYXJlZChzdG9yYWdlSWQp
OwotICAgIH0sCisgICAgfQogCi0gICAgaXRlbVJlbW92ZWQ6IGZ1bmN0aW9uKHN0b3JhZ2VJZCwg
a2V5KQorICAgIGl0ZW1SZW1vdmVkKHN0b3JhZ2VJZCwga2V5KQogICAgIHsKICAgICAgICAgdGhp
cy5fZG9tU3RvcmFnZUZvcklkZW50aWZpZXIoc3RvcmFnZUlkKS5pdGVtUmVtb3ZlZChrZXkpOwot
ICAgIH0sCisgICAgfQogCi0gICAgaXRlbUFkZGVkOiBmdW5jdGlvbihzdG9yYWdlSWQsIGtleSwg
dmFsdWUpCisgICAgaXRlbUFkZGVkKHN0b3JhZ2VJZCwga2V5LCB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIHRoaXMuX2RvbVN0b3JhZ2VGb3JJZGVudGlmaWVyKHN0b3JhZ2VJZCkuaXRlbUFkZGVkKGtl
eSwgdmFsdWUpOwotICAgIH0sCisgICAgfQogCi0gICAgaXRlbVVwZGF0ZWQ6IGZ1bmN0aW9uKHN0
b3JhZ2VJZCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUpCisgICAgaXRlbVVwZGF0ZWQoc3RvcmFnZUlk
LCBrZXksIG9sZFZhbHVlLCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2VG
b3JJZGVudGlmaWVyKHN0b3JhZ2VJZCkuaXRlbVVwZGF0ZWQoa2V5LCBvbGRWYWx1ZSwgdmFsdWUp
OwotICAgIH0sCisgICAgfQogCi0gICAgaW5zcGVjdERhdGFiYXNlOiBmdW5jdGlvbihpZCkKKyAg
ICBpbnNwZWN0RGF0YWJhc2UoaWQpCiAgICAgewogICAgICAgICB2YXIgZGF0YWJhc2UgPSB0aGlz
Ll9kYXRhYmFzZUZvcklkZW50aWZpZXIoaWQpOwogICAgICAgICBjb25zb2xlLmFzc2VydChkYXRh
YmFzZSk7CiAgICAgICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5TdG9yYWdlTWFu
YWdlci5FdmVudC5EYXRhYmFzZVdhc0luc3BlY3RlZCwge2RhdGFiYXNlfSk7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBpbnNwZWN0RE9NU3RvcmFnZTogZnVuY3Rpb24oaWQpCisgICAgaW5zcGVjdERP
TVN0b3JhZ2UoaWQpCiAgICAgewogICAgICAgICB2YXIgZG9tU3RvcmFnZSA9IHRoaXMuX2RvbVN0
b3JhZ2VGb3JJZGVudGlmaWVyKGlkKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZG9tU3RvcmFn
ZSk7CiAgICAgICAgIGlmICghZG9tU3RvcmFnZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5h
Z2VyLkV2ZW50LkRPTVN0b3JhZ2VPYmplY3RXYXNJbnNwZWN0ZWQsIHtkb21TdG9yYWdlfSk7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90ZWN0ZWQKIAotICAgIHJlcXVlc3RJbmRleGVkRGF0
YWJhc2VEYXRhOiBmdW5jdGlvbihvYmplY3RTdG9yZSwgb2JqZWN0U3RvcmVJbmRleCwgc3RhcnRF
bnRyeUluZGV4LCBtYXhpbXVtRW50cnlDb3VudCwgY2FsbGJhY2spCisgICAgcmVxdWVzdEluZGV4
ZWREYXRhYmFzZURhdGEob2JqZWN0U3RvcmUsIG9iamVjdFN0b3JlSW5kZXgsIHN0YXJ0RW50cnlJ
bmRleCwgbWF4aW11bUVudHJ5Q291bnQsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQod2luZG93LkluZGV4ZWREQkFnZW50KTsKICAgICAgICAgY29uc29sZS5hc3NlcnQo
b2JqZWN0U3RvcmUpOwpAQCAtMTcwLDExICsxNTcsMTEgQEAgV2ViSW5zcGVjdG9yLlN0b3JhZ2VN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfTsKIAogICAgICAgICBJbmRleGVkREJBZ2Vu
dC5yZXF1ZXN0RGF0YS5pbnZva2UocmVxdWVzdEFyZ3VtZW50cywgcHJvY2Vzc0RhdGEpOwotICAg
IH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2RvbVN0b3JhZ2VGb3JJZGVudGlm
aWVyOiBmdW5jdGlvbihpZCkKKyAgICBfZG9tU3RvcmFnZUZvcklkZW50aWZpZXIoaWQpCiAgICAg
ewogICAgICAgICBmb3IgKHZhciBzdG9yYWdlT2JqZWN0IG9mIHRoaXMuX2RvbVN0b3JhZ2VPYmpl
Y3RzKSB7CiAgICAgICAgICAgICAvLyBUaGUgaWQgaXMgYW4gb2JqZWN0LCBzbyB3ZSBuZWVkIHRv
IGNvbXBhcmUgdGhlIHByb3BlcnRpZXMgdXNpbmcgT2JqZWN0LnNoYWxsb3dFcXVhbC4KQEAgLTE4
NCw5ICsxNzEsOSBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
bWFpblJlc291cmNlRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfbWFpblJlc291cmNl
RGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnQudGFy
Z2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lKTsKIApAQCAtMjA5LDkgKzE5Niw5IEBA
IFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhp
cy5fY29va2llU3RvcmFnZU9iamVjdHNbaG9zdF0gPSBuZXcgV2ViSW5zcGVjdG9yLkNvb2tpZVN0
b3JhZ2VPYmplY3QoaG9zdCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5FdmVudC5Db29raWVTdG9yYWdlT2JqZWN0V2Fz
QWRkZWQsIHtjb29raWVTdG9yYWdlOiB0aGlzLl9jb29raWVTdG9yYWdlT2JqZWN0c1tob3N0XX0p
OwotICAgIH0sCisgICAgfQogCi0gICAgX2FkZERPTVN0b3JhZ2VJZk5lZWRlZDogZnVuY3Rpb24o
ZnJhbWUpCisgICAgX2FkZERPTVN0b3JhZ2VJZk5lZWRlZChmcmFtZSkKICAgICB7CiAgICAgICAg
IC8vIERvbid0IHNob3cgc3RvcmFnZSBpZiB3ZSBkb24ndCBoYXZlIGEgc2VjdXJpdHkgb3JpZ2lu
IChhYm91dDpibGFuaykuCiAgICAgICAgIGlmICghZnJhbWUuc2VjdXJpdHlPcmlnaW4gfHwgZnJh
bWUuc2VjdXJpdHlPcmlnaW4gPT09ICI6Ly8iKQpAQCAtMjI2LDkgKzIxMyw5IEBAIFdlYkluc3Bl
Y3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBzZXNzaW9uU3Rv
cmFnZUlkZW50aWZpZXIgPSB7c2VjdXJpdHlPcmlnaW46IGZyYW1lLnNlY3VyaXR5T3JpZ2luLCBp
c0xvY2FsU3RvcmFnZTogZmFsc2V9OwogICAgICAgICBpZiAoIXRoaXMuX2RvbVN0b3JhZ2VGb3JJ
ZGVudGlmaWVyKHNlc3Npb25TdG9yYWdlSWRlbnRpZmllcikpCiAgICAgICAgICAgICB0aGlzLmRv
bVN0b3JhZ2VXYXNBZGRlZChzZXNzaW9uU3RvcmFnZUlkZW50aWZpZXIsIGZyYW1lLm1haW5SZXNv
dXJjZS51cmxDb21wb25lbnRzLmhvc3QsIGZhbHNlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9h
ZGRJbmRleGVkREJEYXRhYmFzZXNJZk5lZWRlZDogZnVuY3Rpb24oZnJhbWUpCisgICAgX2FkZElu
ZGV4ZWREQkRhdGFiYXNlc0lmTmVlZGVkKGZyYW1lKQogICAgIHsKICAgICAgICAgaWYgKCF3aW5k
b3cuSW5kZXhlZERCQWdlbnQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODksMTcgKzI3Niwx
NyBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9
CiAKICAgICAgICAgSW5kZXhlZERCQWdlbnQucmVxdWVzdERhdGFiYXNlTmFtZXMoc2VjdXJpdHlP
cmlnaW4sIHByb2Nlc3NEYXRhYmFzZU5hbWVzLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQog
Ci0gICAgX3NlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfc2Vj
dXJpdHlPcmlnaW5EaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2Vy
dChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWUpOwogCiAgICAgICAg
IHRoaXMuX2FkZERPTVN0b3JhZ2VJZk5lZWRlZChldmVudC50YXJnZXQpOwogICAgICAgICB0aGlz
Ll9hZGRJbmRleGVkREJEYXRhYmFzZXNJZk5lZWRlZChldmVudC50YXJnZXQpOwotICAgIH0sCisg
ICAgfQogCi0gICAgX2RhdGFiYXNlRm9ySWRlbnRpZmllcjogZnVuY3Rpb24oaWQpCisgICAgX2Rh
dGFiYXNlRm9ySWRlbnRpZmllcihpZCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fZGF0YWJhc2VPYmplY3RzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAo
dGhpcy5fZGF0YWJhc2VPYmplY3RzW2ldLmlkID09PSBpZCkKQEAgLTMwNywxMiArMjk0LDIyIEBA
IFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIF9leHRyYURvbWFpbnNB
Y3RpdmF0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9leHRyYURvbWFpbnNBY3RpdmF0ZWQoZXZl
bnQpCiAgICAgewogICAgICAgICAKICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZG9tYWlucy5jb250
YWlucygiRE9NU3RvcmFnZSIpICYmIHdpbmRvdy5ET01TdG9yYWdlQWdlbnQgJiYgRE9NU3RvcmFn
ZUFnZW50LmdldERPTVN0b3JhZ2VJdGVtcykKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5GcmFt
ZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5TZWN1cml0eU9yaWdp
bkRpZENoYW5nZSwgdGhpcy5fc2VjdXJpdHlPcmlnaW5EaWRDaGFuZ2UsIHRoaXMpOwogICAgIH0K
IH07CisKK1dlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5FdmVudCA9IHsKKyAgICBDb29raWVT
dG9yYWdlT2JqZWN0V2FzQWRkZWQ6ICJzdG9yYWdlLW1hbmFnZXItY29va2llLXN0b3JhZ2Utb2Jq
ZWN0LXdhcy1hZGRlZCIsCisgICAgRE9NU3RvcmFnZU9iamVjdFdhc0FkZGVkOiAic3RvcmFnZS1t
YW5hZ2VyLWRvbS1zdG9yYWdlLW9iamVjdC13YXMtYWRkZWQiLAorICAgIERPTVN0b3JhZ2VPYmpl
Y3RXYXNJbnNwZWN0ZWQ6ICJzdG9yYWdlLWRvbS1vYmplY3Qtd2FzLWluc3BlY3RlZCIsCisgICAg
RGF0YWJhc2VXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdlci1kYXRhYmFzZS13YXMtYWRkZWQiLAor
ICAgIERhdGFiYXNlV2FzSW5zcGVjdGVkOiAic3RvcmFnZS1vYmplY3Qtd2FzLWluc3BlY3RlZCIs
CisgICAgSW5kZXhlZERhdGFiYXNlV2FzQWRkZWQ6ICJzdG9yYWdlLW1hbmFnZXItaW5kZXhlZC1k
YXRhYmFzZS13YXMtYWRkZWQiLAorICAgIENsZWFyZWQ6ICJzdG9yYWdlLW1hbmFnZXItY2xlYXJl
ZCIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9UaW1lbGluZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9UaW1lbGluZU1hbmFnZXIuanMKaW5kZXggMTEzZGI4MjYz
OGQ3NmY4MjA4NjY3OTcwMDMwNmU5Njc2ZWYzNDYxMi4uNWQ4ZjcyMjZmOWM1MDRkOTVmYTIwZTEz
MGM5NGNjNTljODQ1ZWMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvVGltZWxpbmVNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RpbWVsaW5lTWFuYWdlci5qcwpA
QCAtMjMsNDUgKzIzLDMyIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlciA9IGZ1bmN0aW9uKCkKK1dlYkluc3Bl
Y3Rvci5UaW1lbGluZU1hbmFnZXIgPSBjbGFzcyBUaW1lbGluZU1hbmFnZXIgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYklu
c3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5z
cGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LlByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQsIHRoaXMuX3N0YXJ0QXV0b0NhcHR1cmluZywgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkZy
YW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJj
ZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJ
bnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQu
UmVzb3VyY2VXYXNBZGRlZCwgdGhpcy5fcmVzb3VyY2VXYXNBZGRlZCwgdGhpcyk7Ci0KLSAgICB0
aGlzLl9yZWNvcmRpbmdzID0gW107Ci0gICAgdGhpcy5fYWN0aXZlUmVjb3JkaW5nID0gbnVsbDsK
LSAgICB0aGlzLl9pc0NhcHR1cmluZyA9IGZhbHNlOworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7
CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9uZXh0UmVjb3JkaW5nSWRlbnRpZmllciA9
IDE7CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5GcmFtZS5FdmVudC5Qcm92aXNpb25hbExvYWRTdGFydGVkLCB0aGlzLl9zdGFydEF1dG9D
YXB0dXJpbmcsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlz
Ll9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuRnJh
bWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuUmVzb3VyY2VXYXNB
ZGRlZCwgdGhpcy5fcmVzb3VyY2VXYXNBZGRlZCwgdGhpcyk7CiAKLSAgICB0aGlzLl9ib3VuZFN0
b3BDYXB0dXJpbmcgPSB0aGlzLnN0b3BDYXB0dXJpbmcuYmluZCh0aGlzKTsKKyAgICAgICAgdGhp
cy5fcmVjb3JkaW5ncyA9IFtdOworICAgICAgICB0aGlzLl9hY3RpdmVSZWNvcmRpbmcgPSBudWxs
OworICAgICAgICB0aGlzLl9pc0NhcHR1cmluZyA9IGZhbHNlOwogCi0gICAgZnVuY3Rpb24gZGVs
YXllZFdvcmsoKQotICAgIHsKLSAgICAgICAgdGhpcy5fbG9hZE5ld1JlY29yZGluZygpOwotICAg
IH0KKyAgICAgICAgdGhpcy5fbmV4dFJlY29yZGluZ0lkZW50aWZpZXIgPSAxOwogCi0gICAgLy8g
QWxsb3cgb3RoZXIgY29kZSB0byBzZXQgdXAgbGlzdGVuZXJzIGJlZm9yZSBmaXJpbmcgdGhlIGlu
aXRpYWwgUmVjb3JkaW5nTG9hZGVkIGV2ZW50LgotICAgIHNldFRpbWVvdXQoZGVsYXllZFdvcmsu
YmluZCh0aGlzKSwgMCk7Ci19OworICAgICAgICB0aGlzLl9ib3VuZFN0b3BDYXB0dXJpbmcgPSB0
aGlzLnN0b3BDYXB0dXJpbmcuYmluZCh0aGlzKTsKIAotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFu
YWdlci5FdmVudCA9IHsKLSAgICBSZWNvcmRpbmdDcmVhdGVkOiAidGltZWxpbmUtbWFuYWdlci1y
ZWNvcmRpbmctY3JlYXRlZCIsCi0gICAgUmVjb3JkaW5nTG9hZGVkOiAidGltZWxpbmUtbWFuYWdl
ci1yZWNvcmRpbmctbG9hZGVkIiwKLSAgICBDYXB0dXJpbmdTdGFydGVkOiAidGltZWxpbmUtbWFu
YWdlci1jYXB0dXJpbmctc3RhcnRlZCIsCi0gICAgQ2FwdHVyaW5nU3RvcHBlZDogInRpbWVsaW5l
LW1hbmFnZXItY2FwdHVyaW5nLXN0b3BwZWQiCi19OwotCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVN
YW5hZ2VyLk1heGltdW1BdXRvUmVjb3JkRHVyYXRpb24gPSA5MDAwMDsgLy8gOTAgc2Vjb25kcwot
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5NYXhpbXVtQXV0b1JlY29yZER1cmF0aW9uQWZ0
ZXJMb2FkRXZlbnQgPSAxMDAwMDsgLy8gMTAgc2Vjb25kcwotV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TWFuYWdlci5EZWFkVGltZVJlcXVpcmVkVG9TdG9wQXV0b1JlY29yZGluZ0Vhcmx5ID0gMjAwMDsg
Ly8gMiBzZWNvbmRzCisgICAgICAgIGZ1bmN0aW9uIGRlbGF5ZWRXb3JrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdGhpcy5fbG9hZE5ld1JlY29yZGluZygpOworICAgICAgICB9CiAKLVdlYklu
c3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBX
ZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLAorICAgICAgICAvLyBBbGxvdyBvdGhlciBjb2Rl
IHRvIHNldCB1cCBsaXN0ZW5lcnMgYmVmb3JlIGZpcmluZyB0aGUgaW5pdGlhbCBSZWNvcmRpbmdM
b2FkZWQgZXZlbnQuCisgICAgICAgIHNldFRpbWVvdXQoZGVsYXllZFdvcmsuYmluZCh0aGlzKSwg
MCk7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKQEAgLTcwLDE5ICs1NywxOSBAQCBXZWJJbnNw
ZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX2FjdGl2ZVJlY29yZGluZyB8fCAhdGhpcy5faXNDYXB0dXJpbmcpOwog
ICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlUmVjb3JkaW5nOwotICAgIH0sCisgICAgfQogCiAg
ICAgZ2V0IHJlY29yZGluZ3MoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29yZGlu
Z3Muc2xpY2UoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGlzQ2FwdHVyaW5nOiBmdW5jdGlvbigp
CisgICAgaXNDYXB0dXJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2FwdHVy
aW5nOwotICAgIH0sCisgICAgfQogCi0gICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0aW9uKHNob3Vs
ZENyZWF0ZVJlY29yZGluZykKKyAgICBzdGFydENhcHR1cmluZyhzaG91bGRDcmVhdGVSZWNvcmRp
bmcpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5faXNDYXB0dXJpbmcsICJU
aW1lbGluZU1hbmFnZXIgaXMgYWxyZWFkeSBjYXB0dXJpbmcuIik7CiAKQEAgLTk3LDkgKzg0LDkg
QEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLnRpbWVsaW5lTWFuYWdlci5jYXB0dXJpbmdTdGFydGVkKCk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgc3RvcENhcHR1
cmluZzogZnVuY3Rpb24oKQorICAgIHN0b3BDYXB0dXJpbmcoKQogICAgIHsKICAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5faXNDYXB0dXJpbmcsICJUaW1lbGluZU1hbmFnZXIgaXMgbm90IGNh
cHR1cmluZy4iKTsKIApAQCAtMTA4LDkgKzk1LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIE5PVEU6IEFsd2F5cyBzdG9wIGltbWVkaWF0
ZWx5IGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBUaW1lbGluZS5yZWNvcmRpbmdTdG9wcGVkIGV2
ZW50LgogICAgICAgICAvLyBUaGlzIHdheSB0aGUgVUkgZmVlbHMgYXMgcmVzcG9uc2l2ZSB0byBh
IHN0b3AgYXMgcG9zc2libGUuCiAgICAgICAgIHRoaXMuY2FwdHVyaW5nU3RvcHBlZCgpOwotICAg
IH0sCisgICAgfQogCi0gICAgdW5sb2FkUmVjb3JkaW5nOiBmdW5jdGlvbigpCisgICAgdW5sb2Fk
UmVjb3JkaW5nKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fYWN0aXZlUmVjb3JkaW5nKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIwLDE5ICsxMDcsMTkgQEAgV2ViSW5zcGVjdG9yLlRp
bWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fYWN0aXZlUmVjb3Jk
aW5nLnVubG9hZGVkKCk7CiAgICAgICAgIHRoaXMuX2FjdGl2ZVJlY29yZGluZyA9IG51bGw7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBjb21wdXRlRWxhcHNlZFRpbWU6IGZ1bmN0aW9uKHRpbWVzdGFt
cCkKKyAgICBjb21wdXRlRWxhcHNlZFRpbWUodGltZXN0YW1wKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9hY3RpdmVSZWNvcmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAg
ICByZXR1cm4gdGhpcy5fYWN0aXZlUmVjb3JkaW5nLmNvbXB1dGVFbGFwc2VkVGltZSh0aW1lc3Rh
bXApOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBjYXB0dXJpbmdT
dGFydGVkOiBmdW5jdGlvbigpCisgICAgY2FwdHVyaW5nU3RhcnRlZCgpCiAgICAgewogICAgICAg
ICBpZiAodGhpcy5faXNDYXB0dXJpbmcpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDAsOSAr
MTI3LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX2lzQ2FwdHVyaW5nID0gdHJ1ZTsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLkV2ZW50LkNhcHR1cmlu
Z1N0YXJ0ZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgY2FwdHVyaW5nU3RvcHBlZDogZnVuY3Rp
b24oKQorICAgIGNhcHR1cmluZ1N0b3BwZWQoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9p
c0NhcHR1cmluZykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2MSw5ICsxNDgsOSBAQCBXZWJJ
bnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYXV0
b0NhcHR1cmluZ01haW5SZXNvdXJjZSA9IG51bGw7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5FdmVudC5DYXB0dXJp
bmdTdG9wcGVkKTsKLSAgICB9LAorICAgIH0KIAotICAgIGV2ZW50UmVjb3JkZWQ6IGZ1bmN0aW9u
KHJlY29yZFBheWxvYWQpCisgICAgZXZlbnRSZWNvcmRlZChyZWNvcmRQYXlsb2FkKQogICAgIHsK
ICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLlRpbWVsaW5lT2JzZXJ2ZXIuCiAK
QEAgLTE3NCwxNyArMTYxLDE3IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICByZWNvcmRzLmZvckVhY2goZnVuY3Rpb24oY3VycmVudFZhbHVlKSB7
CiAgICAgICAgICAgICB0aGlzLl9hZGRSZWNvcmQoY3VycmVudFZhbHVlKTsKICAgICAgICAgfS5i
aW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIHBhZ2VEaWRMb2FkOiBmdW5jdGlvbih0
aW1lc3RhbXApCisgICAgcGFnZURpZExvYWQodGltZXN0YW1wKQogICAgIHsKICAgICAgICAgaWYg
KGlzTmFOKFdlYkluc3BlY3Rvci5mcmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJhbWUubG9hZEV2
ZW50VGltZXN0YW1wKSkKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5mcmFtZVJlc291cmNlTWFu
YWdlci5tYWluRnJhbWUubWFya0xvYWRFdmVudCh0aGlzLmFjdGl2ZVJlY29yZGluZy5jb21wdXRl
RWxhcHNlZFRpbWUodGltZXN0YW1wKSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRl
CiAKLSAgICBfcHJvY2Vzc05lc3RlZFJlY29yZHM6IGZ1bmN0aW9uKGNoaWxkUmVjb3JkUGF5bG9h
ZHMsIHBhcmVudFJlY29yZFBheWxvYWQpCisgICAgX3Byb2Nlc3NOZXN0ZWRSZWNvcmRzKGNoaWxk
UmVjb3JkUGF5bG9hZHMsIHBhcmVudFJlY29yZFBheWxvYWQpCiAgICAgewogICAgICAgICAvLyBD
b252ZXJ0IHRvIGEgc2luZ2xlIGl0ZW0gYXJyYXkgaWYgbmVlZGVkLgogICAgICAgICBpZiAoIShj
aGlsZFJlY29yZFBheWxvYWRzIGluc3RhbmNlb2YgQXJyYXkpKQpAQCAtMjEzLDkgKzIwMCw5IEBA
IFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAK
ICAgICAgICAgcmV0dXJuIHJlY29yZHM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc1Jl
Y29yZDogZnVuY3Rpb24ocmVjb3JkUGF5bG9hZCwgcGFyZW50UmVjb3JkUGF5bG9hZCkKKyAgICBf
cHJvY2Vzc1JlY29yZChyZWNvcmRQYXlsb2FkLCBwYXJlbnRSZWNvcmRQYXlsb2FkKQogICAgIHsK
ICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuYWN0aXZlUmVjb3JkaW5nLmNvbXB1dGVFbGFw
c2VkVGltZShyZWNvcmRQYXlsb2FkLnN0YXJ0VGltZSk7CiAgICAgICAgIHZhciBlbmRUaW1lID0g
dGhpcy5hY3RpdmVSZWNvcmRpbmcuY29tcHV0ZUVsYXBzZWRUaW1lKHJlY29yZFBheWxvYWQuZW5k
VGltZSk7CkBAIC0zNjksOSArMzU2LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9wcm9jZXNzRXZlbnQ6IGZ1bmN0aW9uKHJlY29yZFBheWxvYWQsIHBhcmVu
dFJlY29yZFBheWxvYWQpCisgICAgX3Byb2Nlc3NFdmVudChyZWNvcmRQYXlsb2FkLCBwYXJlbnRS
ZWNvcmRQYXlsb2FkKQogICAgIHsKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuYWN0aXZl
UmVjb3JkaW5nLmNvbXB1dGVFbGFwc2VkVGltZShyZWNvcmRQYXlsb2FkLnN0YXJ0VGltZSk7CiAg
ICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy5hY3RpdmVSZWNvcmRpbmcuY29tcHV0ZUVsYXBzZWRU
aW1lKHJlY29yZFBheWxvYWQuZW5kVGltZSk7CkBAIC00MjMsOSArNDEwLDkgQEAgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIF9sb2FkTmV3UmVjb3JkaW5nOiBmdW5j
dGlvbigpCisgICAgX2xvYWROZXdSZWNvcmRpbmcoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMu
X2FjdGl2ZVJlY29yZGluZyAmJiB0aGlzLl9hY3RpdmVSZWNvcmRpbmcuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNDUyLDkgKzQzOSw5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9sZWdhY3lGaXJzdFJlY29yZGVk
VGltZXN0YW1wID0gTmFOOwogICAgICAgICB0aGlzLl9hY3RpdmVSZWNvcmRpbmcgPSBuZXdSZWNv
cmRpbmc7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5UaW1lbGluZU1hbmFnZXIuRXZlbnQuUmVjb3JkaW5nTG9hZGVkLCB7b2xkUmVjb3JkaW5nfSk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY2FsbEZyYW1lc0Zyb21QYXlsb2FkOiBmdW5jdGlvbihw
YXlsb2FkKQorICAgIF9jYWxsRnJhbWVzRnJvbVBheWxvYWQocGF5bG9hZCkKICAgICB7CiAgICAg
ICAgIGlmICghcGF5bG9hZCkKICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNDgzLDE4ICs0
NzAsMTggQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICByZXR1cm4gcGF5bG9hZC5tYXAoY3JlYXRlQ2FsbEZyYW1lKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIF9hZGRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkKKyAgICBfYWRk
UmVjb3JkKHJlY29yZCkKICAgICB7CiAgICAgICAgIHRoaXMuX2FjdGl2ZVJlY29yZGluZy5hZGRS
ZWNvcmQocmVjb3JkKTsKIAogICAgICAgICAvLyBPbmx5IHdvcnJ5IGFib3V0IGRlYWQgdGltZSBh
ZnRlciB0aGUgbG9hZCBldmVudC4KICAgICAgICAgaWYgKCFpc05hTihXZWJJbnNwZWN0b3IuZnJh
bWVSZXNvdXJjZU1hbmFnZXIubWFpbkZyYW1lLmxvYWRFdmVudFRpbWVzdGFtcCkpCiAgICAgICAg
ICAgICB0aGlzLl9yZXNldEF1dG9SZWNvcmRpbmdEZWFkVGltZVRpbWVvdXQoKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9zdGFydEF1dG9DYXB0dXJpbmc6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9z
dGFydEF1dG9DYXB0dXJpbmcoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIWV2ZW50LnRhcmdl
dC5pc01haW5GcmFtZSgpIHx8ICh0aGlzLl9pc0NhcHR1cmluZyAmJiAhdGhpcy5fYXV0b0NhcHR1
cmluZ01haW5SZXNvdXJjZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MTksOSAr
NTA2LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLl9ib3VuZFN0
b3BDYXB0dXJpbmcsIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuTWF4aW11bUF1dG9SZWNv
cmREdXJhdGlvbik7CiAKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfc3RvcEF1dG9SZWNvcmRpbmdTb29uOiBmdW5jdGlvbigpCisgICAgX3N0b3BBdXRvUmVjb3Jk
aW5nU29vbigpCiAgICAgewogICAgICAgICAvLyBPbmx5IGF1dG8gc3RvcCB3aGVuIGF1dG8gY2Fw
dHVyaW5nLgogICAgICAgICBpZiAoIXRoaXMuX2lzQ2FwdHVyaW5nIHx8ICF0aGlzLl9hdXRvQ2Fw
dHVyaW5nTWFpblJlc291cmNlKQpAQCAtNTMwLDkgKzUxNyw5IEBAIFdlYkluc3BlY3Rvci5UaW1l
bGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fc3RvcENhcHR1cmlu
Z1RpbWVvdXQpCiAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3RvcENhcHR1cmluZ1Rp
bWVvdXQpOwogICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nVGltZW91dCA9IHNldFRpbWVvdXQo
dGhpcy5fYm91bmRTdG9wQ2FwdHVyaW5nLCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLk1h
eGltdW1BdXRvUmVjb3JkRHVyYXRpb25BZnRlckxvYWRFdmVudCk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfcmVzZXRBdXRvUmVjb3JkaW5nRGVhZFRpbWVUaW1lb3V0OiBmdW5jdGlvbigpCisgICAg
X3Jlc2V0QXV0b1JlY29yZGluZ0RlYWRUaW1lVGltZW91dCgpCiAgICAgewogICAgICAgICAvLyBP
bmx5IG1vbml0b3IgZGVhZCB0aW1lIHdoZW4gYXV0byBjYXB0dXJpbmcuCiAgICAgICAgIGlmICgh
dGhpcy5faXNDYXB0dXJpbmcgfHwgIXRoaXMuX2F1dG9DYXB0dXJpbmdNYWluUmVzb3VyY2UpCkBA
IC01NDEsOSArNTI4LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGlmICh0aGlzLl9kZWFkVGltZVRpbWVvdXQpCiAgICAgICAgICAgICBjbGVh
clRpbWVvdXQodGhpcy5fZGVhZFRpbWVUaW1lb3V0KTsKICAgICAgICAgdGhpcy5fZGVhZFRpbWVU
aW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLl9ib3VuZFN0b3BDYXB0dXJpbmcsIFdlYkluc3BlY3Rv
ci5UaW1lbGluZU1hbmFnZXIuRGVhZFRpbWVSZXF1aXJlZFRvU3RvcEF1dG9SZWNvcmRpbmdFYXJs
eSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlOiBmdW5jdGlv
bihldmVudCkKKyAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAg
ICAgLy8gSWdub3JlIHJlc291cmNlIGV2ZW50cyB3aGVuIHRoZXJlIGlzbid0IGEgbWFpbiBmcmFt
ZSB5ZXQuIFRob3NlIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGJ5CiAgICAgICAgIC8vIGxvYWRpbmcg
dGhlIGNhY2hlZCByZXNvdXJjZXMgd2hlbiB0aGUgaW5zcGVjdG9yIG9wZW5zLCBhbmQgdGhleSBk
byBub3QgaGF2ZSB0aW1pbmcgaW5mb3JtYXRpb24uCkBAIC01NjEsOSArNTQ4LDkgQEAgV2ViSW5z
cGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgdGhpcy5fYWRkUmVjb3JkKG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUaW1l
bGluZVJlY29yZChtYWluUmVzb3VyY2UpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZXNvdXJj
ZVdhc0FkZGVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfcmVzb3VyY2VXYXNBZGRlZChldmVudCkK
ICAgICB7CiAgICAgICAgIC8vIElnbm9yZSByZXNvdXJjZSBldmVudHMgd2hlbiB0aGVyZSBpc24n
dCBhIG1haW4gZnJhbWUgeWV0LiBUaG9zZSBldmVudHMgYXJlIHRyaWdnZXJlZCBieQogICAgICAg
ICAvLyBsb2FkaW5nIHRoZSBjYWNoZWQgcmVzb3VyY2VzIHdoZW4gdGhlIGluc3BlY3RvciBvcGVu
cywgYW5kIHRoZXkgZG8gbm90IGhhdmUgdGltaW5nIGluZm9ybWF0aW9uLgpAQCAtNTc3LDQgKzU2
NCwxMyBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB9
CiB9OwogCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5UaW1lbGluZU1h
bmFnZXIuRXZlbnQgPSB7CisgICAgUmVjb3JkaW5nQ3JlYXRlZDogInRpbWVsaW5lLW1hbmFnZXIt
cmVjb3JkaW5nLWNyZWF0ZWQiLAorICAgIFJlY29yZGluZ0xvYWRlZDogInRpbWVsaW5lLW1hbmFn
ZXItcmVjb3JkaW5nLWxvYWRlZCIsCisgICAgQ2FwdHVyaW5nU3RhcnRlZDogInRpbWVsaW5lLW1h
bmFnZXItY2FwdHVyaW5nLXN0YXJ0ZWQiLAorICAgIENhcHR1cmluZ1N0b3BwZWQ6ICJ0aW1lbGlu
ZS1tYW5hZ2VyLWNhcHR1cmluZy1zdG9wcGVkIgorfTsKKworV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TWFuYWdlci5NYXhpbXVtQXV0b1JlY29yZER1cmF0aW9uID0gOTAwMDA7IC8vIDkwIHNlY29uZHMK
K1dlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuTWF4aW11bUF1dG9SZWNvcmREdXJhdGlvbkFm
dGVyTG9hZEV2ZW50ID0gMTAwMDA7IC8vIDEwIHNlY29uZHMKK1dlYkluc3BlY3Rvci5UaW1lbGlu
ZU1hbmFnZXIuRGVhZFRpbWVSZXF1aXJlZFRvU3RvcEF1dG9SZWNvcmRpbmdFYXJseSA9IDIwMDA7
IC8vIDIgc2Vjb25kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCmlu
ZGV4IDg1YmU1NzhlZThjNDQ1ZGVkOGJmNTVmZmI0OTgxN2JhZDYxNzRmNGUuLmVkYzE0MjM1ZTJk
ZDc0NzkxZWMzMTY1ZTZkMmM2OTc3YjQ4OGU5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBl
VG9rZW5Bbm5vdGF0b3IuanMKQEAgLTIzLDIyICsyMywyMCBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3Ig
PSBmdW5jdGlvbihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQorV2ViSW5zcGVjdG9yLlR5
cGVUb2tlbkFubm90YXRvciA9IGNsYXNzIFR5cGVUb2tlbkFubm90YXRvciBleHRlbmRzIFdlYklu
c3BlY3Rvci5Bbm5vdGF0b3IKIHsKLSAgICBXZWJJbnNwZWN0b3IuQW5ub3RhdG9yLmNhbGwodGhp
cywgc291cmNlQ29kZVRleHRFZGl0b3IpOwotCi0gICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0Owot
ICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107Ci0gICAgdGhpcy5fdHlwZVRva2VuQm9va21h
cmtzID0gW107Ci19OworICAgIGNvbnN0cnVjdG9yKHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3Jp
cHQpCisgICAgeworICAgICAgICBzdXBlcihzb3VyY2VDb2RlVGV4dEVkaXRvcik7CiAKLVdlYklu
c3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9y
OiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLAotICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUsCisgICAgICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlw
dDsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKKyAgICAgICAgdGhpcy5fdHlw
ZVRva2VuQm9va21hcmtzID0gW107CisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBp
bnNlcnRBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIGluc2VydEFubm90YXRpb25zKCkKICAg
ICB7CiAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtNzcsMTYgKzc1LDE2IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90
eXBlID0gewogICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKICAgICAg
ICAgICAgIH0uYmluZCh0aGlzKSwgdGltZW91dFRpbWUpOwogICAgICAgICB9LmJpbmQodGhpcykp
OwotICAgIH0sCisgICAgfQogCi0gICAgY2xlYXJBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAg
IGNsZWFyQW5ub3RhdGlvbnMoKQogICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5z
KCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfaW5zZXJ0VHlwZVRv
a2VuOiBmdW5jdGlvbihub2RlKQorICAgIF9pbnNlcnRUeXBlVG9rZW4obm9kZSkKICAgICB7CiAg
ICAgICAgIGlmIChub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLklkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGlmICghbm9kZS5hdHRhY2htZW50cy5f
X3R5cGVUb2tlbiAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzICYmIG5vZGUuYXR0YWNobWVudHMu
dHlwZXMuaXNWYWxpZCkKQEAgLTExNSw5ICsxMTMsOSBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
QW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAobm9kZS5hdHRhY2htZW50cy5f
X3R5cGVUb2tlbikKICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4udXBk
YXRlKG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXMpOwotICAgIH0sCisgICAgfQogCi0gICAg
X2luc2VydFRva2VuOiBmdW5jdGlvbihvcmlnaW5hbE9mZnNldCwgbm9kZSwgc2hvdWxkVHJhbnNs
YXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QsIHR5cGVUb2tlblRpdGxlVHlwZSwgZnVuY3Rp
b25PclZhcmlhYmxlTmFtZSkKKyAgICBfaW5zZXJ0VG9rZW4ob3JpZ2luYWxPZmZzZXQsIG5vZGUs
IHNob3VsZFRyYW5zbGF0ZU9mZnNldFRvQWZ0ZXJQYXJhbWV0ZXJMaXN0LCB0eXBlVG9rZW5UaXRs
ZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpCiAgICAgewogICAgICAgICB2YXIgdG9rZW5Q
b3NpdGlvbiA9IHRoaXMuc291cmNlQ29kZVRleHRFZGl0b3Iub3JpZ2luYWxPZmZzZXRUb0N1cnJl
bnRQb3NpdGlvbihvcmlnaW5hbE9mZnNldCk7CiAgICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0g
dGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci5jdXJyZW50UG9zaXRpb25Ub0N1cnJlbnRPZmZzZXQo
dG9rZW5Qb3NpdGlvbik7CkBAIC0xNDAsOSArMTM4LDkgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBl
VG9rZW4gPSB0eXBlVG9rZW47CiAgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzLnB1c2gobm9k
ZSk7CiAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcy5wdXNoKGJvb2ttYXJrKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIF90cmFuc2xhdGVUb09mZnNldEFmdGVyRnVuY3Rpb25QYXJhbWV0
ZXJMaXN0OiBmdW5jdGlvbihub2RlLCBvZmZzZXQsIHNvdXJjZVN0cmluZykKKyAgICBfdHJhbnNs
YXRlVG9PZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdChub2RlLCBvZmZzZXQsIHNvdXJj
ZVN0cmluZykKICAgICB7CiAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCB3
ZSBnZXQgdGhlIG9mZnNldCBzdGFydGluZyBhdCB0aGUgZnVuY3Rpb24ga2V5d29yZCAob3IgYWZ0
ZXIgdGhlIGdldC9zZXQga2V5d29yZHMpLgogICAgICAgICAvLyBXZSB3aWxsIHJldHVybiB0aGUg
b2Zmc2V0IGZvciB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiB0aGUgZnVuY3Rpb24gZGVjbGFy
YXRpb24uCkBAIC0xODMsOSArMTgxLDkgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gb2Zmc2V0ICsgMTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9jbGVhclR5cGVUb2tlbnM6IGZ1bmN0aW9uKCkKKyAgICBf
Y2xlYXJUeXBlVG9rZW5zKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzLmZv
ckVhY2goZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5fX3R5
cGVUb2tlbiA9IG51bGw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249211</attachid>
            <date>2015-03-22 18:26:15 -0700</date>
            <delta_ts>2015-03-22 22:03:10 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>bug-142890-20150322182539.patch</filename>
            <type>text/plain</type>
            <size>249514</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA0
N2M2MTM1NTZmNzBlNDhiNDcyNGIzNWFlZDIxN2Q4YzY1OTFlMDM4Li5lM2ZlMzQ0OGRhZWI2MzZh
Y2UzN2M1YjMyNDFmOGIxM2Y3Y2JmOWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMyBAQAorMjAxNS0wMy0yMCAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRvcHQgRVM2IENsYXNzIFN5bnRheCBmb3IgYWxs
IENvbnRyb2xsZXIgT2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQyODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJv
LgorCisgICAgICAgIC0gQ29udmVydCBhbGwgVXNlckludGVyZmFjZS9Db250cm9sbGVycyBvYmpl
Y3RzIHRvIGNsYXNzZXMKKyAgICAgICAgLSBDb252ZXJ0IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0
byBjb25zdHJ1Y3RvciBtZXRob2RzCisgICAgICAgIC0gQ29udmVydCAiY29uc3RydWN0b3IubWV0
aG9kIiB0byBjbGFzcyBzdGF0aWMgbWV0aG9kcyB3aGVyZSBwb3NzaWJsZQorICAgICAgICAtIENv
bnZlcnQgYWxsIG1ldGhvZHMgdG8gbWV0aG9kIHN5bnRheCwgZWxpbWluYXRlIGNvbW1hcyBiZXR3
ZWVuIG1ldGhvZHMKKyAgICAgICAgLSBDb252ZXJ0IGFsbCBzdXBlcmNsYXNzIGNhbGxzIGluIGNs
YXNzZXMgdG8gdXNlICJzdXBlciIKKyAgICAgICAgLSBSZW1vdmVkIEZJWE1FIGZyb20gV2ViSW5z
cGVjdG9yLk9iamVjdCBzdWJjbGFzc2VzLCBhZGRlZCBjYWxscyB0byBzdXBlci4KKyAgICAgICAg
LSBGaXhlZCBzdHJpY3QgbW9kZSBpc3N1ZXMgbm93IHRoYXQgY2xhc3NlcyBlbmZvcmNlIHN0cmlj
dCBtb2RlIChzZWUgYmVsb3cpLgorCisgICAgICAgICogVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9y
bWF0dGVyLmpzOgorICAgICAgICAqIFRvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRl
bnRCdWlsZGVyLmpzOgorICAgICAgICBVcGRhdGVkIHRvIG1hdGNoIGNvcnJlc3BvbmRpbmcgZmls
ZXMgaW4gVXNlckludGVyZmFjZS9Db250cm9sbGVycy4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvKi5qczoKKyAgICAgICAgTWFueSBmaWxlcyBtb2RpZmllZCBtb3N0bHkg
bWVjaGFuaWNhbGx5IChyZWdleCBmaW5kLXJlcGxhY2UpLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanM6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5q
czoKKyAgICAgICAgUmVwbGFjZWQgY29uc3QgdXNhZ2Ugd2l0aCB2YXIuIFVzZSBvZiBjb25zdCBp
cyBwcm9oaWJpdGVkIGluIHN0cmljdCBtb2RlLCB3aGljaCBpcyBpbXBsaWNpdCB3aXRoaW4gYSBj
bGFzcy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvRE9NVHJlZU1hbmFnZXIuanM6CisgICAgICAgIE1vdmVkIGZ1bmN0aW9uIGRlY2xhcmF0
aW9ucyBvdXQgb2YgaWYgc3RhdGVtZW50cy4gU3RyaWN0IG1vZGUgZG9lcyBub3QgYWxsb3cgZnVu
Y3Rpb24gZGVjbGFyYXRpb25zIGluIGEgbGV4aWNhbGx5IG5lc3RlZCBzdGF0ZW1lbnQuCisKIDIw
MTUtMDMtMjAgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogRmFzdCB0eXBpbmcgbGFncyBpbiB0aGUgU3R5bGVzIHNpZGViYXIg
b3IgQ29uc29sZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0
eVByaW50aW5nL0Zvcm1hdHRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29scy9QcmV0
dHlQcmludGluZy9Gb3JtYXR0ZXIuanMKaW5kZXggNWE3ZjJkODBhMmY1NTQxZWIzNzVmNzk1YmQw
NDU5ZTRlZTE4NWNlMC4uYmZhOTk4ZWZmODJkYjczNDVmM2NkYmE4MzA3MjUwZTEwYzhlNTdhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zv
cm1hdHRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvRm9ybWF0dGVyLmpzCkBAIC0yMywyNCArMjMsMjMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi1mdW5jdGlvbiBGb3JtYXR0ZXIoY29kZU1pcnJvciwgYnVp
bGRlcikKK2NsYXNzIEZvcm1hdHRlcgogewotICAgIGNvbnNvbGUuYXNzZXJ0KGNvZGVNaXJyb3Ip
OwotICAgIGNvbnNvbGUuYXNzZXJ0KGJ1aWxkZXIpOwotCi0gICAgdGhpcy5fY29kZU1pcnJvciA9
IGNvZGVNaXJyb3I7Ci0gICAgdGhpcy5fYnVpbGRlciA9IGJ1aWxkZXI7CisgICAgY29uc3RydWN0
b3IoY29kZU1pcnJvciwgYnVpbGRlcikKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNv
ZGVNaXJyb3IpOworICAgICAgICBjb25zb2xlLmFzc2VydChidWlsZGVyKTsKIAotICAgIHRoaXMu
X2xhc3RUb2tlbiA9IG51bGw7Ci0gICAgdGhpcy5fbGFzdENvbnRlbnQgPSAiIjsKLX0KKyAgICAg
ICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVNaXJyb3I7CisgICAgICAgIHRoaXMuX2J1aWxkZXIg
PSBidWlsZGVyOwogCi1Gb3JtYXR0ZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBG
b3JtYXR0ZXIsCisgICAgICAgIHRoaXMuX2xhc3RUb2tlbiA9IG51bGw7CisgICAgICAgIHRoaXMu
X2xhc3RDb250ZW50ID0gIiI7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKLSAgICBmb3JtYXQ6
IGZ1bmN0aW9uKGZyb20sIHRvKQorICAgIGZvcm1hdChmcm9tLCB0bykKICAgICB7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2J1aWxkZXIub3JpZ2luYWxDb250ZW50ID09PSBudWxsKTsK
ICAgICAgICAgaWYgKHRoaXMuX2J1aWxkZXIub3JpZ2luYWxDb250ZW50ICE9PSBudWxsKQpAQCAt
NzcsMTEgKzc2LDExIEBAIEZvcm1hdHRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAg
ICAgICB0aGlzLl9idWlsZGVyLmZpbmlzaCgpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJp
dmF0ZQogCi0gICAgX2hhbmRsZVRva2VuOiBmdW5jdGlvbihtb2RlLCB0b2tlbiwgc3RhdGUsIHN0
cmVhbSwgb3JpZ2luYWxQb3NpdGlvbiwgaXNXaGl0ZVNwYWNlLCBzdGFydE9mTmV3TGluZSwgZmly
c3RUb2tlbk9uTGluZSkKKyAgICBfaGFuZGxlVG9rZW4obW9kZSwgdG9rZW4sIHN0YXRlLCBzdHJl
YW0sIG9yaWdpbmFsUG9zaXRpb24sIGlzV2hpdGVTcGFjZSwgc3RhcnRPZk5ld0xpbmUsIGZpcnN0
VG9rZW5PbkxpbmUpCiAgICAgewogICAgICAgICAvLyBTdHJpbmcgY29udGVudCBvZiB0aGUgdG9r
ZW4uCiAgICAgICAgIHZhciBjb250ZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKQEAgLTE0NiwxNyAr
MTQ1LDE3IEBAIEZvcm1hdHRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFJlY29yZCB0aGlz
IHRva2VuIGFzIHRoZSBsYXN0IHRva2VuLgogICAgICAgICB0aGlzLl9sYXN0VG9rZW4gPSB0b2tl
bjsKICAgICAgICAgdGhpcy5fbGFzdENvbnRlbnQgPSBjb250ZW50OwotICAgIH0sCisgICAgfQog
Ci0gICAgX2hhbmRsZUVtcHR5TGluZTogZnVuY3Rpb24oKQorICAgIF9oYW5kbGVFbXB0eUxpbmUo
KQogICAgIHsKICAgICAgICAgLy8gUHJlc2VydmUgb3JpZ2luYWwgd2hpdGVzcGFjZSBvbmx5IGxp
bmVzIGJ5IGFkZGluZyBhIG5ld2xpbmUuCiAgICAgICAgIC8vIEhvd2V2ZXIsIGRvbid0IGRvIHRo
aXMgaWYgdGhlIGJ1aWxkZXIganVzdCBhZGRlZCBtdWx0aXBsZSBuZXdsaW5lcy4KICAgICAgICAg
aWYgKCEodGhpcy5fYnVpbGRlci5sYXN0VG9rZW5XYXNOZXdsaW5lICYmIHRoaXMuX2J1aWxkZXIu
bGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBsZSkpCiAgICAgICAgICAgICB0aGlzLl9idWlsZGVy
LmFwcGVuZE5ld2xpbmUodHJ1ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGFuZGxlTGluZUVu
ZGluZzogZnVuY3Rpb24ob3JpZ2luYWxOZXdMaW5lUG9zaXRpb24pCisgICAgX2hhbmRsZUxpbmVF
bmRpbmcob3JpZ2luYWxOZXdMaW5lUG9zaXRpb24pCiAgICAgewogICAgICAgICAvLyBSZWNvcmQg
dGhlIG9yaWdpbmFsIGxpbmUgZW5kaW5nLgogICAgICAgICB0aGlzLl9idWlsZGVyLmFkZE9yaWdp
bmFsTGluZUVuZGluZyhvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1
aWxkZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9y
bWF0dGVyQ29udGVudEJ1aWxkZXIuanMKaW5kZXggM2MzNmEyYmIzZjM4NDRlODM3YzZiMGE4NmZm
OGE4YzhlNWUzMDBiNC4uODI5MWMzNGE0NjA2ZjBhODAyZGEwNjRhODNlYzNiYTEzMTQ4OGM2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zv
cm1hdHRlckNvbnRlbnRCdWlsZGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Ub29s
cy9QcmV0dHlQcmludGluZy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcwpAQCAtMjMsNzAgKzIz
LDY5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotZnVuY3Rp
b24gRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5ncywg
Zm9ybWF0dGVkTGluZUVuZGluZ3MsIG9yaWdpbmFsT2Zmc2V0LCBmb3JtYXR0ZWRPZmZzZXQsIGlu
ZGVudFN0cmluZykKK2NsYXNzIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyCiB7Ci0gICAgdGhpcy5f
b3JpZ2luYWxDb250ZW50ID0gbnVsbDsKLSAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50ID0gW107
Ci0gICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCA9IDA7Ci0KLSAgICB0aGlzLl9zdGFy
dE9mTGluZSA9IHRydWU7Ci0gICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7Ci0g
ICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7Ci0gICAgdGhpcy5sYXN0TmV3
bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7CisgICAgY29uc3RydWN0b3IobWFwcGluZywg
b3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGluZUVuZGluZ3MsIG9yaWdpbmFsT2Zmc2V0
LCBmb3JtYXR0ZWRPZmZzZXQsIGluZGVudFN0cmluZykKKyAgICB7CisgICAgICAgIHRoaXMuX29y
aWdpbmFsQ29udGVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQgPSBb
XTsKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCA9IDA7CiAKLSAgICB0aGlz
Ll9pbmRlbnQgPSAwOwotICAgIHRoaXMuX2luZGVudFN0cmluZyA9IGluZGVudFN0cmluZzsKLSAg
ICB0aGlzLl9pbmRlbnRDYWNoZSA9IFsiIiwgdGhpcy5faW5kZW50U3RyaW5nXTsKKyAgICAgICAg
dGhpcy5fc3RhcnRPZkxpbmUgPSB0cnVlOworICAgICAgICB0aGlzLmxhc3RUb2tlbldhc05ld2xp
bmUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7
CisgICAgICAgIHRoaXMubGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBsZSA9IGZhbHNlOwogCi0g
ICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7Ci0gICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5n
cyA9IG9yaWdpbmFsTGluZUVuZGluZ3MgfHwgW107Ci0gICAgdGhpcy5fZm9ybWF0dGVkTGluZUVu
ZGluZ3MgPSBmb3JtYXR0ZWRMaW5lRW5kaW5ncyB8fCBbXTsKLSAgICB0aGlzLl9vcmlnaW5hbE9m
ZnNldCA9IG9yaWdpbmFsT2Zmc2V0IHx8IDA7Ci0gICAgdGhpcy5fZm9ybWF0dGVkT2Zmc2V0ID0g
Zm9ybWF0dGVkT2Zmc2V0IHx8IDA7CisgICAgICAgIHRoaXMuX2luZGVudCA9IDA7CisgICAgICAg
IHRoaXMuX2luZGVudFN0cmluZyA9IGluZGVudFN0cmluZzsKKyAgICAgICAgdGhpcy5faW5kZW50
Q2FjaGUgPSBbIiIsIHRoaXMuX2luZGVudFN0cmluZ107CiAKLSAgICB0aGlzLl9sYXN0T3JpZ2lu
YWxQb3NpdGlvbiA9IDA7Ci0gICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gMDsKLX0K
KyAgICAgICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7CisgICAgICAgIHRoaXMuX29yaWdpbmFs
TGluZUVuZGluZ3MgPSBvcmlnaW5hbExpbmVFbmRpbmdzIHx8IFtdOworICAgICAgICB0aGlzLl9m
b3JtYXR0ZWRMaW5lRW5kaW5ncyA9IGZvcm1hdHRlZExpbmVFbmRpbmdzIHx8IFtdOworICAgICAg
ICB0aGlzLl9vcmlnaW5hbE9mZnNldCA9IG9yaWdpbmFsT2Zmc2V0IHx8IDA7CisgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZE9mZnNldCA9IGZvcm1hdHRlZE9mZnNldCB8fCAwOwogCi1Gb3JtYXR0ZXJD
b250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IEZvcm1hdHRlckNv
bnRlbnRCdWlsZGVyLAorICAgICAgICB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlvbiA9IDA7Cisg
ICAgICAgIHRoaXMuX2xhc3RGb3JtYXR0ZWRQb3NpdGlvbiA9IDA7CisgICAgfQogCiAgICAgLy8g
UHVibGljCiAKICAgICBnZXQgb3JpZ2luYWxDb250ZW50KCkKICAgICB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9vcmlnaW5hbENvbnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZm9ybWF0
dGVkQ29udGVudCgpCiAgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5fZm9ybWF0
dGVkQ29udGVudC5qb2luKCIiKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZm9ybWF0dGVkLmxl
bmd0aCA9PT0gdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCk7CiAgICAgICAgIHJldHVybiBm
b3JtYXR0ZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbWFwcGluZygpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fbWFwcGluZzsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBvcmln
aW5hbExpbmVFbmRpbmdzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9vcmlnaW5hbExp
bmVFbmRpbmdzOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGZvcm1hdHRlZExpbmVFbmRpbmdz
KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5nczsKLSAg
ICB9LAorICAgIH0KIAotICAgIHNldE9yaWdpbmFsQ29udGVudDogZnVuY3Rpb24ob3JpZ2luYWxD
b250ZW50KQorICAgIHNldE9yaWdpbmFsQ29udGVudChvcmlnaW5hbENvbnRlbnQpCiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fb3JpZ2luYWxDb250ZW50KTsKICAgICAgICAg
dGhpcy5fb3JpZ2luYWxDb250ZW50ID0gb3JpZ2luYWxDb250ZW50OwotICAgIH0sCisgICAgfQog
Ci0gICAgYXBwZW5kVG9rZW46IGZ1bmN0aW9uKHN0cmluZywgb3JpZ2luYWxQb3NpdGlvbikKKyAg
ICBhcHBlbmRUb2tlbihzdHJpbmcsIG9yaWdpbmFsUG9zaXRpb24pCiAgICAgewogICAgICAgICBp
ZiAodGhpcy5fc3RhcnRPZkxpbmUpCiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRJbmRlbnQoKTsK
QEAgLTk3LDE4ICs5NiwxOCBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuX3N0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgICAgIHRoaXMubGFzdFRv
a2VuV2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRlc3Bh
Y2UgPSBmYWxzZTsKLSAgICB9LAorICAgIH0KIAotICAgIGFwcGVuZFNwYWNlOiBmdW5jdGlvbigp
CisgICAgYXBwZW5kU3BhY2UoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9zdGFydE9mTGlu
ZSkgewogICAgICAgICAgICAgdGhpcy5fYXBwZW5kKCIgIik7CiAgICAgICAgICAgICB0aGlzLmxh
c3RUb2tlbldhc05ld2xpbmUgPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMubGFzdFRva2VuV2Fz
V2hpdGVzcGFjZSA9IHRydWU7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIGFwcGVu
ZE5ld2xpbmU6IGZ1bmN0aW9uKGZvcmNlKQorICAgIGFwcGVuZE5ld2xpbmUoZm9yY2UpCiAgICAg
ewogICAgICAgICBpZiAoKCF0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgJiYgIXRoaXMuX3N0YXJ0
T2ZMaW5lKSB8fCBmb3JjZSkgewogICAgICAgICAgICAgdGhpcy5fYXBwZW5kKCJcbiIpOwpAQCAt
MTE4LDkgKzExNyw5IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwogICAgICAgICAg
ICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7CiAgICAgICAgIH0K
LSAgICB9LAorICAgIH0KIAotICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXM6IGZ1bmN0aW9uKG5l
d2xpbmVzKQorICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXMobmV3bGluZXMpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydChuZXdsaW5lcyA+IDApOwogCkBAIC0xMzEsOSArMTMwLDkgQEAg
Rm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh3YXNN
dWx0aXBsZSkKICAgICAgICAgICAgIHRoaXMubGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBsZSA9
IHRydWU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZW1vdmVMYXN0TmV3bGluZTogZnVuY3Rpb24o
KQorICAgIHJlbW92ZUxhc3ROZXdsaW5lKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X2Zvcm1hdHRlZENvbnRlbnQubGFzdFZhbHVlID09PSAiXG4iKTsKQEAgLTE0Myw0OCArMTQyLDQ4
IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRo
aXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5sYXN0VG9r
ZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAg
IGluZGVudDogZnVuY3Rpb24oKQorICAgIGluZGVudCgpCiAgICAgewogICAgICAgICArK3RoaXMu
X2luZGVudDsKLSAgICB9LAorICAgIH0KIAotICAgIGRlZGVudDogZnVuY3Rpb24oKQorICAgIGRl
ZGVudCgpCiAgICAgewogICAgICAgICAtLXRoaXMuX2luZGVudDsKIAogICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLl9pbmRlbnQgPj0gMCk7CiAgICAgICAgIGlmICh0aGlzLl9pbmRlbnQgPCAw
KQogICAgICAgICAgICAgdGhpcy5faW5kZW50ID0gMDsKLSAgICB9LAorICAgIH0KIAotICAgIGFk
ZE9yaWdpbmFsTGluZUVuZGluZzogZnVuY3Rpb24ob3JpZ2luYWxQb3NpdGlvbikKKyAgICBhZGRP
cmlnaW5hbExpbmVFbmRpbmcob3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIHRoaXMu
X29yaWdpbmFsTGluZUVuZGluZ3MucHVzaChvcmlnaW5hbFBvc2l0aW9uKTsKLSAgICB9LAorICAg
IH0KIAotICAgIGZpbmlzaDogZnVuY3Rpb24oKQorICAgIGZpbmlzaCgpCiAgICAgewogICAgICAg
ICB0aGlzLmFwcGVuZE5ld2xpbmUoKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUK
IAotICAgIF9wb3BOZXdMaW5lOiBmdW5jdGlvbigpCisgICAgX3BvcE5ld0xpbmUoKQogICAgIHsK
ICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LnBvcCgpOwogICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoIC09IHJlbW92ZWQubGVuZ3RoOwogICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wb3AoKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9hcHBlbmQ6IGZ1bmN0aW9uKHN0cikKKyAgICBfYXBwZW5kKHN0cikKICAgICB7CiAgICAg
ICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQucHVzaChzdHIpOwogICAgICAgICB0aGlzLl9mb3Jt
YXR0ZWRDb250ZW50TGVuZ3RoICs9IHN0ci5sZW5ndGg7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
YXBwZW5kSW5kZW50OiBmdW5jdGlvbigpCisgICAgX2FwcGVuZEluZGVudCgpCiAgICAgewogICAg
ICAgICAvLyBJbmRlbnQgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUuCiAgICAgICAgIGlmICh0aGlz
Ll9pbmRlbnQgPCB0aGlzLl9pbmRlbnRDYWNoZS5sZW5ndGgpIHsKQEAgLTE5Myw3ICsxOTIsNyBA
QCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBJbmRlbnQgd2FzIG5vdCBpbiB0aGUgY2FjaGUsIGZpbGwgdXAgdGhlIGNhY2hlIHVw
IHdpdGggd2hhdCB3YXMgbmVlZGVkLgotICAgICAgICBjb25zdCBtYXhDYWNoZUluZGVudCA9IDIw
OworICAgICAgICB2YXIgbWF4Q2FjaGVJbmRlbnQgPSAyMDsKICAgICAgICAgdmFyIG1heCA9IE1h
dGgubWluKHRoaXMuX2luZGVudCwgbWF4Q2FjaGVJbmRlbnQpOwogICAgICAgICBmb3IgKHZhciBp
ID0gdGhpcy5faW5kZW50Q2FjaGUubGVuZ3RoOyBpIDw9IG1heDsgKytpKQogICAgICAgICAgICAg
dGhpcy5faW5kZW50Q2FjaGVbaV0gPSB0aGlzLl9pbmRlbnRDYWNoZVtpIC0gMV0gKyB0aGlzLl9p
bmRlbnRTdHJpbmc7CkBAIC0yMDcsOSArMjA2LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZCh0aGlzLl9pbmRlbnRD
YWNoZVtpbmRlbnRdKTsKICAgICAgICAgICAgIGluZGVudCAtPSBtYXhDYWNoZUluZGVudDsKICAg
ICAgICAgfSB3aGlsZSAoaW5kZW50ID4gMCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYWRkTWFw
cGluZ0lmTmVlZGVkOiBmdW5jdGlvbihvcmlnaW5hbFBvc2l0aW9uKQorICAgIF9hZGRNYXBwaW5n
SWZOZWVkZWQob3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGlmIChvcmlnaW5hbFBv
c2l0aW9uIC0gdGhpcy5fbGFzdE9yaWdpbmFsUG9zaXRpb24gPT09IHRoaXMuX2Zvcm1hdHRlZENv
bnRlbnRMZW5ndGggLSB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRpb24pCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yMTksOSArMjE4LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90
eXBlID0gewogCiAgICAgICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID0gb3JpZ2luYWxQ
b3NpdGlvbjsKICAgICAgICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5fZm9y
bWF0dGVkQ29udGVudExlbmd0aDsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRGb3JtYXR0ZWRM
aW5lRW5kaW5nOiBmdW5jdGlvbigpCisgICAgX2FkZEZvcm1hdHRlZExpbmVFbmRpbmcoKQogICAg
IHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fZm9ybWF0dGVkQ29udGVudC5sYXN0VmFs
dWUgPT09ICJcbiIpOwogICAgICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wdXNoKHRo
aXMuX2Zvcm1hdHRlZENvbnRlbnRMZW5ndGggLSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVy
TWFuYWdlci5qcwppbmRleCAzZGMxMWYxY2MwMzQxMzFhMTJmY2Q2NzJlZjUyYmZhNWFmYTllYzZl
Li41MjY4NTc5OGE0ZWMwNjBmZjMwZDVhN2FiZDU2MGU5ZThiMTA1ODEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1h
bmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC0yMyw1OCArMjMsNTIgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5h
Z2VyID0gZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlciA9IGNsYXNzIEFu
YWx5emVyTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhN
RTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNh
bGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAg
ICB0aGlzLl9lc2xpbnRDb25maWcgPSB7Ci0gICAgICAgIGVudjogewotICAgICAgICAgICAgImJy
b3dzZXIiOiB0cnVlLAotICAgICAgICAgICAgIm5vZGUiOiBmYWxzZQotICAgICAgICB9LAotICAg
ICAgICBnbG9iYWxzOiB7Ci0gICAgICAgICAgICAiZG9jdW1lbnQiOiB0cnVlCi0gICAgICAgIH0s
Ci0gICAgICAgIHJ1bGVzOiB7Ci0gICAgICAgICAgICAiY29uc2lzdGVudC1yZXR1cm4iOiAyLAot
ICAgICAgICAgICAgImN1cmx5IjogMCwKLSAgICAgICAgICAgICJlcWVxZXEiOiAwLAotICAgICAg
ICAgICAgIm5ldy1wYXJlbnMiOiAwLAotICAgICAgICAgICAgIm5vLWNvbW1hLWRhbmdsZSI6IDAs
Ci0gICAgICAgICAgICAibm8tY29uc29sZSI6IDAsCi0gICAgICAgICAgICAibm8tY29uc3RhbnQt
Y29uZGl0aW9uIjogMCwKLSAgICAgICAgICAgICJuby1leHRyYS1iaW5kIjogMiwKLSAgICAgICAg
ICAgICJuby1leHRyYS1zZW1pIjogMiwKLSAgICAgICAgICAgICJuby1wcm90byI6IDAsCi0gICAg
ICAgICAgICAibm8tcmV0dXJuLWFzc2lnbiI6IDIsCi0gICAgICAgICAgICAibm8tdHJhaWxpbmct
c3BhY2VzIjogMiwKLSAgICAgICAgICAgICJuby11bmRlcnNjb3JlLWRhbmdsZSI6IDAsCi0gICAg
ICAgICAgICAibm8tdW51c2VkLWV4cHJlc3Npb25zIjogMiwKLSAgICAgICAgICAgICJuby13cmFw
LWZ1bmMiOiAyLAotICAgICAgICAgICAgInNlbWkiOiAyLAotICAgICAgICAgICAgInNwYWNlLWlu
Zml4LW9wcyI6IDIsCi0gICAgICAgICAgICAic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiOiAyLAot
ICAgICAgICAgICAgInN0cmljdCI6IDAsCi0gICAgICAgICAgICAidmFsaWQtdHlwZW9mIjogMgot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRoaXMuX3NvdXJjZUNvZGVNZXNzYWdlc01hcCA9IG5l
dyBXZWFrTWFwOwotCi0gICAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250ZW50RGlkQ2hhbmdlLCB0aGlzLl9o
YW5kbGVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZSwgdGhpcyk7Ci19OworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisKKyAgICAgICAgdGhpcy5fZXNsaW50Q29u
ZmlnID0geworICAgICAgICAgICAgZW52OiB7CisgICAgICAgICAgICAgICAgImJyb3dzZXIiOiB0
cnVlLAorICAgICAgICAgICAgICAgICJub2RlIjogZmFsc2UKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICBnbG9iYWxzOiB7CisgICAgICAgICAgICAgICAgImRvY3VtZW50IjogdHJ1ZQorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHJ1bGVzOiB7CisgICAgICAgICAgICAgICAgImNvbnNp
c3RlbnQtcmV0dXJuIjogMiwKKyAgICAgICAgICAgICAgICAiY3VybHkiOiAwLAorICAgICAgICAg
ICAgICAgICJlcWVxZXEiOiAwLAorICAgICAgICAgICAgICAgICJuZXctcGFyZW5zIjogMCwKKyAg
ICAgICAgICAgICAgICAibm8tY29tbWEtZGFuZ2xlIjogMCwKKyAgICAgICAgICAgICAgICAibm8t
Y29uc29sZSI6IDAsCisgICAgICAgICAgICAgICAgIm5vLWNvbnN0YW50LWNvbmRpdGlvbiI6IDAs
CisgICAgICAgICAgICAgICAgIm5vLWV4dHJhLWJpbmQiOiAyLAorICAgICAgICAgICAgICAgICJu
by1leHRyYS1zZW1pIjogMiwKKyAgICAgICAgICAgICAgICAibm8tcHJvdG8iOiAwLAorICAgICAg
ICAgICAgICAgICJuby1yZXR1cm4tYXNzaWduIjogMiwKKyAgICAgICAgICAgICAgICAibm8tdHJh
aWxpbmctc3BhY2VzIjogMiwKKyAgICAgICAgICAgICAgICAibm8tdW5kZXJzY29yZS1kYW5nbGUi
OiAwLAorICAgICAgICAgICAgICAgICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAorICAgICAg
ICAgICAgICAgICJuby13cmFwLWZ1bmMiOiAyLAorICAgICAgICAgICAgICAgICJzZW1pIjogMiwK
KyAgICAgICAgICAgICAgICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgICAgICAgICAi
c3BhY2UtcmV0dXJuLXRocm93LWNhc2UiOiAyLAorICAgICAgICAgICAgICAgICJzdHJpY3QiOiAw
LAorICAgICAgICAgICAgICAgICJ2YWxpZC10eXBlb2YiOiAyCisgICAgICAgICAgICB9CisgICAg
ICAgIH07CiAKLVdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1hcCA9
IG5ldyBNYXA7Ci1XZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLl90eXBlQW5hbHl6ZXJNYXAu
c2V0KFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCwgZXNsaW50KTsKKyAgICAgICAg
dGhpcy5fc291cmNlQ29kZU1lc3NhZ2VzTWFwID0gbmV3IFdlYWtNYXA7CiAKLVdlYkluc3BlY3Rv
ci5BbmFseXplck1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNw
ZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVj
dC5wcm90b3R5cGUsCisgICAgICAgIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuQ29udGVudERpZENoYW5nZSwgdGhp
cy5faGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2UsIHRoaXMpOworICAgIH0KIAogICAg
IC8vIFB1YmxpYwogCi0gICAgZ2V0QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGU6IGZ1bmN0
aW9uKHNvdXJjZUNvZGUpCisgICAgZ2V0QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGUoc291
cmNlQ29kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKICAgICAgICAgICAgIHZhciBhbmFseXplciA9IFdlYkluc3BlY3Rvci5B
bmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1hcC5nZXQoc291cmNlQ29kZS50eXBlKTsKQEAg
LTEwNCwxNiArOTgsMTYgQEAgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoKS50aGVuKHJldHJp
ZXZlQW5hbHl6ZXJNZXNzYWdlcy5iaW5kKHRoaXMpKTsKICAgICAgICAgfS5iaW5kKHRoaXMpKTsK
LSAgICB9LAorICAgIH0KIAotICAgIHNvdXJjZUNvZGVDYW5CZUFuYWx5emVkOiBmdW5jdGlvbihz
b3VyY2VDb2RlKQorICAgIHNvdXJjZUNvZGVDYW5CZUFuYWx5emVkKHNvdXJjZUNvZGUpCiAgICAg
ewogICAgICAgICByZXR1cm4gc291cmNlQ29kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UuVHlwZS5TY3JpcHQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBf
aGFuZGxlU291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9o
YW5kbGVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIHZh
ciBzb3VyY2VDb2RlID0gZXZlbnQudGFyZ2V0OwogCkBAIC0xMjEsMyArMTE1LDYgQEAgV2ViSW5z
cGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3NvdXJj
ZUNvZGVNZXNzYWdlc01hcC5kZWxldGUoc291cmNlQ29kZSk7CiAgICAgfQogfTsKKworV2ViSW5z
cGVjdG9yLkFuYWx5emVyTWFuYWdlci5fdHlwZUFuYWx5emVyTWFwID0gbmV3IE1hcDsKK1dlYklu
c3BlY3Rvci5BbmFseXplck1hbmFnZXIuX3R5cGVBbmFseXplck1hcC5zZXQoV2ViSW5zcGVjdG9y
LlJlc291cmNlLlR5cGUuU2NyaXB0LCBlc2xpbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzCmlu
ZGV4IDE2MDI3NWRmN2ZkNmE4NGRiOTdjMDRkMThkYTJjMzY4YzY3YWRjMGQuLjNlODdiYjVhNGJl
YjkzMmY0ZjhmNjY2NDIyMTY5NzVkOWIxNDJkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvci5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3IuanMK
QEAgLTI0LDQ4ICsyNCw0NSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLVdlYkluc3BlY3Rvci5Bbm5vdGF0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlVGV4dEVk
aXRvcikKK1dlYkluc3BlY3Rvci5Bbm5vdGF0b3IgPSBjbGFzcyBBbm5vdGF0b3IgZXh0ZW5kcyBX
ZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdl
Ykluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2Vi
SW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgY29uc29sZS5hc3NlcnQoc291cmNl
Q29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKKyAgICBjb25zdHJ1Y3Rvcihzb3VyY2VDb2RlVGV4
dEVkaXRvcikKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9zb3VyY2VDb2Rl
VGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRpdG9yOwotICAgIHRoaXMuX3RpbWVvdXRJZGVu
dGlmaWVyID0gbnVsbDsKLSAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOwotfTsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKIAotV2ViSW5z
cGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3Bl
Y3Rvci5Bbm5vdGF0b3IsCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3Rv
dHlwZSwKKyAgICAgICAgdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IgPSBzb3VyY2VDb2RlVGV4
dEVkaXRvcjsKKyAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAg
ICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCiAgICAg
Z2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9z
b3VyY2VDb2RlVGV4dEVkaXRvcjsKLSAgICB9LAorICAgIH0KIAotICAgIGlzQWN0aXZlOiBmdW5j
dGlvbigpCisgICAgaXNBY3RpdmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0
aXZlOwotICAgIH0sCisgICAgfQogCi0gICAgcGF1c2U6IGZ1bmN0aW9uKCkKKyAgICBwYXVzZSgp
CiAgICAgewogICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwogICAgICAgICB0
aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOwotICAgIH0sCisgICAgfQogCi0gICAgcmVzdW1lOiBmdW5j
dGlvbigpCisgICAgcmVzdW1lKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElm
TmVlZGVkKCk7CiAgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgdGhpcy5p
bnNlcnRBbm5vdGF0aW9ucygpOwotICAgIH0sCisgICAgfQogCi0gICAgcmVmcmVzaDogZnVuY3Rp
b24oKQorICAgIHJlZnJlc2goKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5f
aXNBY3RpdmUpOwogICAgICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKQpAQCAtNzMsMzcgKzcwLDM3
IEBAIFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMu
X2NsZWFyVGltZW91dElmTmVlZGVkKCk7CiAgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMo
KTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgcmVzZXQoKQog
ICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKICAgICAgICAgdGhp
cy5faXNBY3RpdmUgPSB0cnVlOwogICAgICAgICB0aGlzLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAg
ICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOwotICAgIH0sCisgICAgfQogCi0gICAgY2xl
YXI6IGZ1bmN0aW9uKCkKKyAgICBjbGVhcigpCiAgICAgewogICAgICAgICB0aGlzLnBhdXNlKCk7
CiAgICAgICAgIHRoaXMuY2xlYXJBbm5vdGF0aW9ucygpOwotICAgIH0sCisgICAgfQogCiAgICAg
Ly8gUHJvdGVjdGVkCiAKLSAgICBpbnNlcnRBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIGlu
c2VydEFubm90YXRpb25zKCkKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNs
YXNzZXMuCi0gICAgfSwKKyAgICB9CiAKLSAgICBjbGVhckFubm90YXRpb25zOiBmdW5jdGlvbigp
CisgICAgY2xlYXJBbm5vdGF0aW9ucygpCiAgICAgewogICAgICAgICAvLyBJbXBsZW1lbnRlZCBi
eSBzdWJjbGFzc2VzLgotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2Ns
ZWFyVGltZW91dElmTmVlZGVkOiBmdW5jdGlvbigpCisgICAgX2NsZWFyVGltZW91dElmTmVlZGVk
KCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl90aW1lb3V0SWRlbnRpZmllcikgewogICAgICAg
ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMKaW5kZXggOGRhNjQ5YzZhMWMy
Zjk4OWVhNmMyZDZhNzgzNTUyYmM1OGU5MGY5MS4uNzk4NjZhMmI5YjgzZGU0ZTk4YTkxMjg4Njdl
ZmJjOTY2NWMzNTdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXIuanMKQEAgLTIzLDc0ICsyMyw1NSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlciA9
IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlciA9IGNsYXNz
IEFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewot
ICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNs
YXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0
aGlzKTsKLQotICAgIGlmICh3aW5kb3cuQXBwbGljYXRpb25DYWNoZUFnZW50KQotICAgICAgICBB
cHBsaWNhdGlvbkNhY2hlQWdlbnQuZW5hYmxlKCk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuRnJhbWUu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlk
Q2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOwotICAgIFdlYkluc3Bl
Y3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5DaGls
ZEZyYW1lV2FzUmVtb3ZlZCwgdGhpcy5fY2hpbGRGcmFtZVdhc1JlbW92ZWQsIHRoaXMpOwotCi0g
ICAgdGhpcy5fb25saW5lID0gdHJ1ZTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAg
ICBzdXBlcigpOwogCi0gICAgdGhpcy5pbml0aWFsaXplKCk7Ci19OworICAgICAgICBpZiAod2lu
ZG93LkFwcGxpY2F0aW9uQ2FjaGVBZ2VudCkKKyAgICAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5lbmFibGUoKTsKIAotV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLkV2
ZW50ID0gewotICAgIENsZWFyZWQ6ICJhcHBsaWNhdGlvbi1jYWNoZS1tYW5hZ2VyLWNsZWFyZWQi
LAotICAgIEZyYW1lTWFuaWZlc3RBZGRlZDogImFwcGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItZnJh
bWUtbWFuaWZlc3QtYWRkZWQiLAotICAgIEZyYW1lTWFuaWZlc3RSZW1vdmVkOiAiYXBwbGljYXRp
b24tY2FjaGUtbWFuYWdlci1mcmFtZS1tYW5pZmVzdC1yZW1vdmVkIiwKLSAgICBGcmFtZU1hbmlm
ZXN0U3RhdHVzQ2hhbmdlZDogImFwcGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItZnJhbWUtbWFuaWZl
c3Qtc3RhdHVzLWNoYW5nZWQiLAotICAgIE5ldHdvcmtTdGF0ZVVwZGF0ZWQ6ICJhcHBsaWNhdGlv
bi1jYWNoZS1tYW5hZ2VyLW5ldHdvcmstc3RhdGUtdXBkYXRlZCIKLX07CisgICAgICAgIFdlYklu
c3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5N
YWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7
CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5GcmFtZS5FdmVudC5DaGlsZEZyYW1lV2FzUmVtb3ZlZCwgdGhpcy5fY2hpbGRGcmFtZVdhc1Jl
bW92ZWQsIHRoaXMpOwogCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuU3Rh
dHVzID0gewotICAgIFVuY2FjaGVkOiAwLAotICAgIElkbGU6IDEsCi0gICAgQ2hlY2tpbmc6IDIs
Ci0gICAgRG93bmxvYWRpbmc6IDMsCi0gICAgVXBkYXRlUmVhZHk6IDQsCi0gICAgT2Jzb2xldGU6
IDUKLX07CisgICAgICAgIHRoaXMuX29ubGluZSA9IHRydWU7CiAKLVdlYkluc3BlY3Rvci5BcHBs
aWNhdGlvbkNhY2hlTWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYklu
c3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwKKyAgICAgICAgdGhpcy5pbml0aWFsaXpl
KCk7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKLSAgICBpbml0aWFsaXplOiBmdW5jdGlvbigp
CisgICAgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICB0aGlzLl9hcHBsaWNhdGlvbkNhY2hl
T2JqZWN0cyA9IFtdOwogCiAgICAgICAgIGlmICh3aW5kb3cuQXBwbGljYXRpb25DYWNoZUFnZW50
KQogICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUFnZW50LmdldEZyYW1lc1dpdGhNYW5pZmVz
dHModGhpcy5fZnJhbWVzV2l0aE1hbmlmZXN0c0xvYWRlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWQ6IGZ1bmN0aW9uKGlzTm93T25saW5lKQor
ICAgIG5ldHdvcmtTdGF0ZVVwZGF0ZWQoaXNOb3dPbmxpbmUpCiAgICAgewogICAgICAgICB0aGlz
Ll9vbmxpbmUgPSBpc05vd09ubGluZTsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuRXZlbnQuTmV0d29y
a1N0YXRlVXBkYXRlZCwge29ubGluZTogdGhpcy5fb25saW5lfSk7Ci0gICAgfSwKKyAgICB9CiAK
ICAgICBnZXQgb25saW5lKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9vbmxpbmU7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZDogZnVuY3Rp
b24oZnJhbWVJZCwgbWFuaWZlc3RVUkwsIHN0YXR1cykKKyAgICBhcHBsaWNhdGlvbkNhY2hlU3Rh
dHVzVXBkYXRlZChmcmFtZUlkLCBtYW5pZmVzdFVSTCwgc3RhdHVzKQogICAgIHsKICAgICAgICAg
dmFyIGZyYW1lID0gV2ViSW5zcGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLmZyYW1lRm9ySWRl
bnRpZmllcihmcmFtZUlkKTsKICAgICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICB0aGlzLl9mcmFtZU1hbmlmZXN0VXBkYXRlZChmcmFtZSwgbWFuaWZlc3RV
UkwsIHN0YXR1cyk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXF1ZXN0QXBwbGljYXRpb25DYWNo
ZTogZnVuY3Rpb24oZnJhbWUsIGNhbGxiYWNrKQorICAgIHJlcXVlc3RBcHBsaWNhdGlvbkNhY2hl
KGZyYW1lLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrV3JhcHBl
cihlcnJvciwgYXBwbGljYXRpb25DYWNoZSkKICAgICAgICAgewpAQCAtMTAzLDExICs4NCwxMSBA
QCBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUFnZW50LmdldEFwcGxpY2F0aW9uQ2Fj
aGVGb3JGcmFtZShmcmFtZS5pZCwgY2FsbGJhY2tXcmFwcGVyKTsKLSAgICB9LAorICAgIH0KIAog
ICAgIC8vIFByaXZhdGUKIAotICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBj
b25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWUp
OwogCkBAIC0xMjIsMTQgKzEwMywxNCBAQCBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1h
bmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh3aW5kb3cuQXBwbGljYXRpb25DYWNo
ZUFnZW50KQogICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZUFnZW50LmdldE1hbmlmZXN0Rm9y
RnJhbWUoZXZlbnQudGFyZ2V0LmlkLCB0aGlzLl9tYW5pZmVzdEZvckZyYW1lTG9hZGVkLmJpbmQo
dGhpcywgZXZlbnQudGFyZ2V0LmlkKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY2hpbGRGcmFt
ZVdhc1JlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9jaGlsZEZyYW1lV2FzUmVtb3ZlZChl
dmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX2ZyYW1lTWFuaWZlc3RSZW1vdmVkKGV2ZW50LmRh
dGEuY2hpbGRGcmFtZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbWFuaWZlc3RGb3JGcmFtZUxv
YWRlZDogZnVuY3Rpb24oZnJhbWVJZCwgZXJyb3IsIG1hbmlmZXN0VVJMKQorICAgIF9tYW5pZmVz
dEZvckZyYW1lTG9hZGVkKGZyYW1lSWQsIGVycm9yLCBtYW5pZmVzdFVSTCkKICAgICB7CiAgICAg
ICAgIGlmIChlcnJvcikKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0MCw5ICsxMjEsOSBAQCBX
ZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAg
ICAgIGlmICghbWFuaWZlc3RVUkwpCiAgICAgICAgICAgICB0aGlzLl9mcmFtZU1hbmlmZXN0UmVt
b3ZlZChmcmFtZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZnJhbWVzV2l0aE1hbmlmZXN0c0xv
YWRlZDogZnVuY3Rpb24oZXJyb3IsIGZyYW1lc1dpdGhNYW5pZmVzdHMpCisgICAgX2ZyYW1lc1dp
dGhNYW5pZmVzdHNMb2FkZWQoZXJyb3IsIGZyYW1lc1dpdGhNYW5pZmVzdHMpCiAgICAgewogICAg
ICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTQsOSArMTM1LDkgQEAg
V2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICAgICAgdGhpcy5fZnJhbWVNYW5pZmVzdFVwZGF0ZWQoZnJhbWUsIGZyYW1lc1dpdGhNYW5p
ZmVzdHNbaV0ubWFuaWZlc3RVUkwsIGZyYW1lc1dpdGhNYW5pZmVzdHNbaV0uc3RhdHVzKTsKICAg
ICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX2ZyYW1lTWFuaWZlc3RVcGRhdGVkOiBmdW5j
dGlvbihmcmFtZSwgbWFuaWZlc3RVUkwsIHN0YXR1cykKKyAgICBfZnJhbWVNYW5pZmVzdFVwZGF0
ZWQoZnJhbWUsIG1hbmlmZXN0VVJMLCBzdGF0dXMpCiAgICAgewogICAgICAgICBpZiAoc3RhdHVz
ID09PSBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuU3RhdHVzLlVuY2FjaGVk
KSB7CiAgICAgICAgICAgICB0aGlzLl9mcmFtZU1hbmlmZXN0UmVtb3ZlZChmcmFtZSk7CkBAIC0x
ODQsOSArMTY1LDkgQEAgV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKIAogICAgICAgICBpZiAoc3RhdHVzQ2hhbmdlZCkKICAgICAgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFu
YWdlci5FdmVudC5GcmFtZU1hbmlmZXN0U3RhdHVzQ2hhbmdlZCwge2ZyYW1lTWFuaWZlc3Q6IHRo
aXMuX2FwcGxpY2F0aW9uQ2FjaGVPYmplY3RzW2ZyYW1lLmlkXX0pOwotICAgIH0sCisgICAgfQog
Ci0gICAgX2ZyYW1lTWFuaWZlc3RSZW1vdmVkOiBmdW5jdGlvbihmcmFtZSkKKyAgICBfZnJhbWVN
YW5pZmVzdFJlbW92ZWQoZnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2FwcGxpY2F0
aW9uQ2FjaGVPYmplY3RzW2ZyYW1lLmlkXSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5Nyw0
ICsxNzgsMTkgQEAgV2ViSW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXIu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2Vi
SW5zcGVjdG9yLkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLkV2ZW50ID0geworICAgIENsZWFyZWQ6
ICJhcHBsaWNhdGlvbi1jYWNoZS1tYW5hZ2VyLWNsZWFyZWQiLAorICAgIEZyYW1lTWFuaWZlc3RB
ZGRlZDogImFwcGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItZnJhbWUtbWFuaWZlc3QtYWRkZWQiLAor
ICAgIEZyYW1lTWFuaWZlc3RSZW1vdmVkOiAiYXBwbGljYXRpb24tY2FjaGUtbWFuYWdlci1mcmFt
ZS1tYW5pZmVzdC1yZW1vdmVkIiwKKyAgICBGcmFtZU1hbmlmZXN0U3RhdHVzQ2hhbmdlZDogImFw
cGxpY2F0aW9uLWNhY2hlLW1hbmFnZXItZnJhbWUtbWFuaWZlc3Qtc3RhdHVzLWNoYW5nZWQiLAor
ICAgIE5ldHdvcmtTdGF0ZVVwZGF0ZWQ6ICJhcHBsaWNhdGlvbi1jYWNoZS1tYW5hZ2VyLW5ldHdv
cmstc3RhdGUtdXBkYXRlZCIKK307CisKK1dlYkluc3BlY3Rvci5BcHBsaWNhdGlvbkNhY2hlTWFu
YWdlci5TdGF0dXMgPSB7CisgICAgVW5jYWNoZWQ6IDAsCisgICAgSWRsZTogMSwKKyAgICBDaGVj
a2luZzogMiwKKyAgICBEb3dubG9hZGluZzogMywKKyAgICBVcGRhdGVSZWFkeTogNCwKKyAgICBP
YnNvbGV0ZTogNQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0Jhc2ljQmxvY2tBbm5vdGF0b3IuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9CYXNpY0Jsb2NrQW5ub3RhdG9yLmpz
CmluZGV4IGIzMzgyNDlhZGRkZjM0NGEzZWRmM2FjYmU0NjY3YzU3YzcxNzU0Y2YuLmEwOGY3OTY5
OTNjMmI0MzU5MzA2MzY5ODNmNmZiNzY0OGU2MDIwZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Jhc2ljQmxvY2tBbm5vdGF0b3Iu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
QmFzaWNCbG9ja0Fubm90YXRvci5qcwpAQCAtMjQsMzggKzI0LDM0IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkJhc2ljQmxvY2tBbm5v
dGF0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQorV2ViSW5zcGVj
dG9yLkJhc2ljQmxvY2tBbm5vdGF0b3IgPSBjbGFzcyBCYXNpY0Jsb2NrQW5ub3RhdG9yIGV4dGVu
ZHMgV2ViSW5zcGVjdG9yLkFubm90YXRvcgogewotICAgIFdlYkluc3BlY3Rvci5Bbm5vdGF0b3Iu
Y2FsbCh0aGlzLCBzb3VyY2VDb2RlVGV4dEVkaXRvcik7Ci0KLSAgICB0aGlzLl9zY3JpcHQgPSBz
Y3JpcHQ7Ci0gICAgdGhpcy5fYmFzaWNCbG9ja01hcmtlcnMgPSBuZXcgTWFwOyAvLyBPbmx5IGNv
bnRhaW5zIHVuZXhlY3V0ZWQgYmFzaWMgYmxvY2tzLgotfTsKLQotV2ViSW5zcGVjdG9yLkJhc2lj
QmxvY2tBbm5vdGF0b3IuSGFzTm90RXhlY3V0ZWRDbGFzc05hbWUgPSAiYmFzaWMtYmxvY2staGFz
LW5vdC1leGVjdXRlZCI7CisgICAgY29uc3RydWN0b3Ioc291cmNlQ29kZVRleHRFZGl0b3IsIHNj
cmlwdCkKKyAgICB7CisgICAgICAgIHN1cGVyKHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKIAotV2Vi
SW5zcGVjdG9yLkJhc2ljQmxvY2tBbm5vdGF0b3IucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVj
dG9yOiBXZWJJbnNwZWN0b3IuQmFzaWNCbG9ja0Fubm90YXRvciwKLSAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlLAorICAgICAgICB0aGlzLl9zY3JpcHQgPSBz
Y3JpcHQ7CisgICAgICAgIHRoaXMuX2Jhc2ljQmxvY2tNYXJrZXJzID0gbmV3IE1hcDsgLy8gT25s
eSBjb250YWlucyB1bmV4ZWN1dGVkIGJhc2ljIGJsb2Nrcy4KKyAgICB9CiAKICAgICAvLyBQcm90
ZWN0ZWQKIAotICAgIGNsZWFyQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBjbGVhckFubm90
YXRpb25zKCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGtleSBvZiB0aGlzLl9iYXNpY0Jsb2Nr
TWFya2Vycy5rZXlzKCkpCiAgICAgICAgICAgICB0aGlzLl9jbGVhclJhbmdlRm9yQmFzaWNCbG9j
a01hcmtlcihrZXkpOwotICAgIH0sCisgICAgfQogCi0gICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1
bmN0aW9uKCkKKyAgICBpbnNlcnRBbm5vdGF0aW9ucygpCiAgICAgewogICAgICAgICBpZiAoIXRo
aXMuaXNBY3RpdmUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdGhpcy5fYW5ub3Rh
dGVCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2VzKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQ
cml2YXRlCiAKLSAgICBfYW5ub3RhdGVCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2VzOiBmdW5jdGlv
bigpCisgICAgX2Fubm90YXRlQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcygpCiAgICAgewogICAg
ICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9zY3JpcHQuaWQ7CiAgICAgICAgIHZhciBzdGFydFRp
bWUgPSBEYXRlLm5vdygpOwpAQCAtOTAsOSArODYsOSBAQCBXZWJJbnNwZWN0b3IuQmFzaWNCbG9j
a0Fubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgdGltZW91dFRpbWUgPSBN
YXRoLm1pbihNYXRoLm1heCg2NTAwLCB0b3RhbFRpbWUpLCAzMCAqIHRvdGFsVGltZSk7CiAgICAg
ICAgICAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQodGhpcy5pbnNlcnRB
bm5vdGF0aW9ucy5iaW5kKHRoaXMpLCB0aW1lb3V0VGltZSk7CiAgICAgICAgIH0uYmluZCh0aGlz
KSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGlnaGxpZ2h0VGV4dEZvckJhc2ljQmxvY2s6IGZ1
bmN0aW9uKGJhc2ljQmxvY2spCisgICAgX2hpZ2hsaWdodFRleHRGb3JCYXNpY0Jsb2NrKGJhc2lj
QmxvY2spCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChiYXNpY0Jsb2NrLnN0YXJ0T2Zm
c2V0IDw9IGJhc2ljQmxvY2suZW5kT2Zmc2V0ICYmIGJhc2ljQmxvY2suc3RhcnRPZmZzZXQgPj0g
MCAmJiBiYXNpY0Jsb2NrLmVuZE9mZnNldCA+PSAwLCAiIiArIGJhc2ljQmxvY2suc3RhcnRPZmZz
ZXQgKyAiOiIgKyBiYXNpY0Jsb2NrLmVuZE9mZnNldCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KCFiYXNpY0Jsb2NrLmhhc0V4ZWN1dGVkKTsKQEAgLTEwNCwxNSArMTAwLDE1IEBAIFdlYkluc3Bl
Y3Rvci5CYXNpY0Jsb2NrQW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgbWFy
a2VyID0gdGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci5hZGRTdHlsZVRvVGV4dFJhbmdlKHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBXZWJJbnNwZWN0b3IuQmFzaWNCbG9ja0Fubm90YXRvci5I
YXNOb3RFeGVjdXRlZENsYXNzTmFtZSk7CiAgICAgICAgIHJldHVybiBtYXJrZXI7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfaXNUZXh0UmFuZ2VPbmx5Q2xvc2luZ0JyYWNlOiBmdW5jdGlvbihzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbikKKyAgICBfaXNUZXh0UmFuZ2VPbmx5Q2xvc2luZ0JyYWNl
KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKQogICAgIHsKICAgICAgICAgdmFyIGlzT25seUNs
b3NpbmdCcmFjZSA9IC9eXHMqXH0kLzsKICAgICAgICAgcmV0dXJuIGlzT25seUNsb3NpbmdCcmFj
ZS50ZXN0KHRoaXMuc291cmNlQ29kZVRleHRFZGl0b3IuZ2V0VGV4dEluUmFuZ2Uoc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb24pKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jbGVhclJhbmdlRm9y
QmFzaWNCbG9ja01hcmtlcjogZnVuY3Rpb24oa2V5KQorICAgIF9jbGVhclJhbmdlRm9yQmFzaWNC
bG9ja01hcmtlcihrZXkpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9iYXNp
Y0Jsb2NrTWFya2Vycy5oYXMoa2V5KSk7CiAgICAgICAgIHZhciBtYXJrZXIgPSB0aGlzLl9iYXNp
Y0Jsb2NrTWFya2Vycy5nZXQoa2V5KTsKQEAgLTEyMSwzICsxMTcsNSBAQCBXZWJJbnNwZWN0b3Iu
QmFzaWNCbG9ja0Fubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2Jhc2ljQmxv
Y2tNYXJrZXJzLmRlbGV0ZShrZXkpOwogICAgIH0KIH07CisKK1dlYkluc3BlY3Rvci5CYXNpY0Js
b2NrQW5ub3RhdG9yLkhhc05vdEV4ZWN1dGVkQ2xhc3NOYW1lID0gImJhc2ljLWJsb2NrLWhhcy1u
b3QtZXhlY3V0ZWQiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQnJhbmNoTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0JyYW5jaE1hbmFnZXIuanMKaW5kZXggYjMyMzVl
MDQwNmU4Mzc0NjMzODY2ZmQ0NGU0MjcwYTliM2IwZGJlYi4uNmRjOGRlMWNhNjUwODkxMmNiZDc1
NDNlZDY0NGVmNTI1N2EwNDlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQnJhbmNoTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzCkBA
IC0yMywzNyArMjMsMzUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi1XZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlciA9IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rv
ci5CcmFuY2hNYW5hZ2VyID0gY2xhc3MgQnJhbmNoTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rv
ci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9y
Lk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3Iu
T2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlz
Ll9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7
CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLmluaXRpYWxpemUoKTsKLX07CisgICAgICAg
IFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5F
dmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwg
dGhpcyk7CiAKLVdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBj
b25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIsCisgICAgICAgIHRoaXMuaW5p
dGlhbGl6ZSgpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgaW5pdGlhbGl6ZTogZnVu
Y3Rpb24oKQorICAgIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgdGhpcy5fb3JpZ2luYWxC
cmFuY2ggPSBuZXcgV2ViSW5zcGVjdG9yLkJyYW5jaChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9y
aWdpbmFsIiksIG51bGwsIHRydWUpOwogICAgICAgICB0aGlzLl9jdXJyZW50QnJhbmNoID0gdGhp
cy5fb3JpZ2luYWxCcmFuY2guZm9yayhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldvcmtpbmcgQ29w
eSIpKTsKICAgICAgICAgdGhpcy5fYnJhbmNoZXMgPSBbdGhpcy5fb3JpZ2luYWxCcmFuY2gsIHRo
aXMuX2N1cnJlbnRCcmFuY2hdOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGJyYW5jaGVzKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9icmFuY2hlczsKLSAgICB9LAorICAgIH0KIAog
ICAgIGdldCBjdXJyZW50QnJhbmNoKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9jdXJy
ZW50QnJhbmNoOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGN1cnJlbnRCcmFuY2goYnJhbmNo
KQogICAgIHsKQEAgLTY2LDkgKzY0LDkgQEAgV2ViSW5zcGVjdG9yLkJyYW5jaE1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9jdXJyZW50QnJhbmNoID0gYnJhbmNoOwogCiAgICAg
ICAgIHRoaXMuX2N1cnJlbnRCcmFuY2guYXBwbHkoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGNy
ZWF0ZUJyYW5jaDogZnVuY3Rpb24oZGlzcGxheU5hbWUsIGZyb21CcmFuY2gpCisgICAgY3JlYXRl
QnJhbmNoKGRpc3BsYXlOYW1lLCBmcm9tQnJhbmNoKQogICAgIHsKICAgICAgICAgaWYgKCFmcm9t
QnJhbmNoKQogICAgICAgICAgICAgZnJvbUJyYW5jaCA9IHRoaXMuX29yaWdpbmFsQnJhbmNoOwpA
QCAtODAsOSArNzgsOSBAQCBXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciBuZXdCcmFuY2ggPSBmcm9tQnJhbmNoLmZvcmsoZGlzcGxheU5hbWUpOwog
ICAgICAgICB0aGlzLl9icmFuY2hlcy5wdXNoKG5ld0JyYW5jaCk7CiAgICAgICAgIHJldHVybiBu
ZXdCcmFuY2g7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBkZWxldGVCcmFuY2g6IGZ1bmN0aW9uKGJy
YW5jaCkKKyAgICBkZWxldGVCcmFuY2goYnJhbmNoKQogICAgIHsKICAgICAgICAgY29uc29sZS5h
c3NlcnQoYnJhbmNoIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkJyYW5jaCk7CiAgICAgICAgIGlm
ICghKGJyYW5jaCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmFuY2gpKQpAQCAtOTYsMTEgKzk0
LDExIEBAIFdlYkluc3BlY3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICBpZiAoYnJhbmNoID09PSB0aGlzLl9jdXJyZW50QnJhbmNoKQogICAgICAgICAgICAgdGhpcy5f
Y3VycmVudEJyYW5jaCA9IHRoaXMuX29yaWdpbmFsQnJhbmNoOwotICAgIH0sCisgICAgfQogCiAg
ICAgLy8gUHJpdmF0ZQogCi0gICAgX21haW5SZXNvdXJjZURpZENoYW5nZTogZnVuY3Rpb24oZXZl
bnQpCisgICAgX21haW5SZXNvdXJjZURpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5GcmFtZSk7
CiAKQEAgLTExMCw1ICsxMDgsMyBAQCBXZWJJbnNwZWN0b3IuQnJhbmNoTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpOwogICAgIH0KIH07Ci0KLVdlYkluc3Bl
Y3Rvci5CcmFuY2hNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcwppbmRleCBm
YTZlMmQ0YjAxZjY4YzI4OTQzNDliOGRkMDVkZGQxMDY4MTRlMTI4Li43ZWI5Yjk2Nzc0YzJhNGYz
YzU4YzQ5ZDJhMDNjYWFjMWViOTM1M2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5h
Z2VyLmpzCkBAIC0yMyw0OSArMjMsNDQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyID0gZnVuY3Rpb24oKQor
V2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlciA9IGNsYXNzIENTU1N0eWxlTWFuYWdlciBleHRl
bmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRv
IGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAv
LyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBpZiAod2luZG93LkNTU0Fn
ZW50KQotICAgICAgICBDU1NBZ2VudC5lbmFibGUoKTsKLQotICAgIFdlYkluc3BlY3Rvci5GcmFt
ZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VE
aWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5z
cGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LlJl
c291cmNlV2FzQWRkZWQsIHRoaXMuX3Jlc291cmNlQWRkZWQsIHRoaXMpOwotICAgIFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2
ZW50LkNvbnRlbnREaWRDaGFuZ2UsIHRoaXMuX3Jlc291cmNlQ29udGVudERpZENoYW5nZSwgdGhp
cyk7Ci0gICAgV2ViSW5zcGVjdG9yLlJlc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlJlc291cmNlLkV2ZW50LlR5cGVEaWRDaGFuZ2UsIHRoaXMuX3Jlc291cmNlVHlwZURpZENo
YW5nZSwgdGhpcyk7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsK
IAotICAgIFdlYkluc3BlY3Rvci5ET01Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRPTU5vZGUuRXZlbnQuQXR0cmlidXRlTW9kaWZpZWQsIHRoaXMuX25vZGVBdHRyaWJ1dGVzRGlk
Q2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuRE9NTm9kZS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5ET01Ob2RlLkV2ZW50LkF0dHJpYnV0ZVJlbW92ZWQsIHRoaXMuX25vZGVB
dHRyaWJ1dGVzRGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuRE9NTm9kZS5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01Ob2RlLkV2ZW50LkVuYWJsZWRQc2V1ZG9DbGFz
c2VzQ2hhbmdlZCwgdGhpcy5fbm9kZVBzZXVkb0NsYXNzZXNEaWRDaGFuZ2UsIHRoaXMpOworICAg
ICAgICBpZiAod2luZG93LkNTU0FnZW50KQorICAgICAgICAgICAgQ1NTQWdlbnQuZW5hYmxlKCk7
CiAKLSAgICB0aGlzLl9jb2xvckZvcm1hdFNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRp
bmcoImRlZmF1bHQtY29sb3ItZm9ybWF0IiwgV2ViSW5zcGVjdG9yLkNvbG9yLkZvcm1hdC5Pcmln
aW5hbCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNv
dXJjZURpZENoYW5nZSwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5SZXNvdXJjZVdhc0FkZGVkLCB0aGlz
Ll9yZXNvdXJjZUFkZGVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlJlc291cmNlLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuQ29udGVudERpZENo
YW5nZSwgdGhpcy5fcmVzb3VyY2VDb250ZW50RGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLlJlc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291cmNl
LkV2ZW50LlR5cGVEaWRDaGFuZ2UsIHRoaXMuX3Jlc291cmNlVHlwZURpZENoYW5nZSwgdGhpcyk7
CiAKLSAgICB0aGlzLl9zdHlsZVNoZWV0SWRlbnRpZmllck1hcCA9IHt9OwotICAgIHRoaXMuX3N0
eWxlU2hlZXRGcmFtZVVSTE1hcCA9IHt9OwotICAgIHRoaXMuX25vZGVTdHlsZXNNYXAgPSB7fTsK
LX07CisgICAgICAgIFdlYkluc3BlY3Rvci5ET01Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkRPTU5vZGUuRXZlbnQuQXR0cmlidXRlTW9kaWZpZWQsIHRoaXMuX25vZGVBdHRyaWJ1
dGVzRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkRPTU5vZGUuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NTm9kZS5FdmVudC5BdHRyaWJ1dGVSZW1vdmVkLCB0
aGlzLl9ub2RlQXR0cmlidXRlc0RpZENoYW5nZSwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5ET01Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTU5vZGUuRXZlbnQuRW5h
YmxlZFBzZXVkb0NsYXNzZXNDaGFuZ2VkLCB0aGlzLl9ub2RlUHNldWRvQ2xhc3Nlc0RpZENoYW5n
ZSwgdGhpcyk7CiAKLVdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIuRm9yY2VhYmxlUHNldWRv
Q2xhc3NlcyA9IFsiYWN0aXZlIiwgImZvY3VzIiwgImhvdmVyIiwgInZpc2l0ZWQiXTsKKyAgICAg
ICAgdGhpcy5fY29sb3JGb3JtYXRTZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJk
ZWZhdWx0LWNvbG9yLWZvcm1hdCIsIFdlYkluc3BlY3Rvci5Db2xvci5Gb3JtYXQuT3JpZ2luYWwp
OwogCi1XZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBjb25z
dHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlciwKLSAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorICAgICAgICB0aGlzLl9zdHlsZVNoZWV0SWRl
bnRpZmllck1hcCA9IHt9OworICAgICAgICB0aGlzLl9zdHlsZVNoZWV0RnJhbWVVUkxNYXAgPSB7
fTsKKyAgICAgICAgdGhpcy5fbm9kZVN0eWxlc01hcCA9IHt9OworICAgIH0KIAogICAgIC8vIFB1
YmxpYwogCiAgICAgZ2V0IHByZWZlcnJlZENvbG9yRm9ybWF0KCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9jb2xvckZvcm1hdFNldHRpbmcudmFsdWU7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBjYW5Gb3JjZVBzZXVkb0NsYXNzZXM6IGZ1bmN0aW9uKCkKKyAgICBjYW5Gb3JjZVBzZXVkb0Ns
YXNzZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHdpbmRvdy5DU1NBZ2VudCAmJiAhIUNTU0Fn
ZW50LmZvcmNlUHNldWRvU3RhdGU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwcm9wZXJ0eU5hbWVI
YXNPdGhlclZlbmRvclByZWZpeDogZnVuY3Rpb24obmFtZSkKKyAgICBwcm9wZXJ0eU5hbWVIYXNP
dGhlclZlbmRvclByZWZpeChuYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFuYW1lIHx8IG5hbWUu
bGVuZ3RoIDwgNCB8fCBuYW1lLmNoYXJBdCgwKSAhPT0gIi0iKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNzUsMTggKzcwLDE4IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0sCisgICAgfQogCi0gICAgcHJvcGVydHlWYWx1ZUhhc090aGVyVmVuZG9y
S2V5d29yZDogZnVuY3Rpb24odmFsdWUpCisgICAgcHJvcGVydHlWYWx1ZUhhc090aGVyVmVuZG9y
S2V5d29yZCh2YWx1ZSkKICAgICB7CiAgICAgICAgIHZhciBtYXRjaCA9IHZhbHVlLm1hdGNoKC8o
PzotbW96LXwtbXMtfC1vLXwtZXB1Yi0pWy1cd10rLyk7CiAgICAgICAgIGlmICghbWF0Y2gpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBjYW5vbmljYWxOYW1lRm9yUHJvcGVydHlOYW1lOiBmdW5jdGlvbihuYW1l
KQorICAgIGNhbm9uaWNhbE5hbWVGb3JQcm9wZXJ0eU5hbWUobmFtZSkKICAgICB7CiAgICAgICAg
IGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA8IDggfHwgbmFtZS5jaGFyQXQoMCkgIT09ICItIikK
ICAgICAgICAgICAgIHJldHVybiBuYW1lOwpAQCAtOTYsOSArOTEsOSBAQCBXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiBuYW1lOwog
CiAgICAgICAgIHJldHVybiBtYXRjaFsxXTsKLSAgICB9LAorICAgIH0KIAotICAgIHN0eWxlU2hl
ZXRGb3JJZGVudGlmaWVyOiBmdW5jdGlvbihpZCkKKyAgICBzdHlsZVNoZWV0Rm9ySWRlbnRpZmll
cihpZCkKICAgICB7CiAgICAgICAgIGlmIChpZCBpbiB0aGlzLl9zdHlsZVNoZWV0SWRlbnRpZmll
ck1hcCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZVNoZWV0SWRlbnRpZmllck1hcFtp
ZF07CkBAIC0xMDYsOSArMTAxLDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gbmV3IFdlYkluc3BlY3Rvci5DU1NT
dHlsZVNoZWV0KGlkKTsKICAgICAgICAgdGhpcy5fc3R5bGVTaGVldElkZW50aWZpZXJNYXBbaWRd
ID0gc3R5bGVTaGVldDsKICAgICAgICAgcmV0dXJuIHN0eWxlU2hlZXQ7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBzdHlsZXNGb3JOb2RlOiBmdW5jdGlvbihub2RlKQorICAgIHN0eWxlc0Zvck5vZGUo
bm9kZSkKICAgICB7CiAgICAgICAgIGlmIChub2RlLmlkIGluIHRoaXMuX25vZGVTdHlsZXNNYXAp
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZVN0eWxlc01hcFtub2RlLmlkXTsKQEAgLTEx
NiwxOSArMTExLDE5IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICB2YXIgc3R5bGVzID0gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzKG5v
ZGUpOwogICAgICAgICB0aGlzLl9ub2RlU3R5bGVzTWFwW25vZGUuaWRdID0gc3R5bGVzOwogICAg
ICAgICByZXR1cm4gc3R5bGVzOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAK
LSAgICBtZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZDogZnVuY3Rpb24oKQorICAgIG1lZGlhUXVlcnlS
ZXN1bHRDaGFuZ2VkKCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rv
ci5DU1NPYnNlcnZlci4KIAogICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fbm9kZVN0eWxl
c01hcCkKICAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXNNYXBba2V5XS5tZWRpYVF1ZXJ5UmVz
dWx0RGlkQ2hhbmdlKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzdHlsZVNoZWV0Q2hhbmdlZDog
ZnVuY3Rpb24oc3R5bGVTaGVldElkZW50aWZpZXIpCisgICAgc3R5bGVTaGVldENoYW5nZWQoc3R5
bGVTaGVldElkZW50aWZpZXIpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNw
ZWN0b3IuQ1NTT2JzZXJ2ZXIuCiAKQEAgLTEzOCwxMSArMTMzLDExIEBAIFdlYkluc3BlY3Rvci5D
U1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBzdHlsZVNoZWV0Lm5vdGVDb250
ZW50RGlkQ2hhbmdlKCk7CiAKICAgICAgICAgdGhpcy5fdXBkYXRlUmVzb3VyY2VDb250ZW50KHN0
eWxlU2hlZXQpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX25vZGVQ
c2V1ZG9DbGFzc2VzRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfbm9kZVBzZXVkb0Ns
YXNzZXNEaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgbm9kZSA9IGV2ZW50LnRh
cmdldDsKIApAQCAtMTUyLDkgKzE0Nyw5IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbm9k
ZVN0eWxlcy5wc2V1ZG9DbGFzc2VzRGlkQ2hhbmdlKG5vZGUpOwogICAgICAgICB9Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfbm9kZUF0dHJpYnV0ZXNEaWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIF9ub2RlQXR0cmlidXRlc0RpZENoYW5nZShldmVudCkKICAgICB7CiAgICAgICAgIHZhciBu
b2RlID0gZXZlbnQudGFyZ2V0OwogCkBAIC0xNjQsOSArMTU5LDkgQEAgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBub2RlU3R5bGVzLmF0dHJpYnV0ZURpZENoYW5nZShub2RlLCBldmVudC5kYXRh
Lm5hbWUpOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbWFpblJlc291cmNlRGlk
Q2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50
KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2Yg
V2ViSW5zcGVjdG9yLkZyYW1lKTsKIApAQCAtMTc4LDkgKzE3Myw5IEBAIFdlYkluc3BlY3Rvci5D
U1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zdHlsZVNoZWV0SWRl
bnRpZmllck1hcCA9IHt9OwogICAgICAgICB0aGlzLl9zdHlsZVNoZWV0RnJhbWVVUkxNYXAgPSB7
fTsKICAgICAgICAgdGhpcy5fbm9kZVN0eWxlc01hcCA9IHt9OwotICAgIH0sCisgICAgfQogCi0g
ICAgX3Jlc291cmNlQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9yZXNvdXJjZUFkZGVkKGV2
ZW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZXZlbnQudGFyZ2V0IGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLkZyYW1lKTsKIApAQCAtMTkxLDkgKzE4Niw5IEBAIFdlYkluc3BlY3Rv
ci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIHRoaXMuX2NsZWFyU3R5bGVTaGVldHNGb3JSZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfcmVzb3VyY2VUeXBlRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkK
KyAgICBfcmVzb3VyY2VUeXBlRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlc291cmNlKTsK
IApAQCAtMjAyLDI4ICsxOTcsMjggQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fY2xlYXJTdHls
ZVNoZWV0c0ZvclJlc291cmNlKHJlc291cmNlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jbGVh
clN0eWxlU2hlZXRzRm9yUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIF9jbGVhclN0
eWxlU2hlZXRzRm9yUmVzb3VyY2UocmVzb3VyY2UpCiAgICAgewogICAgICAgICAvLyBDbGVhciBr
bm93biBzdHlsZXNoZWV0cyBmb3IgdGhpcyBVUkwgYW5kIGZyYW1lLiBUaGlzIHdpbGwgY2F1c2Ug
dGhlIHN0eWxlc2hlZXRzIHRvCiAgICAgICAgIC8vIGJlIHVwZGF0ZWQgbmV4dCB0aW1lIF9mZXRj
aEluZm9Gb3JBbGxTdHlsZVNoZWV0cyBpcyBjYWxsZWQuCiAgICAgICAgIC8vIENPTVBBVElCSUxJ
VFkgKGlPUyA2KTogVGhlIGZyYW1lJ3MgaWQgd2FzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBrZXks
IHNvIGRlbGV0ZSBqdXN0IHRoZSB1cmwgdG9vLgogICAgICAgICBkZWxldGUgdGhpcy5fc3R5bGVT
aGVldEZyYW1lVVJMTWFwW3RoaXMuX2ZyYW1lVVJMTWFwS2V5KHJlc291cmNlLnBhcmVudEZyYW1l
LCByZXNvdXJjZS51cmwpXTsKICAgICAgICAgZGVsZXRlIHRoaXMuX3N0eWxlU2hlZXRGcmFtZVVS
TE1hcFtyZXNvdXJjZS51cmxdOwotICAgIH0sCisgICAgfQogCi0gICAgX2ZyYW1lVVJMTWFwS2V5
OiBmdW5jdGlvbihmcmFtZSwgdXJsKQorICAgIF9mcmFtZVVSTE1hcEtleShmcmFtZSwgdXJsKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIChmcmFtZSA/IGZyYW1lLmlkICsgIjoiIDogIiIpICsgdXJs
OwotICAgIH0sCisgICAgfQogCi0gICAgX2xvb2t1cFN0eWxlU2hlZXRGb3JSZXNvdXJjZTogZnVu
Y3Rpb24ocmVzb3VyY2UsIGNhbGxiYWNrKQorICAgIF9sb29rdXBTdHlsZVNoZWV0Rm9yUmVzb3Vy
Y2UocmVzb3VyY2UsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhpcy5fbG9va3VwU3R5bGVT
aGVldChyZXNvdXJjZS5wYXJlbnRGcmFtZSwgcmVzb3VyY2UudXJsLCBjYWxsYmFjayk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfbG9va3VwU3R5bGVTaGVldDogZnVuY3Rpb24oZnJhbWUsIHVybCwg
Y2FsbGJhY2spCisgICAgX2xvb2t1cFN0eWxlU2hlZXQoZnJhbWUsIHVybCwgY2FsbGJhY2spCiAg
ICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChmcmFtZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rv
ci5GcmFtZSk7CiAKQEAgLTIzOSw5ICsyMzQsOSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3N0eWxlU2hlZXRG
cmFtZVVSTE1hcFtrZXldIHx8IHRoaXMuX3N0eWxlU2hlZXRGcmFtZVVSTE1hcFt1cmxdIHx8IG51
bGwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzLl9mZXRjaEluZm9Gb3JBbGxTdHls
ZVNoZWV0cyhzeWxlU2hlZXRzRmV0Y2hlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9mZXRjaEluZm9Gb3JBbGxTdHlsZVNoZWV0czogZnVuY3Rpb24oY2FsbGJhY2spCisgICAg
X2ZldGNoSW5mb0ZvckFsbFN0eWxlU2hlZXRzKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgY29u
c29sZS5hc3NlcnQodHlwZW9mIGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKTsKIApAQCAtMjY5LDkg
KzI2NCw5IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAKICAgICAgICAgQ1NTQWdlbnQuZ2V0QWxsU3R5bGVTaGVldHMocHJvY2Vzc1N0eWxl
U2hlZXRzLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgX3Jlc291cmNlQ29udGVu
dERpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX3Jlc291cmNlQ29udGVudERpZENoYW5n
ZShldmVudCkKICAgICB7CiAgICAgICAgIHZhciByZXNvdXJjZSA9IGV2ZW50LnRhcmdldDsKICAg
ICAgICAgaWYgKHJlc291cmNlID09PSB0aGlzLl9pZ25vcmVSZXNvdXJjZUNvbnRlbnREaWRDaGFu
Z2VFdmVudEZvclJlc291cmNlKQpAQCAtMzA0LDkgKzI5OSw5IEBAIFdlYkluc3BlY3Rvci5DU1NT
dHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAocmVzb3VyY2UuX19wZW5kaW5n
Q2hhbmdlVGltZW91dCkKICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXNvdXJjZS5fX3BlbmRp
bmdDaGFuZ2VUaW1lb3V0KTsKICAgICAgICAgcmVzb3VyY2UuX19wZW5kaW5nQ2hhbmdlVGltZW91
dCA9IHNldFRpbWVvdXQoYXBwbHlTdHlsZVNoZWV0Q2hhbmdlcy5iaW5kKHRoaXMpLCA1MDApOwot
ICAgIH0sCisgICAgfQogCi0gICAgX3VwZGF0ZVJlc291cmNlQ29udGVudDogZnVuY3Rpb24oc3R5
bGVTaGVldCkKKyAgICBfdXBkYXRlUmVzb3VyY2VDb250ZW50KHN0eWxlU2hlZXQpCiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydChzdHlsZVNoZWV0KTsKIApAQCAtMzY2LDMgKzM2MSw1IEBA
IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBzdHls
ZVNoZWV0Ll9fcGVuZGluZ0NoYW5nZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGFwcGx5U3R5bGVTaGVl
dENoYW5nZXMuYmluZCh0aGlzKSwgNTAwKTsKICAgICB9CiB9OworCitXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNYW5hZ2VyLkZvcmNlYWJsZVBzZXVkb0NsYXNzZXMgPSBbImFjdGl2ZSIsICJmb2N1cyIs
ICJob3ZlciIsICJ2aXNpdGVkIl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJvbGxl
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Nv
ZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLmpzCmluZGV4IDU4YzY5OWNhNjMyODNhYWRh
N2MxMzQ2ODkzMTliNmQ0ZmZiMmIyMTUuLjRhNzVjYTViNGY3Zjg3MmQ3NzQwYzcwYTgxMzRiYjU3
MTlhMmM4NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JDb2xvckVkaXRpbmdDb250cm9sbGVyLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JD
b2xvckVkaXRpbmdDb250cm9sbGVyLmpzCkBAIC0yMyw0MiArMjMsNDAgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNv
bG9yRWRpdGluZ0NvbnRyb2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9yLCBtYXJrZXIpCitXZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvckNvbG9yRWRpdGluZ0NvbnRyb2xsZXIgPSBjbGFzcyBDb2RlTWly
cm9yQ29sb3JFZGl0aW5nQ29udHJvbGxlciBleHRlbmRzIFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
RWRpdGluZ0NvbnRyb2xsZXIKIHsKLSAgICBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckVkaXRpbmdD
b250cm9sbGVyLmNhbGwodGhpcywgY29kZU1pcnJvciwgbWFya2VyKTsKLX07Ci0KLVdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAg
Y29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29sb3JFZGl0aW5nQ29udHJvbGxl
ciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xs
ZXIucHJvdG90eXBlLAorICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJyb3IsIG1hcmtlcikKKyAgICB7
CisgICAgICAgIHN1cGVyKGNvZGVNaXJyb3IsIG1hcmtlcik7CisgICAgfQogCiAgICAgLy8gUHVi
bGljCiAKICAgICBnZXQgaW5pdGlhbFZhbHVlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IuQ29sb3IuZnJvbVN0cmluZyh0aGlzLnRleHQpOwotICAgIH0sCisgICAgfQogCiAg
ICAgZ2V0IGNzc0NsYXNzTmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gImNvbG9yIjsKLSAg
ICB9LAorICAgIH0KIAotICAgIHBvcG92ZXJXaWxsUHJlc2VudDogZnVuY3Rpb24ocG9wb3ZlcikK
KyAgICBwb3BvdmVyV2lsbFByZXNlbnQocG9wb3ZlcikKICAgICB7CiAgICAgICAgIHRoaXMuX2Nv
bG9yUGlja2VyID0gbmV3IFdlYkluc3BlY3Rvci5Db2xvclBpY2tlcjsKICAgICAgICAgdGhpcy5f
Y29sb3JQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ29sb3JQaWNrZXIuRXZl
bnQuQ29sb3JDaGFuZ2VkLCB0aGlzLl9jb2xvclBpY2tlckNvbG9yQ2hhbmdlZCwgdGhpcyk7CiAg
ICAgICAgIHBvcG92ZXIuY29udGVudCA9IHRoaXMuX2NvbG9yUGlja2VyLmVsZW1lbnQ7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBwb3BvdmVyRGlkUHJlc2VudDogZnVuY3Rpb24ocG9wb3ZlcikKKyAg
ICBwb3BvdmVyRGlkUHJlc2VudChwb3BvdmVyKQogICAgIHsKICAgICAgICAgdGhpcy5fY29sb3JQ
aWNrZXIuY29sb3IgPSB0aGlzLl92YWx1ZTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZh
dGUKIAotICAgIF9jb2xvclBpY2tlckNvbG9yQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAg
X2NvbG9yUGlja2VyQ29sb3JDaGFuZ2VkKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy52YWx1
ZSA9IGV2ZW50LnRhcmdldC5jb2xvcjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yQ29tcGxldGlvbkNv
bnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuanMKaW5kZXggMWRhYTc0Nzg3Mzk1
Y2VjNmIzMWMzNTc2MjNlOTJlZGRkNmM4NWQ3NC4uMmVjMGNmYzdjNjUwMGY0YWY4OWMxMzIwNDZm
ZGZlMjhkNjkxZGZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJy
b3JDb21wbGV0aW9uQ29udHJvbGxlci5qcwpAQCAtMjMsNzkgKzIzLDY1IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JD
b21wbGV0aW9uQ29udHJvbGxlciA9IGZ1bmN0aW9uKGNvZGVNaXJyb3IsIGRlbGVnYXRlLCBzdG9w
Q2hhcmFjdGVyc1JlZ2V4KQorV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJv
bGxlciA9IGNsYXNzIENvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlciBleHRlbmRzIFdlYklu
c3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5z
cGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNw
ZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9y
KTsKLQotICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOwotICAgIHRoaXMuX3N0b3BD
aGFyYWN0ZXJzUmVnZXggPSBzdG9wQ2hhcmFjdGVyc1JlZ2V4IHx8IG51bGw7Ci0gICAgdGhpcy5f
ZGVsZWdhdGUgPSBkZWxlZ2F0ZSB8fCBudWxsOwotCi0gICAgdGhpcy5fc3RhcnRPZmZzZXQgPSBO
YU47Ci0gICAgdGhpcy5fZW5kT2Zmc2V0ID0gTmFOOwotICAgIHRoaXMuX2xpbmVOdW1iZXIgPSBO
YU47Ci0gICAgdGhpcy5fcHJlZml4ID0gIiI7Ci0gICAgdGhpcy5fY29tcGxldGlvbnMgPSBbXTsK
LSAgICB0aGlzLl9leHRlbmRlZENvbXBsZXRpb25Qcm92aWRlcnMgPSB7fTsKLQotICAgIHRoaXMu
X3N1Z2dlc3Rpb25zVmlldyA9IG5ldyBXZWJJbnNwZWN0b3IuQ29tcGxldGlvblN1Z2dlc3Rpb25z
Vmlldyh0aGlzKTsKLQotICAgIHRoaXMuX2tleU1hcCA9IHsKLSAgICAgICAgIlVwIjogdGhpcy5f
aGFuZGxlVXBLZXkuYmluZCh0aGlzKSwKLSAgICAgICAgIkRvd24iOiB0aGlzLl9oYW5kbGVEb3du
S2V5LmJpbmQodGhpcyksCi0gICAgICAgICJSaWdodCI6IHRoaXMuX2hhbmRsZVJpZ2h0T3JFbnRl
cktleS5iaW5kKHRoaXMpLAotICAgICAgICAiRXNjIjogdGhpcy5faGFuZGxlRXNjYXBlS2V5LmJp
bmQodGhpcyksCi0gICAgICAgICJFbnRlciI6IHRoaXMuX2hhbmRsZVJpZ2h0T3JFbnRlcktleS5i
aW5kKHRoaXMpLAotICAgICAgICAiVGFiIjogdGhpcy5faGFuZGxlVGFiS2V5LmJpbmQodGhpcyks
Ci0gICAgICAgICJDbWQtQSI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKSwKLSAgICAg
ICAgIkNtZC1aIjogdGhpcy5faGFuZGxlSGlkZUtleS5iaW5kKHRoaXMpLAotICAgICAgICAiU2hp
ZnQtQ21kLVoiOiB0aGlzLl9oYW5kbGVIaWRlS2V5LmJpbmQodGhpcyksCi0gICAgICAgICJDbWQt
WSI6IHRoaXMuX2hhbmRsZUhpZGVLZXkuYmluZCh0aGlzKQotICAgIH07Ci0KLSAgICB0aGlzLl9o
YW5kbGVDaGFuZ2VMaXN0ZW5lciA9IHRoaXMuX2hhbmRsZUNoYW5nZS5iaW5kKHRoaXMpOwotICAg
IHRoaXMuX2hhbmRsZUN1cnNvckFjdGl2aXR5TGlzdGVuZXIgPSB0aGlzLl9oYW5kbGVDdXJzb3JB
Y3Rpdml0eS5iaW5kKHRoaXMpOwotICAgIHRoaXMuX2hhbmRsZUhpZGVBY3Rpb25MaXN0ZW5lciA9
IHRoaXMuX2hhbmRsZUhpZGVBY3Rpb24uYmluZCh0aGlzKTsKLQotICAgIHRoaXMuX2NvZGVNaXJy
b3IuYWRkS2V5TWFwKHRoaXMuX2tleU1hcCk7Ci0KLSAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJj
aGFuZ2UiLCB0aGlzLl9oYW5kbGVDaGFuZ2VMaXN0ZW5lcik7Ci0gICAgdGhpcy5fY29kZU1pcnJv
ci5vbigiY3Vyc29yQWN0aXZpdHkiLCB0aGlzLl9oYW5kbGVDdXJzb3JBY3Rpdml0eUxpc3RlbmVy
KTsKLSAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJibHVyIiwgdGhpcy5faGFuZGxlSGlkZUFjdGlv
bkxpc3RlbmVyKTsKLSAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJzY3JvbGwiLCB0aGlzLl9oYW5k
bGVIaWRlQWN0aW9uTGlzdGVuZXIpOwotfTsKKyAgICBjb25zdHJ1Y3Rvcihjb2RlTWlycm9yLCBk
ZWxlZ2F0ZSwgc3RvcENoYXJhY3RlcnNSZWdleCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAK
LVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuR2VuZXJpY1N0b3BD
aGFyYWN0ZXJzUmVnZXggPSAvW1xzPTo7LF0vOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21w
bGV0aW9uQ29udHJvbGxlci5EZWZhdWx0U3RvcENoYXJhY3RlcnNSZWdleE1vZGVNYXAgPSB7ImNz
cyI6IC9bXHM6Oyx7fSgpXS8sICJqYXZhc2NyaXB0IjogL1tccz06OywhK1wtKi8lJnxefj88Pi57
fSgpW1xdXS99OwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5C
YXNlRXhwcmVzc2lvblN0b3BDaGFyYWN0ZXJzUmVnZXhNb2RlTWFwID0geyJqYXZhc2NyaXB0Ijog
L1tccz06OywhK1wtKi8lJnxefj88Pl0vfTsKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxl
dGlvbkNvbnRyb2xsZXIuT3BlbkJyYWNrZXRDaGFyYWN0ZXJzUmVnZXggPSAvWyh7W10vOwotV2Vi
SW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5DbG9zZUJyYWNrZXRDaGFy
YWN0ZXJzUmVnZXggPSAvWyl9XF1dLzsKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlv
bkNvbnRyb2xsZXIuTWF0Y2hpbmdCcmFja2V0cyA9IHsieyI6ICJ9IiwgIigiOiAiKSIsICJbIjog
Il0iLCAifSI6ICJ7IiwgIikiOiAiKCIsICJdIjogIlsifTsKLVdlYkluc3BlY3Rvci5Db2RlTWly
cm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlvbkhpbnRTdHlsZUNsYXNzTmFtZSA9ICJj
b21wbGV0aW9uLWhpbnQiOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJv
bGxlci5Db21wbGV0aW9uc0hpZGRlbkRlbGF5ID0gMjUwOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uVHlwaW5nRGVsYXkgPSAyNTA7Ci1XZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkNvbXBsZXRpb25PcmlnaW4g
PSAiK2NvbXBsZXRpb24iOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJv
bGxlci5EZWxldGVDb21wbGV0aW9uT3JpZ2luID0gIitkZWxldGUtY29tcGxldGlvbiI7CisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KGNvZGVNaXJyb3IpOworCisgICAgICAgIHRoaXMuX2NvZGVNaXJy
b3IgPSBjb2RlTWlycm9yOworICAgICAgICB0aGlzLl9zdG9wQ2hhcmFjdGVyc1JlZ2V4ID0gc3Rv
cENoYXJhY3RlcnNSZWdleCB8fCBudWxsOworICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVn
YXRlIHx8IG51bGw7CiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xs
ZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
ckNvbXBsZXRpb25Db250cm9sbGVyLAorICAgICAgICB0aGlzLl9zdGFydE9mZnNldCA9IE5hTjsK
KyAgICAgICAgdGhpcy5fZW5kT2Zmc2V0ID0gTmFOOworICAgICAgICB0aGlzLl9saW5lTnVtYmVy
ID0gTmFOOworICAgICAgICB0aGlzLl9wcmVmaXggPSAiIjsKKyAgICAgICAgdGhpcy5fY29tcGxl
dGlvbnMgPSBbXTsKKyAgICAgICAgdGhpcy5fZXh0ZW5kZWRDb21wbGV0aW9uUHJvdmlkZXJzID0g
e307CisKKyAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnNWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5D
b21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3KHRoaXMpOworCisgICAgICAgIHRoaXMuX2tleU1hcCA9
IHsKKyAgICAgICAgICAgICJVcCI6IHRoaXMuX2hhbmRsZVVwS2V5LmJpbmQodGhpcyksCisgICAg
ICAgICAgICAiRG93biI6IHRoaXMuX2hhbmRsZURvd25LZXkuYmluZCh0aGlzKSwKKyAgICAgICAg
ICAgICJSaWdodCI6IHRoaXMuX2hhbmRsZVJpZ2h0T3JFbnRlcktleS5iaW5kKHRoaXMpLAorICAg
ICAgICAgICAgIkVzYyI6IHRoaXMuX2hhbmRsZUVzY2FwZUtleS5iaW5kKHRoaXMpLAorICAgICAg
ICAgICAgIkVudGVyIjogdGhpcy5faGFuZGxlUmlnaHRPckVudGVyS2V5LmJpbmQodGhpcyksCisg
ICAgICAgICAgICAiVGFiIjogdGhpcy5faGFuZGxlVGFiS2V5LmJpbmQodGhpcyksCisgICAgICAg
ICAgICAiQ21kLUEiOiB0aGlzLl9oYW5kbGVIaWRlS2V5LmJpbmQodGhpcyksCisgICAgICAgICAg
ICAiQ21kLVoiOiB0aGlzLl9oYW5kbGVIaWRlS2V5LmJpbmQodGhpcyksCisgICAgICAgICAgICAi
U2hpZnQtQ21kLVoiOiB0aGlzLl9oYW5kbGVIaWRlS2V5LmJpbmQodGhpcyksCisgICAgICAgICAg
ICAiQ21kLVkiOiB0aGlzLl9oYW5kbGVIaWRlS2V5LmJpbmQodGhpcykKKyAgICAgICAgfTsKKwor
ICAgICAgICB0aGlzLl9oYW5kbGVDaGFuZ2VMaXN0ZW5lciA9IHRoaXMuX2hhbmRsZUNoYW5nZS5i
aW5kKHRoaXMpOworICAgICAgICB0aGlzLl9oYW5kbGVDdXJzb3JBY3Rpdml0eUxpc3RlbmVyID0g
dGhpcy5faGFuZGxlQ3Vyc29yQWN0aXZpdHkuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5faGFu
ZGxlSGlkZUFjdGlvbkxpc3RlbmVyID0gdGhpcy5faGFuZGxlSGlkZUFjdGlvbi5iaW5kKHRoaXMp
OworCisgICAgICAgIHRoaXMuX2NvZGVNaXJyb3IuYWRkS2V5TWFwKHRoaXMuX2tleU1hcCk7CisK
KyAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vbigiY2hhbmdlIiwgdGhpcy5faGFuZGxlQ2hhbmdl
TGlzdGVuZXIpOworICAgICAgICB0aGlzLl9jb2RlTWlycm9yLm9uKCJjdXJzb3JBY3Rpdml0eSIs
IHRoaXMuX2hhbmRsZUN1cnNvckFjdGl2aXR5TGlzdGVuZXIpOworICAgICAgICB0aGlzLl9jb2Rl
TWlycm9yLm9uKCJibHVyIiwgdGhpcy5faGFuZGxlSGlkZUFjdGlvbkxpc3RlbmVyKTsKKyAgICAg
ICAgdGhpcy5fY29kZU1pcnJvci5vbigic2Nyb2xsIiwgdGhpcy5faGFuZGxlSGlkZUFjdGlvbkxp
c3RlbmVyKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBkZWxlZ2F0ZSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBhZGRFeHRlbmRlZENvbXBsZXRpb25Qcm92aWRlcjogZnVuY3Rpb24obW9kZU5hbWUsIHByb3Zp
ZGVyKQorICAgIGFkZEV4dGVuZGVkQ29tcGxldGlvblByb3ZpZGVyKG1vZGVOYW1lLCBwcm92aWRl
cikKICAgICB7CiAgICAgICAgIHRoaXMuX2V4dGVuZGVkQ29tcGxldGlvblByb3ZpZGVyc1ttb2Rl
TmFtZV0gPSBwcm92aWRlcjsKLSAgICB9LAorICAgIH0KIAotICAgIHVwZGF0ZUNvbXBsZXRpb25z
OiBmdW5jdGlvbihjb21wbGV0aW9ucywgaW1wbGljaXRTdWZmaXgpCisgICAgdXBkYXRlQ29tcGxl
dGlvbnMoY29tcGxldGlvbnMsIGltcGxpY2l0U3VmZml4KQogICAgIHsKICAgICAgICAgaWYgKGlz
TmFOKHRoaXMuX3N0YXJ0T2Zmc2V0KSB8fCBpc05hTih0aGlzLl9lbmRPZmZzZXQpIHx8IGlzTmFO
KHRoaXMuX2xpbmVOdW1iZXIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTM4LDI0ICsxMjQs
MjQgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9hcHBseUNvbXBsZXRpb25IaW50KGNv
bXBsZXRpb25zW2luZGV4XSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpc0NvbXBsZXRpb25DaGFu
Z2U6IGZ1bmN0aW9uKGNoYW5nZSkKKyAgICBpc0NvbXBsZXRpb25DaGFuZ2UoY2hhbmdlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lnbm9yZUNoYW5nZSB8fCBjaGFuZ2Uub3JpZ2luID09
PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLkNvbXBsZXRpb25P
cmlnaW4gfHwgY2hhbmdlLm9yaWdpbiA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0
aW9uQ29udHJvbGxlci5EZWxldGVDb21wbGV0aW9uT3JpZ2luOwotICAgIH0sCisgICAgfQogCi0g
ICAgaXNTaG93aW5nQ29tcGxldGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBpc1Nob3dpbmdDb21wbGV0
aW9ucygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdGlvbnNWaWV3LnZpc2li
bGUgfHwgKHRoaXMuX2NvbXBsZXRpb25IaW50TWFya2VyICYmIHRoaXMuX2NvbXBsZXRpb25IaW50
TWFya2VyLmZpbmQoKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpc0hhbmRsaW5nQ2xpY2tFdmVu
dDogZnVuY3Rpb24oKQorICAgIGlzSGFuZGxpbmdDbGlja0V2ZW50KCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9zdWdnZXN0aW9uc1ZpZXcuaXNIYW5kbGluZ0NsaWNrRXZlbnQoKTsKLSAg
ICB9LAorICAgIH0KIAotICAgIGhpZGVDb21wbGV0aW9uczogZnVuY3Rpb24oKQorICAgIGhpZGVD
b21wbGV0aW9ucygpCiAgICAgewogICAgICAgICB0aGlzLl9zdWdnZXN0aW9uc1ZpZXcuaGlkZSgp
OwogCkBAIC0xNzEsOSArMTU3LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9u
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRD
b21wbGV0aW9uOwogICAgICAgICBkZWxldGUgdGhpcy5faWdub3JlTmV4dEN1cnNvckFjdGl2aXR5
OwotICAgIH0sCisgICAgfQogCi0gICAgY2xvc2U6IGZ1bmN0aW9uKCkKKyAgICBjbG9zZSgpCiAg
ICAgewogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnJlbW92ZUtleU1hcCh0aGlzLl9rZXlNYXAp
OwogCkBAIC0xODEsMzcgKzE2NywzNyBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRp
b25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vZmYo
ImN1cnNvckFjdGl2aXR5IiwgdGhpcy5faGFuZGxlQ3Vyc29yQWN0aXZpdHlMaXN0ZW5lcik7CiAg
ICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub2ZmKCJibHVyIiwgdGhpcy5faGFuZGxlSGlkZUFjdGlv
bkxpc3RlbmVyKTsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vZmYoInNjcm9sbCIsIHRoaXMu
X2hhbmRsZUhpZGVBY3Rpb25MaXN0ZW5lcik7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90
ZWN0ZWQKIAotICAgIGNvbXBsZXRpb25TdWdnZXN0aW9uc1NlbGVjdGVkQ29tcGxldGlvbjogZnVu
Y3Rpb24oc3VnZ2VzdGlvbnNWaWV3LCBjb21wbGV0aW9uVGV4dCkKKyAgICBjb21wbGV0aW9uU3Vn
Z2VzdGlvbnNTZWxlY3RlZENvbXBsZXRpb24oc3VnZ2VzdGlvbnNWaWV3LCBjb21wbGV0aW9uVGV4
dCkKICAgICB7CiAgICAgICAgIHRoaXMuX2FwcGx5Q29tcGxldGlvbkhpbnQoY29tcGxldGlvblRl
eHQpOwotICAgIH0sCisgICAgfQogCi0gICAgY29tcGxldGlvblN1Z2dlc3Rpb25zQ2xpY2tlZENv
bXBsZXRpb246IGZ1bmN0aW9uKHN1Z2dlc3Rpb25zVmlldywgY29tcGxldGlvblRleHQpCisgICAg
Y29tcGxldGlvblN1Z2dlc3Rpb25zQ2xpY2tlZENvbXBsZXRpb24oc3VnZ2VzdGlvbnNWaWV3LCBj
b21wbGV0aW9uVGV4dCkKICAgICB7CiAgICAgICAgIC8vIFRoZSBjbGlja2VkIHN1Z2dlc3Rpb24g
Y2F1c2VzIHRoZSBlZGl0b3IgdG8gbG9vc2UgZm9jdXMuIFJlc3RvcmUgaXQgc28gdGhlIHVzZXIg
Y2FuIGtlZXAgdHlwaW5nLgogICAgICAgICB0aGlzLl9jb2RlTWlycm9yLmZvY3VzKCk7CiAKICAg
ICAgICAgdGhpcy5fYXBwbHlDb21wbGV0aW9uSGludChjb21wbGV0aW9uVGV4dCk7CiAgICAgICAg
IHRoaXMuX2NvbW1pdENvbXBsZXRpb25IaW50KCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQ
cml2YXRlCiAKICAgICBnZXQgX2N1cnJlbnRSZXBsYWNlbWVudFRleHQoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDb21wbGV0aW9uICsgdGhpcy5faW1wbGljaXRTdWZmaXg7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGFzUGVuZGluZ0NvbXBsZXRpb246IGZ1bmN0aW9uKCkK
KyAgICBfaGFzUGVuZGluZ0NvbXBsZXRpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuICFpc05h
Tih0aGlzLl9zdGFydE9mZnNldCkgJiYgIWlzTmFOKHRoaXMuX2VuZE9mZnNldCkgJiYgIWlzTmFO
KHRoaXMuX2xpbmVOdW1iZXIpOwotICAgIH0sCisgICAgfQogCi0gICAgX25vdGlmeUNvbXBsZXRp
b25zSGlkZGVuU29vbjogZnVuY3Rpb24oKQorICAgIF9ub3RpZnlDb21wbGV0aW9uc0hpZGRlblNv
b24oKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gbm90aWZ5KCkKICAgICAgICAgewpAQCAtMjI1
LDkgKzIxMSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fbm90aWZ5Q29tcGxldGlvbnNIaWRkZW5J
Zk5lZWRlZFRpbWVvdXQpCiAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbm90aWZ5Q29t
cGxldGlvbnNIaWRkZW5JZk5lZWRlZFRpbWVvdXQpOwogICAgICAgICB0aGlzLl9ub3RpZnlDb21w
bGV0aW9uc0hpZGRlbklmTmVlZGVkVGltZW91dCA9IHNldFRpbWVvdXQobm90aWZ5LmJpbmQodGhp
cyksIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlv
bnNIaWRkZW5EZWxheSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXBwbHlDb21wbGV0aW9uSGlu
dDogZnVuY3Rpb24oY29tcGxldGlvblRleHQpCisgICAgX2FwcGx5Q29tcGxldGlvbkhpbnQoY29t
cGxldGlvblRleHQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChjb21wbGV0aW9uVGV4
dCk7CiAgICAgICAgIGlmICghY29tcGxldGlvblRleHQpCkBAIC0yNjAsOSArMjQ2LDkgQEAgV2Vi
SW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iub3BlcmF0aW9uKHVwZGF0ZS5iaW5kKHRoaXMpKTsKIAog
ICAgICAgICBkZWxldGUgdGhpcy5faWdub3JlQ2hhbmdlOwotICAgIH0sCisgICAgfQogCi0gICAg
X2NvbW1pdENvbXBsZXRpb25IaW50OiBmdW5jdGlvbigpCisgICAgX2NvbW1pdENvbXBsZXRpb25I
aW50KCkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpCiAgICAgICAgIHsKQEAgLTI5
NCw5ICsyODAsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24odXBkYXRl
LmJpbmQodGhpcykpOwogCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pZ25vcmVDaGFuZ2U7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfcmVtb3ZlTGFzdENoYW5nZUZyb21IaXN0b3J5OiBmdW5jdGlvbigp
CisgICAgX3JlbW92ZUxhc3RDaGFuZ2VGcm9tSGlzdG9yeSgpCiAgICAgewogICAgICAgICB2YXIg
aGlzdG9yeSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0SGlzdG9yeSgpOwogCkBAIC0zMDksOSArMjk1
LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGhpc3RvcnkuZG9uZS5wb3AoKTsKIAogICAgICAgICB0aGlzLl9jb2Rl
TWlycm9yLnNldEhpc3RvcnkoaGlzdG9yeSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcmVtb3Zl
Q29tcGxldGlvbkhpbnQ6IGZ1bmN0aW9uKG5vbmF0b21pYywgZG9udFJlc3RvcmVQcmVmaXgpCisg
ICAgX3JlbW92ZUNvbXBsZXRpb25IaW50KG5vbmF0b21pYywgZG9udFJlc3RvcmVQcmVmaXgpCiAg
ICAgewogICAgICAgICBpZiAoIXRoaXMuX2NvbXBsZXRpb25IaW50TWFya2VyKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMzU0LDkgKzM0MCw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29t
cGxldGlvbkNvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jb2RlTWlycm9y
Lm9wZXJhdGlvbih1cGRhdGUuYmluZCh0aGlzKSk7CiAKICAgICAgICAgZGVsZXRlIHRoaXMuX2ln
bm9yZUNoYW5nZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9zY2FuU3RyaW5nRm9yRXhwcmVzc2lv
bjogZnVuY3Rpb24obW9kZU5hbWUsIHN0cmluZywgc3RhcnRPZmZzZXQsIGRpcmVjdGlvbiwgYWxs
b3dNaWRkbGVBbmRFbXB0eSwgaW5jbHVkZVN0b3BDaGFyYWN0ZXIsIGlnbm9yZUluaXRpYWxVbm1h
dGNoZWRPcGVuQnJhY2tldCwgc3RvcENoYXJhY3RlcnNSZWdleCkKKyAgICBfc2NhblN0cmluZ0Zv
ckV4cHJlc3Npb24obW9kZU5hbWUsIHN0cmluZywgc3RhcnRPZmZzZXQsIGRpcmVjdGlvbiwgYWxs
b3dNaWRkbGVBbmRFbXB0eSwgaW5jbHVkZVN0b3BDaGFyYWN0ZXIsIGlnbm9yZUluaXRpYWxVbm1h
dGNoZWRPcGVuQnJhY2tldCwgc3RvcENoYXJhY3RlcnNSZWdleCkKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KGRpcmVjdGlvbiA9PT0gLTEgfHwgZGlyZWN0aW9uID09PSAxKTsKIApAQCAt
NDI5LDkgKzQxNSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xs
ZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHtzdHJpbmc6IHN0
cmluZy5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCksIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXR9OwotICAgIH0sCisgICAgfQogCi0gICAgX2NvbXBsZXRlQXRDdXJyZW50UG9zaXRpb246
IGZ1bmN0aW9uKGZvcmNlKQorICAgIF9jb21wbGV0ZUF0Q3VycmVudFBvc2l0aW9uKGZvcmNlKQog
ICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2NvZGVNaXJyb3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkg
ewogICAgICAgICAgICAgdGhpcy5oaWRlQ29tcGxldGlvbnMoKTsKQEAgLTUwNSw5ICs0OTEsOSBA
QCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLmNvbXBsZXRpb25Db250cm9sbGVyQ29tcGxl
dGlvbnNOZWVkZWQodGhpcywgdGhpcy5fcHJlZml4LCBkZWZhdWx0Q29tcGxldGlvbnMsIGJhc2VT
Y2FuUmVzdWx0ID8gYmFzZVNjYW5SZXN1bHQuc3RyaW5nIDogbnVsbCwgc3VmZml4LCBmb3JjZSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGlvbnMoZGVmYXVs
dENvbXBsZXRpb25zKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9nZW5lcmF0ZUNTU0NvbXBsZXRp
b25zOiBmdW5jdGlvbihtYWluVG9rZW4sIGJhc2UsIHN1ZmZpeCkKKyAgICBfZ2VuZXJhdGVDU1ND
b21wbGV0aW9ucyhtYWluVG9rZW4sIGJhc2UsIHN1ZmZpeCkKICAgICB7CiAgICAgICAgIC8vIFdl
IG9ubHkgc3VwcG9ydCBjb21wbGV0aW9uIGluc2lkZSBDU1MgYmxvY2sgY29udGV4dC4KICAgICAg
ICAgaWYgKG1haW5Ub2tlbi5zdGF0ZS5zdGF0ZSA9PT0gIm1lZGlhIiB8fCBtYWluVG9rZW4uc3Rh
dGUuc3RhdGUgPT09ICJ0b3AiIHx8IG1haW5Ub2tlbi5zdGF0ZS5zdGF0ZSA9PT0gInBhcmVucyIp
CkBAIC01NTEsOSArNTM3LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gQ29tcGxldGUgcHJvcGVydHkgbmFt
ZXMuCiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMuY3NzTmFtZUNv
bXBsZXRpb25zLnN0YXJ0c1dpdGgodGhpcy5fcHJlZml4KTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9nZW5lcmF0ZUphdmFTY3JpcHRDb21wbGV0aW9uczogZnVuY3Rpb24obWFpblRva2VuLCBiYXNl
LCBzdWZmaXgpCisgICAgX2dlbmVyYXRlSmF2YVNjcmlwdENvbXBsZXRpb25zKG1haW5Ub2tlbiwg
YmFzZSwgc3VmZml4KQogICAgIHsKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBiYXNlIGV4cHJl
c3Npb24gdGhlbiB3ZSBzaG91bGQgbm90IGF0dGVtcHQgdG8gbWF0Y2ggYW55IGtleXdvcmRzIG9y
IHZhcmlhYmxlcy4KICAgICAgICAgLy8gQWxsb3cgb25seSBvcGVuIGJyYWNrZXQgY2hhcmFjdGVy
cyBhdCB0aGUgZW5kIG9mIHRoZSBiYXNlLCBvdGhlcndpc2UgbGVhdmUgY29tcGxldGlvbnMgd2l0
aApAQCAtNTYzLDI1ICs1NDksMjUgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9u
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIG1hdGNoaW5nV29yZHMgPSBb
XTsKIAotICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLl9wcmVmaXg7CisgICAgICAgIHZhciBw
cmVmaXggPSB0aGlzLl9wcmVmaXg7CiAKICAgICAgICAgdmFyIGxvY2FsU3RhdGUgPSBtYWluVG9r
ZW4uc3RhdGUubG9jYWxTdGF0ZSA/IG1haW5Ub2tlbi5zdGF0ZS5sb2NhbFN0YXRlIDogbWFpblRv
a2VuLnN0YXRlOwogCi0gICAgICAgIGNvbnN0IGRlY2xhcmluZ1ZhcmlhYmxlID0gbG9jYWxTdGF0
ZS5sZXhpY2FsLnR5cGUgPT09ICJ2YXJkZWYiOwotICAgICAgICBjb25zdCBpbnNpZGVTd2l0Y2gg
PSBsb2NhbFN0YXRlLmxleGljYWwucHJldiA/IGxvY2FsU3RhdGUubGV4aWNhbC5wcmV2LmluZm8g
PT09ICJzd2l0Y2giIDogZmFsc2U7Ci0gICAgICAgIGNvbnN0IGluc2lkZUJsb2NrID0gbG9jYWxT
dGF0ZS5sZXhpY2FsLnByZXYgPyBsb2NhbFN0YXRlLmxleGljYWwucHJldi50eXBlID09PSAifSIg
OiBmYWxzZTsKLSAgICAgICAgY29uc3QgaW5zaWRlUGFyZW50aGVzaXMgPSBsb2NhbFN0YXRlLmxl
eGljYWwudHlwZSA9PT0gIikiOwotICAgICAgICBjb25zdCBpbnNpZGVCcmFja2V0cyA9IGxvY2Fs
U3RhdGUubGV4aWNhbC50eXBlID09PSAiXSI7CisgICAgICAgIHZhciBkZWNsYXJpbmdWYXJpYWJs
ZSA9IGxvY2FsU3RhdGUubGV4aWNhbC50eXBlID09PSAidmFyZGVmIjsKKyAgICAgICAgdmFyIGlu
c2lkZVN3aXRjaCA9IGxvY2FsU3RhdGUubGV4aWNhbC5wcmV2ID8gbG9jYWxTdGF0ZS5sZXhpY2Fs
LnByZXYuaW5mbyA9PT0gInN3aXRjaCIgOiBmYWxzZTsKKyAgICAgICAgdmFyIGluc2lkZUJsb2Nr
ID0gbG9jYWxTdGF0ZS5sZXhpY2FsLnByZXYgPyBsb2NhbFN0YXRlLmxleGljYWwucHJldi50eXBl
ID09PSAifSIgOiBmYWxzZTsKKyAgICAgICAgdmFyIGluc2lkZVBhcmVudGhlc2lzID0gbG9jYWxT
dGF0ZS5sZXhpY2FsLnR5cGUgPT09ICIpIjsKKyAgICAgICAgdmFyIGluc2lkZUJyYWNrZXRzID0g
bG9jYWxTdGF0ZS5sZXhpY2FsLnR5cGUgPT09ICJdIjsKIAotICAgICAgICBjb25zdCBhbGxLZXl3
b3JkcyA9IFsiYnJlYWsiLCAiY2FzZSIsICJjYXRjaCIsICJjb25zdCIsICJjb250aW51ZSIsICJk
ZWJ1Z2dlciIsICJkZWZhdWx0IiwgImRlbGV0ZSIsICJkbyIsICJlbHNlIiwgImZhbHNlIiwgImZp
bmFsbHkiLCAiZm9yIiwgImZ1bmN0aW9uIiwgImlmIiwgImluIiwKKyAgICAgICAgdmFyIGFsbEtl
eXdvcmRzID0gWyJicmVhayIsICJjYXNlIiwgImNhdGNoIiwgImNvbnN0IiwgImNvbnRpbnVlIiwg
ImRlYnVnZ2VyIiwgImRlZmF1bHQiLCAiZGVsZXRlIiwgImRvIiwgImVsc2UiLCAiZmFsc2UiLCAi
ZmluYWxseSIsICJmb3IiLCAiZnVuY3Rpb24iLCAiaWYiLCAiaW4iLAogICAgICAgICAgICAgIklu
ZmluaXR5IiwgImluc3RhbmNlb2YiLCAiTmFOIiwgIm5ldyIsICJudWxsIiwgInJldHVybiIsICJz
d2l0Y2giLCAidGhpcyIsICJ0aHJvdyIsICJ0cnVlIiwgInRyeSIsICJ0eXBlb2YiLCAidW5kZWZp
bmVkIiwgInZhciIsICJ2b2lkIiwgIndoaWxlIiwgIndpdGgiXTsKLSAgICAgICAgY29uc3QgdmFs
dWVLZXl3b3JkcyA9IFsiZmFsc2UiLCAiSW5maW5pdHkiLCAiTmFOIiwgIm51bGwiLCAidGhpcyIs
ICJ0cnVlIiwgInVuZGVmaW5lZCJdOworICAgICAgICB2YXIgdmFsdWVLZXl3b3JkcyA9IFsiZmFs
c2UiLCAiSW5maW5pdHkiLCAiTmFOIiwgIm51bGwiLCAidGhpcyIsICJ0cnVlIiwgInVuZGVmaW5l
ZCJdOwogCi0gICAgICAgIGNvbnN0IGFsbG93ZWRLZXl3b3Jkc0luc2lkZUJsb2NrcyA9IGFsbEtl
eXdvcmRzLmtleVNldCgpOwotICAgICAgICBjb25zdCBhbGxvd2VkS2V5d29yZHNXaGVuRGVjbGFy
aW5nVmFyaWFibGUgPSB2YWx1ZUtleXdvcmRzLmtleVNldCgpOwotICAgICAgICBjb25zdCBhbGxv
d2VkS2V5d29yZHNJbnNpZGVQYXJlbnRoZXNpcyA9IHZhbHVlS2V5d29yZHMuY29uY2F0KFsiZnVu
Y3Rpb24iXSkua2V5U2V0KCk7Ci0gICAgICAgIGNvbnN0IGFsbG93ZWRLZXl3b3Jkc0luc2lkZUJy
YWNrZXRzID0gYWxsb3dlZEtleXdvcmRzSW5zaWRlUGFyZW50aGVzaXM7Ci0gICAgICAgIGNvbnN0
IGFsbG93ZWRLZXl3b3Jkc09ubHlJbnNpZGVTd2l0Y2ggPSBbImNhc2UiLCAiZGVmYXVsdCJdLmtl
eVNldCgpOworICAgICAgICB2YXIgYWxsb3dlZEtleXdvcmRzSW5zaWRlQmxvY2tzID0gYWxsS2V5
d29yZHMua2V5U2V0KCk7CisgICAgICAgIHZhciBhbGxvd2VkS2V5d29yZHNXaGVuRGVjbGFyaW5n
VmFyaWFibGUgPSB2YWx1ZUtleXdvcmRzLmtleVNldCgpOworICAgICAgICB2YXIgYWxsb3dlZEtl
eXdvcmRzSW5zaWRlUGFyZW50aGVzaXMgPSB2YWx1ZUtleXdvcmRzLmNvbmNhdChbImZ1bmN0aW9u
Il0pLmtleVNldCgpOworICAgICAgICB2YXIgYWxsb3dlZEtleXdvcmRzSW5zaWRlQnJhY2tldHMg
PSBhbGxvd2VkS2V5d29yZHNJbnNpZGVQYXJlbnRoZXNpczsKKyAgICAgICAgdmFyIGFsbG93ZWRL
ZXl3b3Jkc09ubHlJbnNpZGVTd2l0Y2ggPSBbImNhc2UiLCAiZGVmYXVsdCJdLmtleVNldCgpOwog
CiAgICAgICAgIGZ1bmN0aW9uIG1hdGNoS2V5d29yZHMoa2V5d29yZHMpCiAgICAgICAgIHsKQEAg
LTY2Myw5ICs2NDksOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9s
bGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBtYXRjaGluZ1dv
cmRzOwotICAgIH0sCisgICAgfQogCi0gICAgX2hhbmRsZVVwS2V5OiBmdW5jdGlvbihjb2RlTWly
cm9yKQorICAgIF9oYW5kbGVVcEtleShjb2RlTWlycm9yKQogICAgIHsKICAgICAgICAgaWYgKCF0
aGlzLl9oYXNQZW5kaW5nQ29tcGxldGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJy
b3IuUGFzczsKQEAgLTY3NCw5ICs2NjAsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBs
ZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICB0aGlzLl9zdWdnZXN0aW9uc1ZpZXcuc2VsZWN0UHJldmlvdXMoKTsKLSAgICB9LAorICAg
IH0KIAotICAgIF9oYW5kbGVEb3duS2V5OiBmdW5jdGlvbihjb2RlTWlycm9yKQorICAgIF9oYW5k
bGVEb3duS2V5KGNvZGVNaXJyb3IpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2hhc1BlbmRp
bmdDb21wbGV0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwpAQCAt
Njg1LDkgKzY3MSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xs
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX3N1
Z2dlc3Rpb25zVmlldy5zZWxlY3ROZXh0KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaGFuZGxl
UmlnaHRPckVudGVyS2V5OiBmdW5jdGlvbihjb2RlTWlycm9yKQorICAgIF9oYW5kbGVSaWdodE9y
RW50ZXJLZXkoY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faGFzUGVuZGlu
Z0NvbXBsZXRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7CkBAIC02
OTYsOSArNjgyLDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fY29t
bWl0Q29tcGxldGlvbkhpbnQoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVFc2NhcGVL
ZXk6IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAgX2hhbmRsZUVzY2FwZUtleShjb2RlTWlycm9y
KQogICAgIHsKICAgICAgICAgdmFyIGRlbGVnYXRlSW1wbGVtZW50c1Nob3VsZEFsbG93RXNjYXBl
Q29tcGxldGlvbiA9IHRoaXMuX2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS5jb21w
bGV0aW9uQ29udHJvbGxlclNob3VsZEFsbG93RXNjYXBlQ29tcGxldGlvbiA9PT0gImZ1bmN0aW9u
IjsKICAgICAgICAgaWYgKHRoaXMuX2hhc1BlbmRpbmdDb21wbGV0aW9uKCkpCkBAIC03MDksOSAr
Njk1LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9jb21wbGV0ZUF0Q3VycmVudFBvc2l0aW9uKHRy
dWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwot
ICAgIH0sCisgICAgfQogCi0gICAgX2hhbmRsZVRhYktleTogZnVuY3Rpb24oY29kZU1pcnJvcikK
KyAgICBfaGFuZGxlVGFiS2V5KGNvZGVNaXJyb3IpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMu
X2hhc1BlbmRpbmdDb21wbGV0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5Q
YXNzOwpAQCAtNzU5LDkgKzc0NSw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlv
bkNvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9lbmRPZmZzZXQgPSB0aGlz
Ll9zdGFydE9mZnNldCArIGNvbW1vblByZWZpeC5sZW5ndGg7CiAKICAgICAgICAgdGhpcy5fYXBw
bHlDb21wbGV0aW9uSGludCh0aGlzLl9jdXJyZW50Q29tcGxldGlvbik7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbihjb2RlTWlycm9yLCBjaGFuZ2UpCisgICAg
X2hhbmRsZUNoYW5nZShjb2RlTWlycm9yLCBjaGFuZ2UpCiAgICAgewogICAgICAgICBpZiAodGhp
cy5pc0NvbXBsZXRpb25DaGFuZ2UoY2hhbmdlKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc3
OCw5ICs3NjQsOSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlzLl9jb21w
bGV0ZUF0Q3VycmVudFBvc2l0aW9uKGZhbHNlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5k
bGVDdXJzb3JBY3Rpdml0eTogZnVuY3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlQ3Vyc29y
QWN0aXZpdHkoY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pZ25vcmVDaGFu
Z2UpCiAgICAgICAgICAgICByZXR1cm47CkBAIC03OTEsMTYgKzc3NywxNiBAQCBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
fQogCiAgICAgICAgIHRoaXMuaGlkZUNvbXBsZXRpb25zKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfaGFuZGxlSGlkZUtleTogZnVuY3Rpb24oY29kZU1pcnJvcikKKyAgICBfaGFuZGxlSGlkZUtl
eShjb2RlTWlycm9yKQogICAgIHsKICAgICAgICAgdGhpcy5oaWRlQ29tcGxldGlvbnMoKTsKIAog
ICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOwotICAgIH0sCisgICAgfQogCi0gICAgX2hh
bmRsZUhpZGVBY3Rpb246IGZ1bmN0aW9uKGNvZGVNaXJyb3IpCisgICAgX2hhbmRsZUhpZGVBY3Rp
b24oY29kZU1pcnJvcikKICAgICB7CiAgICAgICAgIC8vIENsaWNraW5nIGEgc3VnZ2VzdGlvbiBj
YXVzZXMgdGhlIGVkaXRvciB0byBibHVyLiBXZSBkb24ndCB3YW50IHRvIGhpZGUgY29tcGxldGlv
bnMgaW4gdGhpcyBjYXNlLgogICAgICAgICBpZiAodGhpcy5pc0hhbmRsaW5nQ2xpY2tFdmVudCgp
KQpAQCAtODEwLDQgKzc5NiwxNCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25D
b250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuQ29kZU1p
cnJvckNvbXBsZXRpb25Db250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNv
bnRyb2xsZXIuR2VuZXJpY1N0b3BDaGFyYWN0ZXJzUmVnZXggPSAvW1xzPTo7LF0vOworV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5EZWZhdWx0U3RvcENoYXJhY3Rl
cnNSZWdleE1vZGVNYXAgPSB7ImNzcyI6IC9bXHM6Oyx7fSgpXS8sICJqYXZhc2NyaXB0IjogL1tc
cz06OywhK1wtKi8lJnxefj88Pi57fSgpW1xdXS99OworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JD
b21wbGV0aW9uQ29udHJvbGxlci5CYXNlRXhwcmVzc2lvblN0b3BDaGFyYWN0ZXJzUmVnZXhNb2Rl
TWFwID0geyJqYXZhc2NyaXB0IjogL1tccz06OywhK1wtKi8lJnxefj88Pl0vfTsKK1dlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuT3BlbkJyYWNrZXRDaGFyYWN0ZXJz
UmVnZXggPSAvWyh7W10vOworV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJv
bGxlci5DbG9zZUJyYWNrZXRDaGFyYWN0ZXJzUmVnZXggPSAvWyl9XF1dLzsKK1dlYkluc3BlY3Rv
ci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuTWF0Y2hpbmdCcmFja2V0cyA9IHsieyI6
ICJ9IiwgIigiOiAiKSIsICJbIjogIl0iLCAifSI6ICJ7IiwgIikiOiAiKCIsICJdIjogIlsifTsK
K1dlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIuQ29tcGxldGlvbkhp
bnRTdHlsZUNsYXNzTmFtZSA9ICJjb21wbGV0aW9uLWhpbnQiOworV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uc0hpZGRlbkRlbGF5ID0gMjUwOwor
V2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5Db21wbGV0aW9uVHlw
aW5nRGVsYXkgPSAyNTA7CitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckNvbXBsZXRpb25Db250cm9s
bGVyLkNvbXBsZXRpb25PcmlnaW4gPSAiK2NvbXBsZXRpb24iOworV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JDb21wbGV0aW9uQ29udHJvbGxlci5EZWxldGVDb21wbGV0aW9uT3JpZ2luID0gIitkZWxl
dGUtY29tcGxldGlvbiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJvbGxl
ci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Nv
ZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmpzCmluZGV4IGIxYzNiOTRhNjQ1
ZGU2MzJhMjRhZDZiZDdiYWZlYzM3MWVjNTgwNjguLmE4MTA1OTk4YWU2ZTIwYjNhZjFhYjUwYTRk
ZTVhMjcxNTI4YjRkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVy
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0NvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250cm9sbGVyLmpzCkBAIC0yMywyMiArMjMs
MjMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIgPSBmdW5jdGlvbihj
b2RlTWlycm9yKQorV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFnVG9BZGp1c3ROdW1iZXJDb250
cm9sbGVyID0gY2xhc3MgQ29kZU1pcnJvckRyYWdUb0FkanVzdE51bWJlckNvbnRyb2xsZXIgZXh0
ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVN
aXJyb3I7CisgICAgY29uc3RydWN0b3IoY29kZU1pcnJvcikKKyAgICB7CisgICAgICAgIHN1cGVy
KCk7CiAKLSAgICB0aGlzLl9kcmFnVG9BZGp1c3RDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rv
ci5EcmFnVG9BZGp1c3RDb250cm9sbGVyKHRoaXMpOwotfTsKKyAgICAgICAgdGhpcy5fY29kZU1p
cnJvciA9IGNvZGVNaXJyb3I7CiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yRHJhZ1RvQWRqdXN0
TnVtYmVyQ29udHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yRHJhZ1RvQWRqdXN0TnVtYmVyQ29udHJvbGxlciwKKyAgICAgICAgdGhp
cy5fZHJhZ1RvQWRqdXN0Q29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0
Q29udHJvbGxlcih0aGlzKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBlbmFi
bGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9kcmFnVG9BZGp1c3RDb250cm9sbGVy
LmVuYWJsZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZW5hYmxlZChlbmFibGVkKQogICAg
IHsKQEAgLTQ3LDM4ICs0OCwzOCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FkanVz
dE51bWJlckNvbnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2RyYWdUb0Fk
anVzdENvbnRyb2xsZXIuZWxlbWVudCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0V3JhcHBlckVsZW1l
bnQoKTsKICAgICAgICAgdGhpcy5fZHJhZ1RvQWRqdXN0Q29udHJvbGxlci5lbmFibGVkID0gZW5h
YmxlZDsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAogCi0gICAgZHJhZ1RvQWRq
dXN0Q29udHJvbGxlckFjdGl2ZVN0YXRlQ2hhbmdlZDogZnVuY3Rpb24oZHJhZ1RvQWRqdXN0Q29u
dHJvbGxlcikKKyAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyQWN0aXZlU3RhdGVDaGFuZ2VkKGRy
YWdUb0FkanVzdENvbnRyb2xsZXIpCiAgICAgewogICAgICAgICBpZiAoIWRyYWdUb0FkanVzdENv
bnRyb2xsZXIuYWN0aXZlKQogICAgICAgICAgICAgdGhpcy5faG92ZXJlZFRva2VuSW5mbyA9IG51
bGw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBkcmFnVG9BZGp1c3RDb250cm9sbGVyQ2FuQmVBY3Rp
dmF0ZWQ6IGZ1bmN0aW9uKGRyYWdUb0FkanVzdENvbnRyb2xsZXIpCisgICAgZHJhZ1RvQWRqdXN0
Q29udHJvbGxlckNhbkJlQWN0aXZhdGVkKGRyYWdUb0FkanVzdENvbnRyb2xsZXIpCiAgICAgewog
ICAgICAgICByZXR1cm4gIXRoaXMuX2NvZGVNaXJyb3IuZ2V0T3B0aW9uKCJyZWFkT25seSIpOwot
ICAgIH0sCisgICAgfQogCi0gICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxlckNhbkJlQWRqdXN0ZWQ6
IGZ1bmN0aW9uKGRyYWdUb0FkanVzdENvbnRyb2xsZXIpCisgICAgZHJhZ1RvQWRqdXN0Q29udHJv
bGxlckNhbkJlQWRqdXN0ZWQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKICAgICB7CiAKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2hvdmVyZWRUb2tlbkluZm8gJiYgdGhpcy5faG92ZXJlZFRva2VuSW5m
by5jb250YWluc051bWJlcjsKLSAgICB9LAorICAgIH0KIAotICAgIGRyYWdUb0FkanVzdENvbnRy
b2xsZXJXYXNBZGp1c3RlZEJ5QW1vdW50OiBmdW5jdGlvbihkcmFnVG9BZGp1c3RDb250cm9sbGVy
LCBhbW91bnQpCisgICAgZHJhZ1RvQWRqdXN0Q29udHJvbGxlcldhc0FkanVzdGVkQnlBbW91bnQo
ZHJhZ1RvQWRqdXN0Q29udHJvbGxlciwgYW1vdW50KQogICAgIHsKICAgICAgICAgdGhpcy5fY29k
ZU1pcnJvci5hbHRlck51bWJlckluUmFuZ2UoYW1vdW50LCB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZv
LnN0YXJ0UG9zaXRpb24sIHRoaXMuX2hvdmVyZWRUb2tlbkluZm8uZW5kUG9zaXRpb24sIGZhbHNl
KTsKLSAgICB9LAorICAgIH0KIAotICAgIGRyYWdUb0FkanVzdENvbnRyb2xsZXJEaWRSZXNldDog
ZnVuY3Rpb24oZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKKyAgICBkcmFnVG9BZGp1c3RDb250cm9s
bGVyRGlkUmVzZXQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKICAgICB7CiAgICAgICAgIHRoaXMu
X2hvdmVyZWRUb2tlbkluZm8gPSBudWxsOwotICAgIH0sCisgICAgfQogCi0gICAgZHJhZ1RvQWRq
dXN0Q29udHJvbGxlckNhbkFkanVzdE9iamVjdEF0UG9pbnQ6IGZ1bmN0aW9uKGRyYWdUb0FkanVz
dENvbnRyb2xsZXIsIHBvaW50KQorICAgIGRyYWdUb0FkanVzdENvbnRyb2xsZXJDYW5BZGp1c3RP
YmplY3RBdFBvaW50KGRyYWdUb0FkanVzdENvbnRyb2xsZXIsIHBvaW50KQogICAgIHsKICAgICAg
ICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fY29kZU1pcnJvci5jb29yZHNDaGFyKHtsZWZ0OiBwb2lu
dC54LCB0b3A6IHBvaW50Lnl9KTsKICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5fY29kZU1pcnJv
ci5nZXRUb2tlbkF0KHBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVN
aXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcwppbmRleCA5MDYzOWQ1OWM4NWIxN2QzYTY5MzE2MDNj
YTgwMWI1YTJkNTZlZGViLi42OTAyY2E2Yjk1YWVlYTg1NzE3YjBjMDRkYzQzODNjODk2MGU2YjQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvckVkaXRpbmdDb250cm9s
bGVyLmpzCkBAIC0yMyw2NiArMjMsNjMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyID0g
ZnVuY3Rpb24oY29kZU1pcnJvciwgbWFya2VyKQorV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0
aW5nQ29udHJvbGxlciA9IGNsYXNzIENvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlciBleHRlbmRz
IFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEg
V2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBX
ZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLl9jb2RlTWlycm9yID0g
Y29kZU1pcnJvcjsKLSAgICB0aGlzLl9tYXJrZXIgPSBtYXJrZXI7Ci0gICAgdGhpcy5fZGVsZWdh
dGUgPSBudWxsOworICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJyb3IsIG1hcmtlcikKKyAgICB7Cisg
ICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9yYW5nZSA9IG1hcmtlci5yYW5nZTsKKyAgICAg
ICAgdGhpcy5fY29kZU1pcnJvciA9IGNvZGVNaXJyb3I7CisgICAgICAgIHRoaXMuX21hcmtlciA9
IG1hcmtlcjsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBudWxsOwogCi0gICAgLy8gVGhlIHZh
bHVlIG11c3Qgc3VwcG9ydCAudG9TdHJpbmcoKSBhbmQgLmNvcHkoKSBtZXRob2RzLgotICAgIHRo
aXMuX3ZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWU7CisgICAgICAgIHRoaXMuX3JhbmdlID0gbWFy
a2VyLnJhbmdlOwogCi0gICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dEVzYyA9IG5ldyBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChudWxsLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5LZXkuRXNjYXBlKTsKLX07CisgICAgICAgIC8vIFRoZSB2YWx1ZSBtdXN0IHN1cHBvcnQgLnRv
U3RyaW5nKCkgYW5kIC5jb3B5KCkgbWV0aG9kcy4KKyAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlz
LmluaXRpYWxWYWx1ZTsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxl
ci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
RWRpdGluZ0NvbnRyb2xsZXIsCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZSwKKyAgICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dEVzYyA9IG5ldyBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChudWxsLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5LZXkuRXNjYXBlKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBtYXJrZXIo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX21hcmtlcjsKLSAgICB9LAorICAgIH0KIAog
ICAgIGdldCByYW5nZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcmFuZ2U7Ci0gICAg
fSwKKyAgICB9CiAKICAgICBnZXQgdmFsdWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X3ZhbHVlOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IHZhbHVlKHZhbHVlKQogICAgIHsKICAg
ICAgICAgdGhpcy50ZXh0ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgICAgICAgdGhpcy5fdmFsdWUg
PSB2YWx1ZTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBkZWxlZ2F0ZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgZGVs
ZWdhdGUoZGVsZWdhdGUpCiAgICAgewogICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRl
OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHRleHQoKQogICAgIHsKICAgICAgICAgdmFyIGZy
b20gPSB7bGluZTogdGhpcy5fcmFuZ2Uuc3RhcnRMaW5lLCBjaDogdGhpcy5fcmFuZ2Uuc3RhcnRD
b2x1bW59OwogICAgICAgICB2YXIgdG8gPSB7bGluZTogdGhpcy5fcmFuZ2UuZW5kTGluZSwgY2g6
IHRoaXMuX3JhbmdlLmVuZENvbHVtbn07CiAgICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9y
LmdldFJhbmdlKGZyb20sIHRvKTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCB0ZXh0KHRleHQp
CiAgICAgewpAQCAtOTQsNjMgKzkxLDYzIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGlu
Z0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3Jh
bmdlLnN0YXJ0TGluZSArIGxpbmVzLmxlbmd0aCAtIDE7CiAgICAgICAgIHZhciBlbmRDb2x1bW4g
PSBsaW5lcy5sZW5ndGggPiAxID8gbGluZXMubGFzdFZhbHVlLmxlbmd0aCA6IHRoaXMuX3Jhbmdl
LnN0YXJ0Q29sdW1uICsgdGV4dC5sZW5ndGg7CiAgICAgICAgIHRoaXMuX3JhbmdlID0gbmV3IFdl
Ykluc3BlY3Rvci5UZXh0UmFuZ2UodGhpcy5fcmFuZ2Uuc3RhcnRMaW5lLCB0aGlzLl9yYW5nZS5z
dGFydENvbHVtbiwgZW5kTGluZSwgZW5kQ29sdW1uKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdl
dCBpbml0aWFsVmFsdWUoKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xh
c3Nlcy4KICAgICAgICAgcmV0dXJuIHRoaXMudGV4dDsKLSAgICB9LAorICAgIH0KIAogICAgIGdl
dCBjc3NDbGFzc05hbWUoKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xh
c3Nlcy4KICAgICAgICAgcmV0dXJuICIiOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBvcG92
ZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXI7Ci0gICAgfSwKKyAgICB9
CiAKICAgICBnZXQgcG9wb3ZlclByZWZlcnJlZEVkZ2VzKCkKICAgICB7CiAgICAgICAgIC8vIEJl
c3QgdG8gZGlzcGxheSB0aGUgcG9wb3ZlciB0byB0aGUgbGVmdCBvciBhYm92ZSB0aGUgZWRpdGVk
IHJhbmdlIHNpbmNlIGl0cyBlbmQgcG9zaXRpb24gbWF5IGNoYW5nZSwgYnV0IG5vdCBpdHMgc3Rh
cnQKICAgICAgICAgLy8gcG9zaXRpb24uIFRoaXMgd2F5IHdlIG1pbmltaXplIHRoZSBjaGFuY2Vz
IG9mIG92ZXJsYXlpbmcgdGhlIGVkaXRlZCByYW5nZSBhcyBpdCBjaGFuZ2VzLgogICAgICAgICBy
ZXR1cm4gW1dlYkluc3BlY3Rvci5SZWN0RWRnZS5NSU5fWCwgV2ViSW5zcGVjdG9yLlJlY3RFZGdl
Lk1JTl9ZLCBXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUFYX1ksIFdlYkluc3BlY3Rvci5SZWN0RWRn
ZS5NQVhfWF07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwb3BvdmVyVGFyZ2V0RnJhbWVXaXRoUmVj
dHM6IGZ1bmN0aW9uKHJlY3RzKQorICAgIHBvcG92ZXJUYXJnZXRGcmFtZVdpdGhSZWN0cyhyZWN0
cykKICAgICB7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUmVjdC51bmlvbk9mUmVjdHMo
cmVjdHMpOwotICAgIH0sCisgICAgfQogCi0gICAgcHJlc2VudEhvdmVyTWVudTogZnVuY3Rpb24o
KQorICAgIHByZXNlbnRIb3Zlck1lbnUoKQogICAgIHsKICAgICAgICAgdGhpcy5faG92ZXJNZW51
ID0gbmV3IFdlYkluc3BlY3Rvci5Ib3Zlck1lbnUodGhpcyk7CiAgICAgICAgIHRoaXMuX2hvdmVy
TWVudS5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jc3NDbGFzc05hbWUpOwogICAgICAgICB0
aGlzLl9yZWN0cyA9IHRoaXMuX21hcmtlci5yZWN0czsKICAgICAgICAgdGhpcy5faG92ZXJNZW51
LnByZXNlbnQodGhpcy5fcmVjdHMpOwotICAgIH0sCisgICAgfQogCi0gICAgZGlzbWlzc0hvdmVy
TWVudTogZnVuY3Rpb24oZGlzY3JldGUpCisgICAgZGlzbWlzc0hvdmVyTWVudShkaXNjcmV0ZSkK
ICAgICB7CiAgICAgICAgIHRoaXMuX2hvdmVyTWVudS5kaXNtaXNzKGRpc2NyZXRlKTsKLSAgICB9
LAorICAgIH0KIAotICAgIHBvcG92ZXJXaWxsUHJlc2VudDogZnVuY3Rpb24ocG9wb3ZlcikKKyAg
ICBwb3BvdmVyV2lsbFByZXNlbnQocG9wb3ZlcikKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVu
dGVkIGJ5IHN1YmNsYXNzZXMuCi0gICAgfSwKKyAgICB9CiAKLSAgICBwb3BvdmVyRGlkUHJlc2Vu
dDogZnVuY3Rpb24ocG9wb3ZlcikKKyAgICBwb3BvdmVyRGlkUHJlc2VudChwb3BvdmVyKQogICAg
IHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KLSAgICB9LAorICAgIH0K
IAogICAgIC8vIFByb3RlY3RlZAogCi0gICAgaGFuZGxlS2V5ZG93bkV2ZW50OiBmdW5jdGlvbihl
dmVudCkKKyAgICBoYW5kbGVLZXlkb3duRXZlbnQoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAo
IXRoaXMuX2tleWJvYXJkU2hvcnRjdXRFc2MubWF0Y2hlc0V2ZW50KGV2ZW50KSB8fCAhdGhpcy5f
cG9wb3Zlci52aXNpYmxlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU5LDkgKzE1
Niw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLl9wb3BvdmVyLmRpc21pc3MoKTsKIAogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9LAorICAgIH0KIAotICAgIGhvdmVyTWVudUJ1dHRvbldhc1ByZXNzZWQ6IGZ1
bmN0aW9uKGhvdmVyTWVudSkKKyAgICBob3Zlck1lbnVCdXR0b25XYXNQcmVzc2VkKGhvdmVyTWVu
dSkKICAgICB7CiAgICAgICAgIHRoaXMuX3BvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92
ZXIodGhpcyk7CiAgICAgICAgIHRoaXMucG9wb3ZlcldpbGxQcmVzZW50KHRoaXMuX3BvcG92ZXIp
OwpAQCAtMTc2LDkgKzE3Myw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRy
b2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuZWRpdGluZ0Nv
bnRyb2xsZXJEaWRTdGFydEVkaXRpbmcodGhpcyk7CiAKICAgICAgICAgdGhpcy5fb3JpZ2luYWxW
YWx1ZSA9IHRoaXMuX3ZhbHVlLmNvcHkoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGRpZERpc21p
c3NQb3BvdmVyOiBmdW5jdGlvbihwb3BvdmVyKQorICAgIGRpZERpc21pc3NQb3BvdmVyKHBvcG92
ZXIpCiAgICAgewogICAgICAgICBkZWxldGUgdGhpcy5fcG9wb3ZlcjsKICAgICAgICAgZGVsZXRl
IHRoaXMuX29yaWdpbmFsVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJv
bGxlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0NvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLmpzCmluZGV4IDgzN2FiNjVlODEx
MzRkODhlZDg0ZmNiM2U5YmQ4Mzc4NDkwNGZmZGIuLmUxZTE2YTUyM2Y2NDY1ZWJhYWE1MThjYjRl
ZjQ1MWRlYTFkYmIwNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLmpz
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Nv
ZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLmpzCkBAIC0yMyw3OCArMjMsNjggQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9y
LCBtYXJrZXIpCitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xs
ZXIgPSBjbGFzcyBDb2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlciBleHRlbmRzIFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIKIHsKLSAgICBXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyLmNhbGwodGhpcywgY29kZU1pcnJvciwgbWFy
a2VyKTsKLQotICAgIGlmICghV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdD
b250cm9sbGVyLkdyYWRpZW50VHlwZXMpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkdyYWRpZW50VHlwZXMgPSB7Ci0gICAgICAgICAg
ICAibGluZWFyLWdyYWRpZW50IjogewotICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5MaW5lYXJHcmFkaWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJMaW5lYXIgR3JhZGllbnQiKSwKLSAgICAgICAgICAgICAgICByZXBlYXRzOiBmYWxz
ZQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgInJhZGlhbC1ncmFkaWVudCI6IHsKLSAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuUmFkaWFsR3JhZGllbnQsCi0gICAgICAg
ICAgICAgICAgbGFiZWw6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmFkaWFsIEdyYWRpZW50Iiks
Ci0gICAgICAgICAgICAgICAgcmVwZWF0czogZmFsc2UKLSAgICAgICAgICAgIH0sCi0KLSAgICAg
ICAgICAgICJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IjogewotICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5MaW5lYXJHcmFkaWVudCwKLSAgICAgICAgICAgICAgICBsYWJlbDog
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXBlYXRpbmcgTGluZWFyIEdyYWRpZW50IiksCi0gICAg
ICAgICAgICAgICAgcmVwZWF0czogdHJ1ZQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
InJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQiOiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlJhZGlhbEdyYWRpZW50LAotICAgICAgICAgICAgICAgIGxhYmVsOiBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlJlcGVhdGluZyBSYWRpYWwgR3JhZGllbnQiKSwKLSAgICAgICAgICAg
ICAgICByZXBlYXRzOiB0cnVlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgY29uc3Ry
dWN0b3IoY29kZU1pcnJvciwgbWFya2VyKQorICAgIHsKKyAgICAgICAgc3VwZXIoY29kZU1pcnJv
ciwgbWFya2VyKTsKKworICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGll
bnRFZGl0aW5nQ29udHJvbGxlci5HcmFkaWVudFR5cGVzKSB7CisgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuR3JhZGllbnRUeXBlcyA9
IHsKKyAgICAgICAgICAgICAgICAibGluZWFyLWdyYWRpZW50IjogeworICAgICAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuTGluZWFyR3JhZGllbnQsCisgICAgICAgICAgICAgICAg
ICAgIGxhYmVsOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxpbmVhciBHcmFkaWVudCIpLAorICAg
ICAgICAgICAgICAgICAgICByZXBlYXRzOiBmYWxzZQorICAgICAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgICAgICAicmFkaWFsLWdyYWRpZW50IjogeworICAgICAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuUmFkaWFsR3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAgIGxh
YmVsOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJhZGlhbCBHcmFkaWVudCIpLAorICAgICAgICAg
ICAgICAgICAgICByZXBlYXRzOiBmYWxzZQorICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgICAgICAicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCI6IHsKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLkxpbmVhckdyYWRpZW50LAorICAgICAgICAgICAgICAgICAg
ICBsYWJlbDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXBlYXRpbmcgTGluZWFyIEdyYWRpZW50
IiksCisgICAgICAgICAgICAgICAgICAgIHJlcGVhdHM6IHRydWUKKyAgICAgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAgICAgInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQiOiB7CisgICAg
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5SYWRpYWxHcmFkaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgbGFiZWw6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVwZWF0aW5nIFJh
ZGlhbCBHcmFkaWVudCIpLAorICAgICAgICAgICAgICAgICAgICByZXBlYXRzOiB0cnVlCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQogICAgIH0KLX07Ci0KLVdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5TdHlsZUNsYXNz
TmFtZSA9ICJncmFkaWVudC1lZGl0aW5nLWNvbnRyb2xsZXIiOwotV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkVkaXRzQ29sb3JDbGFzc05hbWUgPSAiZWRp
dHMtY29sb3IiOwotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9s
bGVyLlJhZGlhbEdyYWRpZW50Q2xhc3NOYW1lID0gInJhZGlhbC1ncmFkaWVudCI7Ci0KLS8vIExh
emlseSBwb3B1bGF0ZWQgaW4gdGhlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0
aW5nQ29udHJvbGxlciBjb25zdHJ1Y3Rvci4KLS8vIEl0IG5lZWRzIHRvIGJlIGxhenkgdG8gdXNl
IFVJU3RyaW5nIGFmdGVyIE1haW4uanMgYW5kIGxvY2FsaXplZFN0cmluZ3MuanMgbG9hZHMuCi1X
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuR3JhZGllbnRU
eXBlcyA9IG51bGw7Ci0KLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlciwKLSAgICBfX3Byb3RvX186IFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yRWRpdGluZ0NvbnRyb2xsZXIucHJvdG90eXBlLAogCiAgICAgLy8gUHVi
bGljCiAKICAgICBnZXQgaW5pdGlhbFZhbHVlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IuR3JhZGllbnQuZnJvbVN0cmluZyh0aGlzLnRleHQpOwotICAgIH0sCisgICAgfQog
CiAgICAgZ2V0IGNzc0NsYXNzTmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gImdyYWRpZW50
IjsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBwb3BvdmVyUHJlZmVycmVkRWRnZXMoKQogICAg
IHsKICAgICAgICAgLy8gU2luY2UgdGhlIGdyYWRpZW50IGVkaXRvciBjYW4gcmVzaXplIHRvIGJl
IHF1aXRlIHRhbGwsIGxldCdzIGF2b2lkIGRpc3BsYXlpbmcgdGhlIHBvcG92ZXIKICAgICAgICAg
Ly8gYWJvdmUgdGhlIGVkaXRlZCB2YWx1ZSBzbyB0aGF0IGl0IG1heSBub3QgY2hhbmdlIHdoaWNo
IGVkZ2UgaXQgYXR0YWNoZXMgdG8gdXBvbiBlZGl0aW5nIGEgc3RvcC4KICAgICAgICAgcmV0dXJu
IFtXZWJJbnNwZWN0b3IuUmVjdEVkZ2UuTUlOX1gsIFdlYkluc3BlY3Rvci5SZWN0RWRnZS5NQVhf
WSwgV2ViSW5zcGVjdG9yLlJlY3RFZGdlLk1BWF9YXTsKLSAgICB9LAorICAgIH0KIAotICAgIHBv
cG92ZXJUYXJnZXRGcmFtZVdpdGhSZWN0czogZnVuY3Rpb24ocmVjdHMpCisgICAgcG9wb3ZlclRh
cmdldEZyYW1lV2l0aFJlY3RzKHJlY3RzKQogICAgIHsKICAgICAgICAgLy8gSWYgYSBncmFkaWVu
dCBpcyBkZWZpbmVkIGFjcm9zcyBzZXZlcmFsIGxpbmVzLCB3ZSBwcm9iYWJseSB3YW50IHRvIHVz
ZSB0aGUgZmlyc3QgbGluZSBvbmx5CiAgICAgICAgIC8vIGFzIGEgdGFyZ2V0IGZyYW1lIGZvciB0
aGUgZWRpdG9yIHNpbmNlIHdlIG1heSByZWZvcm1hdCB0aGUgZ3JhZGllbnQgdmFsdWUgdG8gZml0
IG9uIGEgc2luZ2xlIGxpbmUuCiAgICAgICAgIHJldHVybiByZWN0c1swXTsKLSAgICB9LAorICAg
IH0KIAotICAgIHBvcG92ZXJXaWxsUHJlc2VudDogZnVuY3Rpb24ocG9wb3ZlcikKKyAgICBwb3Bv
dmVyV2lsbFByZXNlbnQocG9wb3ZlcikKICAgICB7CiAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICB0aGlzLl9jb250YWluZXIu
Y2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9s
bGVyLlN0eWxlQ2xhc3NOYW1lOwpAQCAtMTMwLDkgKzEyMCw5IEBAIFdlYkluc3BlY3Rvci5Db2Rl
TWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuX3VwZGF0ZUNTU0NsYXNzRm9yR3JhZGllbnRUeXBlKCk7CiAKICAgICAgICAgcG9wb3Zlci5j
b250ZW50ID0gdGhpcy5fY29udGFpbmVyOwotICAgIH0sCisgICAgfQogCi0gICAgcG9wb3ZlckRp
ZFByZXNlbnQ6IGZ1bmN0aW9uKHBvcG92ZXIpCisgICAgcG9wb3ZlckRpZFByZXNlbnQocG9wb3Zl
cikKICAgICB7CiAgICAgICAgIHRoaXMuX2dyYWRpZW50U2xpZGVyLnN0b3BzID0gdGhpcy52YWx1
ZS5zdG9wczsKIApAQCAtMTQzLDI0ICsxMzMsMjQgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JH
cmFkaWVudEVkaXRpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMu
X2dyYWRpZW50VHlwZVBpY2tlci52YWx1ZSA9IHRoaXMudmFsdWUucmVwZWF0cyA/ICJyZXBlYXRp
bmctcmFkaWFsLWdyYWRpZW50IiA6ICJyYWRpYWwtZ3JhZGllbnQiOwogCiAgICAgICAgIHRoaXMu
X2dyYWRpZW50U2xpZGVyLmRlbGVnYXRlID0gdGhpczsKLSAgICB9LAorICAgIH0KIAogICAgIC8v
IFByb3RlY3RlZAogCi0gICAgaGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIGhhbmRs
ZUV2ZW50KGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJpbnB1dCIp
CiAgICAgICAgICAgICB0aGlzLl9oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKICAgICAgICAgZWxz
ZSBpZiAoZXZlbnQudHlwZSA9PT0gImNoYW5nZSIpCiAgICAgICAgICAgICB0aGlzLl9oYW5kbGVD
aGFuZ2VFdmVudChldmVudCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBncmFkaWVudFNsaWRlclN0
b3BzRGlkQ2hhbmdlOiBmdW5jdGlvbihncmFkaWVudFNsaWRlcikKKyAgICBncmFkaWVudFNsaWRl
clN0b3BzRGlkQ2hhbmdlKGdyYWRpZW50U2xpZGVyKQogICAgIHsKICAgICAgICAgdGhpcy50ZXh0
ID0gdGhpcy52YWx1ZS50b1N0cmluZygpOwotICAgIH0sCisgICAgfQogCi0gICAgZ3JhZGllbnRT
bGlkZXJTdG9wV2FzU2VsZWN0ZWQ6IGZ1bmN0aW9uKGdyYWRpZW50U2xpZGVyLCBzdG9wKQorICAg
IGdyYWRpZW50U2xpZGVyU3RvcFdhc1NlbGVjdGVkKGdyYWRpZW50U2xpZGVyLCBzdG9wKQogICAg
IHsKICAgICAgICAgdmFyIHNlbGVjdGVkU3RvcCA9IGdyYWRpZW50U2xpZGVyLnNlbGVjdGVkU3Rv
cDsKIApAQCAtMTc4LDkgKzE2OCw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRF
ZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2FuZ2xlSW5wdXQu
Ymx1cigpOwogCiAgICAgICAgIHRoaXMucG9wb3Zlci51cGRhdGUoKTsKLSAgICB9LAorICAgIH0K
IAotICAgIGRyYWdUb0FkanVzdENvbnRyb2xsZXJXYXNBZGp1c3RlZEJ5QW1vdW50OiBmdW5jdGlv
bihkcmFnVG9BZGp1c3RDb250cm9sbGVyLCBhbW91bnQpCisgICAgZHJhZ1RvQWRqdXN0Q29udHJv
bGxlcldhc0FkanVzdGVkQnlBbW91bnQoZHJhZ1RvQWRqdXN0Q29udHJvbGxlciwgYW1vdW50KQog
ICAgIHsKICAgICAgICAgdmFyIGFuZ2xlID0gcGFyc2VGbG9hdCh0aGlzLl9hbmdsZUlucHV0LnZh
bHVlKSArIGFtb3VudDsKICAgICAgICAgaWYgKE1hdGgucm91bmQoYW5nbGUpICE9PSBhbmdsZSkK
QEAgLTE4OCwyMCArMTc4LDIwIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0
aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fYW5nbGVJbnB1dC52
YWx1ZSA9IGFuZ2xlOwogICAgICAgICB0aGlzLl9hbmdsZUlucHV0VmFsdWVEaWRDaGFuZ2UoYW5n
bGUpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2hhbmRsZUlucHV0
RXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KQogICAg
IHsKICAgICAgICAgdmFyIGFuZ2xlID0gcGFyc2VGbG9hdCh0aGlzLl9hbmdsZUlucHV0LnZhbHVl
KTsKICAgICAgICAgaWYgKGlzTmFOKGFuZ2xlKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICB0aGlzLl9hbmdsZUlucHV0VmFsdWVEaWRDaGFuZ2UoYW5nbGUpOwotICAgIH0sCisgICAg
fQogCi0gICAgX2FuZ2xlSW5wdXRWYWx1ZURpZENoYW5nZTogZnVuY3Rpb24oYW5nbGUpCisgICAg
X2FuZ2xlSW5wdXRWYWx1ZURpZENoYW5nZShhbmdsZSkKICAgICB7CiAgICAgICAgIHRoaXMudmFs
dWUuYW5nbGUgPSBhbmdsZTsKICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy52YWx1ZS50b1N0cmlu
ZygpOwpAQCAtMjEzLDkgKzIwMyw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRF
ZGl0aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9hbmdsZUlu
cHV0LnNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgICAgICB0aGlzLl9h
bmdsZUlucHV0LnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvblN0YXJ0OwogICAgICAgICB9Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfaGFuZGxlQ2hhbmdlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAg
IF9oYW5kbGVDaGFuZ2VFdmVudChldmVudCkKICAgICB7CiAgICAgICAgIHZhciBkZXNjcmlwdG9y
ID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkdyYWRp
ZW50VHlwZXNbdGhpcy5fZ3JhZGllbnRUeXBlUGlja2VyLnZhbHVlXTsKICAgICAgICAgaWYgKCEo
dGhpcy52YWx1ZSBpbnN0YW5jZW9mIGRlc2NyaXB0b3IudHlwZSkpIHsKQEAgLTIzMCwxNiArMjIw
LDE2IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy52YWx1ZS5yZXBlYXRzID0gZGVz
Y3JpcHRvci5yZXBlYXRzOwogICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnZhbHVlLnRvU3RyaW5n
KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY29sb3JQaWNrZXJDb2xvckNoYW5nZWQ6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIF9jb2xvclBpY2tlckNvbG9yQ2hhbmdlZChldmVudCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX2dyYWRpZW50U2xpZGVyLnNlbGVjdGVkU3RvcC5jb2xvciA9IGV2ZW50LnRh
cmdldC5jb2xvcjsKICAgICAgICAgdGhpcy5fZ3JhZGllbnRTbGlkZXIuc3RvcHMgPSB0aGlzLnZh
bHVlLnN0b3BzOwogICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfdXBkYXRlQ1NTQ2xhc3NGb3JHcmFkaWVudFR5cGU6IGZ1bmN0
aW9uKCkKKyAgICBfdXBkYXRlQ1NTQ2xhc3NGb3JHcmFkaWVudFR5cGUoKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuTGluZWFyR3JhZGllbnQp
CiAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0
b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuUmFkaWFsR3JhZGllbnRDbGFz
c05hbWUpOwpAQCAtMjQ3LDMgKzIzNywxMSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRp
ZW50RWRpdGluZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY29u
dGFpbmVyLmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRp
bmdDb250cm9sbGVyLlJhZGlhbEdyYWRpZW50Q2xhc3NOYW1lKTsKICAgICB9CiB9OworCitXZWJJ
bnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuU3R5bGVDbGFzc05h
bWUgPSAiZ3JhZGllbnQtZWRpdGluZy1jb250cm9sbGVyIjsKK1dlYkluc3BlY3Rvci5Db2RlTWly
cm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5FZGl0c0NvbG9yQ2xhc3NOYW1lID0gImVkaXRz
LWNvbG9yIjsKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxl
ci5SYWRpYWxHcmFkaWVudENsYXNzTmFtZSA9ICJyYWRpYWwtZ3JhZGllbnQiOworCisvLyBMYXpp
bHkgcG9wdWxhdGVkIGluIHRoZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckdyYWRpZW50RWRpdGlu
Z0NvbnRyb2xsZXIgY29uc3RydWN0b3IuCisvLyBJdCBuZWVkcyB0byBiZSBsYXp5IHRvIHVzZSBV
SVN0cmluZyBhZnRlciBNYWluLmpzIGFuZCBsb2NhbGl6ZWRTdHJpbmdzLmpzIGxvYWRzLgorV2Vi
SW5zcGVjdG9yLkNvZGVNaXJyb3JHcmFkaWVudEVkaXRpbmdDb250cm9sbGVyLkdyYWRpZW50VHlw
ZXMgPSBudWxsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmpzCmluZGV4IDM0ZWNlMTdkY2I5ZjhjNDE4YmQ0Mzg3MjE5
MjE4Y2ZkOWI2ODk2MDYuLmU1NTc4MmE4ZjRhYmJlMDFmZGZkN2I1NzAyMWViNTkyMGUyYTU3OGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIuanMKQEAgLTIzLDU2ICsyMyw0NCBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXIgPSBmdW5jdGlvbihjb2RlTWlycm9yLCBkZWxlZ2F0ZSkKK1dlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIgPSBjbGFzcyBDb2RlTWlycm9y
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0g
ICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xh
c3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRo
aXMpOwotCi0gICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJvcik7Ci0KLSAgICB0aGlzLl9jb2Rl
TWlycm9yID0gY29kZU1pcnJvcjsKLSAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlIHx8IG51
bGw7Ci0gICAgdGhpcy5fbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIuTW9kZS5Ob25lOwotCi0gICAgdGhpcy5fbW91c2VPdmVyRGVsYXlEdXJhdGlv
biA9IDA7Ci0gICAgdGhpcy5fbW91c2VPdXRSZWxlYXNlRGVsYXlEdXJhdGlvbiA9IDA7Ci0gICAg
dGhpcy5fY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5nZSA9IG51bGw7CisgICAgY29uc3RydWN0
b3IoY29kZU1pcnJvciwgZGVsZWdhdGUpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAg
dGhpcy5fZW5hYmxlZCA9IGZhbHNlOwotICAgIHRoaXMuX3RyYWNraW5nID0gZmFsc2U7Ci0gICAg
dGhpcy5faG92ZXJlZFRva2VuSW5mbyA9IG51bGw7Ci0gICAgdGhpcy5faG92ZXJlZE1hcmtlciA9
IG51bGw7Ci19OworICAgICAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKIAotV2ViSW5z
cGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5KdW1wVG9TeW1ib2xIaWdo
bGlnaHRTdHlsZUNsYXNzTmFtZSA9ICJqdW1wLXRvLXN5bWJvbC1oaWdobGlnaHQiOworICAgICAg
ICB0aGlzLl9jb2RlTWlycm9yID0gY29kZU1pcnJvcjsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUg
PSBkZWxlZ2F0ZSB8fCBudWxsOworICAgICAgICB0aGlzLl9tb2RlID0gV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vbmU7CiAKLVdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZSA9IHsKLSAgICBOb25lOiAi
bm9uZSIsCi0gICAgTm9uU3ltYm9sVG9rZW5zOiAibm9uLXN5bWJvbC10b2tlbnMiLAotICAgIEph
dmFTY3JpcHRFeHByZXNzaW9uOiAiamF2YXNjcmlwdC1leHByZXNzaW9uIiwKLSAgICBKYXZhU2Ny
aXB0VHlwZUluZm9ybWF0aW9uOiAiamF2YXNjcmlwdC10eXBlLWluZm9ybWF0aW9uIiwKLSAgICBN
YXJrZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIgotfTsKKyAgICAgICAgdGhpcy5fbW91c2VPdmVy
RGVsYXlEdXJhdGlvbiA9IDA7CisgICAgICAgIHRoaXMuX21vdXNlT3V0UmVsZWFzZURlbGF5RHVy
YXRpb24gPSAwOworICAgICAgICB0aGlzLl9jbGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdlID0g
bnVsbDsKIAotV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5w
cm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIsCisgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5fdHJhY2tpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faG92ZXJlZFRva2Vu
SW5mbyA9IG51bGw7CisgICAgICAgIHRoaXMuX2hvdmVyZWRNYXJrZXIgPSBudWxsOworICAgIH0K
IAogICAgIC8vIFB1YmxpYwogCiAgICAgZ2V0IGRlbGVnYXRlKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9kZWxlZ2F0ZTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBkZWxlZ2F0ZSh4
KQogICAgIHsKICAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSB4OwotICAgIH0sCisgICAgfQogCiAg
ICAgZ2V0IGVuYWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICBzZXQgZW5hYmxlZChlbmFibGVkKQogICAgIHsKQEAgLTkyLDEy
ICs4MCwxMiBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHdyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigi
bW91c2VsZWF2ZSIsIHRoaXMpOwogICAgICAgICAgICAgdGhpcy5fc3RvcFRyYWNraW5nKCk7CiAg
ICAgICAgIH0KLSAgICB9LAorICAgIH0KIAogICAgIGdldCBtb2RlKCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9tb2RlOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IG1vZGUobW9kZSkK
ICAgICB7CkBAIC0xMDcsNjIgKzk1LDYyIEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChvbGRNb2RlICE9
PSB0aGlzLl9tb2RlICYmIHRoaXMuX3RyYWNraW5nICYmIHRoaXMuX2hvdmVyZWRUb2tlbkluZm8p
CiAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzTmV3SG92ZXJlZFRva2VuKCk7Ci0gICAgfSwKKyAg
ICB9CiAKICAgICBnZXQgbW91c2VPdmVyRGVsYXlEdXJhdGlvbigpCiAgICAgewogICAgICAgICBy
ZXR1cm4gdGhpcy5fbW91c2VPdmVyRGVsYXlEdXJhdGlvbjsKLSAgICB9LAorICAgIH0KIAogICAg
IHNldCBtb3VzZU92ZXJEZWxheUR1cmF0aW9uKHgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFz
c2VydCh4ID49IDApOwogICAgICAgICB0aGlzLl9tb3VzZU92ZXJEZWxheUR1cmF0aW9uID0gTWF0
aC5tYXgoeCwgMCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbW91c2VPdXRSZWxlYXNlRGVs
YXlEdXJhdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbW91c2VPdXRSZWxlYXNl
RGVsYXlEdXJhdGlvbjsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBtb3VzZU91dFJlbGVhc2VE
ZWxheUR1cmF0aW9uKHgpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh4ID49IDApOwog
ICAgICAgICB0aGlzLl9tb3VzZU91dFJlbGVhc2VEZWxheUR1cmF0aW9uID0gTWF0aC5tYXgoeCwg
MCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRSYW5n
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lRm9ySGlnaGxpZ2h0ZWRS
YW5nZTsKLSAgICB9LAorICAgIH0KIAogICAgIHNldCBjbGFzc05hbWVGb3JIaWdobGlnaHRlZFJh
bmdlKHgpCiAgICAgewogICAgICAgICB0aGlzLl9jbGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdl
ID0geCB8fCBudWxsOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGNhbmRpZGF0ZSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gdGhpcy5fY2FuZGlkYXRlOwotICAgIH0sCisgICAgfQogCiAgICAg
Z2V0IGhvdmVyZWRNYXJrZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2hvdmVyZWRN
YXJrZXI7Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgaG92ZXJlZE1hcmtlcihob3ZlcmVkTWFy
a2VyKQogICAgIHsKICAgICAgICAgdGhpcy5faG92ZXJlZE1hcmtlciA9IGhvdmVyZWRNYXJrZXI7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoaWdobGlnaHRMYXN0SG92ZXJlZFJhbmdlOiBmdW5jdGlv
bigpCisgICAgaGlnaGxpZ2h0TGFzdEhvdmVyZWRSYW5nZSgpCiAgICAgewogICAgICAgICBpZiAo
dGhpcy5fY2FuZGlkYXRlKQogICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRSYW5nZSh0aGlzLl9j
YW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2UpOwotICAgIH0sCisgICAgfQogCi0gICAgaGlnaGxp
Z2h0UmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQorICAgIGhpZ2hsaWdodFJhbmdlKHJhbmdlKQogICAg
IHsKICAgICAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3ZSdyZSB0cnlpbmcgdG8gaGlnaGxpZ2h0
IHRoZSBzYW1lIHJhbmdlLgogICAgICAgICBpZiAodGhpcy5fY29kZU1pcnJvck1hcmtlZFRleHQg
JiYgdGhpcy5fY29kZU1pcnJvck1hcmtlZFRleHQuY2xhc3NOYW1lID09PSB0aGlzLl9jbGFzc05h
bWVGb3JIaWdobGlnaHRlZFJhbmdlKSB7CkBAIC0xNzgsOSArMTY2LDkgQEAgV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHRoaXMuX2NvZGVNaXJyb3JNYXJrZWRUZXh0ID0gdGhpcy5fY29kZU1pcnJvci5tYXJrVGV4dChy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kLCB7Y2xhc3NOYW1lfSk7CiAKICAgICAgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMsIHRydWUpOwotICAgIH0sCisgICAgfQog
Ci0gICAgcmVtb3ZlSGlnaGxpZ2h0ZWRSYW5nZTogZnVuY3Rpb24oKQorICAgIHJlbW92ZUhpZ2hs
aWdodGVkUmFuZ2UoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9jb2RlTWlycm9yTWFya2Vk
VGV4dCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4OSwxMSArMTc3LDExIEBAIFdlYkluc3Bl
Y3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAg
ICAgICBkZWxldGUgdGhpcy5fY29kZU1pcnJvck1hcmtlZFRleHQ7CiAKICAgICAgICAgd2luZG93
LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMsIHRydWUpOwotICAgIH0sCisg
ICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX3N0YXJ0VHJhY2tpbmc6IGZ1bmN0aW9uKCkK
KyAgICBfc3RhcnRUcmFja2luZygpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhp
cy5fdHJhY2tpbmcpOwogICAgICAgICBpZiAodGhpcy5fdHJhY2tpbmcpCkBAIC0yMDcsOSArMTk1
LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwg
dGhpcywgZmFsc2UpOwogICAgICAgICB3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAi
LCB0aGlzLCBmYWxzZSk7CiAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwg
dGhpcywgdHJ1ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc3RvcFRyYWNraW5nOiBmdW5jdGlv
bigpCisgICAgX3N0b3BUcmFja2luZygpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl90cmFja2luZyk7CiAgICAgICAgIGlmICghdGhpcy5fdHJhY2tpbmcpCkBAIC0yMjcsOSAr
MjE1LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1v
dmUiLCB0aGlzLCB0cnVlKTsKIAogICAgICAgICB0aGlzLl9yZXNldFRyYWNraW5nU3RhdGVzKCk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoYW5kbGVFdmVudDogZnVuY3Rpb24oZXZlbnQpCisgICAg
aGFuZGxlRXZlbnQoZXZlbnQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsK
ICAgICAgICAgY2FzZSAibW91c2VlbnRlciI6CkBAIC0yNTksMjAgKzI0NywyMCBAQCBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHRoaXMuX3dpbmRvd0xvc3RGb2N1cyhldmVudCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX21vdXNlRW50ZXJlZDogZnVuY3Rp
b24oZXZlbnQpCisgICAgX21vdXNlRW50ZXJlZChldmVudCkKICAgICB7CiAgICAgICAgIGlmICgh
dGhpcy5fdHJhY2tpbmcpCiAgICAgICAgICAgICB0aGlzLl9zdGFydFRyYWNraW5nKCk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfbW91c2VMZWZ0OiBmdW5jdGlvbihldmVudCkKKyAgICBfbW91c2VM
ZWZ0KGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fc3RvcFRyYWNraW5nKCk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfbW91c2VNb3ZlZFdpdGhNYXJrZWRUZXh0OiBmdW5jdGlvbihldmVudCkK
KyAgICBfbW91c2VNb3ZlZFdpdGhNYXJrZWRUZXh0KGV2ZW50KQogICAgIHsKICAgICAgICAgdmFy
IHNob3VsZFJlbGVhc2UgPSAhZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyh0aGlzLl9j
bGFzc05hbWVGb3JIaWdobGlnaHRlZFJhbmdlKTsKICAgICAgICAgaWYgKHNob3VsZFJlbGVhc2Ug
JiYgdGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyQ2FuUmVsZWFzZUhpZ2hsaWdodGVkUmFuZ2UgPT09ICJmdW5jdGlvbiIpCkBAIC0y
ODYsMjEgKzI3NCwyMSBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250
cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbWFya2Vk
VGV4dE1vdXNlb3V0VGltZXIpOwogICAgICAgICBkZWxldGUgdGhpcy5fbWFya2VkVGV4dE1vdXNl
b3V0VGltZXI7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbWFya2VkVGV4dElzTm9Mb25nZXJIb3Zl
cmVkOiBmdW5jdGlvbigpCisgICAgX21hcmtlZFRleHRJc05vTG9uZ2VySG92ZXJlZCgpCiAgICAg
ewogICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRSYW5nZVJlbGVhc2VkID09PSAiZnVuY3Rp
b24iKQogICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUudG9rZW5UcmFja2luZ0NvbnRyb2xsZXJI
aWdobGlnaHRlZFJhbmdlUmVsZWFzZWQodGhpcyk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXJr
ZWRUZXh0TW91c2VvdXRUaW1lcjsKLSAgICB9LAorICAgIH0KIAotICAgIF9tb3VzZU1vdmVkT3Zl
ckVkaXRvcjogZnVuY3Rpb24oZXZlbnQpCisgICAgX21vdXNlTW92ZWRPdmVyRWRpdG9yKGV2ZW50
KQogICAgIHsKICAgICAgICAgdGhpcy5fdXBkYXRlSG92ZXJlZFRva2VuSW5mbyh7bGVmdDogZXZl
bnQucGFnZVgsIHRvcDogZXZlbnQucGFnZVl9KTsKLSAgICB9LAorICAgIH0KIAotICAgIF91cGRh
dGVIb3ZlcmVkVG9rZW5JbmZvOiBmdW5jdGlvbihtb3VzZUNvb3JkcykKKyAgICBfdXBkYXRlSG92
ZXJlZFRva2VuSW5mbyhtb3VzZUNvb3JkcykKICAgICB7CiAgICAgICAgIC8vIEdldCB0aGUgcG9z
aXRpb24gaW4gdGhlIHRleHQgYW5kIHRoZSB0b2tlbiBhdCB0aGF0IHBvc2l0aW9uLgogICAgICAg
ICB2YXIgcG9zaXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0NoYXIobW91c2VDb29yZHMp
OwpAQCAtMzM5LDIxICszMjcsMjEgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzTmV3
SG92ZXJlZFRva2VuKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX3Rva2VuSG92
ZXJUaW1lciA9IHNldFRpbWVvdXQodGhpcy5fcHJvY2Vzc05ld0hvdmVyZWRUb2tlbi5iaW5kKHRo
aXMpLCB0aGlzLl9tb3VzZU92ZXJEZWxheUR1cmF0aW9uKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9tb3VzZU1vdmVkT3V0T2ZFZGl0b3I6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tb3VzZU1vdmVk
T3V0T2ZFZGl0b3IoZXZlbnQpCiAgICAgewogICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdG9r
ZW5Ib3ZlclRpbWVyKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2hvdmVyZWRUb2tlbkluZm87CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb25NYXlCZUluUHJvZ3Jlc3M7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfbW91c2VCdXR0b25XYXNQcmVzc2VkT3ZlckVkaXRvcjogZnVuY3Rpb24oZXZl
bnQpCisgICAgX21vdXNlQnV0dG9uV2FzUHJlc3NlZE92ZXJFZGl0b3IoZXZlbnQpCiAgICAgewog
ICAgICAgICB0aGlzLl9zZWxlY3Rpb25NYXlCZUluUHJvZ3Jlc3MgPSB0cnVlOwotICAgIH0sCisg
ICAgfQogCi0gICAgX21vdXNlQnV0dG9uV2FzUmVsZWFzZWRPdmVyRWRpdG9yOiBmdW5jdGlvbihl
dmVudCkKKyAgICBfbW91c2VCdXR0b25XYXNSZWxlYXNlZE92ZXJFZGl0b3IoZXZlbnQpCiAgICAg
ewogICAgICAgICBkZWxldGUgdGhpcy5fc2VsZWN0aW9uTWF5QmVJblByb2dyZXNzOwogICAgICAg
ICB0aGlzLl9tb3VzZU1vdmVkT3ZlckVkaXRvcihldmVudCk7CkBAIC0zNzEsMTQgKzM1OSwxNCBA
QCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9
LAorICAgIH0KIAotICAgIF93aW5kb3dMb3N0Rm9jdXM6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF93
aW5kb3dMb3N0Rm9jdXMoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9yZXNldFRyYWNraW5n
U3RhdGVzKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc05ld0hvdmVyZWRUb2tlbjog
ZnVuY3Rpb24oKQorICAgIF9wcm9jZXNzTmV3SG92ZXJlZFRva2VuKCkKICAgICB7CiAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2hvdmVyZWRUb2tlbkluZm8pOwogCkBAIC00MDgsOSArMzk2
LDkgQEAgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9k
ZWxlZ2F0ZS50b2tlblRyYWNraW5nQ29udHJvbGxlck5ld0hpZ2hsaWdodENhbmRpZGF0ZSA9PT0g
ImZ1bmN0aW9uIikKICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnRva2VuVHJhY2tpbmdDb250
cm9sbGVyTmV3SGlnaGxpZ2h0Q2FuZGlkYXRlKHRoaXMsIHRoaXMuX2NhbmRpZGF0ZSk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc05vblN5bWJvbFRva2VuOiBmdW5jdGlvbigpCisgICAg
X3Byb2Nlc3NOb25TeW1ib2xUb2tlbigpCiAgICAgewogICAgICAgICAvLyBJZ25vcmUgYW55IHN5
bWJvbCB0b2tlbnMuCiAgICAgICAgIHZhciB0eXBlID0gdGhpcy5faG92ZXJlZFRva2VuSW5mby50
b2tlbi50eXBlOwpAQCAtNDI0LDkgKzQxMiw5IEBAIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgaG92ZXJlZFRv
a2VuOiB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLnRva2VuLAogICAgICAgICAgICAgaG92ZXJlZFRv
a2VuUmFuZ2U6IHtzdGFydDogc3RhcnRQb3NpdGlvbiwgZW5kOiBlbmRQb3NpdGlvbn0sCiAgICAg
ICAgIH07Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcHJvY2Vzc0phdmFTY3JpcHRFeHByZXNzaW9u
OiBmdW5jdGlvbigpCisgICAgX3Byb2Nlc3NKYXZhU2NyaXB0RXhwcmVzc2lvbigpCiAgICAgewog
ICAgICAgICAvLyBPbmx5IHZhbGlkIHdpdGhpbiBKYXZhU2NyaXB0LgogICAgICAgICBpZiAodGhp
cy5faG92ZXJlZFRva2VuSW5mby5tb2RlTmFtZSAhPT0gImphdmFzY3JpcHQiKQpAQCAtNDM1LDYg
KzQyMywxMiBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHN0YXJ0UG9zaXRpb24gPSB7bGluZTogdGhpcy5f
aG92ZXJlZFRva2VuSW5mby5wb3NpdGlvbi5saW5lLCBjaDogdGhpcy5faG92ZXJlZFRva2VuSW5m
by50b2tlbi5zdGFydH07CiAgICAgICAgIHZhciBlbmRQb3NpdGlvbiA9IHtsaW5lOiB0aGlzLl9o
b3ZlcmVkVG9rZW5JbmZvLnBvc2l0aW9uLmxpbmUsIGNoOiB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZv
LnRva2VuLmVuZH07CiAKKyAgICAgICAgZnVuY3Rpb24gdG9rZW5Jc0luUmFuZ2UodG9rZW4sIHJh
bmdlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdG9rZW4ubGluZSA+PSByYW5nZS5z
dGFydC5saW5lICYmIHRva2VuLmNoID49IHJhbmdlLnN0YXJ0LmNoICYmCisgICAgICAgICAgICAg
ICAgICAgdG9rZW4ubGluZSA8PSByYW5nZS5lbmQubGluZSAmJiB0b2tlbi5jaCA8PSByYW5nZS5l
bmQuY2g7CisgICAgICAgIH0KKwogICAgICAgICAvLyBJZiB0aGUgaG92ZXJlZCB0b2tlbiBpcyB3
aXRoaW4gYSBzZWxlY3Rpb24sIHVzZSB0aGUgc2VsZWN0aW9uIGFzIG91ciBleHByZXNzaW9uLgog
ICAgICAgICBpZiAodGhpcy5fY29kZU1pcnJvci5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CiAgICAg
ICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSB7CkBAIC00NDIsMTIgKzQzNiw2IEBAIFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fY29kZU1pcnJvci5nZXRDdXJzb3IoImVuZCIpCiAg
ICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBmdW5jdGlvbiB0b2tlbklzSW5SYW5nZSh0b2tl
biwgcmFuZ2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLmxp
bmUgPj0gcmFuZ2Uuc3RhcnQubGluZSAmJiB0b2tlbi5jaCA+PSByYW5nZS5zdGFydC5jaCAmJgot
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5saW5lIDw9IHJhbmdlLmVuZC5saW5lICYmIHRv
a2VuLmNoIDw9IHJhbmdlLmVuZC5jaDsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYg
KHRva2VuSXNJblJhbmdlKHN0YXJ0UG9zaXRpb24sIHNlbGVjdGlvblJhbmdlKSB8fCB0b2tlbklz
SW5SYW5nZShlbmRQb3NpdGlvbiwgc2VsZWN0aW9uUmFuZ2UpKSB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgaG92ZXJlZFRva2VuOiB0aGlzLl9ob3ZlcmVk
VG9rZW5JbmZvLnRva2VuLApAQCAtNTAzLDE0ICs0OTEsMTQgQEAgV2ViSW5zcGVjdG9yLkNvZGVN
aXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBl
eHByZXNzaW9uLAogICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdlOiB7c3RhcnQ6IGV4cHJlc3Np
b25TdGFydFBvc2l0aW9uLCBlbmQ6IGVuZFBvc2l0aW9ufSwKICAgICAgICAgfTsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9wcm9jZXNzTWFya2VkVG9rZW46IGZ1bmN0aW9uKCkKKyAgICBfcHJvY2Vz
c01hcmtlZFRva2VuKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzTm9uU3lt
Ym9sVG9rZW4oKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZXNldFRyYWNraW5nU3RhdGVzOiBm
dW5jdGlvbigpCisgICAgX3Jlc2V0VHJhY2tpbmdTdGF0ZXMoKQogICAgIHsKICAgICAgICAgY2xl
YXJUaW1lb3V0KHRoaXMuX3Rva2VuSG92ZXJUaW1lcik7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9z
ZWxlY3Rpb25NYXlCZUluUHJvZ3Jlc3M7CkBAIC01MTksNCArNTA3LDEyIEBAIFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgIH0K
IH07CiAKLVdlYkluc3BlY3Rvci5Db2RlTWlycm9yQ29tcGxldGlvbkNvbnRyb2xsZXIucHJvdG90
eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVj
dG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5KdW1wVG9TeW1ib2xIaWdobGln
aHRTdHlsZUNsYXNzTmFtZSA9ICJqdW1wLXRvLXN5bWJvbC1oaWdobGlnaHQiOworCitXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUgPSB7CisgICAgTm9u
ZTogIm5vbmUiLAorICAgIE5vblN5bWJvbFRva2VuczogIm5vbi1zeW1ib2wtdG9rZW5zIiwKKyAg
ICBKYXZhU2NyaXB0RXhwcmVzc2lvbjogImphdmFzY3JpcHQtZXhwcmVzc2lvbiIsCisgICAgSmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjogImphdmFzY3JpcHQtdHlwZS1pbmZvcm1hdGlvbiIsCisg
ICAgTWFya2VkVG9rZW5zOiAibWFya2VkLXRva2VucyIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9ET01UcmVlTWFuYWdlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTVRy
ZWVNYW5hZ2VyLmpzCmluZGV4IDcxMTZmZmJkMmM1ODk5OTQ4ZjJmZThmMjVmNzBkZWQ4OGY5YTMy
Y2UuLmMwZjNkMmNmNDJiN2E3MzFhMGViODE3OTU3ZWY2ODA2ZTU4OWNlOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTVRyZWVN
YW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0RPTVRyZWVNYW5hZ2VyLmpzCkBAIC0zMCw0NCArMzAsMzMgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyID0gZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy5faWRUb0RPTU5vZGUgPSB7fTsKLSAgICB0aGlzLl9kb2N1bWVudCA9IG51bGw7Ci0g
ICAgdGhpcy5fYXR0cmlidXRlTG9hZE5vZGVJZHMgPSB7fTsKLSAgICB0aGlzLl9mbG93cyA9IG5l
dyBNYXA7Ci0gICAgdGhpcy5fY29udGVudE5vZGVzVG9GbG93c01hcCA9IG5ldyBNYXA7Ci0gICAg
dGhpcy5fcmVzdG9yZVNlbGVjdGVkTm9kZUlzQWxsb3dlZCA9IHRydWU7Ci0KLSAgICBXZWJJbnNw
ZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFp
blJlc291cmNlRGlkQ2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOwot
fTsKK1dlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlciA9IGNsYXNzIERPTVRyZWVNYW5hZ2VyIGV4
dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAoreworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7Cisg
ICAgICAgIHN1cGVyKCk7CiAKLS8vIEZJWE1FOiBNb3ZlIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVj
dCBzdWJjbGFzcyBhbmQgd2UgY2FuIHJlbW92ZSB0aGlzLgotV2ViSW5zcGVjdG9yLk9iamVjdC5k
ZXByZWNhdGVkQWRkQ29uc3RydWN0b3JGdW5jdGlvbnMoV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyKTsKKyAgICAgICAgdGhpcy5faWRUb0RPTU5vZGUgPSB7fTsKKyAgICAgICAgdGhpcy5fZG9j
dW1lbnQgPSBudWxsOworICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkcyA9IHt9Owor
ICAgICAgICB0aGlzLl9mbG93cyA9IG5ldyBNYXA7CisgICAgICAgIHRoaXMuX2NvbnRlbnROb2Rl
c1RvRmxvd3NNYXAgPSBuZXcgTWFwOworICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0ZWROb2Rl
SXNBbGxvd2VkID0gdHJ1ZTsKIAotV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLkV2ZW50ID0g
ewotICAgIEF0dHJpYnV0ZU1vZGlmaWVkOiAiZG9tLXRyZWUtbWFuYWdlci1hdHRyaWJ1dGUtbW9k
aWZpZWQiLAotICAgIEF0dHJpYnV0ZVJlbW92ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWF0dHJpYnV0
ZS1yZW1vdmVkIiwKLSAgICBDaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ICJkb20tdHJlZS1tYW5hZ2Vy
LWNoYXJhY3Rlci1kYXRhLW1vZGlmaWVkIiwKLSAgICBOb2RlSW5zZXJ0ZWQ6ICJkb20tdHJlZS1t
YW5hZ2VyLW5vZGUtaW5zZXJ0ZWQiLAotICAgIE5vZGVSZW1vdmVkOiAiZG9tLXRyZWUtbWFuYWdl
ci1ub2RlLXJlbW92ZWQiLAotICAgIERvY3VtZW50VXBkYXRlZDogImRvbS10cmVlLW1hbmFnZXIt
ZG9jdW1lbnQtdXBkYXRlZCIsCi0gICAgQ2hpbGROb2RlQ291bnRVcGRhdGVkOiAiZG9tLXRyZWUt
bWFuYWdlci1jaGlsZC1ub2RlLWNvdW50LXVwZGF0ZWQiLAotICAgIERPTU5vZGVXYXNJbnNwZWN0
ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWRvbS1ub2RlLXdhcy1pbnNwZWN0ZWQiLAotICAgIEluc3Bl
Y3RNb2RlU3RhdGVDaGFuZ2VkOiAiZG9tLXRyZWUtbWFuYWdlci1pbnNwZWN0LW1vZGUtc3RhdGUt
Y2hhbmdlZCIsCi0gICAgQ29udGVudEZsb3dMaXN0V2FzVXBkYXRlZDogImRvbS10cmVlLW1hbmFn
ZXItY29udGVudC1mbG93LWxpc3Qtd2FzLXVwZGF0ZWQiLAotICAgIENvbnRlbnRGbG93V2FzQWRk
ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNvbnRlbnQtZmxvdy13YXMtYWRkZWQiLAotICAgIENvbnRl
bnRGbG93V2FzUmVtb3ZlZDogImRvbS10cmVlLW1hbmFnZXItY29udGVudC1mbG93LXdhcy1yZW1v
dmVkIiwKLSAgICBSZWdpb25PdmVyc2V0Q2hhbmdlZDogImRvbS10cmVlLW1hbmFnZXItcmVnaW9u
LW92ZXJzZXQtY2hhbmdlZCIKLX07CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2Us
IHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CisgICAgfQogCi1XZWJJbnNwZWN0
b3IuRE9NVHJlZU1hbmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleSA9IGZ1bmN0aW9uKGZsb3dQYXls
b2FkKQotewotICAgIC8vIFVzZSB0aGUgZmxvdyBub2RlIGlkLCB0byBhdm9pZCBjb2xsaXNpb25z
IHdoZW4gd2UgY2hhbmdlIG1haW4gZG9jdW1lbnQgaWQuCi0gICAgcmV0dXJuIGZsb3dQYXlsb2Fk
LmRvY3VtZW50Tm9kZUlkICsgIjoiICsgZmxvd1BheWxvYWQubmFtZTsKLX07CisgICAgLy8gU3Rh
dGljCisKKyAgICBzdGF0aWMgX2Zsb3dQYXlsb2FkSGFzaEtleShmbG93UGF5bG9hZCkKKyAgICB7
CisgICAgICAgIC8vIFVzZSB0aGUgZmxvdyBub2RlIGlkLCB0byBhdm9pZCBjb2xsaXNpb25zIHdo
ZW4gd2UgY2hhbmdlIG1haW4gZG9jdW1lbnQgaWQuCisgICAgICAgIHJldHVybiBmbG93UGF5bG9h
ZC5kb2N1bWVudE5vZGVJZCArICI6IiArIGZsb3dQYXlsb2FkLm5hbWU7CisgICAgfQogCi1XZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIHJlcXVlc3REb2N1bWVu
dDogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgLy8gUHVibGljCisKKyAgICByZXF1ZXN0RG9jdW1l
bnQoY2FsbGJhY2spCiAgICAgewogICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpIHsKICAgICAg
ICAgICAgIGlmIChjYWxsYmFjaykKQEAgLTk2LDIwICs4NSwyMiBAQCBXZWJJbnNwZWN0b3IuRE9N
VHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgRE9NQWdlbnQu
Z2V0RG9jdW1lbnQob25Eb2N1bWVudEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAg
IH0KIAotICAgIHB1c2hOb2RlVG9Gcm9udGVuZDogZnVuY3Rpb24ob2JqZWN0SWQsIGNhbGxiYWNr
KQorICAgIHB1c2hOb2RlVG9Gcm9udGVuZChvYmplY3RJZCwgY2FsbGJhY2spCiAgICAgewogICAg
ICAgICB0aGlzLl9kaXNwYXRjaFdoZW5Eb2N1bWVudEF2YWlsYWJsZShET01BZ2VudC5yZXF1ZXN0
Tm9kZS5iaW5kKERPTUFnZW50LCBvYmplY3RJZCksIGNhbGxiYWNrKTsKLSAgICB9LAorICAgIH0K
IAotICAgIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZDogZnVuY3Rpb24ocGF0aCwgY2FsbGJhY2sp
CisgICAgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKHBhdGgsIGNhbGxiYWNrKQogICAgIHsKICAg
ICAgICAgdmFyIGNhbGxiYWNrQ2FzdCA9IGNhbGxiYWNrOwogICAgICAgICB0aGlzLl9kaXNwYXRj
aFdoZW5Eb2N1bWVudEF2YWlsYWJsZShET01BZ2VudC5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQu
YmluZChET01BZ2VudCwgcGF0aCksIGNhbGxiYWNrQ2FzdCk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfd3JhcENsaWVudENhbGxiYWNrOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICAvLyBQcml2YXRl
CisKKyAgICBfd3JhcENsaWVudENhbGxiYWNrKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYg
KCFjYWxsYmFjaykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExOCw5ICsxMDksOSBAQCBXZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNv
bnNvbGUuZXJyb3IoIkVycm9yIGR1cmluZyBET01BZ2VudCBvcGVyYXRpb246ICIgKyBlcnJvcik7
CiAgICAgICAgICAgICBjYWxsYmFjayhlcnJvciA/IG51bGwgOiByZXN1bHQpOwogICAgICAgICB9
OwotICAgIH0sCisgICAgfQogCi0gICAgX2Rpc3BhdGNoV2hlbkRvY3VtZW50QXZhaWxhYmxlOiBm
dW5jdGlvbihmdW5jLCBjYWxsYmFjaykKKyAgICBfZGlzcGF0Y2hXaGVuRG9jdW1lbnRBdmFpbGFi
bGUoZnVuYywgY2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgY2FsbGJhY2tXcmFwcGVyID0g
dGhpcy5fd3JhcENsaWVudENhbGxiYWNrKGNhbGxiYWNrKTsKIApAQCAtMTM0LDkgKzEyNSw5IEBA
IFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5yZXF1ZXN0RG9jdW1lbnQob25Eb2N1bWVudEF2YWls
YWJsZS5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hdHRyaWJ1dGVNb2RpZmll
ZDogZnVuY3Rpb24obm9kZUlkLCBuYW1lLCB2YWx1ZSkKKyAgICBfYXR0cmlidXRlTW9kaWZpZWQo
bm9kZUlkLCBuYW1lLCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHZhciBub2RlID0gdGhpcy5faWRU
b0RPTU5vZGVbbm9kZUlkXTsKICAgICAgICAgaWYgKCFub2RlKQpAQCAtMTQ0LDkgKzEzNSw5IEBA
IFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIG5vZGUu
X3NldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudC5BdHRyaWJ1dGVNb2Rp
ZmllZCwge25vZGUsIG5hbWV9KTsKICAgICAgICAgbm9kZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkRPTU5vZGUuRXZlbnQuQXR0cmlidXRlTW9kaWZpZWQsIHtuYW1lfSk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXR0cmlidXRlUmVtb3ZlZDogZnVuY3Rpb24obm9kZUlk
LCBuYW1lKQorICAgIF9hdHRyaWJ1dGVSZW1vdmVkKG5vZGVJZCwgbmFtZSkKICAgICB7CiAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKICAgICAgICAgaWYgKCFu
b2RlKQpAQCAtMTU0LDE4ICsxNDUsMTggQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgbm9kZS5fcmVtb3ZlQXR0cmlidXRlKG5hbWUpOwogICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFn
ZXIuRXZlbnQuQXR0cmlidXRlUmVtb3ZlZCwge25vZGUsIG5hbWV9KTsKICAgICAgICAgbm9kZS5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTU5vZGUuRXZlbnQuQXR0cmli
dXRlUmVtb3ZlZCwge25hbWV9KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9pbmxpbmVTdHlsZUlu
dmFsaWRhdGVkOiBmdW5jdGlvbihub2RlSWRzKQorICAgIF9pbmxpbmVTdHlsZUludmFsaWRhdGVk
KG5vZGVJZHMpCiAgICAgewogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVJZHMubGVu
Z3RoOyArK2kpCiAgICAgICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMb2FkTm9kZUlkc1tub2RlSWRz
W2ldXSA9IHRydWU7CiAgICAgICAgIGlmICgiX2xvYWROb2RlQXR0cmlidXRlc1RpbWVvdXQiIGlu
IHRoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX2xvYWROb2RlQXR0cmli
dXRlc1RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX2xvYWROb2RlQXR0cmlidXRlcy5iaW5kKHRo
aXMpLCAwKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9sb2FkTm9kZUF0dHJpYnV0ZXM6IGZ1bmN0
aW9uKCkKKyAgICBfbG9hZE5vZGVBdHRyaWJ1dGVzKCkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKG5vZGVJZCwgZXJyb3IsIGF0dHJpYnV0ZXMpCiAgICAgICAgIHsKQEAgLTE4OCwy
NiArMTc5LDI2IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBET01BZ2VudC5nZXRBdHRyaWJ1dGVzKG5vZGVJZEFzTnVtYmVyLCBjYWxsYmFj
ay5iaW5kKHRoaXMsIG5vZGVJZEFzTnVtYmVyKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhpcy5f
YXR0cmlidXRlTG9hZE5vZGVJZHMgPSB7fTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jaGFyYWN0
ZXJEYXRhTW9kaWZpZWQ6IGZ1bmN0aW9uKG5vZGVJZCwgbmV3VmFsdWUpCisgICAgX2NoYXJhY3Rl
ckRhdGFNb2RpZmllZChub2RlSWQsIG5ld1ZhbHVlKQogICAgIHsKICAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRdOwogICAgICAgICBub2RlLl9ub2RlVmFsdWUgPSBu
ZXdWYWx1ZTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLkRPTVRyZWVNYW5hZ2VyLkV2ZW50LkNoYXJhY3RlckRhdGFNb2RpZmllZCwge25vZGV9KTsK
LSAgICB9LAorICAgIH0KIAotICAgIG5vZGVGb3JJZDogZnVuY3Rpb24obm9kZUlkKQorICAgIG5v
ZGVGb3JJZChub2RlSWQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faWRUb0RPTU5vZGVb
bm9kZUlkXTsKLSAgICB9LAorICAgIH0KIAotICAgIF9kb2N1bWVudFVwZGF0ZWQ6IGZ1bmN0aW9u
KCkKKyAgICBfZG9jdW1lbnRVcGRhdGVkKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NldERvY3Vt
ZW50KG51bGwpOwotICAgIH0sCisgICAgfQogCi0gICAgX3NldERvY3VtZW50OiBmdW5jdGlvbihw
YXlsb2FkKQorICAgIF9zZXREb2N1bWVudChwYXlsb2FkKQogICAgIHsKICAgICAgICAgdGhpcy5f
aWRUb0RPTU5vZGUgPSB7fTsKICAgICAgICAgaWYgKHBheWxvYWQgJiYgIm5vZGVJZCIgaW4gcGF5
bG9hZCkKQEAgLTIxNSwxNCArMjA2LDE0IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50ID0g
bnVsbDsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LkRPTVRyZWVNYW5hZ2VyLkV2ZW50LkRvY3VtZW50VXBkYXRlZCwgdGhpcy5fZG9jdW1lbnQpOwot
ICAgIH0sCisgICAgfQogCi0gICAgX3NldERldGFjaGVkUm9vdDogZnVuY3Rpb24ocGF5bG9hZCkK
KyAgICBfc2V0RGV0YWNoZWRSb290KHBheWxvYWQpCiAgICAgewogICAgICAgICBuZXcgV2ViSW5z
cGVjdG9yLkRPTU5vZGUodGhpcywgbnVsbCwgZmFsc2UsIHBheWxvYWQpOwotICAgIH0sCisgICAg
fQogCi0gICAgX3NldENoaWxkTm9kZXM6IGZ1bmN0aW9uKHBhcmVudElkLCBwYXlsb2FkcykKKyAg
ICBfc2V0Q2hpbGROb2RlcyhwYXJlbnRJZCwgcGF5bG9hZHMpCiAgICAgewogICAgICAgICBpZiAo
IXBhcmVudElkICYmIHBheWxvYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgdGhpcy5fc2V0RGV0
YWNoZWRSb290KHBheWxvYWRzWzBdKTsKQEAgLTIzMSw0OCArMjIyLDQ4IEBAIFdlYkluc3BlY3Rv
ci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIHBhcmVudCA9IHRo
aXMuX2lkVG9ET01Ob2RlW3BhcmVudElkXTsKICAgICAgICAgcGFyZW50Ll9zZXRDaGlsZHJlblBh
eWxvYWQocGF5bG9hZHMpOwotICAgIH0sCisgICAgfQogCi0gICAgX2NoaWxkTm9kZUNvdW50VXBk
YXRlZDogZnVuY3Rpb24obm9kZUlkLCBuZXdWYWx1ZSkKKyAgICBfY2hpbGROb2RlQ291bnRVcGRh
dGVkKG5vZGVJZCwgbmV3VmFsdWUpCiAgICAgewogICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX2lk
VG9ET01Ob2RlW25vZGVJZF07CiAgICAgICAgIG5vZGUuY2hpbGROb2RlQ291bnQgPSBuZXdWYWx1
ZTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRP
TVRyZWVNYW5hZ2VyLkV2ZW50LkNoaWxkTm9kZUNvdW50VXBkYXRlZCwgbm9kZSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfY2hpbGROb2RlSW5zZXJ0ZWQ6IGZ1bmN0aW9uKHBhcmVudElkLCBwcmV2
SWQsIHBheWxvYWQpCisgICAgX2NoaWxkTm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIHBh
eWxvYWQpCiAgICAgewogICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5faWRUb0RPTU5vZGVbcGFy
ZW50SWRdOwogICAgICAgICB2YXIgcHJldiA9IHRoaXMuX2lkVG9ET01Ob2RlW3ByZXZJZF07CiAg
ICAgICAgIHZhciBub2RlID0gcGFyZW50Ll9pbnNlcnRDaGlsZChwcmV2LCBwYXlsb2FkKTsKICAg
ICAgICAgdGhpcy5faWRUb0RPTU5vZGVbbm9kZS5pZF0gPSBub2RlOwogICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuRXZlbnQu
Tm9kZUluc2VydGVkLCB7bm9kZSwgcGFyZW50fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY2hp
bGROb2RlUmVtb3ZlZDogZnVuY3Rpb24ocGFyZW50SWQsIG5vZGVJZCkKKyAgICBfY2hpbGROb2Rl
UmVtb3ZlZChwYXJlbnRJZCwgbm9kZUlkKQogICAgIHsKICAgICAgICAgdmFyIHBhcmVudCA9IHRo
aXMuX2lkVG9ET01Ob2RlW3BhcmVudElkXTsKICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLl9pZFRv
RE9NTm9kZVtub2RlSWRdOwogICAgICAgICBwYXJlbnQuX3JlbW92ZUNoaWxkKG5vZGUpOwogICAg
ICAgICB0aGlzLl91bmJpbmQobm9kZSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudC5Ob2RlUmVtb3ZlZCwge25v
ZGU6bm9kZSwgcGFyZW50fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfdW5iaW5kOiBmdW5jdGlv
bihub2RlKQorICAgIF91bmJpbmQobm9kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3JlbW92ZUNv
bnRlbnROb2RlRnJvbUZsb3dJZk5lZWRlZChub2RlKTsKIAogICAgICAgICBkZWxldGUgdGhpcy5f
aWRUb0RPTU5vZGVbbm9kZS5pZF07CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBub2RlLmNoaWxk
cmVuICYmIGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgdGhpcy5f
dW5iaW5kKG5vZGUuY2hpbGRyZW5baV0pOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHJlc3Rv
cmVTZWxlY3RlZE5vZGVJc0FsbG93ZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Jl
c3RvcmVTZWxlY3RlZE5vZGVJc0FsbG93ZWQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpbnNwZWN0
RWxlbWVudDogZnVuY3Rpb24obm9kZUlkKQorICAgIGluc3BlY3RFbGVtZW50KG5vZGVJZCkKICAg
ICB7CiAgICAgICAgIHZhciBub2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKICAgICAg
ICAgaWYgKG5vZGUpCkBAIC0yODAsOSArMjcxLDkgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9pbnNwZWN0TW9kZUVuYWJsZWQgPSBm
YWxzZTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LkRPTVRyZWVNYW5hZ2VyLkV2ZW50Lkluc3BlY3RNb2RlU3RhdGVDaGFuZ2VkKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGluc3BlY3ROb2RlT2JqZWN0OiBmdW5jdGlvbihyZW1vdGVPYmplY3QpCisg
ICAgaW5zcGVjdE5vZGVPYmplY3QocmVtb3RlT2JqZWN0KQogICAgIHsKICAgICAgICAgdGhpcy5f
cmVzdG9yZVNlbGVjdGVkTm9kZUlzQWxsb3dlZCA9IGZhbHNlOwogCkBAIC0yOTgsOSArMjg5LDkg
QEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQog
CiAgICAgICAgIHJlbW90ZU9iamVjdC5wdXNoTm9kZVRvRnJvbnRlbmQobm9kZUF2YWlsYWJsZS5i
aW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9u
KHF1ZXJ5LCBzZWFyY2hDYWxsYmFjaykKKyAgICBwZXJmb3JtU2VhcmNoKHF1ZXJ5LCBzZWFyY2hD
YWxsYmFjaykKICAgICB7CiAgICAgICAgIHRoaXMuY2FuY2VsU2VhcmNoKCk7CiAKQEAgLTMxMCw0
OSArMzAxLDUwIEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBzZWFyY2hDYWxsYmFjayhyZXN1bHRzQ291bnQpOwogICAgICAgICB9CiAgICAg
ICAgIERPTUFnZW50LnBlcmZvcm1TZWFyY2gocXVlcnksIGNhbGxiYWNrLmJpbmQodGhpcykpOwot
ICAgIH0sCisgICAgfQogCi0gICAgc2VhcmNoUmVzdWx0OiBmdW5jdGlvbihpbmRleCwgY2FsbGJh
Y2spCisgICAgc2VhcmNoUmVzdWx0KGluZGV4LCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9zZWFyY2hJZCkgewotICAgICAgICAgICAgZnVuY3Rpb24gbXljYWxsYmFjayhlcnJv
ciwgbm9kZUlkcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKG51bGwpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChub2RlSWRzLmxlbmd0aCAhPT0gMSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgY2FsbGJhY2so
dGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkc1swXV0pOworICAgICAgICBmdW5jdGlvbiBteWNhbGxi
YWNrKGVycm9yLCBub2RlSWRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAgICAgICAgICBj
YWxsYmFjayhudWxsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobm9kZUlkcy5sZW5ndGggIT09IDEpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9pZFRvRE9NTm9kZVtub2RlSWRzWzBd
XSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fc2VhcmNoSWQpCiAgICAgICAgICAg
ICBET01BZ2VudC5nZXRTZWFyY2hSZXN1bHRzKHRoaXMuX3NlYXJjaElkLCBpbmRleCwgaW5kZXgg
KyAxLCBteWNhbGxiYWNrLmJpbmQodGhpcykpOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxz
ZQogICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjYW5j
ZWxTZWFyY2g6IGZ1bmN0aW9uKCkKKyAgICBjYW5jZWxTZWFyY2goKQogICAgIHsKICAgICAgICAg
aWYgKHRoaXMuX3NlYXJjaElkKSB7CiAgICAgICAgICAgICBET01BZ2VudC5kaXNjYXJkU2VhcmNo
UmVzdWx0cyh0aGlzLl9zZWFyY2hJZCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2VhcmNo
SWQ7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0
aW9uKG5vZGVJZCwgc2VsZWN0b3JzLCBjYWxsYmFjaykKKyAgICBxdWVyeVNlbGVjdG9yKG5vZGVJ
ZCwgc2VsZWN0b3JzLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBjYWxsYmFja0Nhc3Qg
PSBjYWxsYmFjazsKICAgICAgICAgRE9NQWdlbnQucXVlcnlTZWxlY3Rvcihub2RlSWQsIHNlbGVj
dG9ycywgdGhpcy5fd3JhcENsaWVudENhbGxiYWNrKGNhbGxiYWNrQ2FzdCkpOwotICAgIH0sCisg
ICAgfQogCi0gICAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24obm9kZUlkLCBzZWxlY3RvcnMs
IGNhbGxiYWNrKQorICAgIHF1ZXJ5U2VsZWN0b3JBbGwobm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxi
YWNrKQogICAgIHsKICAgICAgICAgdmFyIGNhbGxiYWNrQ2FzdCA9IGNhbGxiYWNrOwogICAgICAg
ICBET01BZ2VudC5xdWVyeVNlbGVjdG9yQWxsKG5vZGVJZCwgc2VsZWN0b3JzLCB0aGlzLl93cmFw
Q2xpZW50Q2FsbGJhY2soY2FsbGJhY2tDYXN0KSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoaWdo
bGlnaHRET01Ob2RlOiBmdW5jdGlvbihub2RlSWQsIG1vZGUpCisgICAgaGlnaGxpZ2h0RE9NTm9k
ZShub2RlSWQsIG1vZGUpCiAgICAgewogICAgICAgICBpZiAodGhpcy5faGlkZURPTU5vZGVIaWdo
bGlnaHRUaW1lb3V0KSB7CiAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5faGlkZURPTU5v
ZGVIaWdobGlnaHRUaW1lb3V0KTsKQEAgLTM2NCw5ICszNTYsOSBAQCBXZWJJbnNwZWN0b3IuRE9N
VHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgRE9NQWdlbnQuaGlnaGxpZ2h0
Tm9kZS5pbnZva2Uoe25vZGVJZCwgaGlnaGxpZ2h0Q29uZmlnOiB0aGlzLl9idWlsZEhpZ2hsaWdo
dENvbmZpZyhtb2RlKX0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBET01BZ2VudC5oaWRl
SGlnaGxpZ2h0KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoaWdobGlnaHRSZWN0OiBmdW5jdGlv
bihyZWN0LCB1c2VQYWdlQ29vcmRpbmF0ZXMpCisgICAgaGlnaGxpZ2h0UmVjdChyZWN0LCB1c2VQ
YWdlQ29vcmRpbmF0ZXMpCiAgICAgewogICAgICAgICBET01BZ2VudC5oaWdobGlnaHRSZWN0Lmlu
dm9rZSh7CiAgICAgICAgICAgICB4OiByZWN0LngsCkBAIC0zNzcsMjMgKzM2OSwyMyBAQCBXZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgb3V0bGlu
ZUNvbG9yOiB7cjogMjU1LCBnOiAyMjksIGI6IDE1MywgYTogMC42Nn0sCiAgICAgICAgICAgICB1
c2VQYWdlQ29vcmRpbmF0ZXMKICAgICAgICAgfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBoaWRl
RE9NTm9kZUhpZ2hsaWdodDogZnVuY3Rpb24oKQorICAgIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCkK
ICAgICB7CiAgICAgICAgIHRoaXMuaGlnaGxpZ2h0RE9NTm9kZSgwKTsKLSAgICB9LAorICAgIH0K
IAotICAgIGhpZ2hsaWdodERPTU5vZGVGb3JUd29TZWNvbmRzOiBmdW5jdGlvbihub2RlSWQpCisg
ICAgaGlnaGxpZ2h0RE9NTm9kZUZvclR3b1NlY29uZHMobm9kZUlkKQogICAgIHsKICAgICAgICAg
dGhpcy5oaWdobGlnaHRET01Ob2RlKG5vZGVJZCk7CiAgICAgICAgIHRoaXMuX2hpZGVET01Ob2Rl
SGlnaGxpZ2h0VGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5oaWRlRE9NTm9kZUhpZ2hsaWdodC5i
aW5kKHRoaXMpLCAyMDAwKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBpbnNwZWN0TW9kZUVu
YWJsZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2luc3BlY3RNb2RlRW5hYmxlZDsK
LSAgICB9LAorICAgIH0KIAogICAgIHNldCBpbnNwZWN0TW9kZUVuYWJsZWQoZW5hYmxlZCkKICAg
ICB7CkBAIC00MDQsOSArMzk2LDkgQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIERPTUFnZW50LnNldEluc3BlY3RNb2RlRW5h
YmxlZChlbmFibGVkLCB0aGlzLl9idWlsZEhpZ2hsaWdodENvbmZpZygpLCBjYWxsYmFjay5iaW5k
KHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9idWlsZEhpZ2hsaWdodENvbmZpZzogZnVu
Y3Rpb24obW9kZSkKKyAgICBfYnVpbGRIaWdobGlnaHRDb25maWcobW9kZSkKICAgICB7CiAgICAg
ICAgIG1vZGUgPSBtb2RlIHx8ICJhbGwiOwogICAgICAgICB2YXIgaGlnaGxpZ2h0Q29uZmlnID0g
eyBzaG93SW5mbzogbW9kZSA9PT0gImFsbCIgfTsKQEAgLTQyMyw5ICs0MTUsOSBAQCBXZWJJbnNw
ZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgaGlnaGxpZ2h0
Q29uZmlnLm1hcmdpbkNvbG9yID0ge3I6IDI0NiwgZzogMTc4LCBiOiAxMDcsIGE6IDAuNjZ9Owog
CiAgICAgICAgIHJldHVybiBoaWdobGlnaHRDb25maWc7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
Y3JlYXRlQ29udGVudEZsb3dGcm9tUGF5bG9hZDogZnVuY3Rpb24oZmxvd1BheWxvYWQpCisgICAg
X2NyZWF0ZUNvbnRlbnRGbG93RnJvbVBheWxvYWQoZmxvd1BheWxvYWQpCiAgICAgewogICAgICAg
ICAvLyBGSVhNRTogQ29sbGVjdCB0aGUgcmVnaW9ucyBmcm9tIHRoZSBwYXlsb2FkLgogICAgICAg
ICB2YXIgZmxvdyA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGVudEZsb3coZmxvd1BheWxvYWQuZG9j
dW1lbnROb2RlSWQsIGZsb3dQYXlsb2FkLm5hbWUsIGZsb3dQYXlsb2FkLm92ZXJzZXQsIGZsb3dQ
YXlsb2FkLmNvbnRlbnQubWFwKHRoaXMubm9kZUZvcklkLmJpbmQodGhpcykpKTsKQEAgLTQzNiwx
OCArNDI4LDE4IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZmxvdzsKLSAgICB9LAorICAgIH0KIAotICAgIF91
cGRhdGVDb250ZW50Rmxvd0Zyb21QYXlsb2FkOiBmdW5jdGlvbihjb250ZW50RmxvdywgZmxvd1Bh
eWxvYWQpCisgICAgX3VwZGF0ZUNvbnRlbnRGbG93RnJvbVBheWxvYWQoY29udGVudEZsb3csIGZs
b3dQYXlsb2FkKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoY29udGVudEZsb3cuY29u
dGVudE5vZGVzLmxlbmd0aCA9PT0gZmxvd1BheWxvYWQuY29udGVudC5sZW5ndGgpOwogICAgICAg
ICBjb25zb2xlLmFzc2VydChjb250ZW50Rmxvdy5jb250ZW50Tm9kZXMuZXZlcnkoZnVuY3Rpb24o
bm9kZSwgaSkgeyBub2RlLmlkID09PSBmbG93UGF5bG9hZC5jb250ZW50W2ldOyB9KSk7CiAKICAg
ICAgICAgLy8gRklYTUU6IENvbGxlY3QgdGhlIHJlZ2lvbnMgZnJvbSB0aGUgcGF5bG9hZC4KICAg
ICAgICAgY29udGVudEZsb3cub3ZlcnNldCA9IGZsb3dQYXlsb2FkLm92ZXJzZXQ7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBnZXROYW1lZEZsb3dDb2xsZWN0aW9uOiBmdW5jdGlvbihkb2N1bWVudE5v
ZGVJZGVudGlmaWVyKQorICAgIGdldE5hbWVkRmxvd0NvbGxlY3Rpb24oZG9jdW1lbnROb2RlSWRl
bnRpZmllcikKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIG9uTmFtZWRGbG93Q29sbGVjdGlvbkF2
YWlsYWJsZShlcnJvciwgZmxvd3MpCiAgICAgICAgIHsKQEAgLTQ3NCwxOCArNDY2LDE4IEBAIFdl
Ykluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHdp
bmRvdy5DU1NBZ2VudCAmJiBDU1NBZ2VudC5nZXROYW1lZEZsb3dDb2xsZWN0aW9uKQogICAgICAg
ICAgICAgQ1NTQWdlbnQuZ2V0TmFtZWRGbG93Q29sbGVjdGlvbihkb2N1bWVudE5vZGVJZGVudGlm
aWVyLCBvbk5hbWVkRmxvd0NvbGxlY3Rpb25BdmFpbGFibGUuYmluZCh0aGlzKSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBuYW1lZEZsb3dDcmVhdGVkOiBmdW5jdGlvbihmbG93UGF5bG9hZCkKKyAg
ICBuYW1lZEZsb3dDcmVhdGVkKGZsb3dQYXlsb2FkKQogICAgIHsKICAgICAgICAgdmFyIGZsb3dL
ZXkgPSBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleShmbG93
UGF5bG9hZCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLl9mbG93cy5oYXMoZmxvd0tl
eSkpOwogICAgICAgICB2YXIgY29udGVudEZsb3cgPSB0aGlzLl9jcmVhdGVDb250ZW50Rmxvd0Zy
b21QYXlsb2FkKGZsb3dQYXlsb2FkKTsKICAgICAgICAgdGhpcy5fZmxvd3Muc2V0KGZsb3dLZXks
IGNvbnRlbnRGbG93KTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLkV2ZW50LkNvbnRlbnRGbG93V2FzQWRkZWQsIHtmbG93
OiBjb250ZW50Rmxvd30pOwotICAgIH0sCisgICAgfQogCi0gICAgbmFtZWRGbG93UmVtb3ZlZDog
ZnVuY3Rpb24oZG9jdW1lbnROb2RlSWRlbnRpZmllciwgZmxvd05hbWUpCisgICAgbmFtZWRGbG93
UmVtb3ZlZChkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBmbG93TmFtZSkKICAgICB7CiAgICAgICAg
IHZhciBmbG93S2V5ID0gV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLl9mbG93UGF5bG9hZEhh
c2hLZXkoe2RvY3VtZW50Tm9kZUlkOiBkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBuYW1lOiBmbG93
TmFtZX0pOwogICAgICAgICB2YXIgY29udGVudEZsb3cgPSB0aGlzLl9mbG93cy5nZXQoZmxvd0tl
eSk7CkBAIC00OTcsMjEgKzQ4OSwyMSBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY29udGVudE5vZGVzVG9GbG93c01hcC5kZWxl
dGUoY29udGVudE5vZGUuaWQpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVudC5Db250ZW50Rmxvd1dhc1JlbW92
ZWQsIHtmbG93OiBjb250ZW50Rmxvd30pOwotICAgIH0sCisgICAgfQogCi0gICAgX3NlbmROYW1l
ZEZsb3dVcGRhdGVFdmVudHM6IGZ1bmN0aW9uKGZsb3dQYXlsb2FkKQorICAgIF9zZW5kTmFtZWRG
bG93VXBkYXRlRXZlbnRzKGZsb3dQYXlsb2FkKQogICAgIHsKICAgICAgICAgdmFyIGZsb3dLZXkg
PSBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIuX2Zsb3dQYXlsb2FkSGFzaEtleShmbG93UGF5
bG9hZCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2Zsb3dzLmhhcyhmbG93S2V5KSk7
CiAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRGbG93RnJvbVBheWxvYWQodGhpcy5fZmxvd3Mu
Z2V0KGZsb3dLZXkpLCBmbG93UGF5bG9hZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZWdpb25P
dmVyc2V0Q2hhbmdlZDogZnVuY3Rpb24oZmxvd1BheWxvYWQpCisgICAgcmVnaW9uT3ZlcnNldENo
YW5nZWQoZmxvd1BheWxvYWQpCiAgICAgewogICAgICAgICB0aGlzLl9zZW5kTmFtZWRGbG93VXBk
YXRlRXZlbnRzKGZsb3dQYXlsb2FkKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlZ2lzdGVyZWRO
YW1lZEZsb3dDb250ZW50RWxlbWVudDogZnVuY3Rpb24oZG9jdW1lbnROb2RlSWRlbnRpZmllciwg
Zmxvd05hbWUsIGNvbnRlbnROb2RlSWQsIG5leHRDb250ZW50RWxlbWVudE5vZGVJZCkKKyAgICBy
ZWdpc3RlcmVkTmFtZWRGbG93Q29udGVudEVsZW1lbnQoZG9jdW1lbnROb2RlSWRlbnRpZmllciwg
Zmxvd05hbWUsIGNvbnRlbnROb2RlSWQsIG5leHRDb250ZW50RWxlbWVudE5vZGVJZCkKICAgICB7
CiAgICAgICAgIHZhciBmbG93S2V5ID0gV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLl9mbG93
UGF5bG9hZEhhc2hLZXkoe2RvY3VtZW50Tm9kZUlkOiBkb2N1bWVudE5vZGVJZGVudGlmaWVyLCBu
YW1lOiBmbG93TmFtZX0pOwogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9mbG93cy5oYXMo
Zmxvd0tleSkpOwpAQCAtNTI2LDE4ICs1MTgsMTggQEAgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGZsb3cuaW5zZXJ0Q29udGVudE5vZGVCZWZv
cmUoY29udGVudE5vZGUsIHRoaXMubm9kZUZvcklkKG5leHRDb250ZW50RWxlbWVudE5vZGVJZCkp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmbG93LmFwcGVuZENvbnRlbnROb2RlKGNvbnRl
bnROb2RlKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9yZW1vdmVDb250ZW50Tm9kZUZyb21GbG93
SWZOZWVkZWQ6IGZ1bmN0aW9uKG5vZGUpCisgICAgX3JlbW92ZUNvbnRlbnROb2RlRnJvbUZsb3dJ
Zk5lZWRlZChub2RlKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9jb250ZW50Tm9kZXNUb0Zs
b3dzTWFwLmhhcyhub2RlLmlkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmFyIGZs
b3cgPSB0aGlzLl9jb250ZW50Tm9kZXNUb0Zsb3dzTWFwLmdldChub2RlLmlkKTsKICAgICAgICAg
dGhpcy5fY29udGVudE5vZGVzVG9GbG93c01hcC5kZWxldGUobm9kZS5pZCk7CiAgICAgICAgIGZs
b3cucmVtb3ZlQ29udGVudE5vZGUobm9kZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB1bnJlZ2lz
dGVyZWROYW1lZEZsb3dDb250ZW50RWxlbWVudDogZnVuY3Rpb24oZG9jdW1lbnROb2RlSWRlbnRp
ZmllciwgZmxvd05hbWUsIGNvbnRlbnROb2RlSWQpCisgICAgdW5yZWdpc3RlcmVkTmFtZWRGbG93
Q29udGVudEVsZW1lbnQoZG9jdW1lbnROb2RlSWRlbnRpZmllciwgZmxvd05hbWUsIGNvbnRlbnRO
b2RlSWQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jb250ZW50Tm9kZXNU
b0Zsb3dzTWFwLmhhcyhjb250ZW50Tm9kZUlkKSk7CiAKQEAgLTU0Niw5ICs1MzgsOSBAQCBXZWJJ
bnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2Nv
bnRlbnROb2Rlc1RvRmxvd3NNYXAuZGVsZXRlKGNvbnRlbnROb2RlSWQpOwogICAgICAgICBmbG93
LnJlbW92ZUNvbnRlbnROb2RlKHRoaXMubm9kZUZvcklkKGNvbnRlbnROb2RlSWQpKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9jb2VyY2VSZW1vdGVBcnJheU9mRE9NTm9kZXM6IGZ1bmN0aW9uKG9i
amVjdElkLCBjYWxsYmFjaykKKyAgICBfY29lcmNlUmVtb3RlQXJyYXlPZkRPTU5vZGVzKG9iamVj
dElkLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBsZW5ndGgsIG5vZGVzLCByZWNlaXZl
ZCA9IDAsIGxhc3RFcnJvciA9IG51bGwsIGRvbVRyZWVNYW5hZ2VyID0gdGhpczsKIApAQCAtNTg3
LDkgKzU3OSw5IEBAIFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAgICAgRE9NQWdlbnQucmVxdWVzdE5vZGUobm9kZVByb3BlcnR5LnZhbHVlLm9i
amVjdElkLCBub2RlUmVxdWVzdGVkLmJpbmQobnVsbCwgaSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9KTsKLSAgICB9LAorICAgIH0KIAotICAgIGdldE5vZGVDb250ZW50Rmxvd0luZm86IGZ1
bmN0aW9uKGRvbU5vZGUsIHJlc3VsdFJlYWR5Q2FsbGJhY2spCisgICAgZ2V0Tm9kZUNvbnRlbnRG
bG93SW5mbyhkb21Ob2RlLCByZXN1bHRSZWFkeUNhbGxiYWNrKQogICAgIHsKICAgICAgICAgRE9N
QWdlbnQucmVzb2x2ZU5vZGUoZG9tTm9kZS5pZCwgZG9tTm9kZVJlc29sdmVkLmJpbmQodGhpcykp
OwogCkBAIC03MTIsMTUgKzcwNCwyOSBAQCBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXIucHJv
dG90eXBlID0gewogCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAg
fSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdl
OiBmdW5jdGlvbihldmVudCkKKyAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQogICAg
IHsKICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5pc01haW5GcmFtZSgpKQogICAgICAgICAgICAg
dGhpcy5fcmVzdG9yZVNlbGVjdGVkTm9kZUlzQWxsb3dlZCA9IHRydWU7CiAgICAgfQogfTsKIAot
V2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlci5FdmVu
dCA9IHsKKyAgICBBdHRyaWJ1dGVNb2RpZmllZDogImRvbS10cmVlLW1hbmFnZXItYXR0cmlidXRl
LW1vZGlmaWVkIiwKKyAgICBBdHRyaWJ1dGVSZW1vdmVkOiAiZG9tLXRyZWUtbWFuYWdlci1hdHRy
aWJ1dGUtcmVtb3ZlZCIsCisgICAgQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiAiZG9tLXRyZWUtbWFu
YWdlci1jaGFyYWN0ZXItZGF0YS1tb2RpZmllZCIsCisgICAgTm9kZUluc2VydGVkOiAiZG9tLXRy
ZWUtbWFuYWdlci1ub2RlLWluc2VydGVkIiwKKyAgICBOb2RlUmVtb3ZlZDogImRvbS10cmVlLW1h
bmFnZXItbm9kZS1yZW1vdmVkIiwKKyAgICBEb2N1bWVudFVwZGF0ZWQ6ICJkb20tdHJlZS1tYW5h
Z2VyLWRvY3VtZW50LXVwZGF0ZWQiLAorICAgIENoaWxkTm9kZUNvdW50VXBkYXRlZDogImRvbS10
cmVlLW1hbmFnZXItY2hpbGQtbm9kZS1jb3VudC11cGRhdGVkIiwKKyAgICBET01Ob2RlV2FzSW5z
cGVjdGVkOiAiZG9tLXRyZWUtbWFuYWdlci1kb20tbm9kZS13YXMtaW5zcGVjdGVkIiwKKyAgICBJ
bnNwZWN0TW9kZVN0YXRlQ2hhbmdlZDogImRvbS10cmVlLW1hbmFnZXItaW5zcGVjdC1tb2RlLXN0
YXRlLWNoYW5nZWQiLAorICAgIENvbnRlbnRGbG93TGlzdFdhc1VwZGF0ZWQ6ICJkb20tdHJlZS1t
YW5hZ2VyLWNvbnRlbnQtZmxvdy1saXN0LXdhcy11cGRhdGVkIiwKKyAgICBDb250ZW50Rmxvd1dh
c0FkZGVkOiAiZG9tLXRyZWUtbWFuYWdlci1jb250ZW50LWZsb3ctd2FzLWFkZGVkIiwKKyAgICBD
b250ZW50Rmxvd1dhc1JlbW92ZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLWNvbnRlbnQtZmxvdy13YXMt
cmVtb3ZlZCIsCisgICAgUmVnaW9uT3ZlcnNldENoYW5nZWQ6ICJkb20tdHJlZS1tYW5hZ2VyLXJl
Z2lvbi1vdmVyc2V0LWNoYW5nZWQiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGFzaGJvYXJkTWFuYWdlci5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Rhc2hib2FyZE1hbmFn
ZXIuanMKaW5kZXggYzg0OGIyNzdiYWZiNGQyMDFiYmUxMjFlYTNjNWEyN2RiZWE2ZmUxNS4uNDhj
NGE4ZmQ1YjY1Zjc1NjM3ZDZlOWQxNmViNTk3ODg4YmMwYzdlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGFzaGJvYXJkTWFuYWdl
ci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9EYXNoYm9hcmRNYW5hZ2VyLmpzCkBAIC0yMywxOSArMjMsMTcgQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdl
ciA9IGZ1bmN0aW9uKCkgewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNw
ZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3Bl
Y3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX2Rhc2hib2FyZHMgPSB7fTsKLSAg
ICB0aGlzLl9kYXNoYm9hcmRzLmRlZmF1bHQgPSBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1bHREYXNo
Ym9hcmQ7Ci0gICAgdGhpcy5fZGFzaGJvYXJkcy5kZWJ1Z2dlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
RGVidWdnZXJEYXNoYm9hcmQ7Ci0gICAgdGhpcy5fZGFzaGJvYXJkcy5yZXBsYXkgPSBuZXcgV2Vi
SW5zcGVjdG9yLlJlcGxheURhc2hib2FyZDsKLX07CitXZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFu
YWdlciA9IGNsYXNzIERhc2hib2FyZE1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0
Cit7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotV2ViSW5z
cGVjdG9yLkRhc2hib2FyZE1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBX
ZWJJbnNwZWN0b3IuRGFzaGJvYXJkTWFuYWdlciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlLAorICAgICAgICB0aGlzLl9kYXNoYm9hcmRzID0ge307CisgICAg
ICAgIHRoaXMuX2Rhc2hib2FyZHMuZGVmYXVsdCA9IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdERh
c2hib2FyZDsKKyAgICAgICAgdGhpcy5fZGFzaGJvYXJkcy5kZWJ1Z2dlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJEYXNoYm9hcmQ7CisgICAgICAgIHRoaXMuX2Rhc2hib2FyZHMucmVwbGF5
ID0gbmV3IFdlYkluc3BlY3Rvci5SZXBsYXlEYXNoYm9hcmQ7CisgICAgfQogCiAgICAgZ2V0IGRh
c2hib2FyZHMoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcwppbmRl
eCBlZmZkOGI1YjNiYzhhNGMxZTBkNGU5NDNkNGU5NDNhN2MyYjBhYjJlLi4wODgzYTM4ZTEzMDI2
Yjg1ZTJhMTRhMTBkNDA0OTAzNjlkODM4NzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9EZWJ1Z2dlck1hbmFnZXIuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJN
YW5hZ2VyLmpzCkBAIC0yMyw5OCArMjMsNzMgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyID0gZnVuY3Rpb24o
KQorV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlciA9IGNsYXNzIERlYnVnZ2VyTWFuYWdlciBl
eHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlz
IHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAg
ICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBpZiAod2luZG93LkRl
YnVnZ2VyQWdlbnQpCi0gICAgICAgIERlYnVnZ2VyQWdlbnQuZW5hYmxlKCk7Ci0KLSAgICBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50LkV2ZW50LkRpc3BsYXlMb2NhdGlvbkRpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludERpc3Bs
YXlMb2NhdGlvbkRpZENoYW5nZSwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5EaXNhYmxlZFN0
YXRlRGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50RGlzYWJsZWRTdGF0ZURpZENoYW5nZSwgdGhp
cyk7Ci0gICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludC5FdmVudC5Db25kaXRpb25EaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9p
bnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hhbmdlLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkF1
dG9Db250aW51ZURpZENoYW5nZSwgdGhpcy5fYnJlYWtwb2ludEVkaXRhYmxlUHJvcGVydHlEaWRD
aGFuZ2UsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5CcmVha3BvaW50LmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuRXZlbnQuQWN0aW9uc0RpZENoYW5nZSwgdGhpcy5f
YnJlYWtwb2ludEVkaXRhYmxlUHJvcGVydHlEaWRDaGFuZ2UsIHRoaXMpOwotCi0gICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIiwgdGhpcy5faW5zcGVjdG9yQ2xvc2luZy5iaW5k
KHRoaXMpKTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0g
ICAgdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFibGVkU2V0dGluZyA9IG5ldyBXZWJJ
bnNwZWN0b3IuU2V0dGluZygiYnJlYWstb24tYWxsLWV4Y2VwdGlvbnMiLCBmYWxzZSk7Ci0gICAg
dGhpcy5fYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludEVuYWJsZWRTZXR0aW5nID0gbmV3
IFdlYkluc3BlY3Rvci5TZXR0aW5nKCJicmVhay1vbi1hbGwtdW5jYXVnaHQtZXhjZXB0aW9ucyIs
IGZhbHNlKTsKKyAgICAgICAgaWYgKHdpbmRvdy5EZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAg
RGVidWdnZXJBZ2VudC5lbmFibGUoKTsKIAotICAgIHZhciBzcGVjaWFsQnJlYWtwb2ludExvY2F0
aW9uID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlTG9jYXRpb24obnVsbCwgSW5maW5pdHks
IEluZmluaXR5KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5EaXNwbGF5TG9jYXRpb25EaWRDaGFu
Z2UsIHRoaXMuX2JyZWFrcG9pbnREaXNwbGF5TG9jYXRpb25EaWRDaGFuZ2UsIHRoaXMpOworICAg
ICAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LkV2ZW50LkRpc2FibGVkU3RhdGVEaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9p
bnREaXNhYmxlZFN0YXRlRGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5D
b25kaXRpb25EaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hh
bmdlLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5FdmVudC5BdXRvQ29udGludWVEaWRDaGFuZ2Us
IHRoaXMuX2JyZWFrcG9pbnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hhbmdlLCB0aGlzKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludC5FdmVudC5BY3Rpb25zRGlkQ2hhbmdlLCB0aGlzLl9icmVha3BvaW50RWRpdGFi
bGVQcm9wZXJ0eURpZENoYW5nZSwgdGhpcyk7CiAKLSAgICB0aGlzLl9hbGxFeGNlcHRpb25zQnJl
YWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChzcGVjaWFsQnJlYWtwb2ludExv
Y2F0aW9uLCAhdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFibGVkU2V0dGluZy52YWx1
ZSk7Ci0gICAgdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQucmVzb2x2ZWQgPSB0cnVlOwor
ICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLCB0aGlzLl9pbnNwZWN0
b3JDbG9zaW5nLmJpbmQodGhpcykpOwogCi0gICAgdGhpcy5fYWxsVW5jYXVnaHRFeGNlcHRpb25z
QnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludChzcGVjaWFsQnJlYWtwb2lu
dExvY2F0aW9uLCAhdGhpcy5fYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludEVuYWJsZWRT
ZXR0aW5nLnZhbHVlKTsKKyAgICAgICAgdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnRFbmFi
bGVkU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygiYnJlYWstb24tYWxsLWV4Y2Vw
dGlvbnMiLCBmYWxzZSk7CisgICAgICAgIHRoaXMuX2FsbFVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFr
cG9pbnRFbmFibGVkU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygiYnJlYWstb24t
YWxsLXVuY2F1Z2h0LWV4Y2VwdGlvbnMiLCBmYWxzZSk7CiAKLSAgICB0aGlzLl9icmVha3BvaW50
cyA9IFtdOwotICAgIHRoaXMuX2JyZWFrcG9pbnRVUkxNYXAgPSB7fTsKLSAgICB0aGlzLl9icmVh
a3BvaW50U2NyaXB0SWRlbnRpZmllck1hcCA9IHt9OwotICAgIHRoaXMuX2JyZWFrcG9pbnRJZE1h
cCA9IHt9OworICAgICAgICB2YXIgc3BlY2lhbEJyZWFrcG9pbnRMb2NhdGlvbiA9IG5ldyBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZUxvY2F0aW9uKG51bGwsIEluZmluaXR5LCBJbmZpbml0eSk7CiAK
LSAgICB0aGlzLl9uZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIgPSAxOworICAgICAgICB0
aGlzLl9hbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dChzcGVjaWFsQnJlYWtwb2ludExvY2F0aW9uLCAhdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9p
bnRFbmFibGVkU2V0dGluZy52YWx1ZSk7CisgICAgICAgIHRoaXMuX2FsbEV4Y2VwdGlvbnNCcmVh
a3BvaW50LnJlc29sdmVkID0gdHJ1ZTsKIAotICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlOwotICAg
IHRoaXMuX3BhdXNlUmVhc29uID0gbnVsbDsKLSAgICB0aGlzLl9wYXVzZURhdGEgPSBudWxsOwor
ICAgICAgICB0aGlzLl9hbGxVbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gbmV3IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50KHNwZWNpYWxCcmVha3BvaW50TG9jYXRpb24sICF0aGlzLl9hbGxV
bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50RW5hYmxlZFNldHRpbmcudmFsdWUpOwogCi0gICAg
dGhpcy5fc2NyaXB0SWRNYXAgPSB7fTsKLSAgICB0aGlzLl9zY3JpcHRVUkxNYXAgPSB7fTsKKyAg
ICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFVS
TE1hcCA9IHt9OworICAgICAgICB0aGlzLl9icmVha3BvaW50U2NyaXB0SWRlbnRpZmllck1hcCA9
IHt9OworICAgICAgICB0aGlzLl9icmVha3BvaW50SWRNYXAgPSB7fTsKIAotICAgIHRoaXMuX2Jy
ZWFrcG9pbnRzU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuU2V0dGluZygiYnJlYWtwb2ludHMi
LCBbXSk7Ci0gICAgdGhpcy5fYnJlYWtwb2ludHNFbmFibGVkU2V0dGluZyA9IG5ldyBXZWJJbnNw
ZWN0b3IuU2V0dGluZygiYnJlYWtwb2ludHMtZW5hYmxlZCIsIHRydWUpOworICAgICAgICB0aGlz
Ll9uZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIgPSAxOwogCi0gICAgaWYgKHdpbmRvdy5E
ZWJ1Z2dlckFnZW50KQotICAgICAgICBEZWJ1Z2dlckFnZW50LnNldEJyZWFrcG9pbnRzQWN0aXZl
KHRoaXMuX2JyZWFrcG9pbnRzRW5hYmxlZFNldHRpbmcudmFsdWUpOworICAgICAgICB0aGlzLl9w
YXVzZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcGF1c2VSZWFzb24gPSBudWxsOworICAgICAg
ICB0aGlzLl9wYXVzZURhdGEgPSBudWxsOwogCi0gICAgdGhpcy5fdXBkYXRlQnJlYWtPbkV4Y2Vw
dGlvbnNTdGF0ZSgpOworICAgICAgICB0aGlzLl9zY3JpcHRJZE1hcCA9IHt9OworICAgICAgICB0
aGlzLl9zY3JpcHRVUkxNYXAgPSB7fTsKIAotICAgIGZ1bmN0aW9uIHJlc3RvcmVCcmVha3BvaW50
c1Nvb24oKSB7Ci0gICAgICAgIHRoaXMuX3Jlc3RvcmluZ0JyZWFrcG9pbnRzID0gdHJ1ZTsKLSAg
ICAgICAgZm9yICh2YXIgY29va2llIG9mIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1ZSkK
LSAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludChuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9p
bnQoY29va2llKSk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9yZXN0b3JpbmdCcmVha3BvaW50czsK
LSAgICB9CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZyA9IG5ldyBXZWJJbnNwZWN0
b3IuU2V0dGluZygiYnJlYWtwb2ludHMiLCBbXSk7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRz
RW5hYmxlZFNldHRpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLlNldHRpbmcoImJyZWFrcG9pbnRzLWVu
YWJsZWQiLCB0cnVlKTsKIAotICAgIC8vIEVuc3VyZSB0aGF0IGFsbCBtYW5hZ2VycyBsZWFybiBh
Ym91dCByZXN0b3JlZCBicmVha3BvaW50cywKLSAgICAvLyByZWdhcmRsZXNzIG9mIHRoZWlyIGlu
aXRpYWxpemF0aW9uIG9yZGVyLgotICAgIHNldFRpbWVvdXQocmVzdG9yZUJyZWFrcG9pbnRzU29v
bi5iaW5kKHRoaXMpLCAwKTsKLX07CisgICAgICAgIGlmICh3aW5kb3cuRGVidWdnZXJBZ2VudCkK
KyAgICAgICAgICAgIERlYnVnZ2VyQWdlbnQuc2V0QnJlYWtwb2ludHNBY3RpdmUodGhpcy5fYnJl
YWtwb2ludHNFbmFibGVkU2V0dGluZy52YWx1ZSk7CiAKLVdlYkluc3BlY3Rvci5EZWJ1Z2dlck1h
bmFnZXIuRXZlbnQgPSB7Ci0gICAgQnJlYWtwb2ludEFkZGVkOiAiZGVidWdnZXItbWFuYWdlci1i
cmVha3BvaW50LWFkZGVkIiwKLSAgICBCcmVha3BvaW50UmVtb3ZlZDogImRlYnVnZ2VyLW1hbmFn
ZXItYnJlYWtwb2ludC1yZW1vdmVkIiwKLSAgICBCcmVha3BvaW50TW92ZWQ6ICJkZWJ1Z2dlci1t
YW5hZ2VyLWJyZWFrcG9pbnQtbW92ZWQiLAotICAgIFBhdXNlZDogImRlYnVnZ2VyLW1hbmFnZXIt
cGF1c2VkIiwKLSAgICBSZXN1bWVkOiAiZGVidWdnZXItbWFuYWdlci1yZXN1bWVkIiwKLSAgICBD
YWxsRnJhbWVzRGlkQ2hhbmdlOiAiZGVidWdnZXItbWFuYWdlci1jYWxsLWZyYW1lcy1kaWQtY2hh
bmdlIiwKLSAgICBBY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2U6ICJkZWJ1Z2dlci1tYW5hZ2VyLWFj
dGl2ZS1jYWxsLWZyYW1lLWRpZC1jaGFuZ2UiLAotICAgIFNjcmlwdEFkZGVkOiAiZGVidWdnZXIt
bWFuYWdlci1zY3JpcHQtYWRkZWQiLAotICAgIFNjcmlwdHNDbGVhcmVkOiAiZGVidWdnZXItbWFu
YWdlci1zY3JpcHRzLWNsZWFyZWQiLAotICAgIEJyZWFrcG9pbnRzRW5hYmxlZERpZENoYW5nZTog
ImRlYnVnZ2VyLW1hbmFnZXItYnJlYWtwb2ludHMtZW5hYmxlZC1kaWQtY2hhbmdlIgotfTsKKyAg
ICAgICAgdGhpcy5fdXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0ZSgpOwogCi1XZWJJbnNwZWN0
b3IuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uID0gewotICAgIEFzc2VydGlvbjogImFzc2Vy
dGlvbiIsCi0gICAgQnJlYWtwb2ludDogImJyZWFrcG9pbnQiLAotICAgIENTUFZpb2xhdGlvbjog
IkNTUC12aW9sYXRpb24iLAotICAgIERlYnVnZ2VyU3RhdGVtZW50OiAiZGVidWdnZXItc3RhdGVt
ZW50IiwKLSAgICBFeGNlcHRpb246ICJleGNlcHRpb24iLAotICAgIFBhdXNlT25OZXh0U3RhdGVt
ZW50OiAicGF1c2Utb24tbmV4dC1zdGF0ZW1lbnQiLAotICAgIE90aGVyOiAib3RoZXIiLAotfQor
ICAgICAgICBmdW5jdGlvbiByZXN0b3JlQnJlYWtwb2ludHNTb29uKCkgeworICAgICAgICAgICAg
dGhpcy5fcmVzdG9yaW5nQnJlYWtwb2ludHMgPSB0cnVlOworICAgICAgICAgICAgZm9yICh2YXIg
Y29va2llIG9mIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1ZSkKKyAgICAgICAgICAgICAg
ICB0aGlzLmFkZEJyZWFrcG9pbnQobmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KGNvb2tpZSkp
OworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Jlc3RvcmluZ0JyZWFrcG9pbnRzOworICAgICAg
ICB9CiAKLVdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNv
bnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLAorICAgICAgICAvLyBFbnN1
cmUgdGhhdCBhbGwgbWFuYWdlcnMgbGVhcm4gYWJvdXQgcmVzdG9yZWQgYnJlYWtwb2ludHMsCisg
ICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgaW5pdGlhbGl6YXRpb24gb3JkZXIuCisgICAg
ICAgIHNldFRpbWVvdXQocmVzdG9yZUJyZWFrcG9pbnRzU29vbi5iaW5kKHRoaXMpLCAwKTsKKyAg
ICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBicmVha3BvaW50c0VuYWJsZWQoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzRW5hYmxlZFNldHRpbmcudmFsdWU7
Ci0gICAgfSwKKyAgICB9CiAKICAgICBzZXQgYnJlYWtwb2ludHNFbmFibGVkKGVuYWJsZWQpCiAg
ICAgewpAQCAtMTI4LDMyICsxMDMsMzIgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIERlYnVnZ2VyQWdlbnQuc2V0QnJlYWtwb2ludHNBY3RpdmUo
ZW5hYmxlZCk7CiAKICAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0ZSgp
OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBhdXNlZCgpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fcGF1c2VkOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IHBhdXNlUmVhc29uKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wYXVzZVJlYXNvbjsKLSAgICB9LAorICAgIH0K
IAogICAgIGdldCBwYXVzZURhdGEoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3BhdXNl
RGF0YTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBjYWxsRnJhbWVzKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLl9jYWxsRnJhbWVzOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGFj
dGl2ZUNhbGxGcmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlQ2FsbEZy
YW1lOwotICAgIH0sCisgICAgfQogCiAgICAgc2V0IGFjdGl2ZUNhbGxGcmFtZShjYWxsRnJhbWUp
CiAgICAgewpAQCAtMTYzLDkgKzEzOCw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9hY3RpdmVDYWxsRnJhbWUgPSBjYWxsRnJhbWUg
fHwgbnVsbDsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBwYXVzZTogZnVuY3Rpb24oKQorICAgIHBhdXNlKCkKICAgICB7
CiAgICAgICAgIGlmICh0aGlzLl9wYXVzZWQpCiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZXNvbHZlKCk7CkBAIC0xODQsOSArMTU5LDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gUHJvbWlz
ZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICByZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICByZXN1bWUoKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9wYXVzZWQpCiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CkBA
IC0yMDUsOSArMTgwLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW21hbmFn
ZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzdGVwT3Zl
cjogZnVuY3Rpb24oKQorICAgIHN0ZXBPdmVyKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5f
cGF1c2VkKQogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fu
bm90IHN0ZXAgb3ZlciBiZWNhdXNlIGRlYnVnZ2VyIGlzIG5vdCBwYXVzZWQuIikpOwpAQCAtMjI2
LDkgKzIwMSw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgfSk7CiAKICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVz
dWx0LCBwcm90b2NvbFJlc3VsdF0pOwotICAgIH0sCisgICAgfQogCi0gICAgc3RlcEludG86IGZ1
bmN0aW9uKCkKKyAgICBzdGVwSW50bygpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX3BhdXNl
ZCkKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNhbm5vdCBz
dGVwIGludG8gYmVjYXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIpKTsKQEAgLTI0Nyw5ICsy
MjIsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwg
cHJvdG9jb2xSZXN1bHRdKTsKLSAgICB9LAorICAgIH0KIAotICAgIHN0ZXBPdXQ6IGZ1bmN0aW9u
KCkKKyAgICBzdGVwT3V0KCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQogICAg
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3V0
IGJlY2F1c2UgZGVidWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CkBAIC0yNjgsMjQgKzI0MywyNCBA
QCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IH0pOwogCiAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9j
b2xSZXN1bHRdKTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBhbGxFeGNlcHRpb25zQnJlYWtw
b2ludCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9p
bnQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgYWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtw
b2ludCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYWxsVW5jYXVnaHRFeGNlcHRpb25z
QnJlYWtwb2ludDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBicmVha3BvaW50cygpCiAgICAg
ewogICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHM7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBicmVha3BvaW50c0ZvclNvdXJjZUNvZGU6IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCisgICAgYnJl
YWtwb2ludHNGb3JTb3VyY2VDb2RlKHNvdXJjZUNvZGUpCiAgICAgewogICAgICAgICBjb25zb2xl
LmFzc2VydChzb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlc291cmNlIHx8IHNv
dXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KTsKIApAQCAtMzEwLDMwICsy
ODUsMzAgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICByZXR1cm4gW107Ci0gICAgfSwKKyAgICB9CiAKLSAgICBicmVha3Bv
aW50Rm9ySWRlbnRpZmllcjogZnVuY3Rpb24oaWQpCisgICAgYnJlYWtwb2ludEZvcklkZW50aWZp
ZXIoaWQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludElkTWFwW2lkXTsK
LSAgICB9LAorICAgIH0KIAotICAgIHNjcmlwdEZvcklkZW50aWZpZXI6IGZ1bmN0aW9uKGlkKQor
ICAgIHNjcmlwdEZvcklkZW50aWZpZXIoaWQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5f
c2NyaXB0SWRNYXBbaWRdIHx8IG51bGw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzY3JpcHRzRm9y
VVJMOiBmdW5jdGlvbih1cmwpCisgICAgc2NyaXB0c0ZvclVSTCh1cmwpCiAgICAgewogICAgICAg
ICAvLyBGSVhNRTogVGhpcyBtYXkgbm90IGJlIHNhZmUuIEEgUmVzb3VyY2UncyBVUkwgbWF5IGRp
ZmZlciBmcm9tIGEgU2NyaXB0J3MgVVJMLgogICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0VVJM
TWFwW3VybF0gfHwgW107Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjb250aW51ZVRvTG9jYXRpb246
IGZ1bmN0aW9uKHNjcmlwdElkZW50aWZpZXIsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAg
ICBjb250aW51ZVRvTG9jYXRpb24oc2NyaXB0SWRlbnRpZmllciwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyKQogICAgIHsKICAgICAgICAgRGVidWdnZXJBZ2VudC5jb250aW51ZVRvTG9jYXRpb24o
e3NjcmlwdElkOiBzY3JpcHRJZGVudGlmaWVyLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXJ9KTsK
LSAgICB9LAorICAgIH0KIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQs
IHNraXBFdmVudERpc3BhdGNoLCBzaG91bGRTcGVjdWxhdGl2ZWx5UmVzb2x2ZSkKKyAgICBhZGRC
cmVha3BvaW50KGJyZWFrcG9pbnQsIHNraXBFdmVudERpc3BhdGNoLCBzaG91bGRTcGVjdWxhdGl2
ZWx5UmVzb2x2ZSkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGJyZWFrcG9pbnQgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCwgIkJhZCBhcmd1bWVudCB0byBEZWJ1Z2dl
ck1hbmdlci5hZGRCcmVha3BvaW50OiAiLCBicmVha3BvaW50KTsKICAgICAgICAgaWYgKCFicmVh
a3BvaW50KQpAQCAtMzY0LDkgKzMzOSw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICghc2tpcEV2ZW50RGlzcGF0Y2gpCiAgICAgICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJN
YW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRBZGRlZCwge2JyZWFrcG9pbnR9KTsKLSAgICB9LAorICAg
IH0KIAotICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgcmVt
b3ZlQnJlYWtwb2ludChicmVha3BvaW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQo
YnJlYWtwb2ludCk7CiAgICAgICAgIGlmICghYnJlYWtwb2ludCkKQEAgLTQwNCw5ICszNzksOSBA
QCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgYnJl
YWtwb2ludC5jbGVhckFjdGlvbnMoKTsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkJyZWFrcG9pbnRSZW1v
dmVkLCB7YnJlYWtwb2ludH0pOwotICAgIH0sCisgICAgfQogCi0gICAgYnJlYWtwb2ludFJlc29s
dmVkOiBmdW5jdGlvbihicmVha3BvaW50SWRlbnRpZmllciwgbG9jYXRpb24pCisgICAgYnJlYWtw
b2ludFJlc29sdmVkKGJyZWFrcG9pbnRJZGVudGlmaWVyLCBsb2NhdGlvbikKICAgICB7CiAgICAg
ICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck9ic2VydmVyLgogCkBAIC00
MjMsOSArMzk4LDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIH0KIAogICAgICAgICBicmVha3BvaW50LnJlc29sdmVkID0gdHJ1ZTsKLSAgICB9
LAorICAgIH0KIAotICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAgcmVzZXQoKQogICAgIHsKICAg
ICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIuCiAKQEAg
LTQ1Nyw5ICs0MzIsOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKIAogICAgICAgICBpZiAod2FzUGF1c2VkKQogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5SZXN1bWVk
KTsKLSAgICB9LAorICAgIH0KIAotICAgIGRlYnVnZ2VyRGlkUGF1c2U6IGZ1bmN0aW9uKGNhbGxG
cmFtZXNQYXlsb2FkLCByZWFzb24sIGRhdGEpCisgICAgZGVidWdnZXJEaWRQYXVzZShjYWxsRnJh
bWVzUGF5bG9hZCwgcmVhc29uLCBkYXRhKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20g
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIuCiAKQEAgLTQ5OSw5ICs0NzQsOSBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZl
bnQuUGF1c2VkKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5DYWxsRnJhbWVzRGlkQ2hhbmdlKTsKICAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFu
YWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UpOwotICAgIH0sCisgICAgfQogCi0g
ICAgZGVidWdnZXJEaWRSZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICBkZWJ1Z2dlckRpZFJlc3VtZSgp
CiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNl
cnZlci4KIApAQCAtNTIxLDE0ICs0OTYsMTQgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFdlIGRlbGF5IGNsZWFyaW5nIHRoZSBzdGF0ZSBh
bmQgZmlyaW5nIGV2ZW50cyBzbyB0aGUgdXNlciBpbnRlcmZhY2UgZG9lcyBub3QgZmxhc2gKICAg
ICAgICAgLy8gYmV0d2VlbiBicmllZiBzdGVwcyBvciBzdWNjZXNzaXZlIGJyZWFrcG9pbnRzLgog
ICAgICAgICB0aGlzLl9kZWxheWVkUmVzdW1lVGltZW91dCA9IHNldFRpbWVvdXQoZGVsYXllZFdv
cmsuYmluZCh0aGlzKSwgNTApOwotICAgIH0sCisgICAgfQogCi0gICAgcGxheUJyZWFrcG9pbnRB
Y3Rpb25Tb3VuZDogZnVuY3Rpb24oYnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIpCisgICAgcGxh
eUJyZWFrcG9pbnRBY3Rpb25Tb3VuZChicmVha3BvaW50QWN0aW9uSWRlbnRpZmllcikKICAgICB7
CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5iZWVwKCk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBzY3JpcHREaWRQYXJzZTogZnVuY3Rpb24oc2NyaXB0SWRlbnRpZmllciwgdXJsLCBpc0Nv
bnRlbnRTY3JpcHQsIHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENvbHVtbiwg
c291cmNlTWFwVVJMKQorICAgIHNjcmlwdERpZFBhcnNlKHNjcmlwdElkZW50aWZpZXIsIHVybCwg
aXNDb250ZW50U2NyaXB0LCBzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lLCBlbmRDb2x1
bW4sIHNvdXJjZU1hcFVSTCkKICAgICB7CiAgICAgICAgIC8vIERvbid0IGFkZCB0aGUgc2NyaXB0
IGFnYWluIGlmIGl0IGlzIGFscmVhZHkga25vd24uCiAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRJ
ZE1hcFtzY3JpcHRJZGVudGlmaWVyXSkgewpAQCAtNTUyLDI2ICs1MjcsMjYgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2Vy
LkV2ZW50LlNjcmlwdEFkZGVkLCB7c2NyaXB0fSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBpc0Jy
ZWFrcG9pbnRSZW1vdmFibGU6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgaXNCcmVha3BvaW50
UmVtb3ZhYmxlKGJyZWFrcG9pbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYnJlYWtwb2ludCAh
PT0gdGhpcy5fYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQgJiYgYnJlYWtwb2ludCAhPT0gdGhpcy5f
YWxsVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludDsKLSAgICB9LAorICAgIH0KIAotICAgIGlz
QnJlYWtwb2ludEVkaXRhYmxlOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIGlzQnJlYWtwb2lu
dEVkaXRhYmxlKGJyZWFrcG9pbnQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5pc0JyZWFr
cG9pbnRSZW1vdmFibGUoYnJlYWtwb2ludCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbmV4
dEJyZWFrcG9pbnRBY3Rpb25JZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9uZXh0QnJlYWtwb2ludEFjdGlvbklkZW50aWZpZXIrKzsKLSAgICB9LAorICAgIH0KIAogICAg
IC8vIFByaXZhdGUKIAotICAgIF9zb3VyY2VDb2RlTG9jYXRpb25Gcm9tUGF5bG9hZDogZnVuY3Rp
b24ocGF5bG9hZCkKKyAgICBfc291cmNlQ29kZUxvY2F0aW9uRnJvbVBheWxvYWQocGF5bG9hZCkK
ICAgICB7CiAgICAgICAgIHZhciBzY3JpcHQgPSB0aGlzLl9zY3JpcHRJZE1hcFtwYXlsb2FkLnNj
cmlwdElkXTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0KTsKQEAgLTU3OSwxNyArNTU0
LDE3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgcmV0dXJuIHNjcmlwdC5jcmVhdGVTb3VyY2VD
b2RlTG9jYXRpb24ocGF5bG9hZC5saW5lTnVtYmVyLCBwYXlsb2FkLmNvbHVtbk51bWJlcik7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfc2NvcGVDaGFpbkZyb21QYXlsb2FkOiBmdW5jdGlvbihwYXls
b2FkKQorICAgIF9zY29wZUNoYWluRnJvbVBheWxvYWQocGF5bG9hZCkKICAgICB7CiAgICAgICAg
IHZhciBzY29wZUNoYWluID0gW107CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9h
ZC5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIHNjb3BlQ2hhaW4ucHVzaCh0aGlzLl9zY29wZUNo
YWluTm9kZUZyb21QYXlsb2FkKHBheWxvYWRbaV0pKTsKICAgICAgICAgcmV0dXJuIHNjb3BlQ2hh
aW47Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2NvcGVDaGFpbk5vZGVGcm9tUGF5bG9hZDogZnVu
Y3Rpb24ocGF5bG9hZCkKKyAgICBfc2NvcGVDaGFpbk5vZGVGcm9tUGF5bG9hZChwYXlsb2FkKQog
ICAgIHsKICAgICAgICAgdmFyIHR5cGUgPSBudWxsOwogICAgICAgICBzd2l0Y2ggKHBheWxvYWQu
dHlwZSkgewpAQCAtNjE3LDkgKzU5Miw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBvYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0LmZyb21QYXlsb2FkKHBheWxvYWQub2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuU2NvcGVDaGFpbk5vZGUodHlwZSwgb2JqZWN0KTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9wYXVzZVJlYXNvbkZyb21QYXlsb2FkOiBmdW5jdGlvbihwYXlsb2FkKQorICAgIF9w
YXVzZVJlYXNvbkZyb21QYXlsb2FkKHBheWxvYWQpCiAgICAgewogICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIG90aGVyIGJhY2tlbmQgcGF1c2Ugc2Vhc29ucy4KICAgICAgICAgc3dpdGNoIChwYXls
b2FkKSB7CkBAIC02MzgsOSArNjEzLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5PdGhlcjsKICAgICAgICAgfQotICAg
IH0sCisgICAgfQogCi0gICAgX2RlYnVnZ2VyQnJlYWtwb2ludEFjdGlvblR5cGU6IGZ1bmN0aW9u
KHR5cGUpCisgICAgX2RlYnVnZ2VyQnJlYWtwb2ludEFjdGlvblR5cGUodHlwZSkKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50QWN0aW9uLlR5cGUuTG9nOgpAQCAtNjU1LDkgKzYzMCw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZmFs
c2UpOwogICAgICAgICAgICAgcmV0dXJuIERlYnVnZ2VyQWdlbnQuQnJlYWtwb2ludEFjdGlvblR5
cGUuTG9nOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2V0QnJlYWtwb2ludDog
ZnVuY3Rpb24oYnJlYWtwb2ludCwgY2FsbGJhY2spCisgICAgX3NldEJyZWFrcG9pbnQoYnJlYWtw
b2ludCwgY2FsbGJhY2spCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghYnJlYWtwb2lu
dC5pZGVudGlmaWVyKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIWJyZWFrcG9pbnQuZGlzYWJs
ZWQpOwpAQCAtNzI0LDkgKzY5OSw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIG9wdGlvbnMKICAgICAgICAgICAgIH0sIGRpZFNl
dEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAg
IF9yZW1vdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50LCBjYWxsYmFjaykKKyAgICBf
cmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlm
ICghYnJlYWtwb2ludC5pZGVudGlmaWVyKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzQ4LDkg
KzcyMyw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAKICAgICAgICAgRGVidWdnZXJBZ2VudC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9p
bnQuaWRlbnRpZmllciwgZGlkUmVtb3ZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIF9icmVha3BvaW50RGlzcGxheUxvY2F0aW9uRGlkQ2hhbmdlOiBmdW5jdGlv
bihldmVudCkKKyAgICBfYnJlYWtwb2ludERpc3BsYXlMb2NhdGlvbkRpZENoYW5nZShldmVudCkK
ICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pZ25vcmVCcmVha3BvaW50RGlzcGxheUxvY2F0aW9u
RGlkQ2hhbmdlRXZlbnQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC03NjksOSArNzQ0LDkgQEAg
V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFn
ZXIuRXZlbnQuQnJlYWtwb2ludE1vdmVkLCB7YnJlYWtwb2ludH0pOwogICAgICAgICB9Ci0gICAg
fSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludERpc2FibGVkU3RhdGVEaWRDaGFuZ2U6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIF9icmVha3BvaW50RGlzYWJsZWRTdGF0ZURpZENoYW5nZShldmVudCkK
ICAgICB7CiAgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwogCkBAIC03OTUs
OSArNzcwLDkgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgIH0s
CisgICAgfQogCi0gICAgX2JyZWFrcG9pbnRFZGl0YWJsZVByb3BlcnR5RGlkQ2hhbmdlOiBmdW5j
dGlvbihldmVudCkKKyAgICBfYnJlYWtwb2ludEVkaXRhYmxlUHJvcGVydHlEaWRDaGFuZ2UoZXZl
bnQpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKICAgICAg
ICAgaWYgKGJyZWFrcG9pbnQuZGlzYWJsZWQpCkBAIC04MTUsOSArNzkwLDkgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhl
IGJyZWFrcG9pbnQgd2l0aCBpdHMgbmV3IGNvbmRpdGlvbiBhbmQgZ2V0IGEgbmV3IGlkLgogICAg
ICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICAgICAgfQotICAg
IH0sCisgICAgfQogCi0gICAgX3VwZGF0ZUJyZWFrT25FeGNlcHRpb25zU3RhdGU6IGZ1bmN0aW9u
KCkKKyAgICBfdXBkYXRlQnJlYWtPbkV4Y2VwdGlvbnNTdGF0ZSgpCiAgICAgewogICAgICAgICB2
YXIgc3RhdGUgPSAibm9uZSI7CiAKQEAgLTg0MiwxNCArODE3LDE0IEBAIFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgRGVidWdn
ZXJBZ2VudC5zZXRQYXVzZU9uRXhjZXB0aW9ucyhzdGF0ZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfaW5zcGVjdG9yQ2xvc2luZzogZnVuY3Rpb24oZXZlbnQpCisgICAgX2luc3BlY3RvckNsb3Np
bmcoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9zYXZlQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKKyAgICBfc2F2ZUJy
ZWFrcG9pbnRzKCkKICAgICB7CiAgICAgICAgIHZhciBzYXZlZEJyZWFrcG9pbnRzID0gW107CiAK
QEAgLTg2NCw5ICs4MzksOSBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzU2V0dGluZy52YWx1
ZSA9IHNhdmVkQnJlYWtwb2ludHM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXNzb2NpYXRlQnJl
YWtwb2ludHNXaXRoU291cmNlQ29kZTogZnVuY3Rpb24oYnJlYWtwb2ludHMsIHNvdXJjZUNvZGUp
CisgICAgX2Fzc29jaWF0ZUJyZWFrcG9pbnRzV2l0aFNvdXJjZUNvZGUoYnJlYWtwb2ludHMsIHNv
dXJjZUNvZGUpCiAgICAgewogICAgICAgICB0aGlzLl9pZ25vcmVCcmVha3BvaW50RGlzcGxheUxv
Y2F0aW9uRGlkQ2hhbmdlRXZlbnQgPSB0cnVlOwogCkBAIC04ODIsNCArODU3LDI1IEBAIFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rv
ci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudCA9
IHsKKyAgICBCcmVha3BvaW50QWRkZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLWJyZWFrcG9pbnQtYWRk
ZWQiLAorICAgIEJyZWFrcG9pbnRSZW1vdmVkOiAiZGVidWdnZXItbWFuYWdlci1icmVha3BvaW50
LXJlbW92ZWQiLAorICAgIEJyZWFrcG9pbnRNb3ZlZDogImRlYnVnZ2VyLW1hbmFnZXItYnJlYWtw
b2ludC1tb3ZlZCIsCisgICAgUGF1c2VkOiAiZGVidWdnZXItbWFuYWdlci1wYXVzZWQiLAorICAg
IFJlc3VtZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLXJlc3VtZWQiLAorICAgIENhbGxGcmFtZXNEaWRD
aGFuZ2U6ICJkZWJ1Z2dlci1tYW5hZ2VyLWNhbGwtZnJhbWVzLWRpZC1jaGFuZ2UiLAorICAgIEFj
dGl2ZUNhbGxGcmFtZURpZENoYW5nZTogImRlYnVnZ2VyLW1hbmFnZXItYWN0aXZlLWNhbGwtZnJh
bWUtZGlkLWNoYW5nZSIsCisgICAgU2NyaXB0QWRkZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLXNjcmlw
dC1hZGRlZCIsCisgICAgU2NyaXB0c0NsZWFyZWQ6ICJkZWJ1Z2dlci1tYW5hZ2VyLXNjcmlwdHMt
Y2xlYXJlZCIsCisgICAgQnJlYWtwb2ludHNFbmFibGVkRGlkQ2hhbmdlOiAiZGVidWdnZXItbWFu
YWdlci1icmVha3BvaW50cy1lbmFibGVkLWRpZC1jaGFuZ2UiCit9OworCitXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uID0geworICAgIEFzc2VydGlvbjogImFzc2VydGlv
biIsCisgICAgQnJlYWtwb2ludDogImJyZWFrcG9pbnQiLAorICAgIENTUFZpb2xhdGlvbjogIkNT
UC12aW9sYXRpb24iLAorICAgIERlYnVnZ2VyU3RhdGVtZW50OiAiZGVidWdnZXItc3RhdGVtZW50
IiwKKyAgICBFeGNlcHRpb246ICJleGNlcHRpb24iLAorICAgIFBhdXNlT25OZXh0U3RhdGVtZW50
OiAicGF1c2Utb24tbmV4dC1zdGF0ZW1lbnQiLAorICAgIE90aGVyOiAib3RoZXIiLAorfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0RyYWdUb0FkanVzdENvbnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9EcmFnVG9BZGp1c3RDb250cm9sbGVyLmpzCmluZGV4IGExZDkw
NDZmYWE5ZjgzOGExZDFhMzBiNDVkMmM0NjFlOGNjYjcxZjAuLmE4NjAwOWVhZDJkMDhhNTJiNGIx
M2Q2NzY4ZWM2OTQzMjVkNDg0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RyYWdUb0FkanVzdENvbnRyb2xsZXIuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRHJhZ1RvQWRq
dXN0Q29udHJvbGxlci5qcwpAQCAtMjMsMzggKzIzLDM1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xs
ZXIgPSBmdW5jdGlvbihkZWxlZ2F0ZSkKK1dlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9s
bGVyID0gY2xhc3MgRHJhZ1RvQWRqdXN0Q29udHJvbGxlcgogewotICAgIHRoaXMuX2RlbGVnYXRl
ID0gZGVsZWdhdGU7Ci0KLSAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDsKLSAgICB0aGlzLl9hY3Rp
dmUgPSBmYWxzZTsKLSAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7Ci0gICAgdGhpcy5fZHJhZ2dp
bmcgPSBmYWxzZTsKLSAgICB0aGlzLl90cmFja3NNb3VzZUNsaWNrQW5kRHJhZyA9IGZhbHNlOwot
fTsKLQotV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIuU3R5bGVDbGFzc05hbWUg
PSAiZHJhZy10by1hZGp1c3QiOworICAgIGNvbnN0cnVjdG9yKGRlbGVnYXRlKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIAotV2ViSW5zcGVjdG9yLkRyYWdUb0Fk
anVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0
b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlciwKKyAgICAgICAgdGhpcy5fZWxlbWVudCA9IG51bGw7
CisgICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9lbmFibGVkID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2RyYWdnaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Ry
YWNrc01vdXNlQ2xpY2tBbmREcmFnID0gZmFsc2U7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAK
ICAgICBnZXQgZWxlbWVudCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsK
LSAgICB9LAorICAgIH0KIAogICAgIHNldCBlbGVtZW50KGVsZW1lbnQpCiAgICAgewogICAgICAg
ICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBlbmFi
bGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkOwotICAgIH0sCisgICAg
fQogCiAgICAgc2V0IGVuYWJsZWQoZW5hYmxlZCkKICAgICB7CkBAIC02OCwxMiArNjUsMTIgQEAg
V2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgdGhp
cyk7CiAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
bGVhdmUiLCB0aGlzKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGFjdGl2
ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlOwotICAgIH0sCisgICAgfQog
CiAgICAgc2V0IGFjdGl2ZShhY3RpdmUpCiAgICAgewpAQCAtOTYsMjAgKzkzLDIwIEBAIFdlYklu
c3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBp
ZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENv
bnRyb2xsZXJBY3RpdmVTdGF0ZUNoYW5nZWQgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICB0
aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVyQWN0aXZlU3RhdGVDaGFuZ2VkKHRo
aXMpOwotICAgIH0sCisgICAgfQogCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICByZXNldCgp
CiAgICAgewogICAgICAgICB0aGlzLl9zZXRUcmFja3NNb3VzZUNsaWNrQW5kRHJhZyhmYWxzZSk7
CiAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuRHJh
Z1RvQWRqdXN0Q29udHJvbGxlci5TdHlsZUNsYXNzTmFtZSk7CiAKICAgICAgICAgaWYgKHRoaXMu
X2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVy
RGlkUmVzZXQgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5kcmFn
VG9BZGp1c3RDb250cm9sbGVyRGlkUmVzZXQodGhpcyk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAv
LyBQcm90ZWN0ZWQKIAotICAgIGhhbmRsZUV2ZW50OiBmdW5jdGlvbihldmVudCkKKyAgICBoYW5k
bGVFdmVudChldmVudCkKICAgICB7CiAgICAgICAgIHN3aXRjaChldmVudC50eXBlKSB7CiAgICAg
ICAgIGNhc2UgIm1vdXNlZW50ZXIiOgpAQCAtMTQwLDExICsxMzcsMTEgQEAgV2ViSW5zcGVjdG9y
LkRyYWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfSwK
KyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfc2V0RHJhZ2dpbmc6IGZ1bmN0aW9uKGRy
YWdnaW5nKQorICAgIF9zZXREcmFnZ2luZyhkcmFnZ2luZykKICAgICB7CiAgICAgICAgIGlmICh0
aGlzLl9kcmFnZ2luZyA9PT0gZHJhZ2dpbmcpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTYs
OSArMTUzLDkgQEAgV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKHdpbmRvdy5ldmVu
dCk7CiAKICAgICAgICAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZzsKLSAgICB9LAorICAgIH0K
IAotICAgIF9zZXRUcmFja3NNb3VzZUNsaWNrQW5kRHJhZzogZnVuY3Rpb24odHJhY2tzTW91c2VD
bGlja0FuZERyYWcpCisgICAgX3NldFRyYWNrc01vdXNlQ2xpY2tBbmREcmFnKHRyYWNrc01vdXNl
Q2xpY2tBbmREcmFnKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3RyYWNrc01vdXNlQ2xpY2tB
bmREcmFnID09PSB0cmFja3NNb3VzZUNsaWNrQW5kRHJhZykKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTE3NSwyNyArMTcyLDI3IEBAIFdlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHRoaXMuX3RyYWNrc01vdXNlQ2xp
Y2tBbmREcmFnID0gdHJhY2tzTW91c2VDbGlja0FuZERyYWc7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfbW9kaWZpZXJzRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfbW9kaWZpZXJzRGlk
Q2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNhbkJlQWRqdXN0ZWQgPSBXZWJJbnNw
ZWN0b3IubW9kaWZpZXJLZXlzLmFsdEtleTsKICAgICAgICAgaWYgKGNhbkJlQWRqdXN0ZWQgJiYg
dGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENvbnRy
b2xsZXJDYW5CZUFkanVzdGVkID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgY2FuQmVBZGp1
c3RlZCA9IHRoaXMuX2RlbGVnYXRlLmRyYWdUb0FkanVzdENvbnRyb2xsZXJDYW5CZUFkanVzdGVk
KHRoaXMpOwogCiAgICAgICAgIHRoaXMuX3NldFRyYWNrc01vdXNlQ2xpY2tBbmREcmFnKGNhbkJl
QWRqdXN0ZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgX21vdXNlTW92ZWQ6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIF9tb3VzZU1vdmVkKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNhbkJlQWRq
dXN0ZWQgPSBldmVudC5hbHRLZXk7CiAgICAgICAgIGlmIChjYW5CZUFkanVzdGVkICYmIHRoaXMu
X2RlbGVnYXRlICYmIHR5cGVvZiB0aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVy
Q2FuQWRqdXN0T2JqZWN0QXRQb2ludCA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgIGNhbkJl
QWRqdXN0ZWQgPSB0aGlzLl9kZWxlZ2F0ZS5kcmFnVG9BZGp1c3RDb250cm9sbGVyQ2FuQWRqdXN0
T2JqZWN0QXRQb2ludCh0aGlzLCBXZWJJbnNwZWN0b3IuUG9pbnQuZnJvbUV2ZW50KGV2ZW50KSk7
CiAKICAgICAgICAgdGhpcy5fc2V0VHJhY2tzTW91c2VDbGlja0FuZERyYWcoY2FuQmVBZGp1c3Rl
ZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbW91c2VXYXNQcmVzc2VkOiBmdW5jdGlvbihldmVu
dCkKKyAgICBfbW91c2VXYXNQcmVzc2VkKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fbGFz
dFggPSBldmVudC5zY3JlZW5YOwogCkBAIC0yMDMsOSArMjAwLDkgQEAgV2ViSW5zcGVjdG9yLkRy
YWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0sCisg
ICAgfQogCi0gICAgX21vdXNlV2FzRHJhZ2dlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX21vdXNl
V2FzRHJhZ2dlZChldmVudCkKICAgICB7CiAgICAgICAgIHZhciB4ID0gZXZlbnQuc2NyZWVuWDsK
ICAgICAgICAgdmFyIGFtb3VudCA9IHggLSB0aGlzLl9sYXN0WDsKQEAgLTIyNSw5ICsyMjIsOSBA
QCBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbW91c2VXYXNSZWxlYXNlZDogZnVuY3Rpb24o
ZXZlbnQpCisgICAgX21vdXNlV2FzUmVsZWFzZWQoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlz
Ll9zZXREcmFnZ2luZyhmYWxzZSk7CiAKQEAgLTIzNywzICsyMzQsNSBAQCBXZWJJbnNwZWN0b3Iu
RHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmVzZXQo
KTsKICAgICB9CiB9OworCitXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5TdHls
ZUNsYXNzTmFtZSA9ICJkcmFnLXRvLWFkanVzdCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMKaW5k
ZXggNWE3ZjJkODBhMmY1NTQxZWIzNzVmNzk1YmQwNDU5ZTRlZTE4NWNlMC4uYmZhOTk4ZWZmODJk
YjczNDVmM2NkYmE4MzA3MjUwZTEwYzhlNTdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlci5qcwpA
QCAtMjMsMjQgKzIzLDIzIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotZnVuY3Rpb24gRm9ybWF0dGVyKGNvZGVNaXJyb3IsIGJ1aWxkZXIpCitjbGFzcyBGb3Jt
YXR0ZXIKIHsKLSAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKLSAgICBjb25zb2xlLmFz
c2VydChidWlsZGVyKTsKLQotICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOwotICAg
IHRoaXMuX2J1aWxkZXIgPSBidWlsZGVyOworICAgIGNvbnN0cnVjdG9yKGNvZGVNaXJyb3IsIGJ1
aWxkZXIpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQoYnVpbGRlcik7CiAKLSAgICB0aGlzLl9sYXN0VG9rZW4gPSBudWxs
OwotICAgIHRoaXMuX2xhc3RDb250ZW50ID0gIiI7Ci19CisgICAgICAgIHRoaXMuX2NvZGVNaXJy
b3IgPSBjb2RlTWlycm9yOworICAgICAgICB0aGlzLl9idWlsZGVyID0gYnVpbGRlcjsKIAotRm9y
bWF0dGVyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogRm9ybWF0dGVyLAorICAgICAg
ICB0aGlzLl9sYXN0VG9rZW4gPSBudWxsOworICAgICAgICB0aGlzLl9sYXN0Q29udGVudCA9ICIi
OworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgZm9ybWF0OiBmdW5jdGlvbihmcm9tLCB0
bykKKyAgICBmb3JtYXQoZnJvbSwgdG8pCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl9idWlsZGVyLm9yaWdpbmFsQ29udGVudCA9PT0gbnVsbCk7CiAgICAgICAgIGlmICh0aGlz
Ll9idWlsZGVyLm9yaWdpbmFsQ29udGVudCAhPT0gbnVsbCkKQEAgLTc3LDExICs3NiwxMSBAQCBG
b3JtYXR0ZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fYnVpbGRl
ci5maW5pc2goKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9oYW5k
bGVUb2tlbjogZnVuY3Rpb24obW9kZSwgdG9rZW4sIHN0YXRlLCBzdHJlYW0sIG9yaWdpbmFsUG9z
aXRpb24sIGlzV2hpdGVTcGFjZSwgc3RhcnRPZk5ld0xpbmUsIGZpcnN0VG9rZW5PbkxpbmUpCisg
ICAgX2hhbmRsZVRva2VuKG1vZGUsIHRva2VuLCBzdGF0ZSwgc3RyZWFtLCBvcmlnaW5hbFBvc2l0
aW9uLCBpc1doaXRlU3BhY2UsIHN0YXJ0T2ZOZXdMaW5lLCBmaXJzdFRva2VuT25MaW5lKQogICAg
IHsKICAgICAgICAgLy8gU3RyaW5nIGNvbnRlbnQgb2YgdGhlIHRva2VuLgogICAgICAgICB2YXIg
Y29udGVudCA9IHN0cmVhbS5jdXJyZW50KCk7CkBAIC0xNDYsMTcgKzE0NSwxNyBAQCBGb3JtYXR0
ZXIucHJvdG90eXBlID0gewogICAgICAgICAvLyBSZWNvcmQgdGhpcyB0b2tlbiBhcyB0aGUgbGFz
dCB0b2tlbi4KICAgICAgICAgdGhpcy5fbGFzdFRva2VuID0gdG9rZW47CiAgICAgICAgIHRoaXMu
X2xhc3RDb250ZW50ID0gY29udGVudDsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVFbXB0
eUxpbmU6IGZ1bmN0aW9uKCkKKyAgICBfaGFuZGxlRW1wdHlMaW5lKCkKICAgICB7CiAgICAgICAg
IC8vIFByZXNlcnZlIG9yaWdpbmFsIHdoaXRlc3BhY2Ugb25seSBsaW5lcyBieSBhZGRpbmcgYSBu
ZXdsaW5lLgogICAgICAgICAvLyBIb3dldmVyLCBkb24ndCBkbyB0aGlzIGlmIHRoZSBidWlsZGVy
IGp1c3QgYWRkZWQgbXVsdGlwbGUgbmV3bGluZXMuCiAgICAgICAgIGlmICghKHRoaXMuX2J1aWxk
ZXIubGFzdFRva2VuV2FzTmV3bGluZSAmJiB0aGlzLl9idWlsZGVyLmxhc3ROZXdsaW5lQXBwZW5k
V2FzTXVsdGlwbGUpKQogICAgICAgICAgICAgdGhpcy5fYnVpbGRlci5hcHBlbmROZXdsaW5lKHRy
dWUpOwotICAgIH0sCisgICAgfQogCi0gICAgX2hhbmRsZUxpbmVFbmRpbmc6IGZ1bmN0aW9uKG9y
aWdpbmFsTmV3TGluZVBvc2l0aW9uKQorICAgIF9oYW5kbGVMaW5lRW5kaW5nKG9yaWdpbmFsTmV3
TGluZVBvc2l0aW9uKQogICAgIHsKICAgICAgICAgLy8gUmVjb3JkIHRoZSBvcmlnaW5hbCBsaW5l
IGVuZGluZy4KICAgICAgICAgdGhpcy5fYnVpbGRlci5hZGRPcmlnaW5hbExpbmVFbmRpbmcob3Jp
Z2luYWxOZXdMaW5lUG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJD
b250ZW50QnVpbGRlci5qcwppbmRleCAzYzM2YTJiYjNmMzg0NGU4MzdjNmIwYTg2ZmY4YThjOGU1
ZTMwMGI0Li44MjkxYzM0YTQ2MDZmMGE4MDJkYTA2NGE4M2VjM2JhMTMxNDg4YzZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3Jt
YXR0ZXJDb250ZW50QnVpbGRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcwpAQCAtMjMsNzAg
KzIzLDY5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotZnVu
Y3Rpb24gRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIobWFwcGluZywgb3JpZ2luYWxMaW5lRW5kaW5n
cywgZm9ybWF0dGVkTGluZUVuZGluZ3MsIG9yaWdpbmFsT2Zmc2V0LCBmb3JtYXR0ZWRPZmZzZXQs
IGluZGVudFN0cmluZykKK2NsYXNzIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyCiB7Ci0gICAgdGhp
cy5fb3JpZ2luYWxDb250ZW50ID0gbnVsbDsKLSAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50ID0g
W107Ci0gICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCA9IDA7Ci0KLSAgICB0aGlzLl9z
dGFydE9mTGluZSA9IHRydWU7Ci0gICAgdGhpcy5sYXN0VG9rZW5XYXNOZXdsaW5lID0gZmFsc2U7
Ci0gICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7Ci0gICAgdGhpcy5sYXN0
TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7CisgICAgY29uc3RydWN0b3IobWFwcGlu
Zywgb3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0dGVkTGluZUVuZGluZ3MsIG9yaWdpbmFsT2Zm
c2V0LCBmb3JtYXR0ZWRPZmZzZXQsIGluZGVudFN0cmluZykKKyAgICB7CisgICAgICAgIHRoaXMu
X29yaWdpbmFsQ29udGVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQg
PSBbXTsKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCA9IDA7CiAKLSAgICB0
aGlzLl9pbmRlbnQgPSAwOwotICAgIHRoaXMuX2luZGVudFN0cmluZyA9IGluZGVudFN0cmluZzsK
LSAgICB0aGlzLl9pbmRlbnRDYWNoZSA9IFsiIiwgdGhpcy5faW5kZW50U3RyaW5nXTsKKyAgICAg
ICAgdGhpcy5fc3RhcnRPZkxpbmUgPSB0cnVlOworICAgICAgICB0aGlzLmxhc3RUb2tlbldhc05l
d2xpbmUgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5sYXN0VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFs
c2U7CisgICAgICAgIHRoaXMubGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBsZSA9IGZhbHNlOwog
Ci0gICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7Ci0gICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5k
aW5ncyA9IG9yaWdpbmFsTGluZUVuZGluZ3MgfHwgW107Ci0gICAgdGhpcy5fZm9ybWF0dGVkTGlu
ZUVuZGluZ3MgPSBmb3JtYXR0ZWRMaW5lRW5kaW5ncyB8fCBbXTsKLSAgICB0aGlzLl9vcmlnaW5h
bE9mZnNldCA9IG9yaWdpbmFsT2Zmc2V0IHx8IDA7Ci0gICAgdGhpcy5fZm9ybWF0dGVkT2Zmc2V0
ID0gZm9ybWF0dGVkT2Zmc2V0IHx8IDA7CisgICAgICAgIHRoaXMuX2luZGVudCA9IDA7CisgICAg
ICAgIHRoaXMuX2luZGVudFN0cmluZyA9IGluZGVudFN0cmluZzsKKyAgICAgICAgdGhpcy5faW5k
ZW50Q2FjaGUgPSBbIiIsIHRoaXMuX2luZGVudFN0cmluZ107CiAKLSAgICB0aGlzLl9sYXN0T3Jp
Z2luYWxQb3NpdGlvbiA9IDA7Ci0gICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gMDsK
LX0KKyAgICAgICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7CisgICAgICAgIHRoaXMuX29yaWdp
bmFsTGluZUVuZGluZ3MgPSBvcmlnaW5hbExpbmVFbmRpbmdzIHx8IFtdOworICAgICAgICB0aGlz
Ll9mb3JtYXR0ZWRMaW5lRW5kaW5ncyA9IGZvcm1hdHRlZExpbmVFbmRpbmdzIHx8IFtdOworICAg
ICAgICB0aGlzLl9vcmlnaW5hbE9mZnNldCA9IG9yaWdpbmFsT2Zmc2V0IHx8IDA7CisgICAgICAg
IHRoaXMuX2Zvcm1hdHRlZE9mZnNldCA9IGZvcm1hdHRlZE9mZnNldCB8fCAwOwogCi1Gb3JtYXR0
ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IEZvcm1hdHRl
ckNvbnRlbnRCdWlsZGVyLAorICAgICAgICB0aGlzLl9sYXN0T3JpZ2luYWxQb3NpdGlvbiA9IDA7
CisgICAgICAgIHRoaXMuX2xhc3RGb3JtYXR0ZWRQb3NpdGlvbiA9IDA7CisgICAgfQogCiAgICAg
Ly8gUHVibGljCiAKICAgICBnZXQgb3JpZ2luYWxDb250ZW50KCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9vcmlnaW5hbENvbnRlbnQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgZm9y
bWF0dGVkQ29udGVudCgpCiAgICAgewogICAgICAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5fZm9y
bWF0dGVkQ29udGVudC5qb2luKCIiKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoZm9ybWF0dGVk
Lmxlbmd0aCA9PT0gdGhpcy5fZm9ybWF0dGVkQ29udGVudExlbmd0aCk7CiAgICAgICAgIHJldHVy
biBmb3JtYXR0ZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgbWFwcGluZygpCiAgICAgewog
ICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZzsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBv
cmlnaW5hbExpbmVFbmRpbmdzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9vcmlnaW5h
bExpbmVFbmRpbmdzOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGZvcm1hdHRlZExpbmVFbmRp
bmdzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5nczsK
LSAgICB9LAorICAgIH0KIAotICAgIHNldE9yaWdpbmFsQ29udGVudDogZnVuY3Rpb24ob3JpZ2lu
YWxDb250ZW50KQorICAgIHNldE9yaWdpbmFsQ29udGVudChvcmlnaW5hbENvbnRlbnQpCiAgICAg
ewogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5fb3JpZ2luYWxDb250ZW50KTsKICAgICAg
ICAgdGhpcy5fb3JpZ2luYWxDb250ZW50ID0gb3JpZ2luYWxDb250ZW50OwotICAgIH0sCisgICAg
fQogCi0gICAgYXBwZW5kVG9rZW46IGZ1bmN0aW9uKHN0cmluZywgb3JpZ2luYWxQb3NpdGlvbikK
KyAgICBhcHBlbmRUb2tlbihzdHJpbmcsIG9yaWdpbmFsUG9zaXRpb24pCiAgICAgewogICAgICAg
ICBpZiAodGhpcy5fc3RhcnRPZkxpbmUpCiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRJbmRlbnQo
KTsKQEAgLTk3LDE4ICs5NiwxOCBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX3N0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgICAgIHRoaXMubGFz
dFRva2VuV2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICB0aGlzLmxhc3RUb2tlbldhc1doaXRl
c3BhY2UgPSBmYWxzZTsKLSAgICB9LAorICAgIH0KIAotICAgIGFwcGVuZFNwYWNlOiBmdW5jdGlv
bigpCisgICAgYXBwZW5kU3BhY2UoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9zdGFydE9m
TGluZSkgewogICAgICAgICAgICAgdGhpcy5fYXBwZW5kKCIgIik7CiAgICAgICAgICAgICB0aGlz
Lmxhc3RUb2tlbldhc05ld2xpbmUgPSBmYWxzZTsKICAgICAgICAgICAgIHRoaXMubGFzdFRva2Vu
V2FzV2hpdGVzcGFjZSA9IHRydWU7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAotICAgIGFw
cGVuZE5ld2xpbmU6IGZ1bmN0aW9uKGZvcmNlKQorICAgIGFwcGVuZE5ld2xpbmUoZm9yY2UpCiAg
ICAgewogICAgICAgICBpZiAoKCF0aGlzLmxhc3RUb2tlbldhc05ld2xpbmUgJiYgIXRoaXMuX3N0
YXJ0T2ZMaW5lKSB8fCBmb3JjZSkgewogICAgICAgICAgICAgdGhpcy5fYXBwZW5kKCJcbiIpOwpA
QCAtMTE4LDkgKzExNyw5IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHRoaXMubGFzdFRva2VuV2FzV2hpdGVzcGFjZSA9IGZhbHNlOwogICAgICAg
ICAgICAgdGhpcy5sYXN0TmV3bGluZUFwcGVuZFdhc011bHRpcGxlID0gZmFsc2U7CiAgICAgICAg
IH0KLSAgICB9LAorICAgIH0KIAotICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXM6IGZ1bmN0aW9u
KG5ld2xpbmVzKQorICAgIGFwcGVuZE11bHRpcGxlTmV3bGluZXMobmV3bGluZXMpCiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydChuZXdsaW5lcyA+IDApOwogCkBAIC0xMzEsOSArMTMwLDkg
QEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh3
YXNNdWx0aXBsZSkKICAgICAgICAgICAgIHRoaXMubGFzdE5ld2xpbmVBcHBlbmRXYXNNdWx0aXBs
ZSA9IHRydWU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZW1vdmVMYXN0TmV3bGluZTogZnVuY3Rp
b24oKQorICAgIHJlbW92ZUxhc3ROZXdsaW5lKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRo
aXMuX2Zvcm1hdHRlZENvbnRlbnQubGFzdFZhbHVlID09PSAiXG4iKTsKQEAgLTE0Myw0OCArMTQy
LDQ4IEBAIEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IHRoaXMubGFzdFRva2VuV2FzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5sYXN0
VG9rZW5XYXNXaGl0ZXNwYWNlID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAot
ICAgIGluZGVudDogZnVuY3Rpb24oKQorICAgIGluZGVudCgpCiAgICAgewogICAgICAgICArK3Ro
aXMuX2luZGVudDsKLSAgICB9LAorICAgIH0KIAotICAgIGRlZGVudDogZnVuY3Rpb24oKQorICAg
IGRlZGVudCgpCiAgICAgewogICAgICAgICAtLXRoaXMuX2luZGVudDsKIAogICAgICAgICBjb25z
b2xlLmFzc2VydCh0aGlzLl9pbmRlbnQgPj0gMCk7CiAgICAgICAgIGlmICh0aGlzLl9pbmRlbnQg
PCAwKQogICAgICAgICAgICAgdGhpcy5faW5kZW50ID0gMDsKLSAgICB9LAorICAgIH0KIAotICAg
IGFkZE9yaWdpbmFsTGluZUVuZGluZzogZnVuY3Rpb24ob3JpZ2luYWxQb3NpdGlvbikKKyAgICBh
ZGRPcmlnaW5hbExpbmVFbmRpbmcob3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIHRo
aXMuX29yaWdpbmFsTGluZUVuZGluZ3MucHVzaChvcmlnaW5hbFBvc2l0aW9uKTsKLSAgICB9LAor
ICAgIH0KIAotICAgIGZpbmlzaDogZnVuY3Rpb24oKQorICAgIGZpbmlzaCgpCiAgICAgewogICAg
ICAgICB0aGlzLmFwcGVuZE5ld2xpbmUoKTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZh
dGUKIAotICAgIF9wb3BOZXdMaW5lOiBmdW5jdGlvbigpCisgICAgX3BvcE5ld0xpbmUoKQogICAg
IHsKICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LnBvcCgpOwog
ICAgICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVuZ3RoIC09IHJlbW92ZWQubGVuZ3RoOwog
ICAgICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wb3AoKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9hcHBlbmQ6IGZ1bmN0aW9uKHN0cikKKyAgICBfYXBwZW5kKHN0cikKICAgICB7CiAg
ICAgICAgIHRoaXMuX2Zvcm1hdHRlZENvbnRlbnQucHVzaChzdHIpOwogICAgICAgICB0aGlzLl9m
b3JtYXR0ZWRDb250ZW50TGVuZ3RoICs9IHN0ci5sZW5ndGg7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfYXBwZW5kSW5kZW50OiBmdW5jdGlvbigpCisgICAgX2FwcGVuZEluZGVudCgpCiAgICAgewog
ICAgICAgICAvLyBJbmRlbnQgaXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUuCiAgICAgICAgIGlmICh0
aGlzLl9pbmRlbnQgPCB0aGlzLl9pbmRlbnRDYWNoZS5sZW5ndGgpIHsKQEAgLTE5Myw3ICsxOTIs
NyBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBJbmRlbnQgd2FzIG5vdCBpbiB0aGUgY2FjaGUsIGZpbGwgdXAgdGhlIGNhY2hl
IHVwIHdpdGggd2hhdCB3YXMgbmVlZGVkLgotICAgICAgICBjb25zdCBtYXhDYWNoZUluZGVudCA9
IDIwOworICAgICAgICB2YXIgbWF4Q2FjaGVJbmRlbnQgPSAyMDsKICAgICAgICAgdmFyIG1heCA9
IE1hdGgubWluKHRoaXMuX2luZGVudCwgbWF4Q2FjaGVJbmRlbnQpOwogICAgICAgICBmb3IgKHZh
ciBpID0gdGhpcy5faW5kZW50Q2FjaGUubGVuZ3RoOyBpIDw9IG1heDsgKytpKQogICAgICAgICAg
ICAgdGhpcy5faW5kZW50Q2FjaGVbaV0gPSB0aGlzLl9pbmRlbnRDYWNoZVtpIC0gMV0gKyB0aGlz
Ll9pbmRlbnRTdHJpbmc7CkBAIC0yMDcsOSArMjA2LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxk
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZCh0aGlzLl9pbmRl
bnRDYWNoZVtpbmRlbnRdKTsKICAgICAgICAgICAgIGluZGVudCAtPSBtYXhDYWNoZUluZGVudDsK
ICAgICAgICAgfSB3aGlsZSAoaW5kZW50ID4gMCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYWRk
TWFwcGluZ0lmTmVlZGVkOiBmdW5jdGlvbihvcmlnaW5hbFBvc2l0aW9uKQorICAgIF9hZGRNYXBw
aW5nSWZOZWVkZWQob3JpZ2luYWxQb3NpdGlvbikKICAgICB7CiAgICAgICAgIGlmIChvcmlnaW5h
bFBvc2l0aW9uIC0gdGhpcy5fbGFzdE9yaWdpbmFsUG9zaXRpb24gPT09IHRoaXMuX2Zvcm1hdHRl
ZENvbnRlbnRMZW5ndGggLSB0aGlzLl9sYXN0Rm9ybWF0dGVkUG9zaXRpb24pCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0yMTksOSArMjE4LDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIucHJv
dG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID0gb3JpZ2lu
YWxQb3NpdGlvbjsKICAgICAgICAgdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5f
Zm9ybWF0dGVkQ29udGVudExlbmd0aDsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRGb3JtYXR0
ZWRMaW5lRW5kaW5nOiBmdW5jdGlvbigpCisgICAgX2FkZEZvcm1hdHRlZExpbmVFbmRpbmcoKQog
ICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fZm9ybWF0dGVkQ29udGVudC5sYXN0
VmFsdWUgPT09ICJcbiIpOwogICAgICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wdXNo
KHRoaXMuX2Zvcm1hdHRlZENvbnRlbnRMZW5ndGggLSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlclNvdXJjZU1h
cC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zv
cm1hdHRlclNvdXJjZU1hcC5qcwppbmRleCBhODBmNmNhN2QzZmRjM2ZjMzMxMGNlNzg0NWZjNDAz
ODM3OTExYTVkLi45MzRlMDQ2MzNkZjBiMWRhNDI3MmFiY2M3YTAwNTMxM2QzYTkyZTk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9G
b3JtYXR0ZXJTb3VyY2VNYXAuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCkBAIC0yMyw2MSArMjMsNjEg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0
b3IuRm9ybWF0dGVyU291cmNlTWFwID0gZnVuY3Rpb24ob3JpZ2luYWxMaW5lRW5kaW5ncywgZm9y
bWF0dGVkTGluZUVuZGluZ3MsIG1hcHBpbmcpCitXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNl
TWFwID0gY2xhc3MgRm9ybWF0dGVyU291cmNlTWFwIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVj
dAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0
IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3Qu
Y2FsbCh0aGlzKTsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0
ZWRMaW5lRW5kaW5ncywgbWFwcGluZykKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0
aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzID0gb3JpZ2luYWxMaW5lRW5kaW5nczsKLSAgICB0aGlz
Ll9mb3JtYXR0ZWRMaW5lRW5kaW5ncyA9IGZvcm1hdHRlZExpbmVFbmRpbmdzOwotICAgIHRoaXMu
X21hcHBpbmcgPSBtYXBwaW5nOwotfTsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5n
cyA9IG9yaWdpbmFsTGluZUVuZGluZ3M7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRp
bmdzID0gZm9ybWF0dGVkTGluZUVuZGluZ3M7CisgICAgICAgIHRoaXMuX21hcHBpbmcgPSBtYXBw
aW5nOworICAgIH0KIAotV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5mcm9tQnVpbGRl
ciA9IGZ1bmN0aW9uKGJ1aWxkZXIpCi17Ci0gICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuRm9y
bWF0dGVyU291cmNlTWFwKGJ1aWxkZXIub3JpZ2luYWxMaW5lRW5kaW5ncywgYnVpbGRlci5mb3Jt
YXR0ZWRMaW5lRW5kaW5ncywgYnVpbGRlci5tYXBwaW5nKTsKLX07CisgICAgLy8gU3RhdGljCiAK
LVdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXBlID0gewotICAgIGNvbnN0
cnVjdG9yOiBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwLAorICAgIHN0YXRpYyBmcm9t
QnVpbGRlcihidWlsZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3Iu
Rm9ybWF0dGVyU291cmNlTWFwKGJ1aWxkZXIub3JpZ2luYWxMaW5lRW5kaW5ncywgYnVpbGRlci5m
b3JtYXR0ZWRMaW5lRW5kaW5ncywgYnVpbGRlci5tYXBwaW5nKTsKKyAgICB9CiAKICAgICAvLyBQ
dWJsaWMKIAotICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikKKyAgICBvcmlnaW5hbFRvRm9ybWF0dGVkKGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlcikKICAgICB7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fbG9jYXRp
b25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwg
Y29sdW1uTnVtYmVyIHx8IDApOwogICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFBvc2l0aW9u
VG9Gb3JtYXR0ZWQob3JpZ2luYWxQb3NpdGlvbik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBvcmln
aW5hbFBvc2l0aW9uVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRpb24pCisgICAg
b3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkKG9yaWdpbmFsUG9zaXRpb24pCiAgICAgewogICAg
ICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5f
bWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIG9yaWdpbmFsUG9zaXRp
b24pOwogICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX2Zvcm1h
dHRlZExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7Ci0gICAgfSwKKyAgICB9CiAKIAot
ICAgIGZvcm1hdHRlZFRvT3JpZ2luYWw6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
cikKKyAgICBmb3JtYXR0ZWRUb09yaWdpbmFsKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAg
ICB7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtYXR0ZWRUb09yaWdp
bmFsT2Zmc2V0KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQ
b3NpdGlvbik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBmb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgZm9ybWF0dGVkVG9Pcmln
aW5hbE9mZnNldChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICB2YXIg
Zm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fZm9ybWF0
dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIgfHwgMCwgY29sdW1uTnVtYmVyIHx8IDApOwogICAg
ICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9t
YXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgZm9ybWF0dGVkUG9zaXRp
b24pOwogICAgICAgICByZXR1cm4gb3JpZ2luYWxQb3NpdGlvbjsKLSAgICB9LAorICAgIH0KIAog
ICAgIC8vIFByaXZhdGUKIAotICAgIF9sb2NhdGlvblRvUG9zaXRpb246IGZ1bmN0aW9uKGxpbmVF
bmRpbmdzLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgX2xvY2F0aW9uVG9Qb3NpdGlv
bihsaW5lRW5kaW5ncywgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAg
dmFyIGxpbmVPZmZzZXQgPSBsaW5lTnVtYmVyID8gbGluZUVuZGluZ3NbbGluZU51bWJlciAtIDFd
ICsgMSA6IDA7CiAgICAgICAgIHJldHVybiBsaW5lT2Zmc2V0ICsgY29sdW1uTnVtYmVyOwotICAg
IH0sCisgICAgfQogCi0gICAgX3Bvc2l0aW9uVG9Mb2NhdGlvbjogZnVuY3Rpb24obGluZUVuZGlu
Z3MsIHBvc2l0aW9uKQorICAgIF9wb3NpdGlvblRvTG9jYXRpb24obGluZUVuZGluZ3MsIHBvc2l0
aW9uKQogICAgIHsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lRW5kaW5ncy51cHBlckJv
dW5kKHBvc2l0aW9uIC0gMSk7CiAgICAgICAgIGlmICghbGluZU51bWJlcikKQEAgLTg1LDkgKzg1
LDkgQEAgV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBwb3NpdGlvbiAtIGxpbmVF
bmRpbmdzW2xpbmVOdW1iZXIgLSAxXSAtIDE7CiAgICAgICAgIHJldHVybiB7bGluZU51bWJlciwg
Y29sdW1uTnVtYmVyfTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jb252ZXJ0UG9zaXRpb246IGZ1
bmN0aW9uKHBvc2l0aW9uczEsIHBvc2l0aW9uczIsIHBvc2l0aW9uSW5Qb3NpdGlvbjEpCisgICAg
X2NvbnZlcnRQb3NpdGlvbihwb3NpdGlvbnMxLCBwb3NpdGlvbnMyLCBwb3NpdGlvbkluUG9zaXRp
b24xKQogICAgIHsKICAgICAgICAgdmFyIGluZGV4ID0gcG9zaXRpb25zMS51cHBlckJvdW5kKHBv
c2l0aW9uSW5Qb3NpdGlvbjEpIC0gMTsKICAgICAgICAgdmFyIGNvbnZlcnRlZFBvc2l0aW9uID0g
cG9zaXRpb25zMltpbmRleF0gKyBwb3NpdGlvbkluUG9zaXRpb24xIC0gcG9zaXRpb25zMVtpbmRl
eF07CkBAIC05Niw1ICs5NiwzIEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJv
dG90eXBlID0gewogICAgICAgICByZXR1cm4gY29udmVydGVkUG9zaXRpb247CiAgICAgfQogfTsK
LQotV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuT2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvRnJhbWVSZXNvdXJjZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9GcmFtZVJlc291cmNlTWFuYWdlci5qcwpp
bmRleCA5MTFiNTRiZTg3Y2JjYjA5MDI3ZDAyNzlhZmFhNzQyZmJjZWVkMDVhLi42NjQyODVjN2Q3
NzYyMGI0NzkyNGMzOGI0YTYwMzViODQ1MGU5ZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9GcmFtZVJlc291cmNlTWFuYWdlci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9G
cmFtZVJlc291cmNlTWFuYWdlci5qcwpAQCAtMjMsMzYgKzIzLDI1IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VN
YW5hZ2VyID0gZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyID0g
Y2xhc3MgRnJhbWVSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7
Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3Vi
Y2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxs
KHRoaXMpOwotCi0gICAgaWYgKHdpbmRvdy5QYWdlQWdlbnQpCi0gICAgICAgIFBhZ2VBZ2VudC5l
bmFibGUoKTsKLSAgICBpZiAod2luZG93Lk5ldHdvcmtBZ2VudCkKLSAgICAgICAgTmV0d29ya0Fn
ZW50LmVuYWJsZSgpOwotCi0gICAgV2ViSW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwg
dGhpcy5fZXh0cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzKTsKLQotICAgIHRoaXMuaW5pdGlhbGl6
ZSgpOwotfTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0v
LyBGSVhNRTogTW92ZSB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MgYW5kIHdlIGNh
biByZW1vdmUgdGhpcy4KLVdlYkluc3BlY3Rvci5PYmplY3QuZGVwcmVjYXRlZEFkZENvbnN0cnVj
dG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlcik7CisgICAgICAg
IGlmICh3aW5kb3cuUGFnZUFnZW50KQorICAgICAgICAgICAgUGFnZUFnZW50LmVuYWJsZSgpOwor
ICAgICAgICBpZiAod2luZG93Lk5ldHdvcmtBZ2VudCkKKyAgICAgICAgICAgIE5ldHdvcmtBZ2Vu
dC5lbmFibGUoKTsKIAotV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLkV2ZW50ID0g
ewotICAgIEZyYW1lV2FzQWRkZWQ6ICJmcmFtZS1yZXNvdXJjZS1tYW5hZ2VyLWZyYW1lLXdhcy1h
ZGRlZCIsCi0gICAgRnJhbWVXYXNSZW1vdmVkOiAiZnJhbWUtcmVzb3VyY2UtbWFuYWdlci1mcmFt
ZS13YXMtcmVtb3ZlZCIsCi0gICAgTWFpbkZyYW1lRGlkQ2hhbmdlOiAiZnJhbWUtcmVzb3VyY2Ut
bWFuYWdlci1tYWluLWZyYW1lLWRpZC1jaGFuZ2UiCi19OworICAgICAgICBXZWJJbnNwZWN0b3Iu
bm90aWZpY2F0aW9ucy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3RpZmljYXRpb24u
RXh0cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzLl9leHRyYURvbWFpbnNBY3RpdmF0ZWQsIHRoaXMp
OwogCi1XZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewotICAg
IGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIsCisgICAgICAg
IHRoaXMuaW5pdGlhbGl6ZSgpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24oKQorICAgIGluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgdmFyIG9s
ZE1haW5GcmFtZSA9IHRoaXMuX21haW5GcmFtZTsKIApAQCAtNjYsMTIgKzU1LDEyIEBAIFdlYklu
c3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMu
X3dhaXRpbmdGb3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkID0gdHJ1ZTsKICAgICAgICAg
aWYgKHdpbmRvdy5QYWdlQWdlbnQpCiAgICAgICAgICAgICBQYWdlQWdlbnQuZ2V0UmVzb3VyY2VU
cmVlKHRoaXMuX3Byb2Nlc3NNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2FkLmJpbmQodGhpcykp
OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IG1haW5GcmFtZSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gdGhpcy5fbWFpbkZyYW1lOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGZyYW1lcygp
CiAgICAgewpAQCAtODAsMTQgKzY5LDE0IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBmcmFtZXMucHVzaCh0aGlzLl9mcmFtZUlk
ZW50aWZpZXJNYXBba2V5XSk7CiAKICAgICAgICAgcmV0dXJuIGZyYW1lczsKLSAgICB9LAorICAg
IH0KIAotICAgIGZyYW1lRm9ySWRlbnRpZmllcjogZnVuY3Rpb24oZnJhbWVJZCkKKyAgICBmcmFt
ZUZvcklkZW50aWZpZXIoZnJhbWVJZCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9mcmFt
ZUlkZW50aWZpZXJNYXBbZnJhbWVJZF0gfHwgbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIGZy
YW1lRGlkTmF2aWdhdGU6IGZ1bmN0aW9uKGZyYW1lUGF5bG9hZCkKKyAgICBmcmFtZURpZE5hdmln
YXRlKGZyYW1lUGF5bG9hZCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3Bl
Y3Rvci5QYWdlT2JzZXJ2ZXIuCiAKQEAgLTE0OCw5ICsxMzcsOSBAQCBXZWJJbnNwZWN0b3IuRnJh
bWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChmcmFtZVdhc0xv
YWRlZEluc3RhbnRseSkKICAgICAgICAgICAgIGZyYW1lLm1haW5SZXNvdXJjZS5tYXJrQXNGaW5p
c2hlZCgpOwotICAgIH0sCisgICAgfQogCi0gICAgZnJhbWVEaWREZXRhY2g6IGZ1bmN0aW9uKGZy
YW1lSWQpCisgICAgZnJhbWVEaWREZXRhY2goZnJhbWVJZCkKICAgICB7CiAgICAgICAgIC8vIENh
bGxlZCBmcm9tIFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIuCiAKQEAgLTE3OCw5ICsxNjcsOSBA
QCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAg
ICAgIGlmICh0aGlzLl9tYWluRnJhbWUgIT09IG9sZE1haW5GcmFtZSkKICAgICAgICAgICAgIHRo
aXMuX21haW5GcmFtZURpZENoYW5nZShvbGRNYWluRnJhbWUpOwotICAgIH0sCisgICAgfQogCi0g
ICAgcmVzb3VyY2VSZXF1ZXN0V2lsbEJlU2VudDogZnVuY3Rpb24ocmVxdWVzdElkZW50aWZpZXIs
IGZyYW1lSWRlbnRpZmllciwgbG9hZGVySWRlbnRpZmllciwgcmVxdWVzdCwgdHlwZSwgcmVkaXJl
Y3RSZXNwb25zZSwgdGltZXN0YW1wLCBpbml0aWF0b3IpCisgICAgcmVzb3VyY2VSZXF1ZXN0V2ls
bEJlU2VudChyZXF1ZXN0SWRlbnRpZmllciwgZnJhbWVJZGVudGlmaWVyLCBsb2FkZXJJZGVudGlm
aWVyLCByZXF1ZXN0LCB0eXBlLCByZWRpcmVjdFJlc3BvbnNlLCB0aW1lc3RhbXAsIGluaXRpYXRv
cikKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5OZXR3b3JrT2Jz
ZXJ2ZXIuCiAKQEAgLTIwNCw5ICsxOTMsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1h
bmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgcmVzb3VyY2Ug
d2l0aCB0aGUgcmVxdWVzdElkZW50aWZpZXIgc28gaXQgY2FuIGJlIGZvdW5kIGluIGZ1dHVyZSBs
b2FkaW5nIGV2ZW50cy4KICAgICAgICAgdGhpcy5fcmVzb3VyY2VSZXF1ZXN0SWRlbnRpZmllck1h
cFtyZXF1ZXN0SWRlbnRpZmllcl0gPSByZXNvdXJjZTsKLSAgICB9LAorICAgIH0KIAotICAgIG1h
cmtSZXNvdXJjZVJlcXVlc3RBc1NlcnZlZEZyb21NZW1vcnlDYWNoZTogZnVuY3Rpb24ocmVxdWVz
dElkZW50aWZpZXIpCisgICAgbWFya1Jlc291cmNlUmVxdWVzdEFzU2VydmVkRnJvbU1lbW9yeUNh
Y2hlKHJlcXVlc3RJZGVudGlmaWVyKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2Vi
SW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci4KIApAQCAtMjIzLDkgKzIxMiw5IEBAIFdlYkluc3Bl
Y3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgcmVzb3VyY2UubWFya0FzQ2FjaGVkKCk7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICByZXNvdXJjZVJlcXVlc3RXYXNTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGU6IGZ1bmN0aW9uKHJl
cXVlc3RJZGVudGlmaWVyLCBmcmFtZUlkZW50aWZpZXIsIGxvYWRlcklkZW50aWZpZXIsIGNhY2hl
ZFJlc291cmNlUGF5bG9hZCwgdGltZXN0YW1wLCBpbml0aWF0b3IpCisgICAgcmVzb3VyY2VSZXF1
ZXN0V2FzU2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZGVudGlmaWVyLCBmcmFtZUlkZW50
aWZpZXIsIGxvYWRlcklkZW50aWZpZXIsIGNhY2hlZFJlc291cmNlUGF5bG9hZCwgdGltZXN0YW1w
LCBpbml0aWF0b3IpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3Iu
TmV0d29ya09ic2VydmVyLgogCkBAIC0yNDgsOSArMjM3LDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1l
UmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBObyBuZWVkIHRvIGFz
c29jaWF0ZSB0aGUgcmVzb3VyY2Ugd2l0aCB0aGUgcmVxdWVzdElkZW50aWZpZXIsIHNpbmNlIHRo
aXMgaXMgdGhlIG9ubHkgZXZlbnQKICAgICAgICAgLy8gc2VudCBmb3IgbWVtb3J5IGNhY2hlIHJl
c291cmNlIGxvYWRzLgotICAgIH0sCisgICAgfQogCi0gICAgcmVzb3VyY2VSZXF1ZXN0RGlkUmVj
ZWl2ZVJlc3BvbnNlOiBmdW5jdGlvbihyZXF1ZXN0SWRlbnRpZmllciwgZnJhbWVJZGVudGlmaWVy
LCBsb2FkZXJJZGVudGlmaWVyLCB0eXBlLCByZXNwb25zZSwgdGltZXN0YW1wKQorICAgIHJlc291
cmNlUmVxdWVzdERpZFJlY2VpdmVSZXNwb25zZShyZXF1ZXN0SWRlbnRpZmllciwgZnJhbWVJZGVu
dGlmaWVyLCBsb2FkZXJJZGVudGlmaWVyLCB0eXBlLCByZXNwb25zZSwgdGltZXN0YW1wKQogICAg
IHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlci4K
IApAQCAtMjkxLDkgKzI4MCw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXNvdXJjZS5tYXJrQXNDYWNoZWQoKTsKIAogICAg
ICAgICByZXNvdXJjZS51cGRhdGVGb3JSZXNwb25zZShyZXNwb25zZS51cmwsIHJlc3BvbnNlLm1p
bWVUeXBlLCB0eXBlLCByZXNwb25zZS5oZWFkZXJzLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNl
LnN0YXR1c1RleHQsIGVsYXBzZWRUaW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIHJlc291cmNl
UmVxdWVzdERpZFJlY2VpdmVEYXRhOiBmdW5jdGlvbihyZXF1ZXN0SWRlbnRpZmllciwgZGF0YUxl
bmd0aCwgZW5jb2RlZERhdGFMZW5ndGgsIHRpbWVzdGFtcCkKKyAgICByZXNvdXJjZVJlcXVlc3RE
aWRSZWNlaXZlRGF0YShyZXF1ZXN0SWRlbnRpZmllciwgZGF0YUxlbmd0aCwgZW5jb2RlZERhdGFM
ZW5ndGgsIHRpbWVzdGFtcCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3Bl
Y3Rvci5OZXR3b3JrT2JzZXJ2ZXIuCiAKQEAgLTMxNCw5ICszMDMsOSBAQCBXZWJJbnNwZWN0b3Iu
RnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChlbmNvZGVk
RGF0YUxlbmd0aCAhPT0gLTEpCiAgICAgICAgICAgICByZXNvdXJjZS5pbmNyZWFzZVRyYW5zZmVy
U2l6ZShlbmNvZGVkRGF0YUxlbmd0aCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZXNvdXJjZVJl
cXVlc3REaWRGaW5pc2hMb2FkaW5nOiBmdW5jdGlvbihyZXF1ZXN0SWRlbnRpZmllciwgdGltZXN0
YW1wLCBzb3VyY2VNYXBVUkwpCisgICAgcmVzb3VyY2VSZXF1ZXN0RGlkRmluaXNoTG9hZGluZyhy
ZXF1ZXN0SWRlbnRpZmllciwgdGltZXN0YW1wLCBzb3VyY2VNYXBVUkwpCiAgICAgewogICAgICAg
ICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuTmV0d29ya09ic2VydmVyLgogCkBAIC0zMzgs
OSArMzI3LDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zb3VyY2VNYXBNYW5hZ2VyLmRvd25sb2FkU291
cmNlTWFwKHNvdXJjZU1hcFVSTCwgcmVzb3VyY2UudXJsLCByZXNvdXJjZSk7CiAKICAgICAgICAg
ZGVsZXRlIHRoaXMuX3Jlc291cmNlUmVxdWVzdElkZW50aWZpZXJNYXBbcmVxdWVzdElkZW50aWZp
ZXJdOwotICAgIH0sCisgICAgfQogCi0gICAgcmVzb3VyY2VSZXF1ZXN0RGlkRmFpbExvYWRpbmc6
IGZ1bmN0aW9uKHJlcXVlc3RJZGVudGlmaWVyLCBjYW5jZWxlZCwgdGltZXN0YW1wKQorICAgIHJl
c291cmNlUmVxdWVzdERpZEZhaWxMb2FkaW5nKHJlcXVlc3RJZGVudGlmaWVyLCBjYW5jZWxlZCwg
dGltZXN0YW1wKQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLk5l
dHdvcmtPYnNlcnZlci4KIApAQCAtMzYyLDkgKzM1MSw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJl
c291cmNlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXNvdXJjZS5wYXJlbnRG
cmFtZS5jbGVhclByb3Zpc2lvbmFsTG9hZCgpOwogCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXNv
dXJjZVJlcXVlc3RJZGVudGlmaWVyTWFwW3JlcXVlc3RJZGVudGlmaWVyXTsKLSAgICB9LAorICAg
IH0KIAotICAgIGV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkOiBmdW5jdGlvbihjb250ZXh0UGF5bG9h
ZCkKKyAgICBleGVjdXRpb25Db250ZXh0Q3JlYXRlZChjb250ZXh0UGF5bG9hZCkKICAgICB7CiAg
ICAgICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5SdW50aW1lT2JzZXJ2ZXIuCiAKQEAg
LTM3Niw5ICszNjUsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBjb250ZXh0UGF5bG9hZC5uYW1lIHx8
IGZyYW1lLm1haW5SZXNvdXJjZS5kaXNwbGF5TmFtZTsKICAgICAgICAgdmFyIGV4ZWN1dGlvbkNv
bnRleHQgPSBuZXcgV2ViSW5zcGVjdG9yLkV4ZWN1dGlvbkNvbnRleHQoY29udGV4dFBheWxvYWQu
aWQsIGRpc3BsYXlOYW1lLCBjb250ZXh0UGF5bG9hZC5pc1BhZ2VDb250ZXh0LCBmcmFtZSk7CiAg
ICAgICAgIGZyYW1lLmFkZEV4ZWN1dGlvbkNvbnRleHQoZXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
fSwKKyAgICB9CiAKLSAgICByZXNvdXJjZUZvclVSTDogZnVuY3Rpb24odXJsKQorICAgIHJlc291
cmNlRm9yVVJMKHVybCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fbWFpbkZyYW1lKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0zODcsMTEgKzM3NiwxMSBAQCBXZWJJbnNwZWN0b3Iu
RnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX21haW5GcmFtZS5tYWluUmVzb3VyY2U7CiAKICAgICAgICAgcmV0dXJuIHRoaXMuX21haW5G
cmFtZS5yZXNvdXJjZUZvclVSTCh1cmwsIHRydWUpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8g
UHJpdmF0ZQogCi0gICAgX2FkZE5ld1Jlc291cmNlVG9GcmFtZTogZnVuY3Rpb24ocmVxdWVzdElk
ZW50aWZpZXIsIGZyYW1lSWRlbnRpZmllciwgbG9hZGVySWRlbnRpZmllciwgdXJsLCB0eXBlLCBy
ZXF1ZXN0TWV0aG9kLCByZXF1ZXN0SGVhZGVycywgcmVxdWVzdERhdGEsIGVsYXBzZWRUaW1lLCBm
cmFtZU5hbWUsIGZyYW1lU2VjdXJpdHlPcmlnaW4sIGluaXRpYXRvclNvdXJjZUNvZGVMb2NhdGlv
bikKKyAgICBfYWRkTmV3UmVzb3VyY2VUb0ZyYW1lKHJlcXVlc3RJZGVudGlmaWVyLCBmcmFtZUlk
ZW50aWZpZXIsIGxvYWRlcklkZW50aWZpZXIsIHVybCwgdHlwZSwgcmVxdWVzdE1ldGhvZCwgcmVx
dWVzdEhlYWRlcnMsIHJlcXVlc3REYXRhLCBlbGFwc2VkVGltZSwgZnJhbWVOYW1lLCBmcmFtZVNl
Y3VyaXR5T3JpZ2luLCBpbml0aWF0b3JTb3VyY2VDb2RlTG9jYXRpb24pCiAgICAgewogICAgICAg
ICBjb25zb2xlLmFzc2VydCghdGhpcy5fd2FpdGluZ0Zvck1haW5GcmFtZVJlc291cmNlVHJlZVBh
eWxvYWQpOwogCkBAIC00MjcsOSArNDE2LDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgY29uc29sZS5hc3NlcnQocmVzb3VyY2UpOwog
CiAgICAgICAgIHJldHVybiByZXNvdXJjZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRSZXNv
dXJjZVRvRnJhbWU6IGZ1bmN0aW9uKGZyYW1lLCByZXNvdXJjZSkKKyAgICBfYWRkUmVzb3VyY2VU
b0ZyYW1lKGZyYW1lLCByZXNvdXJjZSkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0
aGlzLl93YWl0aW5nRm9yTWFpbkZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCk7CiAgICAgICAgIGlm
ICh0aGlzLl93YWl0aW5nRm9yTWFpbkZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZCkKQEAgLTQ0OCw5
ICs0MzcsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYW5vdGhlciByZXNvdXJjZSwgZWl0aGVyIGZvciB0
aGUgbWFpbiBsb2FkZXIgb3IgdGhlIHByb3Zpc2lvbmFsIGxvYWRlci4KICAgICAgICAgY29uc29s
ZS5hc3NlcnQocmVzb3VyY2UubG9hZGVySWRlbnRpZmllciA9PT0gZnJhbWUubG9hZGVySWRlbnRp
ZmllciB8fCByZXNvdXJjZS5sb2FkZXJJZGVudGlmaWVyID09PSBmcmFtZS5wcm92aXNpb25hbExv
YWRlcklkZW50aWZpZXIpOwogICAgICAgICBmcmFtZS5hZGRSZXNvdXJjZShyZXNvdXJjZSk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfaW5pdGlhdG9yU291cmNlQ29kZUxvY2F0aW9uRnJvbVBheWxv
YWQ6IGZ1bmN0aW9uKGluaXRpYXRvclBheWxvYWQpCisgICAgX2luaXRpYXRvclNvdXJjZUNvZGVM
b2NhdGlvbkZyb21QYXlsb2FkKGluaXRpYXRvclBheWxvYWQpCiAgICAgewogICAgICAgICBpZiAo
IWluaXRpYXRvclBheWxvYWQpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTQ5Myw5ICs0
ODIsOSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgcmV0dXJuIHNvdXJjZUNvZGUuY3Jl
YXRlU291cmNlQ29kZUxvY2F0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfcHJvY2Vzc01haW5GcmFtZVJlc291cmNlVHJlZVBheWxvYWQ6IGZ1bmN0
aW9uKGVycm9yLCBtYWluRnJhbWVQYXlsb2FkKQorICAgIF9wcm9jZXNzTWFpbkZyYW1lUmVzb3Vy
Y2VUcmVlUGF5bG9hZChlcnJvciwgbWFpbkZyYW1lUGF5bG9hZCkKICAgICB7CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHRoaXMuX3dhaXRpbmdGb3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2Fk
KTsKICAgICAgICAgZGVsZXRlIHRoaXMuX3dhaXRpbmdGb3JNYWluRnJhbWVSZXNvdXJjZVRyZWVQ
YXlsb2FkOwpAQCAtNTE3LDkgKzUwNiw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFu
YWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgaWYgKHRoaXMuX21haW5GcmFtZSAhPT0gb2xk
TWFpbkZyYW1lKQogICAgICAgICAgICAgdGhpcy5fbWFpbkZyYW1lRGlkQ2hhbmdlKG9sZE1haW5G
cmFtZSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY3JlYXRlRnJhbWU6IGZ1bmN0aW9uKHBheWxv
YWQpCisgICAgX2NyZWF0ZUZyYW1lKHBheWxvYWQpCiAgICAgewogICAgICAgICAvLyBJZiBwYXls
b2FkLnVybCBpcyBtaXNzaW5nIG9yIGVtcHR5IHRoZW4gdGhpcyBwYWdlIGlzIGxpa2VseSB0aGUg
c3BlY2lhbCBlbXB0eSBwYWdlLiBJbiB0aGF0IGNhc2UKICAgICAgICAgLy8gd2Ugd2lsbCBqdXN0
IHNheSBpdCBpcyAiYWJvdXQ6YmxhbmsiIHNvIHdlIGhhdmUgYSBVUkwsIHdoaWNoIGlzIHJlcXVp
cmVkIGZvciByZXNvdXJjZXMuCkBAIC01MzEsOSArNTIwLDkgQEAgV2ViSW5zcGVjdG9yLkZyYW1l
UmVzb3VyY2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgbWFpblJlc291cmNlLm1hcmtB
c0ZpbmlzaGVkKCk7CiAKICAgICAgICAgcmV0dXJuIGZyYW1lOwotICAgIH0sCisgICAgfQogCi0g
ICAgX2NyZWF0ZVJlc291cmNlOiBmdW5jdGlvbihwYXlsb2FkLCBmcmFtZVBheWxvYWQpCisgICAg
X2NyZWF0ZVJlc291cmNlKHBheWxvYWQsIGZyYW1lUGF5bG9hZCkKICAgICB7CiAgICAgICAgIHZh
ciByZXNvdXJjZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2UocGF5bG9hZC51cmwsIHBheWxv
YWQubWltZVR5cGUsIHBheWxvYWQudHlwZSwgZnJhbWVQYXlsb2FkLmxvYWRlcklkKTsKIApAQCAt
NTQxLDkgKzUzMCw5IEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc291cmNlTWFwTWFuYWdlci5kb3dubG9h
ZFNvdXJjZU1hcChwYXlsb2FkLnNvdXJjZU1hcFVSTCwgcmVzb3VyY2UudXJsLCByZXNvdXJjZSk7
CiAKICAgICAgICAgcmV0dXJuIHJlc291cmNlOwotICAgIH0sCisgICAgfQogCi0gICAgX2FkZEZy
YW1lVHJlZUZyb21GcmFtZVJlc291cmNlVHJlZVBheWxvYWQ6IGZ1bmN0aW9uKHBheWxvYWQsIGlz
TWFpbkZyYW1lKQorICAgIF9hZGRGcmFtZVRyZWVGcm9tRnJhbWVSZXNvdXJjZVRyZWVQYXlsb2Fk
KHBheWxvYWQsIGlzTWFpbkZyYW1lKQogICAgIHsKICAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5f
Y3JlYXRlRnJhbWUocGF5bG9hZC5mcmFtZSk7CiAgICAgICAgIGlmIChpc01haW5GcmFtZSkKQEAg
LTU3MywyNyArNTYyLDMxIEBAIFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRnJhbWVXYXNBZGRlZEV2ZW50KGZyYW1l
KTsKIAogICAgICAgICByZXR1cm4gZnJhbWU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZGlzcGF0
Y2hGcmFtZVdhc0FkZGVkRXZlbnQ6IGZ1bmN0aW9uKGZyYW1lKQorICAgIF9kaXNwYXRjaEZyYW1l
V2FzQWRkZWRFdmVudChmcmFtZSkKICAgICB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlci5FdmVudC5GcmFtZVdh
c0FkZGVkLCB7ZnJhbWV9KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYWluRnJhbWVEaWRDaGFu
Z2U6IGZ1bmN0aW9uKG9sZE1haW5GcmFtZSkKKyAgICBfbWFpbkZyYW1lRGlkQ2hhbmdlKG9sZE1h
aW5GcmFtZSkKICAgICB7CiAgICAgICAgIGlmIChvbGRNYWluRnJhbWUpCiAgICAgICAgICAgICBv
bGRNYWluRnJhbWUudW5tYXJrQXNNYWluRnJhbWUoKTsKICAgICAgICAgaWYgKHRoaXMuX21haW5G
cmFtZSkKICAgICAgICAgICAgIHRoaXMuX21haW5GcmFtZS5tYXJrQXNNYWluRnJhbWUoKTsKICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkZyYW1lUmVz
b3VyY2VNYW5hZ2VyLkV2ZW50Lk1haW5GcmFtZURpZENoYW5nZSwge29sZE1haW5GcmFtZX0pOwot
ICAgIH0sCisgICAgfQogCi0gICAgX2V4dHJhRG9tYWluc0FjdGl2YXRlZDogZnVuY3Rpb24oZXZl
bnQpCisgICAgX2V4dHJhRG9tYWluc0FjdGl2YXRlZChldmVudCkKICAgICB7CiAgICAgICAgIGlm
IChldmVudC5kYXRhLmRvbWFpbnMuY29udGFpbnMoIlBhZ2UiKSAmJiB3aW5kb3cuUGFnZUFnZW50
KQogICAgICAgICAgICAgUGFnZUFnZW50LmdldFJlc291cmNlVHJlZSh0aGlzLl9wcm9jZXNzTWFp
bkZyYW1lUmVzb3VyY2VUcmVlUGF5bG9hZC5iaW5kKHRoaXMpKTsKICAgICB9CiB9OwogCi1XZWJJ
bnNwZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYklu
c3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5h
Z2VyLkV2ZW50ID0geworICAgIEZyYW1lV2FzQWRkZWQ6ICJmcmFtZS1yZXNvdXJjZS1tYW5hZ2Vy
LWZyYW1lLXdhcy1hZGRlZCIsCisgICAgRnJhbWVXYXNSZW1vdmVkOiAiZnJhbWUtcmVzb3VyY2Ut
bWFuYWdlci1mcmFtZS13YXMtcmVtb3ZlZCIsCisgICAgTWFpbkZyYW1lRGlkQ2hhbmdlOiAiZnJh
bWUtcmVzb3VyY2UtbWFuYWdlci1tYWluLWZyYW1lLWRpZC1jaGFuZ2UiCit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSXNzdWVN
YW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvSXNzdWVNYW5hZ2VyLmpzCmluZGV4IGYyMGU5NTk2MjA3MWY4NzQ4YWRhNWU3ZDYxZGExNzZk
YTE1MTgxZmYuLjVmNzMyMDdmYjBmZmFhMDkxYWQyZDE2YzZkNDU2ZDRiMWIwNjg0NjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0lz
c3VlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Jc3N1ZU1hbmFnZXIuanMKQEAgLTIzLDM1ICsyMywyOCBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFn
ZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyID0gY2xhc3MgSXNzdWVN
YW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252
ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBl
cigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIFdlYklu
c3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5N
YWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7
Ci0gICAgV2ViSW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuTG9nTWFuYWdlci5FdmVudC5BY3RpdmVMb2dDbGVhcmVkLCB0aGlzLl9hY3RpdmVMb2dDbGVh
cmVkLCB0aGlzKTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwog
Ci0gICAgdGhpcy5pbml0aWFsaXplKCk7Ci19OworICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlk
Q2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJ
bnNwZWN0b3IubG9nTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Mb2dNYW5h
Z2VyLkV2ZW50LkFjdGl2ZUxvZ0NsZWFyZWQsIHRoaXMuX2FjdGl2ZUxvZ0NsZWFyZWQsIHRoaXMp
OwogCi1XZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLkV2ZW50ID0gewotICAgIElzc3VlV2FzQWRk
ZWQ6ICJpc3N1ZS1tYW5hZ2VyLWlzc3VlLXdhcy1hZGRlZCIsCi0gICAgQ2xlYXJlZDogImlzc3Vl
LW1hbmFnZXItY2xlYXJlZCIKLX07Ci0KLVdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIucHJvdG90
eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLAorICAg
ICAgICB0aGlzLmluaXRpYWxpemUoKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAotICAgIGlu
aXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICBpbml0aWFsaXplKCkKICAgICB7CiAgICAgICAgIHRo
aXMuX2lzc3VlcyA9IFtdOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIuRXZlbnQuQ2xlYXJlZCk7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBpc3N1ZVdhc0FkZGVkOiBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCB0ZXh0LCB1cmws
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgcGFyYW1ldGVycykKKyAgICBpc3N1ZVdhc0FkZGVk
KHNvdXJjZSwgbGV2ZWwsIHRleHQsIHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBwYXJh
bWV0ZXJzKQogICAgIHsKICAgICAgICAgdmFyIG1vZGlmaWVkTGluZU51bWJlcjsKICAgICAgICAg
aWYgKGxpbmVOdW1iZXIpIHsKQEAgLTYzLDkgKzU2LDkgQEAgV2ViSW5zcGVjdG9yLklzc3VlTWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2lzc3Vlcy5wdXNoKGlzc3VlKTsKIAog
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuSXNzdWVN
YW5hZ2VyLkV2ZW50Lklzc3VlV2FzQWRkZWQsIHtpc3N1ZX0pOwotICAgIH0sCisgICAgfQogCi0g
ICAgaXNzdWVzRm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291cmNlQ29kZSkKKyAgICBpc3N1ZXNG
b3JTb3VyY2VDb2RlKHNvdXJjZUNvZGUpCiAgICAgewogICAgICAgICB2YXIgaXNzdWVzID0gW107
CiAKQEAgLTc3LDE2ICs3MCwxNiBAQCBXZWJJbnNwZWN0b3IuSXNzdWVNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBpc3N1ZXM7Ci0gICAgfSwKKyAgICB9
CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfYWN0aXZlTG9nQ2xlYXJlZDogZnVuY3Rpb24oZXZl
bnQpCisgICAgX2FjdGl2ZUxvZ0NsZWFyZWQoZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLmlu
aXRpYWxpemUoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2U6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCiAgICAg
ewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuRnJhbWUpOwogCkBAIC05Nyw0ICs5MCw3IEBAIFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2Vi
SW5zcGVjdG9yLklzc3VlTWFuYWdlci5FdmVudCA9IHsKKyAgICBJc3N1ZVdhc0FkZGVkOiAiaXNz
dWUtbWFuYWdlci1pc3N1ZS13YXMtYWRkZWQiLAorICAgIENsZWFyZWQ6ICJpc3N1ZS1tYW5hZ2Vy
LWNsZWFyZWQiCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1Zp
ZXdDb250cm9sbGVyLmpzCmluZGV4IDkyNjgyN2YxNGI3N2VkYTk4ZGI2M2NkZDg5N2ZiYzhmNmRk
MGRjMmEuLmU1YjQwNmViNDExMjJlYjY1YzFhMjM4OTYwNDZlYWIyNmU4ZjU4Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFT
Y3JpcHRMb2dWaWV3Q29udHJvbGxlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanMKQEAg
LTIzLDY0ICsyMyw2MCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLVdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIgPSBmdW5jdGlvbihl
bGVtZW50LCBzY3JvbGxFbGVtZW50LCB0ZXh0UHJvbXB0LCBkZWxlZ2F0ZSwgaGlzdG9yeVNldHRp
bmdJZGVudGlmaWVyKQorV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciA9
IGNsYXNzIEphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciBleHRlbmRzIFdlYkluc3BlY3Rvci5P
YmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9i
amVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2Jq
ZWN0LmNhbGwodGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydCh0ZXh0UHJvbXB0IGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVQcm9tcHQpOwotICAgIGNvbnNvbGUuYXNzZXJ0KGhpc3Rv
cnlTZXR0aW5nSWRlbnRpZmllcik7CisgICAgY29uc3RydWN0b3IoZWxlbWVudCwgc2Nyb2xsRWxl
bWVudCwgdGV4dFByb21wdCwgZGVsZWdhdGUsIGhpc3RvcnlTZXR0aW5nSWRlbnRpZmllcikKKyAg
ICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLSAg
ICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gc2Nyb2xsRWxlbWVudDsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQodGV4dFByb21wdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0KTsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQoaGlzdG9yeVNldHRpbmdJZGVudGlmaWVyKTsKIAotICAg
IHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5nID0gbmV3IFdlYkluc3BlY3Rvci5TZXR0aW5nKGhp
c3RvcnlTZXR0aW5nSWRlbnRpZmllciwgbnVsbCk7CisgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBl
bGVtZW50OworICAgICAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gc2Nyb2xsRWxlbWVudDsKIAot
ICAgIHRoaXMuX3Byb21wdCA9IHRleHRQcm9tcHQ7Ci0gICAgdGhpcy5fcHJvbXB0LmRlbGVnYXRl
ID0gdGhpczsKLSAgICB0aGlzLl9wcm9tcHQuaGlzdG9yeSA9IHRoaXMuX3Byb21wdEhpc3RvcnlT
ZXR0aW5nLnZhbHVlOworICAgICAgICB0aGlzLl9wcm9tcHRIaXN0b3J5U2V0dGluZyA9IG5ldyBX
ZWJJbnNwZWN0b3IuU2V0dGluZyhoaXN0b3J5U2V0dGluZ0lkZW50aWZpZXIsIG51bGwpOwogCi0g
ICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgICAgICB0aGlzLl9wcm9tcHQgPSB0ZXh0
UHJvbXB0OworICAgICAgICB0aGlzLl9wcm9tcHQuZGVsZWdhdGUgPSB0aGlzOworICAgICAgICB0
aGlzLl9wcm9tcHQuaGlzdG9yeSA9IHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5nLnZhbHVlOwog
Ci0gICAgdGhpcy5fY2xlYXJlZCA9IHRydWU7Ci0gICAgdGhpcy5fcHJldmlvdXNNZXNzYWdlID0g
bnVsbDsKLSAgICB0aGlzLl9yZXBlYXRDb3VudFdhc0ludGVycnVwdGVkID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIAotICAgIHRoaXMuX3Nlc3Npb25zID0gW107
CisgICAgICAgIHRoaXMuX2NsZWFyZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9wcmV2aW91c01l
c3NhZ2UgPSBudWxsOworICAgICAgICB0aGlzLl9yZXBlYXRDb3VudFdhc0ludGVycnVwdGVkID0g
ZmFsc2U7CiAKLSAgICB0aGlzLm1lc3NhZ2VzQ2xlYXJLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsICJLIiwgdGhpcy5faGFuZGxlQ2xlYXJTaG9ydGN1
dC5iaW5kKHRoaXMpKTsKLSAgICB0aGlzLm1lc3NhZ2VzQWx0ZXJuYXRlQ2xlYXJLZXlib2FyZFNo
b3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbnRyb2wsICJMIiwgdGhpcy5faGFuZGxlQ2xlYXJT
aG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKKyAgICAgICAgdGhpcy5fc2Vzc2lv
bnMgPSBbXTsKIAotICAgIHRoaXMuX21lc3NhZ2VzRmluZEtleWJvYXJkU2hvcnRjdXQgPSBuZXcg
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkYiLCB0aGlzLl9oYW5kbGVGaW5kU2hvcnRj
dXQuYmluZCh0aGlzKSwgdGhpcy5fZWxlbWVudCk7Ci0gICAgdGhpcy5fbWVzc2FnZXNGaW5kTmV4
dEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkci
LCB0aGlzLl9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX2VsZW1lbnQp
OwotICAgIHRoaXMuX21lc3NhZ2VzRmluZFByZXZpb3VzS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQuTW9kaWZpZXIuU2hpZnQsICJHIiwgdGhpcy5faGFuZGxlRmluZFByZXZpb3VzU2hvcnRjdXQu
YmluZCh0aGlzKSwgdGhpcy5fZWxlbWVudCk7CisgICAgICAgIHRoaXMubWVzc2FnZXNDbGVhcktl
eWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIksiLCB0
aGlzLl9oYW5kbGVDbGVhclNob3J0Y3V0LmJpbmQodGhpcykpOworICAgICAgICB0aGlzLm1lc3Nh
Z2VzQWx0ZXJuYXRlQ2xlYXJLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbnRy
b2wsICJMIiwgdGhpcy5faGFuZGxlQ2xlYXJTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVt
ZW50KTsKIAotICAgIHRoaXMuX3Byb21wdEFsdGVybmF0ZUNsZWFyS2V5Ym9hcmRTaG9ydGN1dCA9
IG5ldyBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRT
aG9ydGN1dC5Nb2RpZmllci5Db250cm9sLCAiTCIsIHRoaXMuX2hhbmRsZUNsZWFyU2hvcnRjdXQu
YmluZCh0aGlzKSwgdGhpcy5fcHJvbXB0LmVsZW1lbnQpOwotICAgIHRoaXMuX3Byb21wdEZpbmRL
ZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsICJGIiwg
dGhpcy5faGFuZGxlRmluZFNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50
KTsKLSAgICB0aGlzLl9wcm9tcHRGaW5kTmV4dEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9k
aWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0
LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsKLSAgICB0aGlzLl9wcm9tcHRGaW5k
UHJldmlvdXNLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRy
b2wgfCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkciLCB0
aGlzLl9oYW5kbGVGaW5kUHJldmlvdXNTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9wcm9tcHQu
ZWxlbWVudCk7CisgICAgICAgIHRoaXMuX21lc3NhZ2VzRmluZEtleWJvYXJkU2hvcnRjdXQgPSBu
ZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hv
cnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkYiLCB0aGlzLl9oYW5kbGVGaW5kU2hv
cnRjdXQuYmluZCh0aGlzKSwgdGhpcy5fZWxlbWVudCk7CisgICAgICAgIHRoaXMuX21lc3NhZ2Vz
RmluZE5leHRLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRy
b2wsICJHIiwgdGhpcy5faGFuZGxlRmluZE5leHRTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9l
bGVtZW50KTsKKyAgICAgICAgdGhpcy5fbWVzc2FnZXNGaW5kUHJldmlvdXNLZXlib2FyZFNob3J0
Y3V0ID0gbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wgfCBXZWJJbnNwZWN0b3IuS2V5
Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCwgIkciLCB0aGlzLl9oYW5kbGVGaW5kUHJldmlv
dXNTaG9ydGN1dC5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKIAotICAgIHRoaXMuc3RhcnRO
ZXdTZXNzaW9uKCk7Ci19OworICAgICAgICB0aGlzLl9wcm9tcHRBbHRlcm5hdGVDbGVhcktleWJv
YXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29udHJvbCwgIkwiLCB0aGlzLl9oYW5kbGVD
bGVhclNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsKKyAgICAgICAg
dGhpcy5fcHJvbXB0RmluZEtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJv
YXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFu
ZE9yQ29udHJvbCwgIkYiLCB0aGlzLl9oYW5kbGVGaW5kU2hvcnRjdXQuYmluZCh0aGlzKSwgdGhp
cy5fcHJvbXB0LmVsZW1lbnQpOworICAgICAgICB0aGlzLl9wcm9tcHRGaW5kTmV4dEtleWJvYXJk
U2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZE9yQ29udHJvbCwgIkciLCB0aGlzLl9o
YW5kbGVGaW5kTmV4dFNob3J0Y3V0LmJpbmQodGhpcyksIHRoaXMuX3Byb21wdC5lbGVtZW50KTsK
KyAgICAgICAgdGhpcy5fcHJvbXB0RmluZFByZXZpb3VzS2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sIHwgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQuTW9kaWZpZXIuU2hpZnQsICJHIiwgdGhpcy5faGFuZGxlRmluZFByZXZpb3VzU2hvcnRjdXQu
YmluZCh0aGlzKSwgdGhpcy5fcHJvbXB0LmVsZW1lbnQpOwogCi1XZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdExvZ1ZpZXdDb250cm9sbGVyLkNhY2hlZFByb3BlcnRpZXNEdXJhdGlvbiA9IDMwMDAwOwot
Ci1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsK
LSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxl
ciwKKyAgICAgICAgdGhpcy5zdGFydE5ld1Nlc3Npb24oKTsKKyAgICB9CiAKICAgICAvLyBQdWJs
aWMKIAogICAgIGdldCBwcm9tcHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21w
dDsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBjdXJyZW50Q29uc29sZUdyb3VwKCkKICAgICB7
CiAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50Q29uc29sZUdyb3VwOwotICAgIH0sCisgICAg
fQogCi0gICAgY2xlYXI6IGZ1bmN0aW9uKCkKKyAgICBjbGVhcigpCiAgICAgewogICAgICAgICB0
aGlzLl9jbGVhcmVkID0gdHJ1ZTsKIApAQCAtOTAsOSArODYsOSBAQCBXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAodGhp
cy5kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhpcy5kZWxlZ2F0ZS5kaWRDbGVhck1lc3NhZ2VzID09PSAi
ZnVuY3Rpb24iKQogICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5kaWRDbGVhck1lc3NhZ2VzKCk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzdGFydE5ld1Nlc3Npb246IGZ1bmN0aW9uKGNsZWFyUHJl
dmlvdXNTZXNzaW9ucykKKyAgICBzdGFydE5ld1Nlc3Npb24oY2xlYXJQcmV2aW91c1Nlc3Npb25z
KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25zLmxlbmd0aCAmJiBjbGVhclByZXZp
b3VzU2Vzc2lvbnMpIHsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2Vz
c2lvbnMubGVuZ3RoOyArK2kpCkBAIC0xMjIsOSArMTE4LDkgQEAgV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoZSBuZXcgc2Vzc2lvbiBpcyB2aXNpYmxlLgogICAgICAgICBjb25zb2xlU2Vzc2lvbi5l
bGVtZW50LnNjcm9sbEludG9WaWV3KCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBhcHBlbmRJbW1l
ZGlhdGVFeGVjdXRpb25XaXRoUmVzdWx0OiBmdW5jdGlvbih0ZXh0LCByZXN1bHQpCisgICAgYXBw
ZW5kSW1tZWRpYXRlRXhlY3V0aW9uV2l0aFJlc3VsdCh0ZXh0LCByZXN1bHQpCiAgICAgewogICAg
ICAgICBjb25zb2xlLmFzc2VydChyZXN1bHQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0KTsKIApAQCAtMTM4LDkgKzEzNCw5IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9n
Vmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgV2ViSW5z
cGVjdG9yLnJ1bnRpbWVNYW5hZ2VyLnNhdmVSZXN1bHQocmVzdWx0LCBzYXZlUmVzdWx0Q2FsbGJh
Y2suYmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBhcHBlbmRDb25zb2xlTWVzc2Fn
ZTogZnVuY3Rpb24oY29uc29sZU1lc3NhZ2UpCisgICAgYXBwZW5kQ29uc29sZU1lc3NhZ2UoY29u
c29sZU1lc3NhZ2UpCiAgICAgewogICAgICAgICAvLyBDbG9uZSB0aGUgbWVzc2FnZSBzaW5jZSB0
aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBjbGllbnRzIHVzaW5nIHRoZSBtZXNzYWdlLAogICAgICAg
ICAvLyBhbmQgc2luY2UgdGhlIG1lc3NhZ2UgaGFzIGEgRE9NIGVsZW1lbnQgaXQgY2FuJ3QgYmUg
dHdvIHBsYWNlcyBhdCBvbmNlLgpAQCAtMTQ5LDkgKzE0NSw5IEBAIFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9hcHBl
bmRDb25zb2xlTWVzc2FnZShtZXNzYWdlQ2xvbmUpOwogCiAgICAgICAgIHJldHVybiBtZXNzYWdl
Q2xvbmU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB1cGRhdGVQcmV2aW91c01lc3NhZ2VSZXBlYXRD
b3VudDogZnVuY3Rpb24oY291bnQpCisgICAgdXBkYXRlUHJldmlvdXNNZXNzYWdlUmVwZWF0Q291
bnQoY291bnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9wcmV2aW91c01l
c3NhZ2UpOwogICAgICAgICBpZiAoIXRoaXMuX3ByZXZpb3VzTWVzc2FnZSkKQEAgLTE3MiwxNSAr
MTY4LDE1IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIucHJvdG90
eXBlID0gewogCiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2FnZShuZXdNZXNz
YWdlKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgaXNTY3JvbGxlZFRvQm90dG9t
OiBmdW5jdGlvbigpCisgICAgaXNTY3JvbGxlZFRvQm90dG9tKCkKICAgICB7CiAgICAgICAgIC8v
IExpZSBhYm91dCBiZWluZyBzY3JvbGxlZCB0byB0aGUgYm90dG9tIGlmIHdlIGhhdmUgYSBwZW5k
aW5nIHJlcXVlc3QgdG8gc2Nyb2xsIHRvIHRoZSBib3R0b20gc29vbi4KICAgICAgICAgcmV0dXJu
IHRoaXMuX3Njcm9sbFRvQm90dG9tVGltZW91dCB8fCB0aGlzLl9zY3JvbGxFbGVtZW50LmlzU2Ny
b2xsZWRUb0JvdHRvbSgpOwotICAgIH0sCisgICAgfQogCi0gICAgc2Nyb2xsVG9Cb3R0b206IGZ1
bmN0aW9uKCkKKyAgICBzY3JvbGxUb0JvdHRvbSgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5f
c2Nyb2xsVG9Cb3R0b21UaW1lb3V0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk0LDE2ICsx
OTAsMTYgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIC8vIERvbid0IHNjcm9sbCBpbW1lZGlhdGVseSBzbyB3ZSBhcmUgbm90
IGNhdXNpbmcgZXhjZXNzaXZlIGxheW91dHMgd2hlbiB0aGVyZQogICAgICAgICAvLyBhcmUgbWFu
eSBtZXNzYWdlcyBiZWluZyBhZGRlZCBhdCBvbmNlLgogICAgICAgICB0aGlzLl9zY3JvbGxUb0Jv
dHRvbVRpbWVvdXQgPSBzZXRUaW1lb3V0KGRlbGF5ZWRXb3JrLmJpbmQodGhpcyksIDApOwotICAg
IH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBjb25zb2xlUHJvbXB0SGlzdG9y
eURpZENoYW5nZTogZnVuY3Rpb24ocHJvbXB0KQorICAgIGNvbnNvbGVQcm9tcHRIaXN0b3J5RGlk
Q2hhbmdlKHByb21wdCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Byb21wdEhpc3RvcnlTZXR0aW5n
LnZhbHVlID0gdGhpcy5wcm9tcHQuaGlzdG9yeTsKLSAgICB9LAorICAgIH0KIAotICAgIGNvbnNv
bGVQcm9tcHRTaG91bGRDb21taXRUZXh0OiBmdW5jdGlvbihwcm9tcHQsIHRleHQsIGN1cnNvcklz
QXRMYXN0UG9zaXRpb24sIGhhbmRsZXIpCisgICAgY29uc29sZVByb21wdFNob3VsZENvbW1pdFRl
eHQocHJvbXB0LCB0ZXh0LCBjdXJzb3JJc0F0TGFzdFBvc2l0aW9uLCBoYW5kbGVyKQogICAgIHsK
ICAgICAgICAgLy8gQWx3YXlzIGNvbW1pdCB0aGUgdGV4dCBpZiB3ZSBhcmUgbm90IGF0IHRoZSBs
YXN0IHBvc2l0aW9uLgogICAgICAgICBpZiAoIWN1cnNvcklzQXRMYXN0UG9zaXRpb24pIHsKQEAg
LTIyMyw5ICsyMTksOSBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIFJ1bnRpbWVBZ2VudC5wYXJzZSh0
ZXh0LCBwYXJzZUZpbmlzaGVkLmJpbmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgY29u
c29sZVByb21wdFRleHRDb21taXR0ZWQ6IGZ1bmN0aW9uKHByb21wdCwgdGV4dCkKKyAgICBjb25z
b2xlUHJvbXB0VGV4dENvbW1pdHRlZChwcm9tcHQsIHRleHQpCiAgICAgewogICAgICAgICBjb25z
b2xlLmFzc2VydCh0ZXh0KTsKIApAQCAtMjQzLDMxICsyMzksMzEgQEAgV2ViSW5zcGVjdG9yLkph
dmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRleHQgKz0g
IlxuLy8jIHNvdXJjZVVSTD1fX1dlYkluc3BlY3RvckNvbnNvbGVfX1xuIjsKIAogICAgICAgICBX
ZWJJbnNwZWN0b3IucnVudGltZU1hbmFnZXIuZXZhbHVhdGVJbkluc3BlY3RlZFdpbmRvdyh0ZXh0
LCAiY29uc29sZSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgcHJpbnRSZXN1bHQu
YmluZCh0aGlzKSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfaGFu
ZGxlQ2xlYXJTaG9ydGN1dDogZnVuY3Rpb24oKQorICAgIF9oYW5kbGVDbGVhclNob3J0Y3V0KCkK
ICAgICB7CiAgICAgICAgIHRoaXMuY2xlYXIoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5k
bGVGaW5kU2hvcnRjdXQ6IGZ1bmN0aW9uKCkKKyAgICBfaGFuZGxlRmluZFNob3J0Y3V0KCkKICAg
ICB7CiAgICAgICAgIHRoaXMuZGVsZWdhdGUuZm9jdXNTZWFyY2hCYXIoKTsKLSAgICB9LAorICAg
IH0KIAotICAgIF9oYW5kbGVGaW5kTmV4dFNob3J0Y3V0OiBmdW5jdGlvbigpCisgICAgX2hhbmRs
ZUZpbmROZXh0U2hvcnRjdXQoKQogICAgIHsKICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5oaWdobGln
aHROZXh0U2VhcmNoTWF0Y2goKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9oYW5kbGVGaW5kUHJl
dmlvdXNTaG9ydGN1dDogZnVuY3Rpb24oKQorICAgIF9oYW5kbGVGaW5kUHJldmlvdXNTaG9ydGN1
dCgpCiAgICAgewogICAgICAgICB0aGlzLmRlbGVnYXRlLmhpZ2hsaWdodFByZXZpb3VzU2VhcmNo
TWF0Y2goKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hcHBlbmRDb25zb2xlTWVzc2FnZTogZnVu
Y3Rpb24obXNnLCByZXBlYXRDb3VudFdhc0ludGVycnVwdGVkKQorICAgIF9hcHBlbmRDb25zb2xl
TWVzc2FnZShtc2csIHJlcGVhdENvdW50V2FzSW50ZXJydXB0ZWQpCiAgICAgewogICAgICAgICB2
YXIgd2FzU2Nyb2xsZWRUb0JvdHRvbSA9IHRoaXMuaXNTY3JvbGxlZFRvQm90dG9tKCk7CiAKQEAg
LTI5OSw0ICsyOTUsNCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVy
LnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1Zp
ZXdDb250cm9sbGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZTsKK1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuQ2FjaGVk
UHJvcGVydGllc0R1cmF0aW9uID0gMzAwMDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRp
b25Qcm92aWRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzCmluZGV4IDdkNTEx
MmQzNjZkZWFhNTMyMzJkOGNjNzA1OGIwYzAwNjJmMDk2ZmEuLmIwOTgyZmFhZjk2ZDYyMzk2MjFj
ZDU3ZTU4YzljODAxYTdiZDk4YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3Zp
ZGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzCkBAIC0yMywxNiArMjMs
NiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciA9IGZ1bmN0aW9uKCkKLXsK
LSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJj
bGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwo
dGhpcyk7Ci0KLSAgICBjb25zb2xlLmFzc2VydCghV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRSdW50
aW1lQ29tcGxldGlvblByb3ZpZGVyLl9pbnN0YW5jZSk7Ci0KLSAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdl
ci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2NsZWFyTGFzdFByb3BlcnRp
ZXMsIHRoaXMpOwotfTsKLQogT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYkluc3BlY3RvciwgImph
dmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyIiwKIHsKICAgICBnZXQ6IGZ1bmN0aW9u
KCkKQEAgLTQzLDEyICszMywyMCBAQCBPYmplY3QuZGVmaW5lUHJvcGVydHkoV2ViSW5zcGVjdG9y
LCAiamF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIiLAogICAgIH0KIH0pOwogCi1X
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90eXBl
ID0gewotICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21w
bGV0aW9uUHJvdmlkZXIsCitXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9u
UHJvdmlkZXIgPSBjbGFzcyBKYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciBleHRl
bmRzIFdlYkluc3BlY3Rvci5PYmplY3QKK3sKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAg
ICAgICBzdXBlcigpOworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuX2luc3RhbmNlKTsKKworICAgICAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2Ns
ZWFyTGFzdFByb3BlcnRpZXMsIHRoaXMpOworICAgIH0KIAogICAgIC8vIFByb3RlY3RlZAogCi0g
ICAgY29tcGxldGlvbkNvbnRyb2xsZXJDb21wbGV0aW9uc05lZWRlZDogZnVuY3Rpb24oY29tcGxl
dGlvbkNvbnRyb2xsZXIsIGRlZmF1bHRDb21wbGV0aW9ucywgYmFzZSwgcHJlZml4LCBzdWZmaXgs
IGZvcmNlZCkKKyAgICBjb21wbGV0aW9uQ29udHJvbGxlckNvbXBsZXRpb25zTmVlZGVkKGNvbXBs
ZXRpb25Db250cm9sbGVyLCBkZWZhdWx0Q29tcGxldGlvbnMsIGJhc2UsIHByZWZpeCwgc3VmZml4
LCBmb3JjZWQpCiAgICAgewogICAgICAgICAvLyBEb24ndCBhbGxvdyBub24tZm9yY2VkIGVtcHR5
IHByZWZpeCBjb21wbGV0aW9ucyB1bmxlc3MgdGhlIGJhc2UgaXMgdGhhdCBzdGFydCBvZiBwcm9w
ZXJ0eSBhY2Nlc3MuCiAgICAgICAgIGlmICghZm9yY2VkICYmICFwcmVmaXggJiYgIS9bLltdJC8u
dGVzdChiYXNlKSkgewpAQCAtMjMxLDExICsyMjksMTEgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAg
Y29tcGxldGlvbkNvbnRyb2xsZXIudXBkYXRlQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGltcGxp
Y2l0U3VmZml4KTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQog
Ci0gICAgX2NsZWFyTGFzdFByb3BlcnRpZXM6IGZ1bmN0aW9uKCkKKyAgICBfY2xlYXJMYXN0UHJv
cGVydGllcygpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY2xlYXJMYXN0UHJvcGVydGllc1Rp
bWVvdXQpIHsKICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckxhc3RQcm9wZXJ0
aWVzVGltZW91dCk7CkBAIC0yNDcsNSArMjQ1LDMgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRS
dW50aW1lQ29tcGxldGlvblByb3ZpZGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbGFz
dFByb3BlcnR5TmFtZXMgPSBudWxsOwogICAgIH0KIH07Ci0KLVdlYkluc3BlY3Rvci5KYXZhU2Ny
aXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTGF5ZXJUcmVlTWFuYWdl
ci5qcwppbmRleCAxYjM4NzQ5MzdlZTBiODA4NjczMjBjMzVkNmRmY2M5NjU3OWUyMDY0Li5kNmU0
NGZjZGE4YTQyZDg3YTlkZTI2MDc5ODc1MDc2MjY2N2VhNWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9MYXllclRyZWVNYW5hZ2Vy
LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0xheWVyVHJlZU1hbmFnZXIuanMKQEAgLTIzLDMxICsyMywyNiBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2Vy
ID0gZnVuY3Rpb24oKSB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3Bl
Y3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVj
dG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgdGhpcy5fc3VwcG9ydGVkID0gISF3aW5kb3cu
TGF5ZXJUcmVlQWdlbnQ7Ci0KLSAgICBpZiAodGhpcy5fc3VwcG9ydGVkKQotICAgICAgICBMYXll
clRyZWVBZ2VudC5lbmFibGUoKTsKLX07CitXZWJJbnNwZWN0b3IuTGF5ZXJUcmVlTWFuYWdlciA9
IGNsYXNzIExheWVyVHJlZU1hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Cit7Cisg
ICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotV2ViSW5zcGVjdG9y
LkxheWVyVHJlZU1hbmFnZXIuRXZlbnQgPSB7Ci0gICAgTGF5ZXJUcmVlRGlkQ2hhbmdlOiAibGF5
ZXItdHJlZS1kaWQtY2hhbmdlIgotfTsKKyAgICAgICAgdGhpcy5fc3VwcG9ydGVkID0gISF3aW5k
b3cuTGF5ZXJUcmVlQWdlbnQ7CiAKLVdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIs
CisgICAgICAgIGlmICh0aGlzLl9zdXBwb3J0ZWQpCisgICAgICAgICAgICBMYXllclRyZWVBZ2Vu
dC5lbmFibGUoKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBzdXBwb3J0ZWQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRlZDsKLSAgICB9LAorICAgIH0K
IAotICAgIGxheWVyVHJlZU11dGF0aW9uczogZnVuY3Rpb24ocHJldmlvdXNMYXllcnMsIG5ld0xh
eWVycykKKyAgICBsYXllclRyZWVNdXRhdGlvbnMocHJldmlvdXNMYXllcnMsIG5ld0xheWVycykK
ICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc3VwcG9ydGVkKTsKIApAQCAtMTIx
LDkgKzExNiw5IEBAIFdlYkluc3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgfSk7CiAKICAgICAgICAgcmV0dXJuIHtwcmVzZXJ2ZWQsIGFkZGl0aW9ucywgcmVt
b3ZhbHN9OwotICAgIH0sCisgICAgfQogCi0gICAgbGF5ZXJzRm9yTm9kZTogZnVuY3Rpb24obm9k
ZSwgY2FsbGJhY2spCisgICAgbGF5ZXJzRm9yTm9kZShub2RlLCBjYWxsYmFjaykKICAgICB7CiAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc3VwcG9ydGVkKTsKIApAQCAtMTM3LDIxICsxMzIs
MjMgQEAgV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgdmFyIGxheWVyRm9yTm9kZSA9IGZpcnN0TGF5ZXIubm9kZUlkID09PSBub2RlLmlkICYm
ICFmaXJzdExheWVyLmlzR2VuZXJhdGVkQ29udGVudCA/IGxheWVycy5zaGlmdCgpIDogbnVsbDsK
ICAgICAgICAgICAgIGNhbGxiYWNrKGxheWVyRm9yTm9kZSwgbGF5ZXJzKTsKICAgICAgICAgfSk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcjogZnVuY3Rp
b24obGF5ZXIsIGNhbGxiYWNrKQorICAgIHJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKGxheWVy
LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc3VwcG9ydGVk
KTsKIAogICAgICAgICBMYXllclRyZWVBZ2VudC5yZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihs
YXllci5sYXllcklkLCBmdW5jdGlvbihlcnJvciwgcmVhc29ucykgewogICAgICAgICAgICAgY2Fs
bGJhY2soZXJyb3IgPyAwIDogcmVhc29ucyk7CiAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQog
Ci0gICAgbGF5ZXJUcmVlRGlkQ2hhbmdlOiBmdW5jdGlvbigpCisgICAgbGF5ZXJUcmVlRGlkQ2hh
bmdlKCkKICAgICB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5MYXllclRyZWVNYW5hZ2VyLkV2ZW50LkxheWVyVHJlZURpZENoYW5nZSk7CiAgICAg
fQogfTsKIAotV2ViSW5zcGVjdG9yLkxheWVyVHJlZU1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkxheWVyVHJl
ZU1hbmFnZXIuRXZlbnQgPSB7CisgICAgTGF5ZXJUcmVlRGlkQ2hhbmdlOiAibGF5ZXItdHJlZS1k
aWQtY2hhbmdlIgorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCmluZGV4IDRhY2Q1YmFiODE2
MzI5Y2RlMzkyOWJhYjIyZjc5MWQ3OTE1NmJlYTMuLmE2YWFiOWU4M2YxM2QwOWIxMTc2Y2NlNzE2
MjQ4OWJhMTRmZWU2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcwpAQCAtMjMsMjggKzIz
LDE4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5z
cGVjdG9yLkxvZ01hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3IuTG9nTWFuYWdlciA9
IGNsYXNzIExvZ01hbmFnZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8g
RklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFu
ZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwot
Ci0gICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZy
YW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hh
bmdlLCB0aGlzKTsKLX07Ci0KLVdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50ID0gewotICAg
IFNlc3Npb25TdGFydGVkOiAibG9nLW1hbmFnZXItc2Vzc2lvbi13YXMtc3RhcnRlZCIsCi0gICAg
Q2xlYXJlZDogImxvZy1tYW5hZ2VyLWNsZWFyZWQiLAotICAgIE1lc3NhZ2VBZGRlZDogImxvZy1t
YW5hZ2VyLW1lc3NhZ2UtYWRkZWQiLAotICAgIEFjdGl2ZUxvZ0NsZWFyZWQ6ICJsb2ctbWFuYWdl
ci1jdXJyZW50LWxvZy1jbGVhcmVkIiwKLSAgICBQcmV2aW91c01lc3NhZ2VSZXBlYXRDb3VudFVw
ZGF0ZWQ6ICJsb2ctbWFuYWdlci1wcmV2aW91cy1tZXNzYWdlLXJlcGVhdC1jb3VudC11cGRhdGVk
IgotfTsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi1XZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYklu
c3BlY3Rvci5Mb2dNYW5hZ2VyLAorICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0
aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOworICAgIH0KIAogICAgIC8vIFB1Ymxp
YwogCi0gICAgbWVzc2FnZVdhc0FkZGVkOiBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCB0ZXh0LCB0
eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJh
Y2UsIHJlcXVlc3RJZCkKKyAgICBtZXNzYWdlV2FzQWRkZWQoc291cmNlLCBsZXZlbCwgdGV4dCwg
dHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1Ry
YWNlLCByZXF1ZXN0SWQpCiAgICAgewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0
b3IuQ29uc29sZU9ic2VydmVyLgogCkBAIC01NCw5ICs0NCw5IEBAIFdlYkluc3BlY3Rvci5Mb2dN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCB7bWVzc2FnZTog
Y29uc29sZU1lc3NhZ2V9KTsKIAogICAgICAgICBjb25zb2xlLmFzc2VydCghY29uc29sZU1lc3Nh
Z2UuX2VsZW1lbnQgfHwgIWNvbnNvbGVNZXNzYWdlLl9lbGVtZW50LnBhcmVudE5vZGUsICJUaGlz
IGNvbnNvbGUgbWVzc2FnZSBzaG91bGRuJ3QgYmUgYWRkZWQgdG8gYSB2aWV3LiBUbyBhZGQgaXQg
eW91IG5lZWQgdG8gdXNlIGNsb25lKCkuIik7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBtZXNzYWdl
c0NsZWFyZWQ6IGZ1bmN0aW9uKCkKKyAgICBtZXNzYWdlc0NsZWFyZWQoKQogICAgIHsKICAgICAg
ICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLkNvbnNvbGVPYnNlcnZlci4KIApAQCAtNzAs
MjMgKzYwLDIzIEBAIFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuTG9n
TWFuYWdlci5FdmVudC5BY3RpdmVMb2dDbGVhcmVkKTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9zaG91bGRDbGVhck1lc3NhZ2VzOwogICAgICAgICB9LmJpbmQodGhpcyksIDApOwotICAgIH0s
CisgICAgfQogCi0gICAgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZDogZnVuY3Rpb24oY291bnQp
CisgICAgbWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZChjb3VudCkKICAgICB7CiAgICAgICAgIC8v
IENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIuCiAKICAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQu
UHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkLCB7Y291bnR9KTsKLSAgICB9LAorICAg
IH0KIAotICAgIHJlcXVlc3RDbGVhck1lc3NhZ2VzOiBmdW5jdGlvbigpCisgICAgcmVxdWVzdENs
ZWFyTWVzc2FnZXMoKQogICAgIHsKICAgICAgICAgQ29uc29sZUFnZW50LmNsZWFyTWVzc2FnZXMo
KTsKLSAgICB9LAorICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9tYWluUmVzb3VyY2VE
aWRDaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZl
bnQpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuRnJhbWUpOwogCkBAIC0xMDYsNCArOTYsMTAgQEAgV2ViSW5zcGVjdG9y
LkxvZ01hbmFnZXIucHJvdG90eXBlID0gewogICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5Mb2dN
YW5hZ2VyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZTsKK1dlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50ID0geworICAgIFNlc3Npb25TdGFydGVk
OiAibG9nLW1hbmFnZXItc2Vzc2lvbi13YXMtc3RhcnRlZCIsCisgICAgQ2xlYXJlZDogImxvZy1t
YW5hZ2VyLWNsZWFyZWQiLAorICAgIE1lc3NhZ2VBZGRlZDogImxvZy1tYW5hZ2VyLW1lc3NhZ2Ut
YWRkZWQiLAorICAgIEFjdGl2ZUxvZ0NsZWFyZWQ6ICJsb2ctbWFuYWdlci1jdXJyZW50LWxvZy1j
bGVhcmVkIiwKKyAgICBQcmV2aW91c01lc3NhZ2VSZXBlYXRDb3VudFVwZGF0ZWQ6ICJsb2ctbWFu
YWdlci1wcmV2aW91cy1tZXNzYWdlLXJlcGVhdC1jb3VudC11cGRhdGVkIgorfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1Byb2Jl
TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL1Byb2JlTWFuYWdlci5qcwppbmRleCAwMDVkYmQ4ZmM5YmE3NTUyODljNjM5OTBmMjdhYzk3
ZmU5Yzg3NjE0Li5kNWU0M2QzMTg4NmU3NzczZmQ5ODZmN2M2Mjc5YTQ4YjUzNTQ5NGZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Q
cm9iZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvUHJvYmVNYW5hZ2VyLmpzCkBAIC0yNCw2MSArMjQsNTMgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlciA9IGZ1bmN0aW9uKCkKK1dl
Ykluc3BlY3Rvci5Qcm9iZU1hbmFnZXIgPSBjbGFzcyBQcm9iZU1hbmFnZXIgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0byBhIFdlYklu
c3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAgLy8gV2ViSW5z
cGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgLy8gVXNlZCB0byBkZXRlY3QgZGVsZXRl
ZCBwcm9iZSBhY3Rpb25zLgotICAgIHRoaXMuX2tub3duUHJvYmVJZGVudGlmaWVyc0ZvckJyZWFr
cG9pbnQgPSBuZXcgTWFwOwotCi0gICAgLy8gTWFpbiBsb29rdXAgdGFibGVzIGZvciBwcm9iZXMg
YW5kIHByb2JlIHNldHMuCi0gICAgdGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyID0gbmV3IE1hcDsK
LSAgICB0aGlzLl9wcm9iZVNldHNCeUJyZWFrcG9pbnQgPSBuZXcgTWFwOworICAgIGNvbnN0cnVj
dG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5F
dmVudC5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0gICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9p
bnRSZW1vdmVkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50LkFjdGlvbnNEaWRDaGFuZ2UsIHRo
aXMuX2JyZWFrcG9pbnRBY3Rpb25zQ2hhbmdlZCwgdGhpcyk7CisgICAgICAgIC8vIFVzZWQgdG8g
ZGV0ZWN0IGRlbGV0ZWQgcHJvYmUgYWN0aW9ucy4KKyAgICAgICAgdGhpcy5fa25vd25Qcm9iZUlk
ZW50aWZpZXJzRm9yQnJlYWtwb2ludCA9IG5ldyBNYXA7CiAKLSAgICAvLyBTYXZlZCBicmVha3Bv
aW50cyBzaG91bGQgbm90IGJlIHJlc3RvcmVkIG9uIHRoZSBmaXJzdCBldmVudCBsb29wIHR1cm4s
IGJlY2F1c2UgaXQKLSAgICAvLyBtYWtlcyBtYW5hZ2VyIGluaXRpYWxpemF0aW9uIG9yZGVyIHZl
cnkgZnJhZ2lsZS4gTm8gYnJlYWtwb2ludHMgc2hvdWxkIGJlIGF2YWlsYWJsZS4KLSAgICBjb25z
b2xlLmFzc2VydCghV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50cy5sZW5n
dGgsICJObyBicmVha3BvaW50cyBzaG91bGQgZXhpc3QgYmVmb3JlIGFsbCB0aGUgbWFuYWdlcnMg
YXJlIGNvbnN0cnVjdGVkLiIpOwotfQorICAgICAgICAvLyBNYWluIGxvb2t1cCB0YWJsZXMgZm9y
IHByb2JlcyBhbmQgcHJvYmUgc2V0cy4KKyAgICAgICAgdGhpcy5fcHJvYmVzQnlJZGVudGlmaWVy
ID0gbmV3IE1hcDsKKyAgICAgICAgdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50ID0gbmV3IE1h
cDsKIAotV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5FdmVudCA9IHsKLSAgICBQcm9iZVNldEFk
ZGVkOiAicHJvYmUtbWFuYWdlci1wcm9iZS1zZXQtYWRkZWQiLAotICAgIFByb2JlU2V0UmVtb3Zl
ZDogInByb2JlLW1hbmFnZXItcHJvYmUtc2V0LXJlbW92ZWQiLAotfTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQs
IHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5CcmVha3BvaW50UmVtb3Zl
ZCwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50LkV2ZW50
LkFjdGlvbnNEaWRDaGFuZ2UsIHRoaXMuX2JyZWFrcG9pbnRBY3Rpb25zQ2hhbmdlZCwgdGhpcyk7
CiAKLVdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVj
dG9yOiBXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2VyLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVj
dG9yLk9iamVjdC5wcm90b3R5cGUsCisgICAgICAgIC8vIFNhdmVkIGJyZWFrcG9pbnRzIHNob3Vs
ZCBub3QgYmUgcmVzdG9yZWQgb24gdGhlIGZpcnN0IGV2ZW50IGxvb3AgdHVybiwgYmVjYXVzZSBp
dAorICAgICAgICAvLyBtYWtlcyBtYW5hZ2VyIGluaXRpYWxpemF0aW9uIG9yZGVyIHZlcnkgZnJh
Z2lsZS4gTm8gYnJlYWtwb2ludHMgc2hvdWxkIGJlIGF2YWlsYWJsZS4KKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoIVdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHMubGVuZ3Ro
LCAiTm8gYnJlYWtwb2ludHMgc2hvdWxkIGV4aXN0IGJlZm9yZSBhbGwgdGhlIG1hbmFnZXJzIGFy
ZSBjb25zdHJ1Y3RlZC4iKTsKKyAgICB9CiAKICAgICAvLyBQdWJsaWMKIAogICAgIGdldCBwcm9i
ZVNldHMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIFsuLi50aGlzLl9wcm9iZVNldHNCeUJyZWFr
cG9pbnQudmFsdWVzKCldOwotICAgIH0sCisgICAgfQogCi0gICAgcHJvYmVGb3JJZGVudGlmaWVy
OiBmdW5jdGlvbihpZGVudGlmaWVyKQorICAgIHByb2JlRm9ySWRlbnRpZmllcihpZGVudGlmaWVy
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5nZXQoaWRl
bnRpZmllcik7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90ZWN0ZWQgKGNhbGxlZCBieSBX
ZWJJbnNwZWN0b3IuRGVidWdnZXJPYnNlcnZlcikKIAotICAgIGRpZFNhbXBsZVByb2JlOiBmdW5j
dGlvbihzYW1wbGUpCisgICAgZGlkU2FtcGxlUHJvYmUoc2FtcGxlKQogICAgIHsKICAgICAgICAg
Y29uc29sZS5hc3NlcnQodGhpcy5fcHJvYmVzQnlJZGVudGlmaWVyLmhhcyhzYW1wbGUucHJvYmVJ
ZCksICJVbmtub3duIHByb2JlIGlkZW50aWZpZXIgc3BlY2lmaWVkIGZvciBzYW1wbGU6ICIsIHNh
bXBsZSk7CiAgICAgICAgIHZhciBwcm9iZSA9IHRoaXMuX3Byb2Jlc0J5SWRlbnRpZmllci5nZXQo
c2FtcGxlLnByb2JlSWQpOwogICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBXZWJJbnNwZWN0b3Iu
dGltZWxpbmVNYW5hZ2VyLmNvbXB1dGVFbGFwc2VkVGltZShzYW1wbGUudGltZXN0YW1wKTsKICAg
ICAgICAgcHJvYmUuYWRkU2FtcGxlKG5ldyBXZWJJbnNwZWN0b3IuUHJvYmVTYW1wbGUoc2FtcGxl
LnNhbXBsZUlkLCBzYW1wbGUuYmF0Y2hJZCwgZWxhcHNlZFRpbWUsIHNhbXBsZS5wYXlsb2FkKSk7
Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfYnJlYWtwb2ludEFkZGVk
OiBmdW5jdGlvbihicmVha3BvaW50T3JFdmVudCkKKyAgICBfYnJlYWtwb2ludEFkZGVkKGJyZWFr
cG9pbnRPckV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQ7CiAgICAgICAgIGlm
IChicmVha3BvaW50T3JFdmVudCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5CcmVha3BvaW50KQpA
QCAtOTQsMTggKzg2LDE4IEBAIFdlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICB0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JCcmVha3BvaW50LnNldChi
cmVha3BvaW50LCBuZXcgU2V0KTsKIAogICAgICAgICB0aGlzLl9icmVha3BvaW50QWN0aW9uc0No
YW5nZWQoYnJlYWtwb2ludCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYnJlYWtwb2ludFJlbW92
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZChldmVudCkKICAgICB7
CiAgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YS5icmVha3BvaW50OwogICAgICAg
ICBjb25zb2xlLmFzc2VydCh0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JCcmVha3BvaW50
LmhhcyhicmVha3BvaW50KSk7CiAKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFjdGlvbnNDaGFu
Z2VkKGJyZWFrcG9pbnQpOwogICAgICAgICB0aGlzLl9rbm93blByb2JlSWRlbnRpZmllcnNGb3JC
cmVha3BvaW50LmRlbGV0ZShicmVha3BvaW50KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9icmVh
a3BvaW50QWN0aW9uc0NoYW5nZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRPckV2ZW50KQorICAgIF9i
cmVha3BvaW50QWN0aW9uc0NoYW5nZWQoYnJlYWtwb2ludE9yRXZlbnQpCiAgICAgewogICAgICAg
ICB2YXIgYnJlYWtwb2ludDsKICAgICAgICAgaWYgKGJyZWFrcG9pbnRPckV2ZW50IGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpCkBAIC0xNjQsOSArMTU2LDkgQEAgV2ViSW5zcGVj
dG9yLlByb2JlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlByb2JlTWFuYWdlci5FdmVudC5Qcm9i
ZVNldFJlbW92ZWQsIHtwcm9iZVNldH0pOwogICAgICAgICAgICAgfQogICAgICAgICB9LCB0aGlz
KTsKLSAgICB9LAorICAgIH0KIAotICAgIF9wcm9iZVNldEZvckJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGJyZWFrcG9pbnQpCisgICAgX3Byb2JlU2V0Rm9yQnJlYWtwb2ludChicmVha3BvaW50KQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3Byb2JlU2V0c0J5QnJlYWtwb2ludC5oYXMoYnJlYWtwb2lu
dCkpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvYmVTZXRzQnlCcmVha3BvaW50LmdldChi
cmVha3BvaW50KTsKQEAgLTE3NywzICsxNjksOCBAQCBXZWJJbnNwZWN0b3IuUHJvYmVNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG5ld1Byb2JlU2V0OwogICAgIH0KIH07CisK
K1dlYkluc3BlY3Rvci5Qcm9iZU1hbmFnZXIuRXZlbnQgPSB7CisgICAgUHJvYmVTZXRBZGRlZDog
InByb2JlLW1hbmFnZXItcHJvYmUtc2V0LWFkZGVkIiwKKyAgICBQcm9iZVNldFJlbW92ZWQ6ICJw
cm9iZS1tYW5hZ2VyLXByb2JlLXNldC1yZW1vdmVkIiwKK307CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvUmVwbGF5
TWFuYWdlci5qcwppbmRleCA0ODA0YWUyMjMxOTY5MDMwNGM4Y2VjMmYzNGFkNzM5ODFiOTc3OWRl
Li4xYmIwYmE1MjhlMjgxZWEzNzE3MTE3NTRjOTJmYWYxMGQyODNkZDYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5h
Z2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL1JlcGxheU1hbmFnZXIuanMKQEAgLTI0LDk4ICsyNCw1OCBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyID0g
ZnVuY3Rpb24oKQorV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIgPSBjbGFzcyBSZXBsYXlNYW5h
Z2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0
IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigp
LgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX3Nl
c3Npb25TdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5JbmFj
dGl2ZTsKLSAgICB0aGlzLl9zZWdtZW50U3RhdGUgPSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5TZWdtZW50U3RhdGUuVW5sb2FkZWQ7Ci0KLSAgICB0aGlzLl9hY3RpdmVTZXNzaW9uSWRlbnRp
ZmllciA9IG51bGw7Ci0gICAgdGhpcy5fYWN0aXZlU2VnbWVudElkZW50aWZpZXIgPSBudWxsOwot
ICAgIHRoaXMuX2N1cnJlbnRQb3NpdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuUmVwbGF5UG9zaXRp
b24oMCwgMCk7Ci0gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIC8vIFRoZXNl
IGhvbGQgYWN0dWFsIGluc3RhbmNlcyBvZiBzZXNzaW9ucyBhbmQgc2VnbWVudHMuCi0gICAgdGhp
cy5fc2Vzc2lvbnMgPSBuZXcgTWFwOwotICAgIHRoaXMuX3NlZ21lbnRzID0gbmV3IE1hcDsKLSAg
ICAvLyBUaGVzZSBob2xkIHByb21pc2VzIHRoYXQgcmVzb2x2ZSB3aGVuIHRoZSBpbnN0YW5jZSBk
YXRhIGlzIHJlY2lldmVkLgotICAgIHRoaXMuX3Nlc3Npb25Qcm9taXNlcyA9IG5ldyBNYXA7Ci0g
ICAgdGhpcy5fc2VnbWVudFByb21pc2VzID0gbmV3IE1hcDsKLQotICAgIC8vIFBsYXliYWNrIHNw
ZWVkIGlzIHNwZWNpZmllZCBpbiByZXBsYXlUb1Bvc2l0aW9uIGNvbW1hbmRzLCBhbmQgcGVyc2lz
dHMKLSAgICAvLyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwbGF5YmFjayBjb21tYW5kIHVudGls
IGFub3RoZXIgcGxheWJhY2sgYmVnaW5zLgotICAgIHRoaXMuX3BsYXliYWNrU3BlZWQgPSBXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5QbGF5YmFja1NwZWVkLlJlYWxUaW1lOwotCi0gICAgaWYg
KCF3aW5kb3cuUmVwbGF5QWdlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBpbnN0YW5j
ZSA9IHRoaXM7Ci0KLSAgICB0aGlzLl9pbml0aWFsaXphdGlvblByb21pc2UgPSBSZXBsYXlBZ2Vu
dC5jdXJyZW50UmVwbGF5U3RhdGUoKQotICAgICAgICAudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7
Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydChwYXlsb2FkLnNlc3Npb25TdGF0ZSBpbiBXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUsICJVbmtub3duIHNlc3Npb24gc3Rh
dGU6ICIgKyBwYXlsb2FkLnNlc3Npb25TdGF0ZSk7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2Vy
dChwYXlsb2FkLnNlZ21lbnRTdGF0ZSBpbiBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdt
ZW50U3RhdGUsICJVbmtub3duIHNlZ21lbnQgc3RhdGU6ICIgKyBwYXlsb2FkLnNlZ21lbnRTdGF0
ZSk7Ci0KLSAgICAgICAgICAgIGluc3RhbmNlLl9hY3RpdmVTZXNzaW9uSWRlbnRpZmllciA9IHBh
eWxvYWQuc2Vzc2lvbklkZW50aWZpZXI7Ci0gICAgICAgICAgICBpbnN0YW5jZS5fYWN0aXZlU2Vn
bWVudElkZW50aWZpZXIgPSBwYXlsb2FkLnNlZ21lbnRJZGVudGlmaWVyOwotICAgICAgICAgICAg
aW5zdGFuY2UuX3Nlc3Npb25TdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlc3Np
b25TdGF0ZVtwYXlsb2FkLnNlc3Npb25TdGF0ZV07Ci0gICAgICAgICAgICBpbnN0YW5jZS5fc2Vn
bWVudFN0YXRlID0gV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2VnbWVudFN0YXRlW3BheWxv
YWQuc2VnbWVudFN0YXRlXTsKLSAgICAgICAgICAgIGluc3RhbmNlLl9jdXJyZW50UG9zaXRpb24g
PSBwYXlsb2FkLnJlcGxheVBvc2l0aW9uOwotCi0gICAgICAgICAgICBpbnN0YW5jZS5faW5pdGlh
bGl6ZWQgPSB0cnVlOwotICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
cmV0dXJuIFJlcGxheUFnZW50LmdldEF2YWlsYWJsZVNlc3Npb25zKCk7Ci0gICAgICAgIH0pLnRo
ZW4oZnVuY3Rpb24ocGF5bG9hZCkgewotICAgICAgICAgICAgZm9yICh2YXIgc2Vzc2lvbklkIG9m
IHBheWxvYWQuaWRzKQotICAgICAgICAgICAgICAgIGluc3RhbmNlLnNlc3Npb25DcmVhdGVkKHNl
c3Npb25JZCk7Ci0gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCJSZXBsYXlNYW5hZ2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZDogIiwg
ZXJyb3IpOwotICAgICAgICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgICAgIH0pOwotfTsKKyAgICBj
b25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi1XZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlci5FdmVudCA9IHsKLSAgICBDYXB0dXJlU3RhcnRlZDogInJlcGxheS1tYW5hZ2Vy
LWNhcHR1cmUtc3RhcnRlZCIsCi0gICAgQ2FwdHVyZVN0b3BwZWQ6ICJyZXBsYXktbWFuYWdlci1j
YXB0dXJlLXN0b3BwZWQiLAorICAgICAgICB0aGlzLl9zZXNzaW9uU3RhdGUgPSBXZWJJbnNwZWN0
b3IuUmVwbGF5TWFuYWdlci5TZXNzaW9uU3RhdGUuSW5hY3RpdmU7CisgICAgICAgIHRoaXMuX3Nl
Z21lbnRTdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZS5Vbmxv
YWRlZDsKIAotICAgIFBsYXliYWNrU3RhcnRlZDogInJlcGxheS1tYW5hZ2VyLXBsYXliYWNrLXN0
YXJ0ZWQiLAotICAgIFBsYXliYWNrUGF1c2VkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stcGF1
c2VkIiwKLSAgICBQbGF5YmFja0ZpbmlzaGVkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stZmlu
aXNoZWQiLAotICAgIFBsYXliYWNrUG9zaXRpb25DaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItcGxh
eS1iYWNrLXBvc2l0aW9uLWNoYW5nZWQiLAorICAgICAgICB0aGlzLl9hY3RpdmVTZXNzaW9uSWRl
bnRpZmllciA9IG51bGw7CisgICAgICAgIHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fY3VycmVudFBvc2l0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5S
ZXBsYXlQb3NpdGlvbigwLCAwKTsKKyAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTsK
IAotICAgIEFjdGl2ZVNlc3Npb25DaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItYWN0aXZlLXNlc3Np
b24tY2hhbmdlZCIsCi0gICAgQWN0aXZlU2VnbWVudENoYW5nZWQ6ICJyZXBsYXktbWFuYWdlci1h
Y3RpdmUtc2VnbWVudC1jaGFuZ2VkIiwKKyAgICAgICAgLy8gVGhlc2UgaG9sZCBhY3R1YWwgaW5z
dGFuY2VzIG9mIHNlc3Npb25zIGFuZCBzZWdtZW50cy4KKyAgICAgICAgdGhpcy5fc2Vzc2lvbnMg
PSBuZXcgTWFwOworICAgICAgICB0aGlzLl9zZWdtZW50cyA9IG5ldyBNYXA7CisgICAgICAgIC8v
IFRoZXNlIGhvbGQgcHJvbWlzZXMgdGhhdCByZXNvbHZlIHdoZW4gdGhlIGluc3RhbmNlIGRhdGEg
aXMgcmVjaWV2ZWQuCisgICAgICAgIHRoaXMuX3Nlc3Npb25Qcm9taXNlcyA9IG5ldyBNYXA7Cisg
ICAgICAgIHRoaXMuX3NlZ21lbnRQcm9taXNlcyA9IG5ldyBNYXA7CiAKLSAgICBTZXNzaW9uU2Vn
bWVudEFkZGVkOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1zZWdtZW50LWFkZGVkIiwKLSAgICBT
ZXNzaW9uU2VnbWVudFJlbW92ZWQ6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9uLXNlZ21lbnQtcmVt
b3ZlZCIsCisgICAgICAgIC8vIFBsYXliYWNrIHNwZWVkIGlzIHNwZWNpZmllZCBpbiByZXBsYXlU
b1Bvc2l0aW9uIGNvbW1hbmRzLCBhbmQgcGVyc2lzdHMKKyAgICAgICAgLy8gZm9yIHRoZSBkdXJh
dGlvbiBvZiB0aGUgcGxheWJhY2sgY29tbWFuZCB1bnRpbCBhbm90aGVyIHBsYXliYWNrIGJlZ2lu
cy4KKyAgICAgICAgdGhpcy5fcGxheWJhY2tTcGVlZCA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5h
Z2VyLlBsYXliYWNrU3BlZWQuUmVhbFRpbWU7CiAKLSAgICBTZXNzaW9uQWRkZWQ6ICJyZXBsYXkt
bWFuYWdlci1zZXNzaW9uLWFkZGVkIiwKLSAgICBTZXNzaW9uUmVtb3ZlZDogInJlcGxheS1tYW5h
Z2VyLXNlc3Npb24tcmVtb3ZlZCIsCi19OworICAgICAgICBpZiAoIXdpbmRvdy5SZXBsYXlBZ2Vu
dCkKKyAgICAgICAgICAgIHJldHVybjsKIAotV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vz
c2lvblN0YXRlID0gewotICAgIENhcHR1cmluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3Rh
dGUtY2FwdHVyaW5nIiwKLSAgICBJbmFjdGl2ZTogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3Rh
dGUtaW5hY3RpdmUiLAotICAgIFJlcGxheWluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3Rh
dGUtcmVwbGF5aW5nIiwKLX07CisgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7CiAKLVdlYklu
c3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZSA9IHsKLSAgICBBcHBlbmRpbmc6ICJy
ZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWFwcGVuZGluZyIsCi0gICAgVW5sb2FkZWQ6ICJy
ZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLXVubG9hZGVkIiwKLSAgICBMb2FkZWQ6ICJyZXBs
YXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWxvYWRlZCIsCi0gICAgRGlzcGF0Y2hpbmc6ICJyZXBs
YXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWRpc3BhdGNoaW5nIiwKLX07CisgICAgICAgIHRoaXMu
X2luaXRpYWxpemF0aW9uUHJvbWlzZSA9IFJlcGxheUFnZW50LmN1cnJlbnRSZXBsYXlTdGF0ZSgp
CisgICAgICAgICAgICAudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7CisgICAgICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQocGF5bG9hZC5zZXNzaW9uU3RhdGUgaW4gV2ViSW5zcGVjdG9yLlJlcGxh
eU1hbmFnZXIuU2Vzc2lvblN0YXRlLCAiVW5rbm93biBzZXNzaW9uIHN0YXRlOiAiICsgcGF5bG9h
ZC5zZXNzaW9uU3RhdGUpOworICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBheWxvYWQu
c2VnbWVudFN0YXRlIGluIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZSwg
IlVua25vd24gc2VnbWVudCBzdGF0ZTogIiArIHBheWxvYWQuc2VnbWVudFN0YXRlKTsKIAotV2Vi
SW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuUGxheWJhY2tTcGVlZCA9IHsKLSAgICBSZWFsVGltZTog
InJlcGxheS1tYW5hZ2VyLXBsYXliYWNrLXNwZWVkLXJlYWwtdGltZSIsCi0gICAgRmFzdEZvcndh
cmQ6ICJyZXBsYXktbWFuYWdlci1wbGF5YmFjay1zcGVlZC1mYXN0LWZvcndhcmQiLAotfTsKKyAg
ICAgICAgICAgICAgICBpbnN0YW5jZS5fYWN0aXZlU2Vzc2lvbklkZW50aWZpZXIgPSBwYXlsb2Fk
LnNlc3Npb25JZGVudGlmaWVyOworICAgICAgICAgICAgICAgIGluc3RhbmNlLl9hY3RpdmVTZWdt
ZW50SWRlbnRpZmllciA9IHBheWxvYWQuc2VnbWVudElkZW50aWZpZXI7CisgICAgICAgICAgICAg
ICAgaW5zdGFuY2UuX3Nlc3Npb25TdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNl
c3Npb25TdGF0ZVtwYXlsb2FkLnNlc3Npb25TdGF0ZV07CisgICAgICAgICAgICAgICAgaW5zdGFu
Y2UuX3NlZ21lbnRTdGF0ZSA9IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0
ZVtwYXlsb2FkLnNlZ21lbnRTdGF0ZV07CisgICAgICAgICAgICAgICAgaW5zdGFuY2UuX2N1cnJl
bnRQb3NpdGlvbiA9IHBheWxvYWQucmVwbGF5UG9zaXRpb247CiAKLVdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIsCi0gICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZSwKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5faW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAg
ICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVwbGF5
QWdlbnQuZ2V0QXZhaWxhYmxlU2Vzc2lvbnMoKTsKKyAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rp
b24ocGF5bG9hZCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIHNlc3Npb25JZCBvZiBwYXls
b2FkLmlkcykKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Uuc2Vzc2lvbkNyZWF0ZWQoc2Vz
c2lvbklkKTsKKyAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAg
ICAgICAgICAgY29uc29sZS5lcnJvcigiUmVwbGF5TWFuYWdlciBpbml0aWFsaXphdGlvbiBmYWls
ZWQ6ICIsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAg
IH0pOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCkBAIC0xMjUsNTIgKzg1LDUyIEBAIFdlYklu
c3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Np
b25TdGF0ZTsKLSAgICB9LAorICAgIH0KIAogICAgIGdldCBzZWdtZW50U3RhdGUoKQogICAgIHsK
ICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faW5pdGlhbGl6ZWQpOwogICAgICAgICByZXR1
cm4gdGhpcy5fc2VnbWVudFN0YXRlOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGFjdGl2ZVNl
c3Npb25JZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2lu
aXRpYWxpemVkKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNlc3Npb25JZGVudGlmaWVy
OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0IGFjdGl2ZVNlZ21lbnRJZGVudGlmaWVyKCkKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsKICAgICAgICAg
cmV0dXJuIHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyOwotICAgIH0sCisgICAgfQogCiAg
ICAgZ2V0IHBsYXliYWNrU3BlZWQoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhp
cy5faW5pdGlhbGl6ZWQpOwogICAgICAgICByZXR1cm4gdGhpcy5fcGxheWJhY2tTcGVlZDsKLSAg
ICB9LAorICAgIH0KIAogICAgIHNldCBwbGF5YmFja1NwZWVkKHZhbHVlKQogICAgIHsKICAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy5faW5pdGlhbGl6ZWQpOwogICAgICAgICB0aGlzLl9wbGF5
YmFja1NwZWVkID0gdmFsdWU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBnZXQgY3VycmVudFBvc2l0
aW9uKCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luaXRpYWxpemVkKTsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQb3NpdGlvbjsKLSAgICB9LAorICAgIH0KIAog
ICAgIC8vIFRoZXNlIHJldHVybiBwcm9taXNlcyBldmVuIGlmIHRoZSByZWxldmFudCBpbnN0YW5j
ZSBpcyBhbHJlYWR5IGNyZWF0ZWQuCi0gICAgd2FpdFVudGlsSW5pdGlhbGl6ZWQ6IGZ1bmN0aW9u
KCkgIC8vIC0tPiAoKQorICAgIHdhaXRVbnRpbEluaXRpYWxpemVkKCkgIC8vIC0tPiAoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWxpemF0aW9uUHJvbWlzZTsKLSAgICB9LAor
ICAgIH0KIAogICAgIC8vIFJldHVybiBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHNlc3Np
b24sIGlmIGl0IGV4aXN0cy4KLSAgICBnZXRTZXNzaW9uOiBmdW5jdGlvbihzZXNzaW9uSWQpIC8v
IC0tPiAoV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24pCisgICAgZ2V0U2Vzc2lvbihzZXNzaW9u
SWQpIC8vIC0tPiAoV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24pCiAgICAgewogICAgICAgICBp
ZiAodGhpcy5fc2Vzc2lvblByb21pc2VzLmhhcyhzZXNzaW9uSWQpKQogICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3Nlc3Npb25Qcm9taXNlcy5nZXQoc2Vzc2lvbklkKTsKQEAgLTE4MiwxMCArMTQy
LDEwIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICB0aGlzLl9zZXNzaW9uUHJvbWlzZXMuc2V0KHNlc3Npb25JZCwgbmV3UHJvbWlzZSk7CiAgICAg
ICAgIHJldHVybiBuZXdQcm9taXNlOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUmV0dXJuIGEg
cHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgc2Vzc2lvbiBzZWdtZW50LCBpZiBpdCBleGlzdHMu
Ci0gICAgZ2V0U2VnbWVudDogZnVuY3Rpb24oc2VnbWVudElkKSAgLy8gLS0+IChXZWJJbnNwZWN0
b3IuUmVwbGF5U2Vzc2lvblNlZ21lbnQpCisgICAgZ2V0U2VnbWVudChzZWdtZW50SWQpICAvLyAt
LT4gKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uU2VnbWVudCkKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLl9zZWdtZW50UHJvbWlzZXMuaGFzKHNlZ21lbnRJZCkpCiAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fc2VnbWVudFByb21pc2VzLmdldChzZWdtZW50SWQpOwpAQCAtMTk3LDExICsxNTcs
MTEgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAg
IHRoaXMuX3NlZ21lbnRQcm9taXNlcy5zZXQoc2VnbWVudElkLCBuZXdQcm9taXNlKTsKICAgICAg
ICAgcmV0dXJuIG5ld1Byb21pc2U7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBTd2l0Y2ggdG8g
dGhlIHNwZWNpZmllZCBzZXNzaW9uLgogICAgIC8vIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVz
b2x2ZXMgd2hlbiB0aGUgc3dpdGNoIGNvbXBsZXRlcy4KLSAgICBzd2l0Y2hTZXNzaW9uOiBmdW5j
dGlvbihzZXNzaW9uSWQpIC8vIC0tPiAoKQorICAgIHN3aXRjaFNlc3Npb24oc2Vzc2lvbklkKSAv
LyAtLT4gKCkKICAgICB7CiAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpczsKICAgICAgICAgdmFy
IHJlc3VsdCA9IHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKTsKQEAgLTIzMSwxMSArMTkxLDEx
IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IH0pOwogCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBT
dGFydCBjYXB0dXJpbmcgaW50byB0aGUgY3VycmVudCBzZXNzaW9uIGFzIHNvb24gYXMgcG9zc2li
bGUuCiAgICAgLy8gUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGNhcHR1cmlu
ZyBiZWdpbnMuCi0gICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0aW9uKCkgLy8gLS0+ICgpCisgICAg
c3RhcnRDYXB0dXJpbmcoKSAvLyAtLT4gKCkKICAgICB7CiAgICAgICAgIHZhciBtYW5hZ2VyID0g
dGhpczsKICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKTsK
QEAgLTI2MiwxMSArMjIyLDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwK
KyAgICB9CiAKICAgICAvLyBTdG9wIGNhcHR1cmluZyBpbnRvIHRoZSBjdXJyZW50IHNlc3Npb24g
YXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29s
dmVzIHdoZW4gY2FwdHVyaW5nIGVuZHMuCi0gICAgc3RvcENhcHR1cmluZzogZnVuY3Rpb24oKSAv
LyAtLT4gKCkKKyAgICBzdG9wQ2FwdHVyaW5nKCkgLy8gLS0+ICgpCiAgICAgewogICAgICAgICBj
b25zb2xlLmFzc2VydCh0aGlzLnNlc3Npb25TdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLlJlcGxheU1h
bmFnZXIuU2Vzc2lvblN0YXRlLkNhcHR1cmluZywgIkNhbm5vdCBzdG9wIGNhcHR1cmluZyB1bmxl
c3MgY2FwdHVyZSBpcyBhY3RpdmUuIik7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuc2Vn
bWVudFN0YXRlID09PSBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5TZWdtZW50U3RhdGUuQXBw
ZW5kaW5nKTsKQEAgLTI3NiwxMSArMjM2LDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8g
c3RvcCBjYXB0dXJpbmc6ICIsIGVycm9yKTsKICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsK
ICAgICAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUGF1c2UgcGxheWJhY2sg
YXMgc29vbiBhcyBwb3NzaWJsZS4KICAgICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29s
dmVzIHdoZW4gcGxheWJhY2sgaXMgcGF1c2VkLgotICAgIHBhdXNlUGxheWJhY2s6IGZ1bmN0aW9u
KCkgLy8gLS0+ICgpCisgICAgcGF1c2VQbGF5YmFjaygpIC8vIC0tPiAoKQogICAgIHsKICAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy5zZXNzaW9uU3RhdGUgIT09IFdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLlNlc3Npb25TdGF0ZS5DYXB0dXJpbmcsICJDYW5ub3QgcGF1c2UgcGxheWJhY2sg
d2hpbGUgY2FwdHVyaW5nLiIpOwogCkBAIC0zMDQsMTEgKzI2NCwxMSBAQCBXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUGF1c2UgcGxheWJhY2sgYW5k
IHVubG9hZCB0aGUgY3VycmVudCBzZXNzaW9uIHNlZ21lbnQgYXMgc29vbiBhcyBwb3NzaWJsZS4K
ICAgICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGN1cnJlbnQg
c2VnbWVudCBpcyB1bmxvYWRlZC4KLSAgICBjYW5jZWxQbGF5YmFjazogZnVuY3Rpb24oKSAvLyAt
LT4gKCkKKyAgICBjYW5jZWxQbGF5YmFjaygpIC8vIC0tPiAoKQogICAgIHsKICAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5zZXNzaW9uU3RhdGUgIT09IFdlYkluc3BlY3Rvci5SZXBsYXlNYW5h
Z2VyLlNlc3Npb25TdGF0ZS5DYXB0dXJpbmcsICJDYW5ub3Qgc3RvcCBwbGF5YmFjayB3aGlsZSBj
YXB0dXJpbmcuIik7CiAKQEAgLTMyOSwxMSArMjg5LDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBSZXBsYXkgdG8gdGhlIHNwZWNpZmllZCBw
b3NpdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHVzaW5nIHRoZSBjdXJyZW50IHJlcGxheSBzcGVl
ZC4KICAgICAvLyBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gcmVwbGF5IGhh
cyBiZWd1biAoTk9UIHdoZW4gdGhlIHBvc2l0aW9uIGlzIHJlYWNoZWQpLgotICAgIHJlcGxheVRv
UG9zaXRpb246IGZ1bmN0aW9uKHJlcGxheVBvc2l0aW9uKSAvLyAtLT4gKCkKKyAgICByZXBsYXlU
b1Bvc2l0aW9uKHJlcGxheVBvc2l0aW9uKSAvLyAtLT4gKCkKICAgICB7CiAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHJlcGxheVBvc2l0aW9uIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlcGxheVBv
c2l0aW9uLCAiQ2Fubm90IHJlcGxheSB0byBhIHBvc2l0aW9uIHdoaWxlIGNhcHR1cmluZy4iKTsK
IApAQCAtMzU5LDExICszMTksMTEgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
LAorICAgIH0KIAogICAgIC8vIFJlcGxheSB0byB0aGUgZW5kIG9mIHRoZSBzZXNzaW9uIGFzIHNv
b24gYXMgcG9zc2libGUgdXNpbmcgdGhlIGN1cnJlbnQgcmVwbGF5IHNwZWVkLgogICAgIC8vIFJl
dHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiByZXBsYXkgaGFzIGJlZ3VuIChOT1Qg
d2hlbiB0aGUgZW5kIGlzIHJlYWNoZWQpLgotICAgIHJlcGxheVRvQ29tcGxldGlvbjogZnVuY3Rp
b24oKSAvLyAtLT4gKCkKKyAgICByZXBsYXlUb0NvbXBsZXRpb24oKSAvLyAtLT4gKCkKICAgICB7
CiAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpczsKICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMu
d2FpdFVudGlsSW5pdGlhbGl6ZWQoKTsKQEAgLTM5MCw3ICszNTAsNyBAQCBXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkIChjYWxsZWQg
YnkgUmVwbGF5T2JzZXJ2ZXIpCiAKQEAgLTM5OCw3ICszNTgsNyBAQCBXZWJJbnNwZWN0b3IuUmVw
bGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgLy8gYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6
ZWQuIFNvLCBlYWNoIGZ1bmN0aW9uIGJvZHkgaXMgcHJlcGVuZGVkIHdpdGggYSByZXRyeSBndWFy
ZC4KICAgICAvLyBUaGlzIG1ha2VzIGNhbGwgc2l0ZXMgc2ltcGxlciBhbmQgYXZvaWRzIGFuIGV4
dHJhIGV2ZW50IGxvb3AgdHVybiBpbiB0aGUgY29tbW9uIGNhc2UuCiAKLSAgICBjYXB0dXJlU3Rh
cnRlZDogZnVuY3Rpb24oKQorICAgIGNhcHR1cmVTdGFydGVkKCkKICAgICB7CiAgICAgICAgIGlm
ICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJ
bml0aWFsaXplZCgpLnRoZW4odGhpcy5jYXB0dXJlU3RhcnRlZC5iaW5kKHRoaXMpKTsKQEAgLTQw
Niw5ICszNjYsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMuX2NoYW5nZVNlc3Npb25TdGF0ZShXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5TZXNzaW9uU3RhdGUuQ2FwdHVyaW5nKTsKIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5DYXB0dXJlU3RhcnRl
ZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjYXB0dXJlU3RvcHBlZDogZnVuY3Rpb24oKQorICAg
IGNhcHR1cmVTdG9wcGVkKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQp
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhp
cy5jYXB0dXJlU3RvcHBlZC5iaW5kKHRoaXMpKTsKQEAgLTQyMiw5ICszODIsOSBAQCBXZWJJbnNw
ZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5F
dmVudC5DYXB0dXJlU3RvcHBlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwbGF5YmFja1N0YXJ0
ZWQ6IGZ1bmN0aW9uKCkKKyAgICBwbGF5YmFja1N0YXJ0ZWQoKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbElu
aXRpYWxpemVkKCkudGhlbih0aGlzLnBsYXliYWNrU3RhcnRlZC5iaW5kKHRoaXMpKTsKQEAgLTQz
NSw5ICszOTUsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMuX2NoYW5nZVNlZ21lbnRTdGF0ZShXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5TZWdtZW50U3RhdGUuRGlzcGF0Y2hpbmcpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlBsYXliYWNrU3Rh
cnRlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBwbGF5YmFja0hpdFBvc2l0aW9uOiBmdW5jdGlv
bihyZXBsYXlQb3NpdGlvbiwgdGltZXN0YW1wKQorICAgIHBsYXliYWNrSGl0UG9zaXRpb24ocmVw
bGF5UG9zaXRpb24sIHRpbWVzdGFtcCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlh
bGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRo
ZW4odGhpcy5wbGF5YmFja0hpdFBvc2l0aW9uLmJpbmQodGhpcywgcmVwbGF5UG9zaXRpb24sIHRp
bWVzdGFtcCkpOwpAQCAtNDQ4LDkgKzQwOCw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9jdXJyZW50UG9zaXRpb24gPSByZXBsYXlQ
b3NpdGlvbjsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuUGxheWJhY2tQb3NpdGlvbkNoYW5nZWQpOwotICAgIH0s
CisgICAgfQogCi0gICAgcGxheWJhY2tQYXVzZWQ6IGZ1bmN0aW9uKHBvc2l0aW9uKQorICAgIHBs
YXliYWNrUGF1c2VkKHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFs
aXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCkudGhl
bih0aGlzLnBsYXliYWNrUGF1c2VkLmJpbmQodGhpcywgcG9zaXRpb24pKTsKQEAgLTQ2NCw5ICs0
MjQsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
UmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja1BhdXNlZCk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBwbGF5YmFja0ZpbmlzaGVkOiBmdW5jdGlvbigpCisgICAgcGxheWJhY2tGaW5pc2hlZCgpCiAg
ICAgewogICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKQogICAgICAgICAgICAgcmV0dXJu
IHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKS50aGVuKHRoaXMucGxheWJhY2tGaW5pc2hlZC5i
aW5kKHRoaXMpKTsKQEAgLTQ4MCw5ICs0NDAsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5QbGF5YmFja0Zpbmlz
aGVkKTsKLSAgICB9LAorICAgIH0KIAotICAgIHNlc3Npb25DcmVhdGVkOiBmdW5jdGlvbihzZXNz
aW9uSWQpCisgICAgc2Vzc2lvbkNyZWF0ZWQoc2Vzc2lvbklkKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRVbnRpbElu
aXRpYWxpemVkKCkudGhlbih0aGlzLnNlc3Npb25DcmVhdGVkLmJpbmQodGhpcywgc2Vzc2lvbklk
KSk7CkBAIC00OTgsOSArNDU4LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuRXZlbnQuU2Vzc2lvbkFkZGVkLCB7
c2Vzc2lvbklkfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBzZXNzaW9uTW9kaWZpZWQ6IGZ1bmN0
aW9uKHNlc3Npb25JZCkKKyAgICBzZXNzaW9uTW9kaWZpZWQoc2Vzc2lvbklkKQogICAgIHsKICAg
ICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndh
aXRVbnRpbEluaXRpYWxpemVkKCkudGhlbih0aGlzLnNlc3Npb25Nb2RpZmllZC5iaW5kKHRoaXMs
IHNlc3Npb25JZCkpOwpAQCAtNTA4LDkgKzQ2OCw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5h
Z2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5nZXRTZXNzaW9uKHNlc3Npb25JZCkudGhl
bihmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgICAgICBzZXNzaW9uLnNlZ21lbnRzQ2hhbmdl
ZCgpOwogICAgICAgICB9KTsKLSAgICB9LAorICAgIH0KIAotICAgIHNlc3Npb25SZW1vdmVkOiBm
dW5jdGlvbihzZXNzaW9uSWQpCisgICAgc2Vzc2lvblJlbW92ZWQoc2Vzc2lvbklkKQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlz
LndhaXRVbnRpbEluaXRpYWxpemVkKCkudGhlbih0aGlzLnNlc3Npb25SZW1vdmVkLmJpbmQodGhp
cywgc2Vzc2lvbklkKSk7CkBAIC01MzEsOSArNDkxLDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1h
bmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlbW92
ZWRTZXNzaW9uKTsKICAgICAgICAgICAgICAgICBtYW5hZ2VyLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5FdmVudC5TZXNzaW9uUmVtb3ZlZCwge3Jl
bW92ZWRTZXNzaW9ufSk7CiAgICAgICAgICAgICB9KTsKLSAgICB9LAorICAgIH0KIAotICAgIHNl
Z21lbnRDcmVhdGVkOiBmdW5jdGlvbihzZWdtZW50SWQpCisgICAgc2VnbWVudENyZWF0ZWQoc2Vn
bWVudElkKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAg
ICAgIHJldHVybiB0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCkudGhlbih0aGlzLnNlZ21lbnRD
cmVhdGVkLmJpbmQodGhpcywgc2VnbWVudElkKSk7CkBAIC01NDksOSArNTA5LDkgQEAgV2ViSW5z
cGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zZWdtZW50
UHJvbWlzZXMuc2V0KHNlZ21lbnRJZCwgUHJvbWlzZS5yZXNvbHZlKGluY29tcGxldGVTZWdtZW50
KSk7CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIuRXZlbnQuU2Vzc2lvblNlZ21lbnRBZGRlZCwge3NlZ21lbnRJZGVudGlm
aWVyOiBzZWdtZW50SWR9KTsKLSAgICB9LAorICAgIH0KIAotICAgIHNlZ21lbnRDb21wbGV0ZWQ6
IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAgICBzZWdtZW50Q29tcGxldGVkKHNlZ21lbnRJZCkKICAg
ICB7CiAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4g
dGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgpLnRoZW4odGhpcy5zZWdtZW50Q29tcGxldGVkLmJp
bmQodGhpcywgc2VnbWVudElkKSk7CkBAIC01NjgsOSArNTI4LDkgQEAgV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IkVycm9yIG9idGFpbmluZyBzZWdtZW50IGRhdGE6ICIsIGVycm9yKTsKICAgICAgICAgICAgICAg
ICB0aHJvdyBlcnJvcjsKICAgICAgICAgICAgIH0pOwotICAgIH0sCisgICAgfQogCi0gICAgc2Vn
bWVudFJlbW92ZWQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAgICBzZWdtZW50UmVtb3ZlZChzZWdt
ZW50SWQpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKQogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKS50aGVuKHRoaXMuc2VnbWVudFJl
bW92ZWQuYmluZCh0aGlzLCBzZWdtZW50SWQpKTsKQEAgLTU5Miw5ICs1NTIsOSBAQCBXZWJJbnNw
ZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29uc29s
ZS5hc3NlcnQocmVtb3ZlZFNlZ21lbnQpOwogICAgICAgICAgICAgICAgIG1hbmFnZXIuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNlc3Np
b25TZWdtZW50UmVtb3ZlZCwge3JlbW92ZWRTZWdtZW50fSk7CiAgICAgICAgICAgICB9KTsKLSAg
ICB9LAorICAgIH0KIAotICAgIHNlZ21lbnRMb2FkZWQ6IGZ1bmN0aW9uKHNlZ21lbnRJZCkKKyAg
ICBzZWdtZW50TG9hZGVkKHNlZ21lbnRJZCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faW5p
dGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy53YWl0VW50aWxJbml0aWFsaXplZCgp
LnRoZW4odGhpcy5zZWdtZW50TG9hZGVkLmJpbmQodGhpcywgc2VnbWVudElkKSk7CkBAIC02MDcs
OSArNTY3LDkgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAg
ICAgICB2YXIgcHJldmlvdXNJZGVudGlmaWVyID0gdGhpcy5fYWN0aXZlU2VnbWVudElkZW50aWZp
ZXI7CiAgICAgICAgIHRoaXMuX2FjdGl2ZVNlZ21lbnRJZGVudGlmaWVyID0gc2VnbWVudElkOwog
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5FdmVudC5BY3RpdmVTZWdtZW50Q2hhbmdlZCwge3ByZXZpb3VzU2VnbWVudElkZW50
aWZpZXI6IHByZXZpb3VzSWRlbnRpZmllcn0pOwotICAgfSwKKyAgICB9CiAKLSAgICBzZWdtZW50
VW5sb2FkZWQ6IGZ1bmN0aW9uKCkKKyAgICBzZWdtZW50VW5sb2FkZWQoKQogICAgIHsKICAgICAg
ICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLndhaXRV
bnRpbEluaXRpYWxpemVkKCkudGhlbih0aGlzLnNlZ21lbnRVbmxvYWRlZC5iaW5kKHRoaXMpKTsK
QEAgLTYyMCwxMSArNTgwLDExIEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdmFyIHByZXZpb3VzSWRlbnRpZmllciA9IHRoaXMuX2FjdGl2ZVNlZ21l
bnRJZGVudGlmaWVyOwogICAgICAgICB0aGlzLl9hY3RpdmVTZWdtZW50SWRlbnRpZmllciA9IG51
bGw7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLkV2ZW50LkFjdGl2ZVNlZ21lbnRDaGFuZ2VkLCB7cHJldmlvdXNTZWdtZW50
SWRlbnRpZmllcjogcHJldmlvdXNJZGVudGlmaWVyfSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAv
LyBQcml2YXRlCiAKLSAgICBfY2hhbmdlU2Vzc2lvblN0YXRlOiBmdW5jdGlvbihuZXdTdGF0ZSkK
KyAgICBfY2hhbmdlU2Vzc2lvblN0YXRlKG5ld1N0YXRlKQogICAgIHsKICAgICAgICAgLy8gV2Fy
biBhYm91dCBuby1vcCBzdGF0ZSBjaGFuZ2VzLiBXZSBzaG91bGRuJ3QgYmUgc2VlaW5nIHRoZW0u
CiAgICAgICAgIHZhciBpc0FsbG93ZWQgPSB0aGlzLl9zZXNzaW9uU3RhdGUgIT09IG5ld1N0YXRl
OwpAQCAtNjQyLDkgKzYwMiw5IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoaXNBbGxvd2VkLCAiSW52YWxpZCBzZXNzaW9u
IHN0YXRlIGNoYW5nZTogIiwgdGhpcy5fc2Vzc2lvblN0YXRlLCAiIHRvICIsIG5ld1N0YXRlKTsK
ICAgICAgICAgaWYgKGlzQWxsb3dlZCkKICAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdGF0ZSA9
IG5ld1N0YXRlOwotICAgIH0sCisgICAgfQogCi0gICAgX2NoYW5nZVNlZ21lbnRTdGF0ZTogZnVu
Y3Rpb24obmV3U3RhdGUpCisgICAgX2NoYW5nZVNlZ21lbnRTdGF0ZShuZXdTdGF0ZSkKICAgICB7
CiAgICAgICAgIC8vIFdhcm4gYWJvdXQgbm8tb3Agc3RhdGUgY2hhbmdlcy4gV2Ugc2hvdWxkbid0
IGJlIHNlZWluZyB0aGVtLgogICAgICAgICB2YXIgaXNBbGxvd2VkID0gdGhpcy5fc2VnbWVudFN0
YXRlICE9PSBuZXdTdGF0ZTsKQEAgLTY2Nyw5ICs2MjcsOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGlzQWxsb3dlZCwg
IkludmFsaWQgc2VnbWVudCBzdGF0ZSBjaGFuZ2U6ICIsIHRoaXMuX3NlZ21lbnRTdGF0ZSwgIiB0
byAiLCBuZXdTdGF0ZSk7CiAgICAgICAgIGlmIChpc0FsbG93ZWQpCiAgICAgICAgICAgICB0aGlz
Ll9zZWdtZW50U3RhdGUgPSBuZXdTdGF0ZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9zdXBwcmVz
c0JyZWFrcG9pbnRzQW5kUmVzdW1lSWZOZWVkZWQ6IGZ1bmN0aW9uKCkKKyAgICBfc3VwcHJlc3NC
cmVha3BvaW50c0FuZFJlc3VtZUlmTmVlZGVkKCkKICAgICB7CiAgICAgICAgIHZhciBtYW5hZ2Vy
ID0gdGhpczsKIApAQCAtNjgyLDMgKzY0MiwzOSBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAorV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIu
RXZlbnQgPSB7CisgICAgQ2FwdHVyZVN0YXJ0ZWQ6ICJyZXBsYXktbWFuYWdlci1jYXB0dXJlLXN0
YXJ0ZWQiLAorICAgIENhcHR1cmVTdG9wcGVkOiAicmVwbGF5LW1hbmFnZXItY2FwdHVyZS1zdG9w
cGVkIiwKKworICAgIFBsYXliYWNrU3RhcnRlZDogInJlcGxheS1tYW5hZ2VyLXBsYXliYWNrLXN0
YXJ0ZWQiLAorICAgIFBsYXliYWNrUGF1c2VkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stcGF1
c2VkIiwKKyAgICBQbGF5YmFja0ZpbmlzaGVkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stZmlu
aXNoZWQiLAorICAgIFBsYXliYWNrUG9zaXRpb25DaGFuZ2VkOiAicmVwbGF5LW1hbmFnZXItcGxh
eS1iYWNrLXBvc2l0aW9uLWNoYW5nZWQiLAorCisgICAgQWN0aXZlU2Vzc2lvbkNoYW5nZWQ6ICJy
ZXBsYXktbWFuYWdlci1hY3RpdmUtc2Vzc2lvbi1jaGFuZ2VkIiwKKyAgICBBY3RpdmVTZWdtZW50
Q2hhbmdlZDogInJlcGxheS1tYW5hZ2VyLWFjdGl2ZS1zZWdtZW50LWNoYW5nZWQiLAorCisgICAg
U2Vzc2lvblNlZ21lbnRBZGRlZDogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc2VnbWVudC1hZGRl
ZCIsCisgICAgU2Vzc2lvblNlZ21lbnRSZW1vdmVkOiAicmVwbGF5LW1hbmFnZXItc2Vzc2lvbi1z
ZWdtZW50LXJlbW92ZWQiLAorCisgICAgU2Vzc2lvbkFkZGVkOiAicmVwbGF5LW1hbmFnZXItc2Vz
c2lvbi1hZGRlZCIsCisgICAgU2Vzc2lvblJlbW92ZWQ6ICJyZXBsYXktbWFuYWdlci1zZXNzaW9u
LXJlbW92ZWQiLAorfTsKKworV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIuU2Vzc2lvblN0YXRl
ID0geworICAgIENhcHR1cmluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtY2FwdHVy
aW5nIiwKKyAgICBJbmFjdGl2ZTogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtaW5hY3Rp
dmUiLAorICAgIFJlcGxheWluZzogInJlcGxheS1tYW5hZ2VyLXNlc3Npb24tc3RhdGUtcmVwbGF5
aW5nIiwKK307CisKK1dlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlNlZ21lbnRTdGF0ZSA9IHsK
KyAgICBBcHBlbmRpbmc6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWFwcGVuZGluZyIs
CisgICAgVW5sb2FkZWQ6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLXVubG9hZGVkIiwK
KyAgICBMb2FkZWQ6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWxvYWRlZCIsCisgICAg
RGlzcGF0Y2hpbmc6ICJyZXBsYXktbWFuYWdlci1zZWdtZW50LXN0YXRlLWRpc3BhdGNoaW5nIiwK
K307CisKK1dlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLlBsYXliYWNrU3BlZWQgPSB7CisgICAg
UmVhbFRpbWU6ICJyZXBsYXktbWFuYWdlci1wbGF5YmFjay1zcGVlZC1yZWFsLXRpbWUiLAorICAg
IEZhc3RGb3J3YXJkOiAicmVwbGF5LW1hbmFnZXItcGxheWJhY2stc3BlZWQtZmFzdC1mb3J3YXJk
IiwKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL1J1bnRpbWVNYW5hZ2VyLmpzCmluZGV4IGM5YjIwYzc3Yzgz
ZGQ2Yzc0YWRhNzFhMTE2NDAwMjQ3MmEzMjk1ZTEuLjA4MjAyYTlmOTMyMjQ4N2YxMDMwZmExYzgx
NGZiMTQ4OTBkZTljNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL1J1bnRpbWVNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1J1bnRpbWVNYW5hZ2VyLmpzCkBAIC0y
MywyNiArMjMsMjAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci1XZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXIgPSBmdW5jdGlvbigpCitXZWJJbnNwZWN0b3Iu
UnVudGltZU1hbmFnZXIgPSBjbGFzcyBSdW50aW1lTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rv
ci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9y
Lk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3Iu
T2JqZWN0LmNhbGwodGhpcyk7Ci0KLSAgICAvLyBFbmFibGUgdGhlIFJ1bnRpbWVBZ2VudCB0byBy
ZWNlaXZlIG5vdGlmaWNhdGlvbiBvZiBleGVjdXRpb24gY29udGV4dHMuCi0gICAgaWYgKFJ1bnRp
bWVBZ2VudC5lbmFibGUpCi0gICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGUoKTsKLX07Ci0KLVdl
Ykluc3BlY3Rvci5SdW50aW1lTWFuYWdlci5FdmVudCA9IHsKLSAgICBEaWRFdmFsdWF0ZTogInJ1
bnRpbWUtbWFuYWdlci1kaWQtZXZhbHVhdGUiCi19OworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7
CisgICAgICAgIHN1cGVyKCk7CiAKLVdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlci5wcm90b3R5
cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5SdW50aW1lTWFuYWdlciwKKyAg
ICAgICAgLy8gRW5hYmxlIHRoZSBSdW50aW1lQWdlbnQgdG8gcmVjZWl2ZSBub3RpZmljYXRpb24g
b2YgZXhlY3V0aW9uIGNvbnRleHRzLgorICAgICAgICBpZiAoUnVudGltZUFnZW50LmVuYWJsZSkK
KyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGUoKTsKKyAgICB9CiAKICAgICAvLyBQdWJs
aWMKIAotICAgIGV2YWx1YXRlSW5JbnNwZWN0ZWRXaW5kb3c6IGZ1bmN0aW9uKGV4cHJlc3Npb24s
IG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVz
dWx0LCBjYWxsYmFjaykKKyAgICBldmFsdWF0ZUluSW5zcGVjdGVkV2luZG93KGV4cHJlc3Npb24s
IG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVz
dWx0LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlmICghZXhwcmVzc2lvbikgewogICAgICAg
ICAgICAgLy8gVGhlcmUgaXMgbm8gZXhwcmVzc2lvbiwgc28gdGhlIGNvbXBsZXRpb24gc2hvdWxk
IGhhcHBlbiBhZ2FpbnN0IGdsb2JhbCBwcm9wZXJ0aWVzLgpAQCAtNzgsOSArNzIsOSBAQCBXZWJJ
bnNwZWN0b3IuUnVudGltZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAvLyBDT01QQVRJ
QklMSVRZIChpT1MgOCk6ICJzYXZlUmVzdWx0IiBkaWQgbm90IGV4aXN0LgogICAgICAgICB2YXIg
Y29udGV4dElkID0gV2ViSW5zcGVjdG9yLnF1aWNrQ29uc29sZS5leGVjdXRpb25Db250ZXh0SWRl
bnRpZmllcjsKICAgICAgICAgUnVudGltZUFnZW50LmV2YWx1YXRlLmludm9rZSh7ZXhwcmVzc2lv
biwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb250ZXh0SWQsIGZyYW1lSWQ6IGNvbnRleHRJZCwgcmV0dXJu
QnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0fSwgZXZhbENhbGxiYWNrLmJpbmQo
dGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgc2F2ZVJlc3VsdDogZnVuY3Rpb24ocmVtb3Rl
T2JqZWN0LCBjYWxsYmFjaykKKyAgICBzYXZlUmVzdWx0KHJlbW90ZU9iamVjdCwgY2FsbGJhY2sp
CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydChyZW1vdGVPYmplY3QgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KTsKIApAQCAtOTgsOSArOTIsOSBAQCBXZWJJbnNwZWN0
b3IuUnVudGltZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgUnVudGltZUFnZW50
LnNhdmVSZXN1bHQocmVtb3RlT2JqZWN0LmFzQ2FsbEFyZ3VtZW50KCksIG15Y2FsbGJhY2spOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBSdW50aW1lQWdlbnQuc2F2ZVJlc3VsdChyZW1vdGVP
YmplY3QuYXNDYWxsQXJndW1lbnQoKSwgV2ViSW5zcGVjdG9yLnF1aWNrQ29uc29sZS5leGVjdXRp
b25Db250ZXh0SWRlbnRpZmllciwgbXljYWxsYmFjayk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBn
ZXRQcm9wZXJ0aWVzRm9yUmVtb3RlT2JqZWN0OiBmdW5jdGlvbihvYmplY3RJZCwgY2FsbGJhY2sp
CisgICAgZ2V0UHJvcGVydGllc0ZvclJlbW90ZU9iamVjdChvYmplY3RJZCwgY2FsbGJhY2spCiAg
ICAgewogICAgICAgICBSdW50aW1lQWdlbnQuZ2V0UHJvcGVydGllcyhvYmplY3RJZCwgZnVuY3Rp
b24oZXJyb3IsIHJlc3VsdCkgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CkBAIC0xMTcsNCAr
MTExLDYgQEAgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB9
CiB9OwogCi1XZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLlJ1bnRpbWVNYW5h
Z2VyLkV2ZW50ID0geworICAgIERpZEV2YWx1YXRlOiAicnVudGltZS1tYW5hZ2VyLWRpZC1ldmFs
dWF0ZSIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvU291cmNlTWFwTWFuYWdlci5qcwppbmRleCBjYWVl
Nzc3ZWUzOWUzNjU3YzhkNDJiOWZjOWJmNDM4NTBkYzU5MzdiLi5kM2NhODQzNDI5MTg1NGU2OGZm
MDIwYWVkOWZkMTg5OTM4YzRjMDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Tb3VyY2VNYXBNYW5hZ2VyLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFn
ZXIuanMKQEAgLTIzLDI4ICsyMywyNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyID0gZnVuY3Rpb24oKQor
V2ViSW5zcGVjdG9yLlNvdXJjZU1hcE1hbmFnZXIgPSBjbGFzcyBTb3VyY2VNYXBNYW5hZ2VyIGV4
dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMg
dG8gYSBXZWJJbnNwZWN0b3IuT2JqZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAg
IC8vIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKLQotICAgIHRoaXMuX3NvdXJjZU1h
cFVSTE1hcCA9IHt9OwotICAgIHRoaXMuX2Rvd25sb2FkaW5nU291cmNlTWFwcyA9IHt9OworICAg
IGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICBXZWJJbnNwZWN0
b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJl
c291cmNlRGlkQ2hhbmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOwotfTsK
KyAgICAgICAgdGhpcy5fc291cmNlTWFwVVJMTWFwID0ge307CisgICAgICAgIHRoaXMuX2Rvd25s
b2FkaW5nU291cmNlTWFwcyA9IHt9OwogCi1XZWJJbnNwZWN0b3IuU291cmNlTWFwTWFuYWdlci5w
cm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5h
Z2VyLAorICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzLl9tYWluUmVzb3Vy
Y2VEaWRDaGFuZ2UsIHRoaXMpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgc291cmNl
TWFwRm9yVVJMOiBmdW5jdGlvbihzb3VyY2VNYXBVUkwpCisgICAgc291cmNlTWFwRm9yVVJMKHNv
dXJjZU1hcFVSTCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNYXBVUkxNYXBb
c291cmNlTWFwVVJMXTsKLSAgICB9LAorICAgIH0KIAotICAgIGRvd25sb2FkU291cmNlTWFwOiBm
dW5jdGlvbihzb3VyY2VNYXBVUkwsIGJhc2VVUkwsIG9yaWdpbmFsU291cmNlQ29kZSkKKyAgICBk
b3dubG9hZFNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIGJhc2VVUkwsIG9yaWdpbmFsU291cmNlQ29k
ZSkKICAgICB7CiAgICAgICAgIHNvdXJjZU1hcFVSTCA9IGFic29sdXRlVVJMKHNvdXJjZU1hcFVS
TCwgYmFzZVVSTCk7CiAgICAgICAgIGlmICghc291cmNlTWFwVVJMKQpAQCAtNzUsMTEgKzczLDEx
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
fQogCiAgICAgICAgIGxvYWRBbmRQYXJzZVNvdXJjZU1hcC5jYWxsKHRoaXMpOwotICAgIH0sCisg
ICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2xvYWRBbmRQYXJzZVNvdXJjZU1hcDogZnVu
Y3Rpb24oc291cmNlTWFwVVJMLCBiYXNlVVJMLCBvcmlnaW5hbFNvdXJjZUNvZGUpCisgICAgX2xv
YWRBbmRQYXJzZVNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIGJhc2VVUkwsIG9yaWdpbmFsU291cmNl
Q29kZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nU291cmNlTWFwc1tzb3VyY2VN
YXBVUkxdID0gdHJ1ZTsKIApAQCAtMTE5LDE0ICsxMTcsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZU1hcE1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmIChOZXR3b3JrQWdlbnQubG9h
ZFJlc291cmNlKQogICAgICAgICAgICAgTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZShmcmFtZUlk
ZW50aWZpZXIsIHNvdXJjZU1hcFVSTCwgc291cmNlTWFwTG9hZGVkLmJpbmQodGhpcykpOwotICAg
IH0sCisgICAgfQogCi0gICAgX2xvYWRBbmRQYXJzZUZhaWxlZDogZnVuY3Rpb24oc291cmNlTWFw
VVJMKQorICAgIF9sb2FkQW5kUGFyc2VGYWlsZWQoc291cmNlTWFwVVJMKQogICAgIHsKICAgICAg
ICAgZGVsZXRlIHRoaXMuX2Rvd25sb2FkaW5nU291cmNlTWFwc1tzb3VyY2VNYXBVUkxdOwotICAg
IH0sCisgICAgfQogCi0gICAgX2xvYWRBbmRQYXJzZVN1Y2NlZWRlZDogZnVuY3Rpb24oc291cmNl
TWFwVVJMLCBzb3VyY2VNYXApCisgICAgX2xvYWRBbmRQYXJzZVN1Y2NlZWRlZChzb3VyY2VNYXBV
UkwsIHNvdXJjZU1hcCkKICAgICB7CiAgICAgICAgIGlmICghKHNvdXJjZU1hcFVSTCBpbiB0aGlz
Ll9kb3dubG9hZGluZ1NvdXJjZU1hcHMpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUyLDkg
KzE1MCw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIGlmIChyZXNvdXJjZSkKICAgICAgICAgICAgICAgICByZXNvdXJjZS5hZGRTb3Vy
Y2VNYXAoc291cmNlTWFwKTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAgX21haW5S
ZXNvdXJjZURpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgX21haW5SZXNvdXJjZURpZENo
YW5nZShldmVudCkKICAgICB7CiAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmlzTWFpbkZyYW1l
KCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjMsNSArMTYxLDMgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZU1hcE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9kb3dubG9hZGlu
Z1NvdXJjZU1hcHMgPSB7fTsKICAgICB9CiB9OwotCi1XZWJJbnNwZWN0b3IuU291cmNlTWFwTWFu
YWdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9TdG9yYWdlTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzCmluZGV4IGE1OGFjYzBkMTRmODRmNzQ3
ODg3YWNiZTU5M2RlMTgwNjkwYWFkMWIuLmM0ZmI0OGUyMDhhNDQwMWRhZDkwMzBmYjMzNGUyMjli
Y2YyNDk3ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1N0b3JhZ2VNYW5hZ2VyLmpzCkBAIC0yNCwxMTcg
KzI0LDEwNCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdl
Ykluc3BlY3Rvci5TdG9yYWdlTWFuYWdlciA9IGZ1bmN0aW9uKCkKK1dlYkluc3BlY3Rvci5TdG9y
YWdlTWFuYWdlciA9IGNsYXNzIFN0b3JhZ2VNYW5hZ2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9i
amVjdAogewotICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gYSBXZWJJbnNwZWN0b3IuT2Jq
ZWN0IHN1YmNsYXNzLCBhbmQgY2FsbCBzdXBlcigpLgotICAgIC8vIFdlYkluc3BlY3Rvci5PYmpl
Y3QuY2FsbCh0aGlzKTsKLQotICAgIGlmICh3aW5kb3cuRE9NU3RvcmFnZUFnZW50KQotICAgICAg
ICBET01TdG9yYWdlQWdlbnQuZW5hYmxlKCk7Ci0gICAgaWYgKHdpbmRvdy5EYXRhYmFzZUFnZW50
KQotICAgICAgICBEYXRhYmFzZUFnZW50LmVuYWJsZSgpOwotICAgIGlmICh3aW5kb3cuSW5kZXhl
ZERCQWdlbnQpCi0gICAgICAgIEluZGV4ZWREQkFnZW50LmVuYWJsZSgpOwotCi0gICAgV2ViSW5z
cGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1h
aW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsK
KyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzdXBlcigpOwogCi0gICAgV2ViSW5z
cGVjdG9yLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZp
Y2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFEb21haW5zQWN0aXZhdGVk
LCB0aGlzKTsKKyAgICAgICAgaWYgKHdpbmRvdy5ET01TdG9yYWdlQWdlbnQpCisgICAgICAgICAg
ICBET01TdG9yYWdlQWdlbnQuZW5hYmxlKCk7CisgICAgICAgIGlmICh3aW5kb3cuRGF0YWJhc2VB
Z2VudCkKKyAgICAgICAgICAgIERhdGFiYXNlQWdlbnQuZW5hYmxlKCk7CisgICAgICAgIGlmICh3
aW5kb3cuSW5kZXhlZERCQWdlbnQpCisgICAgICAgICAgICBJbmRleGVkREJBZ2VudC5lbmFibGUo
KTsKIAotICAgIC8vIENPTVBBVElCSUxJVFkgKGlPUyA2KTogRE9NU3RvcmFnZSB3YXMgZGlzY292
ZXJlZCB2aWEgYSBET01TdG9yYWdlT2JzZXJ2ZXIgZXZlbnQuIE5vdyBET00gU3RvcmFnZQotICAg
IC8vIGlzIGFkZGVkIHdoZW5ldmVyIGEgbmV3IHNlY3VyaXR5T3JpZ2luIGlzIGRpc2NvdmVyZWQu
IENoZWNrIGZvciBET01TdG9yYWdlQWdlbnQuZ2V0RE9NU3RvcmFnZUl0ZW1zLAotICAgIC8vIHdo
aWNoIHdhcyByZW5hbWVkIGF0IHRoZSBzYW1lIHRpbWUgdGhlIGNoYW5nZSB0byBzdGFydCB1c2lu
ZyBzZWN1cml0eU9yaWdpbiB3YXMgbWFkZS4KLSAgICBpZiAod2luZG93LkRPTVN0b3JhZ2VBZ2Vu
dCAmJiBET01TdG9yYWdlQWdlbnQuZ2V0RE9NU3RvcmFnZUl0ZW1zKQotICAgICAgICBXZWJJbnNw
ZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuU2Vj
dXJpdHlPcmlnaW5EaWRDaGFuZ2UsIHRoaXMuX3NlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlLCB0aGlz
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNl
RGlkQ2hhbmdlLCB0aGlzKTsKIAotICAgIHRoaXMuaW5pdGlhbGl6ZSgpOwotfTsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
Tm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFEb21haW5zQWN0
aXZhdGVkLCB0aGlzKTsKIAotV2ViSW5zcGVjdG9yLlN0b3JhZ2VNYW5hZ2VyLkV2ZW50ID0gewot
ICAgIENvb2tpZVN0b3JhZ2VPYmplY3RXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdlci1jb29raWUt
c3RvcmFnZS1vYmplY3Qtd2FzLWFkZGVkIiwKLSAgICBET01TdG9yYWdlT2JqZWN0V2FzQWRkZWQ6
ICJzdG9yYWdlLW1hbmFnZXItZG9tLXN0b3JhZ2Utb2JqZWN0LXdhcy1hZGRlZCIsCi0gICAgRE9N
U3RvcmFnZU9iamVjdFdhc0luc3BlY3RlZDogInN0b3JhZ2UtZG9tLW9iamVjdC13YXMtaW5zcGVj
dGVkIiwKLSAgICBEYXRhYmFzZVdhc0FkZGVkOiAic3RvcmFnZS1tYW5hZ2VyLWRhdGFiYXNlLXdh
cy1hZGRlZCIsCi0gICAgRGF0YWJhc2VXYXNJbnNwZWN0ZWQ6ICJzdG9yYWdlLW9iamVjdC13YXMt
aW5zcGVjdGVkIiwKLSAgICBJbmRleGVkRGF0YWJhc2VXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdl
ci1pbmRleGVkLWRhdGFiYXNlLXdhcy1hZGRlZCIsCi0gICAgQ2xlYXJlZDogInN0b3JhZ2UtbWFu
YWdlci1jbGVhcmVkIgotfTsKKyAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDYpOiBET01T
dG9yYWdlIHdhcyBkaXNjb3ZlcmVkIHZpYSBhIERPTVN0b3JhZ2VPYnNlcnZlciBldmVudC4gTm93
IERPTSBTdG9yYWdlCisgICAgICAgIC8vIGlzIGFkZGVkIHdoZW5ldmVyIGEgbmV3IHNlY3VyaXR5
T3JpZ2luIGlzIGRpc2NvdmVyZWQuIENoZWNrIGZvciBET01TdG9yYWdlQWdlbnQuZ2V0RE9NU3Rv
cmFnZUl0ZW1zLAorICAgICAgICAvLyB3aGljaCB3YXMgcmVuYW1lZCBhdCB0aGUgc2FtZSB0aW1l
IHRoZSBjaGFuZ2UgdG8gc3RhcnQgdXNpbmcgc2VjdXJpdHlPcmlnaW4gd2FzIG1hZGUuCisgICAg
ICAgIGlmICh3aW5kb3cuRE9NU3RvcmFnZUFnZW50ICYmIERPTVN0b3JhZ2VBZ2VudC5nZXRET01T
dG9yYWdlSXRlbXMpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuU2VjdXJpdHlPcmlnaW5EaWRDaGFuZ2UsIHRo
aXMuX3NlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlLCB0aGlzKTsKIAotV2ViSW5zcGVjdG9yLlN0b3Jh
Z2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlN0
b3JhZ2VNYW5hZ2VyLAotICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5
cGUsCisgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpOworICAgIH0KIAogICAgIC8vIFB1YmxpYwog
Ci0gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKQorICAgIGluaXRpYWxpemUoKQogICAgIHsKICAg
ICAgICAgdGhpcy5fZG9tU3RvcmFnZU9iamVjdHMgPSBbXTsKICAgICAgICAgdGhpcy5fZGF0YWJh
c2VPYmplY3RzID0gW107CiAgICAgICAgIHRoaXMuX2luZGV4ZWREYXRhYmFzZXMgPSBbXTsKICAg
ICAgICAgdGhpcy5fY29va2llU3RvcmFnZU9iamVjdHMgPSB7fTsKLSAgICB9LAorICAgIH0KIAot
ICAgIGRvbVN0b3JhZ2VXYXNBZGRlZDogZnVuY3Rpb24oaWQsIGhvc3QsIGlzTG9jYWxTdG9yYWdl
KQorICAgIGRvbVN0b3JhZ2VXYXNBZGRlZChpZCwgaG9zdCwgaXNMb2NhbFN0b3JhZ2UpCiAgICAg
ewogICAgICAgICB2YXIgZG9tU3RvcmFnZSA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZU9i
amVjdChpZCwgaG9zdCwgaXNMb2NhbFN0b3JhZ2UpOwogCiAgICAgICAgIHRoaXMuX2RvbVN0b3Jh
Z2VPYmplY3RzLnB1c2goZG9tU3RvcmFnZSk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5FdmVudC5ET01TdG9yYWdlT2Jq
ZWN0V2FzQWRkZWQsIHtkb21TdG9yYWdlfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBkYXRhYmFz
ZVdhc0FkZGVkOiBmdW5jdGlvbihpZCwgaG9zdCwgbmFtZSwgdmVyc2lvbikKKyAgICBkYXRhYmFz
ZVdhc0FkZGVkKGlkLCBob3N0LCBuYW1lLCB2ZXJzaW9uKQogICAgIHsKICAgICAgICAgdmFyIGRh
dGFiYXNlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhYmFzZU9iamVjdChpZCwgaG9zdCwgbmFtZSwg
dmVyc2lvbik7CiAKICAgICAgICAgdGhpcy5fZGF0YWJhc2VPYmplY3RzLnB1c2goZGF0YWJhc2Up
OwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU3Rv
cmFnZU1hbmFnZXIuRXZlbnQuRGF0YWJhc2VXYXNBZGRlZCwge2RhdGFiYXNlfSk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBkb21TdG9yYWdlV2FzVXBkYXRlZDogZnVuY3Rpb24oaWQpCisgICAgZG9t
U3RvcmFnZVdhc1VwZGF0ZWQoaWQpCiAgICAgewogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIuRXZlbnQuRE9NU3RvcmFnZVdh
c1VwZGF0ZWQsIGlkKTsKLSAgICB9LAorICAgIH0KIAotICAgIGl0ZW1zQ2xlYXJlZDogZnVuY3Rp
b24oc3RvcmFnZUlkKQorICAgIGl0ZW1zQ2xlYXJlZChzdG9yYWdlSWQpCiAgICAgewogICAgICAg
ICB0aGlzLl9kb21TdG9yYWdlRm9ySWRlbnRpZmllcihzdG9yYWdlSWQpLml0ZW1zQ2xlYXJlZChz
dG9yYWdlSWQpOwotICAgIH0sCisgICAgfQogCi0gICAgaXRlbVJlbW92ZWQ6IGZ1bmN0aW9uKHN0
b3JhZ2VJZCwga2V5KQorICAgIGl0ZW1SZW1vdmVkKHN0b3JhZ2VJZCwga2V5KQogICAgIHsKICAg
ICAgICAgdGhpcy5fZG9tU3RvcmFnZUZvcklkZW50aWZpZXIoc3RvcmFnZUlkKS5pdGVtUmVtb3Zl
ZChrZXkpOwotICAgIH0sCisgICAgfQogCi0gICAgaXRlbUFkZGVkOiBmdW5jdGlvbihzdG9yYWdl
SWQsIGtleSwgdmFsdWUpCisgICAgaXRlbUFkZGVkKHN0b3JhZ2VJZCwga2V5LCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHRoaXMuX2RvbVN0b3JhZ2VGb3JJZGVudGlmaWVyKHN0b3JhZ2VJZCkuaXRl
bUFkZGVkKGtleSwgdmFsdWUpOwotICAgIH0sCisgICAgfQogCi0gICAgaXRlbVVwZGF0ZWQ6IGZ1
bmN0aW9uKHN0b3JhZ2VJZCwga2V5LCBvbGRWYWx1ZSwgdmFsdWUpCisgICAgaXRlbVVwZGF0ZWQo
c3RvcmFnZUlkLCBrZXksIG9sZFZhbHVlLCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMuX2Rv
bVN0b3JhZ2VGb3JJZGVudGlmaWVyKHN0b3JhZ2VJZCkuaXRlbVVwZGF0ZWQoa2V5LCBvbGRWYWx1
ZSwgdmFsdWUpOwotICAgIH0sCisgICAgfQogCi0gICAgaW5zcGVjdERhdGFiYXNlOiBmdW5jdGlv
bihpZCkKKyAgICBpbnNwZWN0RGF0YWJhc2UoaWQpCiAgICAgewogICAgICAgICB2YXIgZGF0YWJh
c2UgPSB0aGlzLl9kYXRhYmFzZUZvcklkZW50aWZpZXIoaWQpOwogICAgICAgICBjb25zb2xlLmFz
c2VydChkYXRhYmFzZSk7CiAgICAgICAgIGlmICghZGF0YWJhc2UpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5T
dG9yYWdlTWFuYWdlci5FdmVudC5EYXRhYmFzZVdhc0luc3BlY3RlZCwge2RhdGFiYXNlfSk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBpbnNwZWN0RE9NU3RvcmFnZTogZnVuY3Rpb24oaWQpCisgICAg
aW5zcGVjdERPTVN0b3JhZ2UoaWQpCiAgICAgewogICAgICAgICB2YXIgZG9tU3RvcmFnZSA9IHRo
aXMuX2RvbVN0b3JhZ2VGb3JJZGVudGlmaWVyKGlkKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQo
ZG9tU3RvcmFnZSk7CiAgICAgICAgIGlmICghZG9tU3RvcmFnZSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlN0
b3JhZ2VNYW5hZ2VyLkV2ZW50LkRPTVN0b3JhZ2VPYmplY3RXYXNJbnNwZWN0ZWQsIHtkb21TdG9y
YWdlfSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcm90ZWN0ZWQKIAotICAgIHJlcXVlc3RJ
bmRleGVkRGF0YWJhc2VEYXRhOiBmdW5jdGlvbihvYmplY3RTdG9yZSwgb2JqZWN0U3RvcmVJbmRl
eCwgc3RhcnRFbnRyeUluZGV4LCBtYXhpbXVtRW50cnlDb3VudCwgY2FsbGJhY2spCisgICAgcmVx
dWVzdEluZGV4ZWREYXRhYmFzZURhdGEob2JqZWN0U3RvcmUsIG9iamVjdFN0b3JlSW5kZXgsIHN0
YXJ0RW50cnlJbmRleCwgbWF4aW11bUVudHJ5Q291bnQsIGNhbGxiYWNrKQogICAgIHsKICAgICAg
ICAgY29uc29sZS5hc3NlcnQod2luZG93LkluZGV4ZWREQkFnZW50KTsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQob2JqZWN0U3RvcmUpOwpAQCAtMTcwLDExICsxNTcsMTEgQEAgV2ViSW5zcGVjdG9y
LlN0b3JhZ2VNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfTsKIAogICAgICAgICBJbmRl
eGVkREJBZ2VudC5yZXF1ZXN0RGF0YS5pbnZva2UocmVxdWVzdEFyZ3VtZW50cywgcHJvY2Vzc0Rh
dGEpOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJpdmF0ZQogCi0gICAgX2RvbVN0b3JhZ2VG
b3JJZGVudGlmaWVyOiBmdW5jdGlvbihpZCkKKyAgICBfZG9tU3RvcmFnZUZvcklkZW50aWZpZXIo
aWQpCiAgICAgewogICAgICAgICBmb3IgKHZhciBzdG9yYWdlT2JqZWN0IG9mIHRoaXMuX2RvbVN0
b3JhZ2VPYmplY3RzKSB7CiAgICAgICAgICAgICAvLyBUaGUgaWQgaXMgYW4gb2JqZWN0LCBzbyB3
ZSBuZWVkIHRvIGNvbXBhcmUgdGhlIHByb3BlcnRpZXMgdXNpbmcgT2JqZWN0LnNoYWxsb3dFcXVh
bC4KQEAgLTE4NCw5ICsxNzEsOSBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90
eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICBfbWFp
blJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQo
ZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lKTsKIApAQCAtMjA5LDkg
KzE5Niw5IEBAIFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgdGhpcy5fY29va2llU3RvcmFnZU9iamVjdHNbaG9zdF0gPSBuZXcgV2ViSW5zcGVjdG9y
LkNvb2tpZVN0b3JhZ2VPYmplY3QoaG9zdCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5FdmVudC5Db29raWVTdG9yYWdl
T2JqZWN0V2FzQWRkZWQsIHtjb29raWVTdG9yYWdlOiB0aGlzLl9jb29raWVTdG9yYWdlT2JqZWN0
c1tob3N0XX0pOwotICAgIH0sCisgICAgfQogCi0gICAgX2FkZERPTVN0b3JhZ2VJZk5lZWRlZDog
ZnVuY3Rpb24oZnJhbWUpCisgICAgX2FkZERPTVN0b3JhZ2VJZk5lZWRlZChmcmFtZSkKICAgICB7
CiAgICAgICAgIC8vIERvbid0IHNob3cgc3RvcmFnZSBpZiB3ZSBkb24ndCBoYXZlIGEgc2VjdXJp
dHkgb3JpZ2luIChhYm91dDpibGFuaykuCiAgICAgICAgIGlmICghZnJhbWUuc2VjdXJpdHlPcmln
aW4gfHwgZnJhbWUuc2VjdXJpdHlPcmlnaW4gPT09ICI6Ly8iKQpAQCAtMjI2LDkgKzIxMyw5IEBA
IFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBz
ZXNzaW9uU3RvcmFnZUlkZW50aWZpZXIgPSB7c2VjdXJpdHlPcmlnaW46IGZyYW1lLnNlY3VyaXR5
T3JpZ2luLCBpc0xvY2FsU3RvcmFnZTogZmFsc2V9OwogICAgICAgICBpZiAoIXRoaXMuX2RvbVN0
b3JhZ2VGb3JJZGVudGlmaWVyKHNlc3Npb25TdG9yYWdlSWRlbnRpZmllcikpCiAgICAgICAgICAg
ICB0aGlzLmRvbVN0b3JhZ2VXYXNBZGRlZChzZXNzaW9uU3RvcmFnZUlkZW50aWZpZXIsIGZyYW1l
Lm1haW5SZXNvdXJjZS51cmxDb21wb25lbnRzLmhvc3QsIGZhbHNlKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF9hZGRJbmRleGVkREJEYXRhYmFzZXNJZk5lZWRlZDogZnVuY3Rpb24oZnJhbWUpCisg
ICAgX2FkZEluZGV4ZWREQkRhdGFiYXNlc0lmTmVlZGVkKGZyYW1lKQogICAgIHsKICAgICAgICAg
aWYgKCF3aW5kb3cuSW5kZXhlZERCQWdlbnQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yODks
MTcgKzI3NiwxNyBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAKICAgICAgICAgSW5kZXhlZERCQWdlbnQucmVxdWVzdERhdGFiYXNlTmFtZXMo
c2VjdXJpdHlPcmlnaW4sIHByb2Nlc3NEYXRhYmFzZU5hbWVzLmJpbmQodGhpcykpOwotICAgIH0s
CisgICAgfQogCi0gICAgX3NlY3VyaXR5T3JpZ2luRGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkK
KyAgICBfc2VjdXJpdHlPcmlnaW5EaWRDaGFuZ2UoZXZlbnQpCiAgICAgewogICAgICAgICBjb25z
b2xlLmFzc2VydChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWUpOwog
CiAgICAgICAgIHRoaXMuX2FkZERPTVN0b3JhZ2VJZk5lZWRlZChldmVudC50YXJnZXQpOwogICAg
ICAgICB0aGlzLl9hZGRJbmRleGVkREJEYXRhYmFzZXNJZk5lZWRlZChldmVudC50YXJnZXQpOwot
ICAgIH0sCisgICAgfQogCi0gICAgX2RhdGFiYXNlRm9ySWRlbnRpZmllcjogZnVuY3Rpb24oaWQp
CisgICAgX2RhdGFiYXNlRm9ySWRlbnRpZmllcihpZCkKICAgICB7CiAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fZGF0YWJhc2VPYmplY3RzLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICBpZiAodGhpcy5fZGF0YWJhc2VPYmplY3RzW2ldLmlkID09PSBpZCkKQEAgLTMwNywxMiAr
Mjk0LDIyIEBAIFdlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIF9leHRy
YURvbWFpbnNBY3RpdmF0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9leHRyYURvbWFpbnNBY3Rp
dmF0ZWQoZXZlbnQpCiAgICAgewogICAgICAgICAKICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZG9t
YWlucy5jb250YWlucygiRE9NU3RvcmFnZSIpICYmIHdpbmRvdy5ET01TdG9yYWdlQWdlbnQgJiYg
RE9NU3RvcmFnZUFnZW50LmdldERPTVN0b3JhZ2VJdGVtcykKICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5TZWN1
cml0eU9yaWdpbkRpZENoYW5nZSwgdGhpcy5fc2VjdXJpdHlPcmlnaW5EaWRDaGFuZ2UsIHRoaXMp
OwogICAgIH0KIH07CisKK1dlYkluc3BlY3Rvci5TdG9yYWdlTWFuYWdlci5FdmVudCA9IHsKKyAg
ICBDb29raWVTdG9yYWdlT2JqZWN0V2FzQWRkZWQ6ICJzdG9yYWdlLW1hbmFnZXItY29va2llLXN0
b3JhZ2Utb2JqZWN0LXdhcy1hZGRlZCIsCisgICAgRE9NU3RvcmFnZU9iamVjdFdhc0FkZGVkOiAi
c3RvcmFnZS1tYW5hZ2VyLWRvbS1zdG9yYWdlLW9iamVjdC13YXMtYWRkZWQiLAorICAgIERPTVN0
b3JhZ2VPYmplY3RXYXNJbnNwZWN0ZWQ6ICJzdG9yYWdlLWRvbS1vYmplY3Qtd2FzLWluc3BlY3Rl
ZCIsCisgICAgRGF0YWJhc2VXYXNBZGRlZDogInN0b3JhZ2UtbWFuYWdlci1kYXRhYmFzZS13YXMt
YWRkZWQiLAorICAgIERhdGFiYXNlV2FzSW5zcGVjdGVkOiAic3RvcmFnZS1vYmplY3Qtd2FzLWlu
c3BlY3RlZCIsCisgICAgSW5kZXhlZERhdGFiYXNlV2FzQWRkZWQ6ICJzdG9yYWdlLW1hbmFnZXIt
aW5kZXhlZC1kYXRhYmFzZS13YXMtYWRkZWQiLAorICAgIENsZWFyZWQ6ICJzdG9yYWdlLW1hbmFn
ZXItY2xlYXJlZCIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9UaW1lbGluZU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UaW1lbGluZU1hbmFnZXIuanMKaW5kZXgg
MTEzZGI4MjYzOGQ3NmY4MjA4NjY3OTcwMDMwNmU5Njc2ZWYzNDYxMi4uNWQ4ZjcyMjZmOWM1MDRk
OTVmYTIwZTEzMGM5NGNjNTljODQ1ZWMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVGltZWxpbmVNYW5hZ2VyLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RpbWVsaW5lTWFu
YWdlci5qcwpAQCAtMjMsNDUgKzIzLDMyIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlciA9IGZ1bmN0aW9uKCkK
K1dlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIgPSBjbGFzcyBUaW1lbGluZU1hbmFnZXIgZXh0
ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0CiB7Ci0gICAgLy8gRklYTUU6IENvbnZlcnQgdGhpcyB0
byBhIFdlYkluc3BlY3Rvci5PYmplY3Qgc3ViY2xhc3MsIGFuZCBjYWxsIHN1cGVyKCkuCi0gICAg
Ly8gV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgV2ViSW5zcGVjdG9yLkZy
YW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50LlByb3Zpc2lvbmFs
TG9hZFN0YXJ0ZWQsIHRoaXMuX3N0YXJ0QXV0b0NhcHR1cmluZywgdGhpcyk7Ci0gICAgV2ViSW5z
cGVjdG9yLkZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lLkV2ZW50Lk1h
aW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJlc291cmNlRGlkQ2hhbmdlLCB0aGlzKTsK
LSAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJh
bWUuRXZlbnQuUmVzb3VyY2VXYXNBZGRlZCwgdGhpcy5fcmVzb3VyY2VXYXNBZGRlZCwgdGhpcyk7
Ci0KLSAgICB0aGlzLl9yZWNvcmRpbmdzID0gW107Ci0gICAgdGhpcy5fYWN0aXZlUmVjb3JkaW5n
ID0gbnVsbDsKLSAgICB0aGlzLl9pc0NhcHR1cmluZyA9IGZhbHNlOworICAgIGNvbnN0cnVjdG9y
KCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CiAKLSAgICB0aGlzLl9uZXh0UmVjb3JkaW5nSWRl
bnRpZmllciA9IDE7CisgICAgICAgIFdlYkluc3BlY3Rvci5GcmFtZS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5GcmFtZS5FdmVudC5Qcm92aXNpb25hbExvYWRTdGFydGVkLCB0aGlzLl9z
dGFydEF1dG9DYXB0dXJpbmcsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuRnJhbWUuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuTWFpblJlc291cmNlRGlkQ2hh
bmdlLCB0aGlzLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICBXZWJJbnNw
ZWN0b3IuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRnJhbWUuRXZlbnQuUmVz
b3VyY2VXYXNBZGRlZCwgdGhpcy5fcmVzb3VyY2VXYXNBZGRlZCwgdGhpcyk7CiAKLSAgICB0aGlz
Ll9ib3VuZFN0b3BDYXB0dXJpbmcgPSB0aGlzLnN0b3BDYXB0dXJpbmcuYmluZCh0aGlzKTsKKyAg
ICAgICAgdGhpcy5fcmVjb3JkaW5ncyA9IFtdOworICAgICAgICB0aGlzLl9hY3RpdmVSZWNvcmRp
bmcgPSBudWxsOworICAgICAgICB0aGlzLl9pc0NhcHR1cmluZyA9IGZhbHNlOwogCi0gICAgZnVu
Y3Rpb24gZGVsYXllZFdvcmsoKQotICAgIHsKLSAgICAgICAgdGhpcy5fbG9hZE5ld1JlY29yZGlu
ZygpOwotICAgIH0KKyAgICAgICAgdGhpcy5fbmV4dFJlY29yZGluZ0lkZW50aWZpZXIgPSAxOwog
Ci0gICAgLy8gQWxsb3cgb3RoZXIgY29kZSB0byBzZXQgdXAgbGlzdGVuZXJzIGJlZm9yZSBmaXJp
bmcgdGhlIGluaXRpYWwgUmVjb3JkaW5nTG9hZGVkIGV2ZW50LgotICAgIHNldFRpbWVvdXQoZGVs
YXllZFdvcmsuYmluZCh0aGlzKSwgMCk7Ci19OworICAgICAgICB0aGlzLl9ib3VuZFN0b3BDYXB0
dXJpbmcgPSB0aGlzLnN0b3BDYXB0dXJpbmcuYmluZCh0aGlzKTsKIAotV2ViSW5zcGVjdG9yLlRp
bWVsaW5lTWFuYWdlci5FdmVudCA9IHsKLSAgICBSZWNvcmRpbmdDcmVhdGVkOiAidGltZWxpbmUt
bWFuYWdlci1yZWNvcmRpbmctY3JlYXRlZCIsCi0gICAgUmVjb3JkaW5nTG9hZGVkOiAidGltZWxp
bmUtbWFuYWdlci1yZWNvcmRpbmctbG9hZGVkIiwKLSAgICBDYXB0dXJpbmdTdGFydGVkOiAidGlt
ZWxpbmUtbWFuYWdlci1jYXB0dXJpbmctc3RhcnRlZCIsCi0gICAgQ2FwdHVyaW5nU3RvcHBlZDog
InRpbWVsaW5lLW1hbmFnZXItY2FwdHVyaW5nLXN0b3BwZWQiCi19OwotCi1XZWJJbnNwZWN0b3Iu
VGltZWxpbmVNYW5hZ2VyLk1heGltdW1BdXRvUmVjb3JkRHVyYXRpb24gPSA5MDAwMDsgLy8gOTAg
c2Vjb25kcwotV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5NYXhpbXVtQXV0b1JlY29yZER1
cmF0aW9uQWZ0ZXJMb2FkRXZlbnQgPSAxMDAwMDsgLy8gMTAgc2Vjb25kcwotV2ViSW5zcGVjdG9y
LlRpbWVsaW5lTWFuYWdlci5EZWFkVGltZVJlcXVpcmVkVG9TdG9wQXV0b1JlY29yZGluZ0Vhcmx5
ID0gMjAwMDsgLy8gMiBzZWNvbmRzCisgICAgICAgIGZ1bmN0aW9uIGRlbGF5ZWRXb3JrKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdGhpcy5fbG9hZE5ld1JlY29yZGluZygpOworICAgICAgICB9
CiAKLVdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewotICAgIGNvbnN0
cnVjdG9yOiBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLAorICAgICAgICAvLyBBbGxvdyBv
dGhlciBjb2RlIHRvIHNldCB1cCBsaXN0ZW5lcnMgYmVmb3JlIGZpcmluZyB0aGUgaW5pdGlhbCBS
ZWNvcmRpbmdMb2FkZWQgZXZlbnQuCisgICAgICAgIHNldFRpbWVvdXQoZGVsYXllZFdvcmsuYmlu
ZCh0aGlzKSwgMCk7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKQEAgLTcwLDE5ICs1NywxOSBA
QCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2FjdGl2ZVJlY29yZGluZyB8fCAhdGhpcy5faXNDYXB0
dXJpbmcpOwogICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlUmVjb3JkaW5nOwotICAgIH0sCisg
ICAgfQogCiAgICAgZ2V0IHJlY29yZGluZ3MoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X3JlY29yZGluZ3Muc2xpY2UoKTsKLSAgICB9LAorICAgIH0KIAotICAgIGlzQ2FwdHVyaW5nOiBm
dW5jdGlvbigpCisgICAgaXNDYXB0dXJpbmcoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X2lzQ2FwdHVyaW5nOwotICAgIH0sCisgICAgfQogCi0gICAgc3RhcnRDYXB0dXJpbmc6IGZ1bmN0
aW9uKHNob3VsZENyZWF0ZVJlY29yZGluZykKKyAgICBzdGFydENhcHR1cmluZyhzaG91bGRDcmVh
dGVSZWNvcmRpbmcpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5faXNDYXB0
dXJpbmcsICJUaW1lbGluZU1hbmFnZXIgaXMgYWxyZWFkeSBjYXB0dXJpbmcuIik7CiAKQEAgLTk3
LDkgKzg0LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnRpbWVsaW5lTWFuYWdlci5jYXB0dXJpbmdTdGFy
dGVkKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgIH0sCisgICAgfQogCi0gICAg
c3RvcENhcHR1cmluZzogZnVuY3Rpb24oKQorICAgIHN0b3BDYXB0dXJpbmcoKQogICAgIHsKICAg
ICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faXNDYXB0dXJpbmcsICJUaW1lbGluZU1hbmFnZXIg
aXMgbm90IGNhcHR1cmluZy4iKTsKIApAQCAtMTA4LDkgKzk1LDkgQEAgV2ViSW5zcGVjdG9yLlRp
bWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIE5PVEU6IEFsd2F5cyBzdG9w
IGltbWVkaWF0ZWx5IGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgYSBUaW1lbGluZS5yZWNvcmRpbmdT
dG9wcGVkIGV2ZW50LgogICAgICAgICAvLyBUaGlzIHdheSB0aGUgVUkgZmVlbHMgYXMgcmVzcG9u
c2l2ZSB0byBhIHN0b3AgYXMgcG9zc2libGUuCiAgICAgICAgIHRoaXMuY2FwdHVyaW5nU3RvcHBl
ZCgpOwotICAgIH0sCisgICAgfQogCi0gICAgdW5sb2FkUmVjb3JkaW5nOiBmdW5jdGlvbigpCisg
ICAgdW5sb2FkUmVjb3JkaW5nKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fYWN0aXZlUmVj
b3JkaW5nKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIwLDE5ICsxMDcsMTkgQEAgV2ViSW5z
cGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fYWN0
aXZlUmVjb3JkaW5nLnVubG9hZGVkKCk7CiAgICAgICAgIHRoaXMuX2FjdGl2ZVJlY29yZGluZyA9
IG51bGw7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBjb21wdXRlRWxhcHNlZFRpbWU6IGZ1bmN0aW9u
KHRpbWVzdGFtcCkKKyAgICBjb21wdXRlRWxhcHNlZFRpbWUodGltZXN0YW1wKQogICAgIHsKICAg
ICAgICAgaWYgKCF0aGlzLl9hY3RpdmVSZWNvcmRpbmcpCiAgICAgICAgICAgICByZXR1cm4gMDsK
IAogICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlUmVjb3JkaW5nLmNvbXB1dGVFbGFwc2VkVGlt
ZSh0aW1lc3RhbXApOwotICAgIH0sCisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVkCiAKLSAgICBj
YXB0dXJpbmdTdGFydGVkOiBmdW5jdGlvbigpCisgICAgY2FwdHVyaW5nU3RhcnRlZCgpCiAgICAg
ewogICAgICAgICBpZiAodGhpcy5faXNDYXB0dXJpbmcpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNDAsOSArMTI3LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX2lzQ2FwdHVyaW5nID0gdHJ1ZTsKIAogICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLkV2ZW50
LkNhcHR1cmluZ1N0YXJ0ZWQpOwotICAgIH0sCisgICAgfQogCi0gICAgY2FwdHVyaW5nU3RvcHBl
ZDogZnVuY3Rpb24oKQorICAgIGNhcHR1cmluZ1N0b3BwZWQoKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9pc0NhcHR1cmluZykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2MSw5ICsxNDgs
OSBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5fYXV0b0NhcHR1cmluZ01haW5SZXNvdXJjZSA9IG51bGw7CiAKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5FdmVu
dC5DYXB0dXJpbmdTdG9wcGVkKTsKLSAgICB9LAorICAgIH0KIAotICAgIGV2ZW50UmVjb3JkZWQ6
IGZ1bmN0aW9uKHJlY29yZFBheWxvYWQpCisgICAgZXZlbnRSZWNvcmRlZChyZWNvcmRQYXlsb2Fk
KQogICAgIHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9yLlRpbWVsaW5lT2Jz
ZXJ2ZXIuCiAKQEAgLTE3NCwxNyArMTYxLDE3IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICByZWNvcmRzLmZvckVhY2goZnVuY3Rpb24oY3VycmVu
dFZhbHVlKSB7CiAgICAgICAgICAgICB0aGlzLl9hZGRSZWNvcmQoY3VycmVudFZhbHVlKTsKICAg
ICAgICAgfS5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgIH0KIAotICAgIHBhZ2VEaWRMb2FkOiBm
dW5jdGlvbih0aW1lc3RhbXApCisgICAgcGFnZURpZExvYWQodGltZXN0YW1wKQogICAgIHsKICAg
ICAgICAgaWYgKGlzTmFOKFdlYkluc3BlY3Rvci5mcmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJh
bWUubG9hZEV2ZW50VGltZXN0YW1wKSkKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5mcmFtZVJl
c291cmNlTWFuYWdlci5tYWluRnJhbWUubWFya0xvYWRFdmVudCh0aGlzLmFjdGl2ZVJlY29yZGlu
Zy5jb21wdXRlRWxhcHNlZFRpbWUodGltZXN0YW1wKSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAv
LyBQcml2YXRlCiAKLSAgICBfcHJvY2Vzc05lc3RlZFJlY29yZHM6IGZ1bmN0aW9uKGNoaWxkUmVj
b3JkUGF5bG9hZHMsIHBhcmVudFJlY29yZFBheWxvYWQpCisgICAgX3Byb2Nlc3NOZXN0ZWRSZWNv
cmRzKGNoaWxkUmVjb3JkUGF5bG9hZHMsIHBhcmVudFJlY29yZFBheWxvYWQpCiAgICAgewogICAg
ICAgICAvLyBDb252ZXJ0IHRvIGEgc2luZ2xlIGl0ZW0gYXJyYXkgaWYgbmVlZGVkLgogICAgICAg
ICBpZiAoIShjaGlsZFJlY29yZFBheWxvYWRzIGluc3RhbmNlb2YgQXJyYXkpKQpAQCAtMjEzLDkg
KzIwMCw5IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAKICAgICAgICAgcmV0dXJuIHJlY29yZHM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBf
cHJvY2Vzc1JlY29yZDogZnVuY3Rpb24ocmVjb3JkUGF5bG9hZCwgcGFyZW50UmVjb3JkUGF5bG9h
ZCkKKyAgICBfcHJvY2Vzc1JlY29yZChyZWNvcmRQYXlsb2FkLCBwYXJlbnRSZWNvcmRQYXlsb2Fk
KQogICAgIHsKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRoaXMuYWN0aXZlUmVjb3JkaW5nLmNv
bXB1dGVFbGFwc2VkVGltZShyZWNvcmRQYXlsb2FkLnN0YXJ0VGltZSk7CiAgICAgICAgIHZhciBl
bmRUaW1lID0gdGhpcy5hY3RpdmVSZWNvcmRpbmcuY29tcHV0ZUVsYXBzZWRUaW1lKHJlY29yZFBh
eWxvYWQuZW5kVGltZSk7CkBAIC0zNjksOSArMzU2LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB9LAorICAgIH0KIAotICAgIF9wcm9jZXNzRXZlbnQ6IGZ1bmN0aW9uKHJlY29yZFBheWxv
YWQsIHBhcmVudFJlY29yZFBheWxvYWQpCisgICAgX3Byb2Nlc3NFdmVudChyZWNvcmRQYXlsb2Fk
LCBwYXJlbnRSZWNvcmRQYXlsb2FkKQogICAgIHsKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHRo
aXMuYWN0aXZlUmVjb3JkaW5nLmNvbXB1dGVFbGFwc2VkVGltZShyZWNvcmRQYXlsb2FkLnN0YXJ0
VGltZSk7CiAgICAgICAgIHZhciBlbmRUaW1lID0gdGhpcy5hY3RpdmVSZWNvcmRpbmcuY29tcHV0
ZUVsYXBzZWRUaW1lKHJlY29yZFBheWxvYWQuZW5kVGltZSk7CkBAIC00MjMsOSArNDEwLDkgQEAg
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAorICAgIH0KIAotICAgIF9sb2FkTmV3UmVjb3Jk
aW5nOiBmdW5jdGlvbigpCisgICAgX2xvYWROZXdSZWNvcmRpbmcoKQogICAgIHsKICAgICAgICAg
aWYgKHRoaXMuX2FjdGl2ZVJlY29yZGluZyAmJiB0aGlzLl9hY3RpdmVSZWNvcmRpbmcuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDUyLDkgKzQzOSw5IEBAIFdlYkluc3BlY3Rv
ci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9sZWdhY3lGaXJz
dFJlY29yZGVkVGltZXN0YW1wID0gTmFOOwogICAgICAgICB0aGlzLl9hY3RpdmVSZWNvcmRpbmcg
PSBuZXdSZWNvcmRpbmc7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuRXZlbnQuUmVjb3JkaW5nTG9hZGVkLCB7b2xkUmVj
b3JkaW5nfSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfY2FsbEZyYW1lc0Zyb21QYXlsb2FkOiBm
dW5jdGlvbihwYXlsb2FkKQorICAgIF9jYWxsRnJhbWVzRnJvbVBheWxvYWQocGF5bG9hZCkKICAg
ICB7CiAgICAgICAgIGlmICghcGF5bG9hZCkKICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAt
NDgzLDE4ICs0NzAsMTggQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gcGF5bG9hZC5tYXAoY3JlYXRlQ2FsbEZy
YW1lKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hZGRSZWNvcmQ6IGZ1bmN0aW9uKHJlY29yZCkK
KyAgICBfYWRkUmVjb3JkKHJlY29yZCkKICAgICB7CiAgICAgICAgIHRoaXMuX2FjdGl2ZVJlY29y
ZGluZy5hZGRSZWNvcmQocmVjb3JkKTsKIAogICAgICAgICAvLyBPbmx5IHdvcnJ5IGFib3V0IGRl
YWQgdGltZSBhZnRlciB0aGUgbG9hZCBldmVudC4KICAgICAgICAgaWYgKCFpc05hTihXZWJJbnNw
ZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIubWFpbkZyYW1lLmxvYWRFdmVudFRpbWVzdGFtcCkp
CiAgICAgICAgICAgICB0aGlzLl9yZXNldEF1dG9SZWNvcmRpbmdEZWFkVGltZVRpbWVvdXQoKTsK
LSAgICB9LAorICAgIH0KIAotICAgIF9zdGFydEF1dG9DYXB0dXJpbmc6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIF9zdGFydEF1dG9DYXB0dXJpbmcoZXZlbnQpCiAgICAgewogICAgICAgICBpZiAoIWV2
ZW50LnRhcmdldC5pc01haW5GcmFtZSgpIHx8ICh0aGlzLl9pc0NhcHR1cmluZyAmJiAhdGhpcy5f
YXV0b0NhcHR1cmluZ01haW5SZXNvdXJjZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC01MTksOSArNTA2LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX3N0b3BDYXB0dXJpbmdUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlz
Ll9ib3VuZFN0b3BDYXB0dXJpbmcsIFdlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuTWF4aW11
bUF1dG9SZWNvcmREdXJhdGlvbik7CiAKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfc3RvcEF1dG9SZWNvcmRpbmdTb29uOiBmdW5jdGlvbigpCisgICAgX3N0b3BB
dXRvUmVjb3JkaW5nU29vbigpCiAgICAgewogICAgICAgICAvLyBPbmx5IGF1dG8gc3RvcCB3aGVu
IGF1dG8gY2FwdHVyaW5nLgogICAgICAgICBpZiAoIXRoaXMuX2lzQ2FwdHVyaW5nIHx8ICF0aGlz
Ll9hdXRvQ2FwdHVyaW5nTWFpblJlc291cmNlKQpAQCAtNTMwLDkgKzUxNyw5IEBAIFdlYkluc3Bl
Y3Rvci5UaW1lbGluZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fc3Rv
cENhcHR1cmluZ1RpbWVvdXQpCiAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3RvcENh
cHR1cmluZ1RpbWVvdXQpOwogICAgICAgICB0aGlzLl9zdG9wQ2FwdHVyaW5nVGltZW91dCA9IHNl
dFRpbWVvdXQodGhpcy5fYm91bmRTdG9wQ2FwdHVyaW5nLCBXZWJJbnNwZWN0b3IuVGltZWxpbmVN
YW5hZ2VyLk1heGltdW1BdXRvUmVjb3JkRHVyYXRpb25BZnRlckxvYWRFdmVudCk7Ci0gICAgfSwK
KyAgICB9CiAKLSAgICBfcmVzZXRBdXRvUmVjb3JkaW5nRGVhZFRpbWVUaW1lb3V0OiBmdW5jdGlv
bigpCisgICAgX3Jlc2V0QXV0b1JlY29yZGluZ0RlYWRUaW1lVGltZW91dCgpCiAgICAgewogICAg
ICAgICAvLyBPbmx5IG1vbml0b3IgZGVhZCB0aW1lIHdoZW4gYXV0byBjYXB0dXJpbmcuCiAgICAg
ICAgIGlmICghdGhpcy5faXNDYXB0dXJpbmcgfHwgIXRoaXMuX2F1dG9DYXB0dXJpbmdNYWluUmVz
b3VyY2UpCkBAIC01NDEsOSArNTI4LDkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9kZWFkVGltZVRpbWVvdXQpCiAgICAgICAg
ICAgICBjbGVhclRpbWVvdXQodGhpcy5fZGVhZFRpbWVUaW1lb3V0KTsKICAgICAgICAgdGhpcy5f
ZGVhZFRpbWVUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLl9ib3VuZFN0b3BDYXB0dXJpbmcsIFdl
Ykluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuRGVhZFRpbWVSZXF1aXJlZFRvU3RvcEF1dG9SZWNv
cmRpbmdFYXJseSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdl
OiBmdW5jdGlvbihldmVudCkKKyAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQogICAg
IHsKICAgICAgICAgLy8gSWdub3JlIHJlc291cmNlIGV2ZW50cyB3aGVuIHRoZXJlIGlzbid0IGEg
bWFpbiBmcmFtZSB5ZXQuIFRob3NlIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGJ5CiAgICAgICAgIC8v
IGxvYWRpbmcgdGhlIGNhY2hlZCByZXNvdXJjZXMgd2hlbiB0aGUgaW5zcGVjdG9yIG9wZW5zLCBh
bmQgdGhleSBkbyBub3QgaGF2ZSB0aW1pbmcgaW5mb3JtYXRpb24uCkBAIC01NjEsOSArNTQ4LDkg
QEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgdGhpcy5fYWRkUmVjb3JkKG5ldyBXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUaW1lbGluZVJlY29yZChtYWluUmVzb3VyY2UpKTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9yZXNvdXJjZVdhc0FkZGVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfcmVzb3VyY2VXYXNBZGRl
ZChldmVudCkKICAgICB7CiAgICAgICAgIC8vIElnbm9yZSByZXNvdXJjZSBldmVudHMgd2hlbiB0
aGVyZSBpc24ndCBhIG1haW4gZnJhbWUgeWV0LiBUaG9zZSBldmVudHMgYXJlIHRyaWdnZXJlZCBi
eQogICAgICAgICAvLyBsb2FkaW5nIHRoZSBjYWNoZWQgcmVzb3VyY2VzIHdoZW4gdGhlIGluc3Bl
Y3RvciBvcGVucywgYW5kIHRoZXkgZG8gbm90IGhhdmUgdGltaW5nIGluZm9ybWF0aW9uLgpAQCAt
NTc3LDQgKzU2NCwxMyBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuVGltZWxpbmVNYW5hZ2VyLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5U
aW1lbGluZU1hbmFnZXIuRXZlbnQgPSB7CisgICAgUmVjb3JkaW5nQ3JlYXRlZDogInRpbWVsaW5l
LW1hbmFnZXItcmVjb3JkaW5nLWNyZWF0ZWQiLAorICAgIFJlY29yZGluZ0xvYWRlZDogInRpbWVs
aW5lLW1hbmFnZXItcmVjb3JkaW5nLWxvYWRlZCIsCisgICAgQ2FwdHVyaW5nU3RhcnRlZDogInRp
bWVsaW5lLW1hbmFnZXItY2FwdHVyaW5nLXN0YXJ0ZWQiLAorICAgIENhcHR1cmluZ1N0b3BwZWQ6
ICJ0aW1lbGluZS1tYW5hZ2VyLWNhcHR1cmluZy1zdG9wcGVkIgorfTsKKworV2ViSW5zcGVjdG9y
LlRpbWVsaW5lTWFuYWdlci5NYXhpbXVtQXV0b1JlY29yZER1cmF0aW9uID0gOTAwMDA7IC8vIDkw
IHNlY29uZHMKK1dlYkluc3BlY3Rvci5UaW1lbGluZU1hbmFnZXIuTWF4aW11bUF1dG9SZWNvcmRE
dXJhdGlvbkFmdGVyTG9hZEV2ZW50ID0gMTAwMDA7IC8vIDEwIHNlY29uZHMKK1dlYkluc3BlY3Rv
ci5UaW1lbGluZU1hbmFnZXIuRGVhZFRpbWVSZXF1aXJlZFRvU3RvcEF1dG9SZWNvcmRpbmdFYXJs
eSA9IDIwMDA7IC8vIDIgc2Vjb25kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3Rh
dG9yLmpzCmluZGV4IDg1YmU1NzhlZThjNDQ1ZGVkOGJmNTVmZmI0OTgxN2JhZDYxNzRmNGUuLmVk
YzE0MjM1ZTJkZDc0NzkxZWMzMTY1ZTZkMmM2OTc3YjQ4OGU5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90
YXRvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMKQEAgLTIzLDIyICsyMywyMCBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5UeXBlVG9rZW5B
bm5vdGF0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQorV2ViSW5z
cGVjdG9yLlR5cGVUb2tlbkFubm90YXRvciA9IGNsYXNzIFR5cGVUb2tlbkFubm90YXRvciBleHRl
bmRzIFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IKIHsKLSAgICBXZWJJbnNwZWN0b3IuQW5ub3RhdG9y
LmNhbGwodGhpcywgc291cmNlQ29kZVRleHRFZGl0b3IpOwotCi0gICAgdGhpcy5fc2NyaXB0ID0g
c2NyaXB0OwotICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107Ci0gICAgdGhpcy5fdHlwZVRv
a2VuQm9va21hcmtzID0gW107Ci19OworICAgIGNvbnN0cnVjdG9yKHNvdXJjZUNvZGVUZXh0RWRp
dG9yLCBzY3JpcHQpCisgICAgeworICAgICAgICBzdXBlcihzb3VyY2VDb2RlVGV4dEVkaXRvcik7
CiAKLVdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlID0gewotICAgIGNv
bnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLAotICAgIF9fcHJvdG9f
XzogV2ViSW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUsCisgICAgICAgIHRoaXMuX3Njcmlw
dCA9IHNjcmlwdDsKKyAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKKyAgICAgICAg
dGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0gW107CisgICAgfQogCiAgICAgLy8gUHJvdGVjdGVk
CiAKLSAgICBpbnNlcnRBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIGluc2VydEFubm90YXRp
b25zKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtNzcsMTYgKzc1LDE2IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0
b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMo
KTsKICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZW91dFRpbWUpOwogICAgICAgICB9LmJp
bmQodGhpcykpOwotICAgIH0sCisgICAgfQogCi0gICAgY2xlYXJBbm5vdGF0aW9uczogZnVuY3Rp
b24oKQorICAgIGNsZWFyQW5ub3RhdGlvbnMoKQogICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJU
eXBlVG9rZW5zKCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfaW5z
ZXJ0VHlwZVRva2VuOiBmdW5jdGlvbihub2RlKQorICAgIF9pbnNlcnRUeXBlVG9rZW4obm9kZSkK
ICAgICB7CiAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLklkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGlmICghbm9kZS5hdHRh
Y2htZW50cy5fX3R5cGVUb2tlbiAmJiBub2RlLmF0dGFjaG1lbnRzLnR5cGVzICYmIG5vZGUuYXR0
YWNobWVudHMudHlwZXMuaXNWYWxpZCkKQEAgLTExNSw5ICsxMTMsOSBAQCBXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAobm9kZS5hdHRh
Y2htZW50cy5fX3R5cGVUb2tlbikKICAgICAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBl
VG9rZW4udXBkYXRlKG5vZGUuYXR0YWNobWVudHMucmV0dXJuVHlwZXMpOwotICAgIH0sCisgICAg
fQogCi0gICAgX2luc2VydFRva2VuOiBmdW5jdGlvbihvcmlnaW5hbE9mZnNldCwgbm9kZSwgc2hv
dWxkVHJhbnNsYXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QsIHR5cGVUb2tlblRpdGxlVHlw
ZSwgZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKKyAgICBfaW5zZXJ0VG9rZW4ob3JpZ2luYWxPZmZz
ZXQsIG5vZGUsIHNob3VsZFRyYW5zbGF0ZU9mZnNldFRvQWZ0ZXJQYXJhbWV0ZXJMaXN0LCB0eXBl
VG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpCiAgICAgewogICAgICAgICB2
YXIgdG9rZW5Qb3NpdGlvbiA9IHRoaXMuc291cmNlQ29kZVRleHRFZGl0b3Iub3JpZ2luYWxPZmZz
ZXRUb0N1cnJlbnRQb3NpdGlvbihvcmlnaW5hbE9mZnNldCk7CiAgICAgICAgIHZhciBjdXJyZW50
T2Zmc2V0ID0gdGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci5jdXJyZW50UG9zaXRpb25Ub0N1cnJl
bnRPZmZzZXQodG9rZW5Qb3NpdGlvbik7CkBAIC0xNDAsOSArMTM4LDkgQEAgV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIG5vZGUuYXR0YWNobWVu
dHMuX190eXBlVG9rZW4gPSB0eXBlVG9rZW47CiAgICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVz
LnB1c2gobm9kZSk7CiAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcy5wdXNoKGJvb2tt
YXJrKTsKLSAgICB9LAorICAgIH0KIAotICAgIF90cmFuc2xhdGVUb09mZnNldEFmdGVyRnVuY3Rp
b25QYXJhbWV0ZXJMaXN0OiBmdW5jdGlvbihub2RlLCBvZmZzZXQsIHNvdXJjZVN0cmluZykKKyAg
ICBfdHJhbnNsYXRlVG9PZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdChub2RlLCBvZmZz
ZXQsIHNvdXJjZVN0cmluZykKICAgICB7CiAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGhlcmUg
aXMgdGhhdCB3ZSBnZXQgdGhlIG9mZnNldCBzdGFydGluZyBhdCB0aGUgZnVuY3Rpb24ga2V5d29y
ZCAob3IgYWZ0ZXIgdGhlIGdldC9zZXQga2V5d29yZHMpLgogICAgICAgICAvLyBXZSB3aWxsIHJl
dHVybiB0aGUgb2Zmc2V0IGZvciB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiB0aGUgZnVuY3Rp
b24gZGVjbGFyYXRpb24uCkBAIC0xODMsOSArMTgxLDkgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gb2Zm
c2V0ICsgMTsKLSAgICB9LAorICAgIH0KIAotICAgIF9jbGVhclR5cGVUb2tlbnM6IGZ1bmN0aW9u
KCkKKyAgICBfY2xlYXJUeXBlVG9rZW5zKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3R5cGVUb2tl
bk5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgbm9kZS5hdHRhY2ht
ZW50cy5fX3R5cGVUb2tlbiA9IG51bGw7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>