<?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>200971</bug_id>
          
          <creation_ts>2019-08-21 02:33:18 -0700</creation_ts>
          <short_desc>Web Inspector: create additional command line api functions for other console methods</short_desc>
          <delta_ts>2019-08-30 09:45:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=201201</see_also>
          <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>
          
          <blocked>201193</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>tsavell</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1563420</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-21 02:33:18 -0700</bug_when>
    <thetext>Right now, we only show:
 - dir
 - clear
 - table
 - profile
 - profileEnd

But we could show other things:
 - log
 - record
 - recordEnd
 - trace()

Given that all of the `console.*` methods are already always available, having these &quot;shortcuts&quot; (even in cases where the underlying `console.*` has no effect) would be useful/consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563424</commentid>
    <comment_count>1</comment_count>
      <attachid>376856</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-21 02:46:51 -0700</bug_when>
    <thetext>Created attachment 376856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563966</commentid>
    <comment_count>2</comment_count>
      <attachid>376991</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-21 23:20:09 -0700</bug_when>
    <thetext>Created attachment 376991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564532</commentid>
    <comment_count>3</comment_count>
      <attachid>376991</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-23 11:40:59 -0700</bug_when>
    <thetext>Comment on attachment 376991
Patch

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

Very hard to read this patch with all of the changes happening but it looks good.

Looks like some test failures may need to be addressed?

&gt; Source/JavaScriptCore/inspector/InjectedScriptModule.cpp:65
&gt; -    Deprecated::ScriptFunctionCall function(injectedScript.injectedScriptObject(), &quot;module&quot;_s, injectedScriptManager-&gt;inspectorEnvironment().functionCallHandler());
&gt; +    Deprecated::ScriptFunctionCall function(injectedScript.injectedScriptObject(), &quot;hasInjectedModule&quot;_s, injectedScriptManager-&gt;inspectorEnvironment().functionCallHandler());

Nice

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:437
&gt;          return this._modules[name];

`this._modules` could be a Map. That would avoid complexities around `this._modules[&quot;toString&quot;]` returning a Function.

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:1541
&gt; +injectedScript.addCommandLineAPIMethod(&quot;trace&quot;, function() { return inspectedGlobalObject.console.trace(...arguments); });
&gt; +injectedScript.addCommandLineAPIMethod(&quot;warn&quot;, function() { return inspectedGlobalObject.console.warn(...arguments); });

I can&apos;t help but think this is actually a case where a loop would be better (Console API methods), but I bet my opinion on this would change day to day.

&gt; Source/WebCore/inspector/CommandLineAPIModuleSource.js:97
&gt; +    if (typeof types === &quot;undefined&quot;) {

We can use real undefined checks:

    types === undefined

You could even use `let` instead of `var` if you wanted.

&gt; Source/WebCore/inspector/CommandLineAPIModuleSource.js:125
&gt; +            result = result.concat([

These lists are unlikely to change often. As such the 1 word per line actually makes it harder to read. The original code was significantly easier to read for example.

--- 

All of these would be better written as `push` instead of `concat`, to avoid temporary wasted allocations.

    result = result.concat([&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]);

is better written as:

    result.push(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;);

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:51
&gt; +    static get _commandLineAPIKeys()
&gt; +    {
&gt; +        return [

This makes a new array over and over with these strings. Might be worth avoiding the churn each time and just memoizing this. It seems to be used in a `concat()` so creating it once would be fine as users don&apos;t modify it.

    if (!this.__cachedCommandLineAPIKeys)
        this.__cachedCommandLineAPIKeys = [...];
    return this.__cachedCommandLineAPIKeys;

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:277
&gt; +                    }
&gt; +                    else if (targetData.pauseReason === WI.DebuggerManager.PauseReason.Exception) {

Style: `else` on the line above.

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:284
&gt; +                switch (target.type) {

Nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564644</commentid>
    <comment_count>4</comment_count>
      <attachid>376991</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-23 15:45:16 -0700</bug_when>
    <thetext>Comment on attachment 376991
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:437
&gt;&gt;          return this._modules[name];
&gt; 
&gt; `this._modules` could be a Map. That would avoid complexities around `this._modules[&quot;toString&quot;]` returning a Function.

The reason I didn&apos;t do this (I actually would&apos;ve used a `Set`) is that `Set.prototype.add`/`Set.prototype.delete` are observable, whereas `object[key] = value` isn&apos;t.  If/When we move to a builtin, I&apos;d switch to a `@Set`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564661</commentid>
    <comment_count>5</comment_count>
      <attachid>377170</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-23 16:01:44 -0700</bug_when>
    <thetext>Created attachment 377170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564679</commentid>
    <comment_count>6</comment_count>
      <attachid>377176</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-23 16:27:43 -0700</bug_when>
    <thetext>Created attachment 377176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564728</commentid>
    <comment_count>7</comment_count>
      <attachid>377176</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-23 17:47:03 -0700</bug_when>
    <thetext>Comment on attachment 377176
Patch

Clearing flags on attachment: 377176

Committed r249078: &lt;https://trac.webkit.org/changeset/249078&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564729</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-23 17:47:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564731</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-23 17:48:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/54661719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564975</commentid>
    <comment_count>10</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-08-26 09:58:16 -0700</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/249078/webkit

has caused two test to fail:
inspector/debugger/tail-deleted-frames-this-value.html 
inspector/timeline/line-column.html

History:
https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=inspector%2Fdebugger%2Ftail-deleted-frames-this-value.html%20inspector%2Ftimeline%2Fline-column.html

Diffs:
https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/r249096%20(6157)/inspector/debugger/tail-deleted-frames-this-value-diff.txt

https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/r249096%20(6157)/inspector/timeline/line-column-diff.txt

I reproduced inspector/timeline/line-column.html easily by just running it in iterations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565033</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-08-26 12:04:59 -0700</bug_when>
    <thetext>&gt; Diffs:
&gt; https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/
&gt; r249096%20(6157)/inspector/debugger/tail-deleted-frames-this-value-diff.txt
&gt; 
&gt; https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/
&gt; r249096%20(6157)/inspector/timeline/line-column-diff.txt
&gt; 
&gt; I reproduced inspector/timeline/line-column.html easily by just running it
&gt; in iterations.

Timeline test just needs a rebaseline.

Not sure about the debugger one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565139</commentid>
    <comment_count>12</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-26 16:02:59 -0700</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #11)
&gt; &gt; Diffs:
&gt; &gt; https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/
&gt; &gt; r249096%20(6157)/inspector/debugger/tail-deleted-frames-this-value-diff.txt
&gt; &gt; 
&gt; &gt; https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/
&gt; &gt; r249096%20(6157)/inspector/timeline/line-column-diff.txt
&gt; &gt; 
&gt; &gt; I reproduced inspector/timeline/line-column.html easily by just running it in iterations.
&gt; 
&gt; Timeline test just needs a rebaseline.
&gt; 
&gt; Not sure about the debugger one.
Landed followup in r249122 &lt;https://trac.webkit.org/r249122&gt;.

Not sure why inspector/debugger/tail-deleted-frames-this-value.html is failing (didn&apos;t reproduce locally), so I added messages to the various `InspectorTest.assert` to see if I could figure out which one is being triggered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565202</commentid>
    <comment_count>13</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-08-26 17:33:40 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #12)
&gt; (In reply to Joseph Pecoraro from comment #11)
&gt; Not sure why inspector/debugger/tail-deleted-frames-this-value.html is
&gt; failing (didn&apos;t reproduce locally), so I added messages to the various
&gt; `InspectorTest.assert` to see if I could figure out which one is being
&gt; triggered.

--- /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/inspector/debugger/tail-deleted-frames-this-value-expected.txt
+++ /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/inspector/debugger/tail-deleted-frames-this-value-actual.txt
@@ -13,6 +13,7 @@
 PASS: &apos;this&apos; value should have expected property: bThis
 PASS: Call Frame 1 &apos;this&apos; value is correct.
 Expected frame: {&quot;functionName&quot;:&quot;c&quot;,&quot;thisValue&quot;:[&quot;cThis&quot;,0],&quot;isTailDeleted&quot;:true}
+ASSERT: Should have functionName of &apos;c&apos;.
 PASS: &apos;this&apos; value should have expected property: cThis
 PASS: Call Frame 2 &apos;this&apos; value is correct.
 Tests done

https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/r249124%20(6176)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565210</commentid>
    <comment_count>14</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-26 17:50:18 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #13)
&gt; (In reply to Devin Rousso from comment #12)
&gt; &gt; (In reply to Joseph Pecoraro from comment #11)
&gt; &gt; Not sure why inspector/debugger/tail-deleted-frames-this-value.html is failing (didn&apos;t reproduce locally), so I added messages to the various `InspectorTest.assert` to see if I could figure out which one is being triggered.
&gt; 
&gt; --- /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/ inspector/debugger/tail-deleted-frames-this-value-expected.txt
&gt; +++ /Volumes/Data/slave/mojave-release-tests-wk2/build/layout-test-results/ inspector/debugger/tail-deleted-frames-this-value-actual.txt
&gt; @@ -13,6 +13,7 @@
&gt;  PASS: &apos;this&apos; value should have expected property: bThis
&gt;  PASS: Call Frame 1 &apos;this&apos; value is correct.
&gt;  Expected frame:
&gt; {&quot;functionName&quot;:&quot;c&quot;,&quot;thisValue&quot;:[&quot;cThis&quot;,0],&quot;isTailDeleted&quot;:true}
&gt; +ASSERT: Should have functionName of &apos;c&apos;.
&gt;  PASS: &apos;this&apos; value should have expected property: cThis
&gt;  PASS: Call Frame 2 &apos;this&apos; value is correct.
&gt;  Tests done
&gt; 
&gt; https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/r249124%20(6176)/results.html
🤦‍♂️ I feel like an idiot.  I didn&apos;t include the actual value in the assertion message.

Landed r249127 &lt;https://trac.webkit.org/r249127&gt;

Hopefully this will (finally) contain enough info to see what&apos;s going on, and why it&apos;s only having issues on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565373</commentid>
    <comment_count>15</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-08-27 09:45:54 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #14)
&gt; 🤦‍♂️ I feel like an idiot.  I didn&apos;t include the actual value in the
&gt; assertion message.
&gt; 
&gt; Landed r249127 &lt;https://trac.webkit.org/r249127&gt;
&gt; 
&gt; Hopefully this will (finally) contain enough info to see what&apos;s going on,
&gt; and why it&apos;s only having issues on the bots.

--- /Volumes/Data/slave/highsierra-release-tests-wk2/build/layout-test-results/inspector/debugger/tail-deleted-frames-this-value-expected.txt
+++ /Volumes/Data/slave/highsierra-release-tests-wk2/build/layout-test-results/inspector/debugger/tail-deleted-frames-this-value-actual.txt
@@ -13,6 +13,7 @@
 PASS: &apos;this&apos; value should have expected property: bThis
 PASS: Call Frame 1 &apos;this&apos; value is correct.
 Expected frame: {&quot;functionName&quot;:&quot;c&quot;,&quot;thisValue&quot;:[&quot;cThis&quot;,0],&quot;isTailDeleted&quot;:true}
+ASSERT: Should have functionName of &apos;c&apos;, but have &apos;b&apos; instead.
 PASS: &apos;this&apos; value should have expected property: cThis
 PASS: Call Frame 2 &apos;this&apos; value is correct.
 Tests done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565470</commentid>
    <comment_count>16</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-08-27 12:37:15 -0700</bug_when>
    <thetext>Frankly, I&apos;m not entirely sure why this was happening, but I&apos;ve figured out a fix.

&lt;https://webkit.org/b/201193&gt; Web Inspector: don&apos;t attach properties to `injectedScript` for the CommandLineAPI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566700</commentid>
    <comment_count>17</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-08-30 09:45:38 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #16)
&gt; Frankly, I&apos;m not entirely sure why this was happening, but I&apos;ve figured out
&gt; a fix.
&gt; 
&gt; &lt;https://webkit.org/b/201193&gt; Web Inspector: don&apos;t attach properties to
&gt; `injectedScript` for the CommandLineAPI

The test is still a flaky failure after this change, and it also introduced a crash documented in https://bugs.webkit.org/show_bug.cgi?id=201201

I plan on rolling these changes out shortly.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376856</attachid>
            <date>2019-08-21 02:46:51 -0700</date>
            <delta_ts>2019-08-21 23:20:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200971-20190821024650.patch</filename>
            <type>text/plain</type>
            <size>42688</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDczN2ZhYzVkZjVlYWJkYzQ2NjZkMjMzYWEwMzc5
ZmIxZjdlODdlMTQuLjk3MjYxYWRiZDI5ZTUwZjU1ZmNlYzg1YzI5NzQyNzkzNzNjMzAzNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTA4LTIxICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBj
cmVhdGUgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgYXBpIGZ1bmN0aW9ucyBmb3Igb3RoZXIgY29u
c29sZSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDA5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFeHBvc2UgYWxsIGBjb25zb2xlLipgIGZ1bmN0aW9ucyBpbiB0aGUgY29tbWFuZCBsaW5l
IEFQSSwgc2luY2UgdGhleSdyZSBhbGwgYWxyZWFkeSBhYmxlIHRvCisgICAgICAgIGJlIHJlZmVy
ZW5jZWQgdmlhIHRoZSBgY29uc29sZWAgb2JqZWN0LgorCisgICAgICAgIFByb3ZpZGUgYSBzaW1w
bGVyIGludGVyZmFjZSBmb3Igb3RoZXIgaW5qZWN0ZWQgc2NyaXB0cyB0byBtb2RpZnkgdGhlIGNv
bW1hbmQgbGluZSBBUEkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1
bGUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1vZHVsZTo6ZW5zdXJl
SW5qZWN0ZWQpOgorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
OgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLmluc3BlY3RPYmplY3QpOgorICAg
ICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLmFkZENvbW1hbmRMaW5lQVBJR2V0dGVyKTog
QWRkZWQuCisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUuYWRkQ29tbWFuZExpbmVB
UElNZXRob2QpOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5oYXNJ
bmplY3RlZE1vZHVsZSk6IEFkZGVkLgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBl
LmluamVjdE1vZHVsZSk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUuX2V2YWx1
YXRlT24pOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkpOiBBZGRlZC4K
KyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5tb2R1bGUpOiBEZWxldGVkLgorICAg
ICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLl9zYXZlZFJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChiaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEJhc2ljQ29tbWFuZExpbmVBUEkpOiBE
ZWxldGVkLgorICAgICAgICAoY2xlYXIpOiBEZWxldGVkLgorICAgICAgICAodGFibGUpOiBEZWxl
dGVkLgorICAgICAgICAocHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChwcm9maWxlRW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKGtleXMpOiBEZWxldGVkLgorICAgICAgICAodmFsdWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKHF1ZXJ5SW5zdGFuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKHF1ZXJ5
T2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhvbGRlcnMpOiBEZWxldGVkLgorCiAy
MDE5LTA4LTIwICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCBzcGVjdWxhdGl2ZSBidWlsZCBmaXggZm9yIEhpZ2ggU2llcnJhIGFmdGVyIHIy
NDg5MjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA3YTVhYmU4MzEzZTU0MjdiNDZkMjA5NTcyOGQ5ODNlMjliMzYy
Mjc5Li4wYjc2MDBkYmY1N2ViZTgzODc5NTI2NjNhMDlhZjg4MTEwY2QyZmZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTAgQEAKKzIwMTktMDgtMjEgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNyZWF0ZSBhZGRpdGlvbmFsIGNvbW1h
bmQgbGluZSBhcGkgZnVuY3Rpb25zIGZvciBvdGhlciBjb25zb2xlIG1ldGhvZHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDk3MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSBhbGwgYGNvbnNv
bGUuKmAgZnVuY3Rpb25zIGluIHRoZSBjb21tYW5kIGxpbmUgQVBJLCBzaW5jZSB0aGV5J3JlIGFs
bCBhbHJlYWR5IGFibGUgdG8KKyAgICAgICAgYmUgcmVmZXJlbmNlZCB2aWEgdGhlIGBjb25zb2xl
YCBvYmplY3QuCisKKyAgICAgICAgUHJvdmlkZSBhIHNpbXBsZXIgaW50ZXJmYWNlIGZvciBvdGhl
ciBpbmplY3RlZCBzY3JpcHRzIHRvIG1vZGlmeSB0aGUgY29tbWFuZCBsaW5lIEFQSS4KKworICAg
ICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qczoKKyAgICAgICAg
KGluamVjdGVkU2NyaXB0Ll9pbnNwZWN0T2JqZWN0KTogQWRkZWQuCisgICAgICAgIChsb2dFdmVu
dCk6IEFkZGVkLgorICAgICAgICAobm9ybWFsaXplRXZlbnRUeXBlcyk6IEFkZGVkLgorICAgICAg
ICAoY2FuUXVlcnlTZWxlY3Rvck9uTm9kZSk6IEFkZGVkLgorICAgICAgICAoYmluZCk6IERlbGV0
ZWQuCisgICAgICAgICh2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICh0aGlzLm1ldGhvZC50b1N0
cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSSk6IERlbGV0ZWQuCisgICAg
ICAgIChDb21tYW5kTGluZUFQSUltcGwpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVB
UElJbXBsLnByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwu
cHJvdG90eXBlLl9jYW5RdWVyeVNlbGVjdG9yT25Ob2RlKTogRGVsZXRlZC4KKyAgICAgICAgKENv
bW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUueCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5k
TGluZUFQSUltcGwucHJvdG90eXBlLmRpcik6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGlu
ZUFQSUltcGwucHJvdG90eXBlLmRpcnhtbCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGlu
ZUFQSUltcGwucHJvdG90eXBlLmtleXMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVB
UElJbXBsLnByb3RvdHlwZS52YWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVB
UElJbXBsLnByb3RvdHlwZS5wcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5l
QVBJSW1wbC5wcm90b3R5cGUucHJvZmlsZUVuZCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5k
TGluZUFQSUltcGwucHJvdG90eXBlLnRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRM
aW5lQVBJSW1wbC5wcm90b3R5cGUuc2NyZWVuc2hvdCk6IERlbGV0ZWQuCisgICAgICAgIChDb21t
YW5kTGluZUFQSUltcGwucHJvdG90eXBlLm1vbml0b3JFdmVudHMpOiBEZWxldGVkLgorICAgICAg
ICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS51bm1vbml0b3JFdmVudHMpOiBEZWxldGVk
LgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5pbnNwZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUucXVlcnlJbnN0YW5jZXMp
OiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5xdWVyeU9i
amVjdHMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5x
dWVyeUhvbGRlcnMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3Rv
dHlwZS5jb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5
cGUuY2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlw
ZS5nZXRFdmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUlt
cGwucHJvdG90eXBlLl9pbnNwZWN0ZWRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFu
ZExpbmVBUElJbXBsLnByb3RvdHlwZS5fbm9ybWFsaXplRXZlbnRUeXBlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLl9sb2dFdmVudCk6IERlbGV0ZWQu
CisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLl9pbnNwZWN0KTogRGVsZXRl
ZC4KKwogMjAxOS0wOC0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBuZXh0RWxlbWVudFdpdGhHcmVhdGVyVGFiSW5kZXggc2hvdWxkIHVzZSBzaGFkb3dBZGp1
c3RlZFRhYkluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAwMWM1MzljNDk5ZTdiY2U2
MzhhMjJjMDI2OTc3OGM0MGJkZjU4YjljLi44YTFlMTY0MWI5NDZlZTI2NDcwNWYzMjQwZjVhMDQx
MzJiNWIyYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAx
OS0wOC0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogY3JlYXRlIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIGFwaSBmdW5jdGlvbnMg
Zm9yIG90aGVyIGNvbnNvbGUgbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAwOTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRXhwb3NlIGFsbCBgY29uc29sZS4qYCBmdW5jdGlvbnMgaW4gdGhl
IGNvbW1hbmQgbGluZSBBUEksIHNpbmNlIHRoZXkncmUgYWxsIGFscmVhZHkgYWJsZSB0bworICAg
ICAgICBiZSByZWZlcmVuY2VkIHZpYSB0aGUgYGNvbnNvbGVgIG9iamVjdC4KKworICAgICAgICBQ
cm92aWRlIGEgc2ltcGxlciBpbnRlcmZhY2UgZm9yIG90aGVyIGluamVjdGVkIHNjcmlwdHMgdG8g
bW9kaWZ5IHRoZSBjb21tYW5kIGxpbmUgQVBJLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5qczoKKyAgICAg
ICAgKFdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLnByb3RvdHlwZS5nZXQg
X2NvbW1hbmRMaW5lQVBJS2V5cyk6IEFkZGVkLgorICAgICAgICAoV0kuSmF2YVNjcmlwdFJ1bnRp
bWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBsZXRpb25Db250cm9sbGVyQ29tcGxl
dGlvbnNOZWVkZWQudXBkYXRlTGFzdFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV0kuSmF2YVNj
cmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBsZXRpb25Db250cm9s
bGVyQ29tcGxldGlvbnNOZWVkZWQucmVjZWl2ZWRQcm9wZXJ0eU5hbWVzKToKKwogMjAxOS0wOC0y
MCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW1wbGVtZW50IGBxdWVyeUhvbGRlcnNgIENvbW1hbmQgTGluZSBBUEkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1bGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVs
ZS5jcHAKaW5kZXggNDAzZjY3MTJjNmIzNjk0YmQxNjM4ZTVmZGFkYTcyMjQwOWYwNDE0My4uZmQw
MjA2ZWM3NDVlMzhiZDM4ODNiYzc2M2U5NWY2NjI1MjU0N2YzNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAK
QEAgLTYyLDIwICs2MiwyMSBAQCB2b2lkIEluamVjdGVkU2NyaXB0TW9kdWxlOjplbnN1cmVJbmpl
Y3RlZChJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TQogCiAgICAgLy8gRklY
TUU6IE1ha2UgdGhlIEluamVjdGVkU2NyaXB0IGEgbW9kdWxlIGl0c2VsZi4KICAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrZXIoaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUoKSk7Ci0gICAgRGVw
cmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0LmluamVj
dGVkU2NyaXB0T2JqZWN0KCksICJtb2R1bGUiX3MsIGluamVjdGVkU2NyaXB0TWFuYWdlci0+aW5z
cGVjdG9yRW52aXJvbm1lbnQoKS5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOworICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdC5pbmplY3RlZFNj
cmlwdE9iamVjdCgpLCAiaGFzSW5qZWN0ZWRNb2R1bGUiX3MsIGluamVjdGVkU2NyaXB0TWFuYWdl
ci0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG5hbWUoKSk7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBm
YWxzZTsKICAgICBhdXRvIHJlc3VsdFZhbHVlID0gaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9u
V2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOwogICAgIEFTU0VSVCghaGFk
RXhjZXB0aW9uKTsKLSAgICBpZiAoaGFkRXhjZXB0aW9uIHx8ICFyZXN1bHRWYWx1ZSB8fCAhcmVz
dWx0VmFsdWUuaXNPYmplY3QoKSkgeworICAgIGlmIChoYWRFeGNlcHRpb24gfHwgIXJlc3VsdFZh
bHVlIHx8ICFyZXN1bHRWYWx1ZS5pc0Jvb2xlYW4oKSB8fCAhcmVzdWx0VmFsdWUuYXNCb29sZWFu
KCkpIHsKICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGlu
amVjdGVkU2NyaXB0LmluamVjdGVkU2NyaXB0T2JqZWN0KCksICJpbmplY3RNb2R1bGUiX3MsIGlu
amVjdGVkU2NyaXB0TWFuYWdlci0+aW5zcGVjdG9yRW52aXJvbm1lbnQoKS5mdW5jdGlvbkNhbGxI
YW5kbGVyKCkpOwogICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChuYW1lKCkpOwogICAg
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzb3VyY2UoKSk7CiAgICAgICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KGhvc3QoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLCBpbmplY3RlZFNjcmlw
dC5zY3JpcHRTdGF0ZSgpKSk7CiAgICAgICAgIHJlc3VsdFZhbHVlID0gaW5qZWN0ZWRTY3JpcHQu
Y2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOwogICAg
ICAgICBpZiAoaGFkRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVk
IHRvIHBhcnNlL2V4ZWN1dGUgJXMhIiwgbmFtZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiJXNcbiIsIHNvdXJjZSgpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0U291cmNlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdFNvdXJjZS5qcwppbmRleCAzNjNhYjZhYzE2ZmFhZTQ1ZTU4YzNjNTYwMWE4NWU5ZWI2ZmJj
MDIyLi41ZWU1MWI0MDk0MzBlNGRlZGUxY2RlODM2NGU0MmMyYzBjMzZkMDI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3Vy
Y2UuanMKQEAgLTM4OSw4ICszODksOCBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmpl
Y3RlZFNjcmlwdAogCiAgICAgaW5zcGVjdE9iamVjdChvYmplY3QpCiAgICAgewotICAgICAgICBp
ZiAodGhpcy5fY29tbWFuZExpbmVBUElJbXBsKQotICAgICAgICAgICAgdGhpcy5fY29tbWFuZExp
bmVBUElJbXBsLmluc3BlY3Qob2JqZWN0KTsKKyAgICAgICAgaWYgKHRoaXMuX2luc3BlY3RPYmpl
Y3QpCisgICAgICAgICAgICB0aGlzLl9pbnNwZWN0T2JqZWN0KG9iamVjdCk7CiAgICAgfQogCiAg
ICAgcmVsZWFzZU9iamVjdChvYmplY3RJZCkKQEAgLTQxNywyNyArNDE3LDM2IEBAIGxldCBJbmpl
Y3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9v
YmplY3RHcm91cHNbb2JqZWN0R3JvdXBOYW1lXTsKICAgICB9CiAKKyAgICAvLyBDb21tYW5kTGlu
ZUFQSQorCisgICAgYWRkQ29tbWFuZExpbmVBUElHZXR0ZXIobmFtZSwgZnVuYykKKyAgICB7Cisg
ICAgICAgIEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9nZXR0ZXJzLnB1c2goe25hbWUs
IGZ1bmN9KTsKKyAgICB9CisKKyAgICBhZGRDb21tYW5kTGluZUFQSU1ldGhvZChuYW1lLCBmdW5j
KQorICAgIHsKKyAgICAgICAgZnVuYy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gImZ1
bmN0aW9uICIgKyBuYW1lICsgIigpIHsgW0NvbW1hbmQgTGluZSBBUEldIH0iIH07CisgICAgICAg
IEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9tZXRob2RzLnB1c2goe25hbWUsIGZ1bmN9
KTsKKyAgICB9CisKICAgICAvLyBJbmplY3RlZFNjcmlwdE1vZHVsZSBDKysgQVBJCiAKLSAgICBt
b2R1bGUobmFtZSkKKyAgICBoYXNJbmplY3RlZE1vZHVsZShuYW1lKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHRoaXMuX21vZHVsZXNbbmFtZV07CiAgICAgfQogCiAgICAgaW5qZWN0TW9kdWxlKG5h
bWUsIHNvdXJjZSwgaG9zdCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9tb2R1bGVzW25h
bWVdOworICAgICAgICB0aGlzLl9tb2R1bGVzW25hbWVdID0gZmFsc2U7CiAKICAgICAgICAgbGV0
IG1vZHVsZUZ1bmN0aW9uID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHNvdXJj
ZSArICIpIik7Ci0gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlv
biIpIHsKLSAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZSkKLSAg
ICAgICAgICAgICAgICBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5lcnJvcigiV2ViIElu
c3BlY3RvciBlcnJvcjogQSBmdW5jdGlvbiB3YXMgZXhwZWN0ZWQgZm9yIG1vZHVsZSAlcyBldmFs
dWF0aW9uIiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQorICAg
ICAgICBpZiAodHlwZW9mIG1vZHVsZUZ1bmN0aW9uICE9PSAiZnVuY3Rpb24iKQorICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBXZWIgSW5zcGVjdG9yOiBhIGZ1bmN0aW9uIHdhcyBleHBlY3RlZCBm
b3IgaW5qZWN0TW9kdWxlIjsKIAotICAgICAgICBsZXQgbW9kdWxlID0gbW9kdWxlRnVuY3Rpb24u
Y2FsbChpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVk
R2xvYmFsT2JqZWN0LCBpbmplY3RlZFNjcmlwdElkLCB0aGlzLCBSZW1vdGVPYmplY3QsIGhvc3Qp
OwotICAgICAgICB0aGlzLl9tb2R1bGVzW25hbWVdID0gbW9kdWxlOwotICAgICAgICByZXR1cm4g
bW9kdWxlOworICAgICAgICBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZEdsb2JhbE9iamVj
dCwgSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIGluamVjdGVkU2Ny
aXB0SWQsIHRoaXMsIFJlbW90ZU9iamVjdCwgaG9zdCk7CisgICAgICAgIHRoaXMuX21vZHVsZXNb
bmFtZV0gPSB0cnVlOwogICAgIH0KIAogICAgIC8vIEluamVjdGVkU2NyaXB0TW9kdWxlIEphdmFT
Y3JpcHQgQVBJCkBAIC01NjgsMTMgKzU3Nyw4IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNz
IEluamVjdGVkU2NyaXB0CiAgICAgX2V2YWx1YXRlT24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4
cHJlc3Npb24sIGlzRXZhbE9uQ2FsbEZyYW1lLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkpCiAgICAg
ewogICAgICAgICBsZXQgY29tbWFuZExpbmVBUEkgPSBudWxsOwotICAgICAgICBpZiAoaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5Db21tYW5kTGluZUFQSSkK
LSAgICAgICAgICAgICAgICBjb21tYW5kTGluZUFQSSA9IG5ldyB0aGlzLkNvbW1hbmRMaW5lQVBJ
KHRoaXMuX2NvbW1hbmRMaW5lQVBJSW1wbCwgaXNFdmFsT25DYWxsRnJhbWUgPyBvYmplY3QgOiBu
dWxsKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21tYW5kTGluZUFQSSA9
IG5ldyBCYXNpY0NvbW1hbmRMaW5lQVBJKGlzRXZhbE9uQ2FsbEZyYW1lID8gb2JqZWN0IDogbnVs
bCk7Ci0gICAgICAgIH0KLQorICAgICAgICBpZiAoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKQorICAg
ICAgICAgICAgY29tbWFuZExpbmVBUEkgPSBuZXcgSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVB
UEkoaXNFdmFsT25DYWxsRnJhbWUgPyBvYmplY3QgOiBudWxsKQogICAgICAgICByZXR1cm4gZXZh
bEZ1bmN0aW9uLmNhbGwob2JqZWN0LCBleHByZXNzaW9uLCBjb21tYW5kTGluZUFQSSk7CiAgICAg
fQogCkBAIC04NjksMTEgKzg3Myw2IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVj
dGVkU2NyaXB0CiAgICAgICAgIGlmICh0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA+PSAxMDAp
CiAgICAgICAgICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA9IDE7CiAgICAgfQotCi0g
ICAgX3NhdmVkUmVzdWx0KGluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVk
UmVzdWx0c1tpbmRleF07Ci0gICAgfQogfTsKIAogSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1v
ZGUgPSB7CkBAIC0xNDU3LDgwICsxNDU2LDExMCBAQCBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQ
cm94eS5fY3JlYXRlU2NvcGVKc29uID0gZnVuY3Rpb24ob2JqZWN0LCB7bmFtZSwgdHlwZSwgbAog
CiAvLyAtLS0tLS0tCiAKLWZ1bmN0aW9uIGJpbmQoZnVuYywgdGhpc09iamVjdCwgLi4ub3V0ZXJB
cmdzKQorSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkgPSBjbGFzcyBDb21tYW5kTGluZUFQ
SQogewotICAgIHJldHVybiBmdW5jdGlvbiguLi5pbm5lckFyZ3MpIHsKLSAgICAgICAgcmV0dXJu
IGZ1bmMuYXBwbHkodGhpc09iamVjdCwgb3V0ZXJBcmdzLmNvbmNhdChpbm5lckFyZ3MpKTsKLSAg
ICB9OwotfQorICAgIGNvbnN0cnVjdG9yKGNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGxldCBz
YXZlZFJlc3VsdEFsaWFzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LnNhdmVkUmVzdWx0QWxpYXM7CiAK
LWZ1bmN0aW9uIEJhc2ljQ29tbWFuZExpbmVBUEkoY2FsbEZyYW1lKQotewotICAgIGxldCBzYXZl
ZFJlc3VsdEFsaWFzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LnNhdmVkUmVzdWx0QWxpYXM7CisgICAg
ICAgIGxldCBkZWZpbmVHZXR0ZXIgPSAoa2V5LCB2YWx1ZSkgPT4geworICAgICAgICAgICAgaWYg
KHR5cGVvZiB2YWx1ZSAhPT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIGxldCBvcmln
aW5hbFZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jdGlvbigpIHsg
cmV0dXJuIG9yaWdpbmFsVmFsdWU7IH07CisgICAgICAgICAgICB9CiAKLSAgICBsZXQgZGVmaW5l
R2V0dGVyID0gKGtleSwgdmFsdWUpID0+IHsKLSAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0g
ImZ1bmN0aW9uIikgewotICAgICAgICAgICAgbGV0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTsKLSAg
ICAgICAgICAgIHZhbHVlID0gZnVuY3Rpb24oKSB7IHJldHVybiBvcmlnaW5hbFZhbHVlOyB9Owor
ICAgICAgICAgICAgdGhpcy5fX2RlZmluZUdldHRlcl9fKCIkIiArIGtleSwgdmFsdWUpOworICAg
ICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCisgICAgICAgICAgICAgICAgdGhpcy5fX2Rl
ZmluZUdldHRlcl9fKHNhdmVkUmVzdWx0QWxpYXMgKyBrZXksIHZhbHVlKTsKKyAgICAgICAgfTsK
KworICAgICAgICBpZiAoIl9sYXN0UmVzdWx0IiBpbiBpbmplY3RlZFNjcmlwdCkKKyAgICAgICAg
ICAgIGRlZmluZUdldHRlcigiXyIsIGluamVjdGVkU2NyaXB0Ll9sYXN0UmVzdWx0KTsKKworICAg
ICAgICBpZiAoIl9leGNlcHRpb25WYWx1ZSIgaW4gaW5qZWN0ZWRTY3JpcHQpCisgICAgICAgICAg
ICBkZWZpbmVHZXR0ZXIoImV4Y2VwdGlvbiIsIGluamVjdGVkU2NyaXB0Ll9leGNlcHRpb25WYWx1
ZSk7CisKKyAgICAgICAgaWYgKCJfZXZlbnRWYWx1ZSIgaW4gaW5qZWN0ZWRTY3JpcHQpCisgICAg
ICAgICAgICBkZWZpbmVHZXR0ZXIoImV2ZW50IiwgaW5qZWN0ZWRTY3JpcHQuX2V2ZW50VmFsdWUp
OworCisgICAgICAgIC8vICQxLSQ5OQorICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBpbmpl
Y3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBkZWZp
bmVHZXR0ZXIoaSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluamVjdGVk
U2NyaXB0Ll9zYXZlZFJlc3VsdHNbaV07CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCi0g
ICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXygiJCIgKyBrZXksIHZhbHVlKTsKLSAgICAgICAg
aWYgKHNhdmVkUmVzdWx0QWxpYXMpCi0gICAgICAgICAgICB0aGlzLl9fZGVmaW5lR2V0dGVyX18o
c2F2ZWRSZXN1bHRBbGlhcyArIGtleSwgdmFsdWUpOwotICAgIH07CisgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkuX2dldHRlcnMubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGxldCB7bmFtZSwgZnVuY30gPSBJbmplY3RlZFNjcmlwdC5D
b21tYW5kTGluZUFQSS5fZ2V0dGVyc1tpXTsKKyAgICAgICAgICAgIGRlZmluZUdldHRlcihuYW1l
LCBmdW5jKTsKKyAgICAgICAgfQogCi0gICAgaWYgKCJfbGFzdFJlc3VsdCIgaW4gaW5qZWN0ZWRT
Y3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiXyIsIGluamVjdGVkU2NyaXB0Ll9sYXN0UmVz
dWx0KTsKLQotICAgIGlmICgiX2V4Y2VwdGlvblZhbHVlIiBpbiBpbmplY3RlZFNjcmlwdCkKLSAg
ICAgICAgZGVmaW5lR2V0dGVyKCJleGNlcHRpb24iLCBpbmplY3RlZFNjcmlwdC5fZXhjZXB0aW9u
VmFsdWUpOwotCi0gICAgaWYgKCJfZXZlbnRWYWx1ZSIgaW4gaW5qZWN0ZWRTY3JpcHQpCi0gICAg
ICAgIGRlZmluZUdldHRlcigiZXZlbnQiLCBpbmplY3RlZFNjcmlwdC5fZXZlbnRWYWx1ZSk7Ci0K
LSAgICAvLyAkMS0kOTkKLSAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBpbmplY3RlZFNjcmlwdC5f
c2F2ZWRSZXN1bHRzLmxlbmd0aDsgKytpKQotICAgICAgICBkZWZpbmVHZXR0ZXIoaSwgYmluZChp
bmplY3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHQsIGluamVjdGVkU2NyaXB0LCBpKSk7Ci0KLSAgICAv
LyBDb21tYW5kIExpbmUgQVBJIG1ldGhvZHMuCi0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBCYXNp
Y0NvbW1hbmRMaW5lQVBJLm1ldGhvZHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgbGV0IG1ldGhv
ZCA9IEJhc2ljQ29tbWFuZExpbmVBUEkubWV0aG9kc1tpXTsKLSAgICAgICAgdGhpc1ttZXRob2Qu
bmFtZV0gPSBtZXRob2Q7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSW5qZWN0ZWRTY3Jp
cHQuQ29tbWFuZExpbmVBUEkuX21ldGhvZHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxl
dCB7bmFtZSwgZnVuY30gPSBJbmplY3RlZFNjcmlwdC5Db21tYW5kTGluZUFQSS5fbWV0aG9kc1tp
XTsKKyAgICAgICAgICAgIHRoaXNbbmFtZV0gPSBmdW5jOworICAgICAgICB9CiAgICAgfQotfQor
fTsKIAotQmFzaWNDb21tYW5kTGluZUFQSS5tZXRob2RzID0gWwotICAgIGZ1bmN0aW9uIGRpcigp
IHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmRpciguLi5hcmd1bWVudHMp
OyB9LAotICAgIGZ1bmN0aW9uIGNsZWFyKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0
LmNvbnNvbGUuY2xlYXIoLi4uYXJndW1lbnRzKTsgfSwKLSAgICBmdW5jdGlvbiB0YWJsZSgpIHsg
cmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRhYmxlKC4uLmFyZ3VtZW50cyk7
IH0sCi0gICAgZnVuY3Rpb24gcHJvZmlsZSgpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVj
dC5jb25zb2xlLnByb2ZpbGUoLi4uYXJndW1lbnRzKTsgfSwKLSAgICBmdW5jdGlvbiBwcm9maWxl
RW5kKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUucHJvZmlsZUVuZCgu
Li5hcmd1bWVudHMpOyB9LAorSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkuX2dldHRlcnMg
PSBbXTsKK0luamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9tZXRob2RzID0gW107CiAKLSAg
ICBmdW5jdGlvbiBrZXlzKG9iamVjdCkgeyByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTsgfSwK
LSAgICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7Ci0gICAgICAgIGxldCByZXN1bHQgPSBbXTsK
LSAgICAgICAgZm9yIChsZXQga2V5IGluIG9iamVjdCkKLSAgICAgICAgICAgIHJlc3VsdC5wdXNo
KG9iamVjdFtrZXldKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAoraW5qZWN0ZWRT
Y3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImFzc2VydCIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuYXNzZXJ0KC4uLmFyZ3VtZW50cyk7IH0p
OworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImNsZWFyIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5jbGVhciguLi5hcmd1
bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJjb3Vu
dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuY291
bnQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1l
dGhvZCgiY291bnRSZXNldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2Jq
ZWN0LmNvbnNvbGUuY291bnRSZXNldCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0
LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJkZWJ1ZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5z
cGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuZGVidWcoLi4uYXJndW1lbnRzKTsgfSk7Citpbmpl
Y3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiZGlyIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5kaXIoLi4uYXJndW1lbnRzKTsgfSk7
CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiZGlyeG1sIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5kaXJ4bWwoLi4uYXJn
dW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiZXJy
b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmVy
cm9yKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElN
ZXRob2QoImdyb3VwIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3Qu
Y29uc29sZS5ncm91cCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1h
bmRMaW5lQVBJTWV0aG9kKCJncm91cENvbGxhcHNlZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5z
cGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoLi4uYXJndW1lbnRzKTsg
fSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiZ3JvdXBFbmQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmdyb3VwRW5k
KC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRo
b2QoImluZm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25z
b2xlLmluZm8oLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGlu
ZUFQSU1ldGhvZCgibG9nIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QuY29uc29sZS5sb2coLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21t
YW5kTGluZUFQSU1ldGhvZCgicHJvZmlsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVk
R2xvYmFsT2JqZWN0LmNvbnNvbGUucHJvZmlsZSguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVk
U2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJwcm9maWxlRW5kIiwgZnVuY3Rpb24oKSB7
IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5wcm9maWxlRW5kKC4uLmFyZ3Vt
ZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInJlY29y
ZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUucmVj
b3JkKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElN
ZXRob2QoInJlY29yZEVuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2Jq
ZWN0LmNvbnNvbGUucmVjb3JkRW5kKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQu
YWRkQ29tbWFuZExpbmVBUElNZXRob2QoInNjcmVlbnNob3QiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnNjcmVlbnNob3QoLi4uYXJndW1lbnRzKTsg
fSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgidGFibGUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRhYmxlKC4uLmFy
Z3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInRh
a2VIZWFwU25hcHNob3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVj
dC5jb25zb2xlLnRha2VIZWFwU25hcHNob3QoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNj
cmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgidGltZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
aW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUudGltZSguLi5hcmd1bWVudHMpOyB9KTsKK2lu
amVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ0aW1lRW5kIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS50aW1lRW5kKC4uLmFyZ3Vt
ZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInRpbWVM
b2ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRp
bWVMb2coLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQ
SU1ldGhvZCgidGltZVN0YW1wIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxP
YmplY3QuY29uc29sZS50aW1lU3RhbXAoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlw
dC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgidHJhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlu
c3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRyYWNlKC4uLmFyZ3VtZW50cyk7IH0pOworaW5q
ZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoIndhcm4iLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLndhcm4oLi4uYXJndW1lbnRzKTsg
fSk7CiAKLSAgICBmdW5jdGlvbiBxdWVyeUluc3RhbmNlcygpIHsKLSAgICAgICAgcmV0dXJuIElu
amVjdGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1bWVudHMpOwotICAgIH0sCitp
bmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgia2V5cyIsIGZ1bmN0aW9uKG9i
amVjdCkgeworICAgIGxldCByZXN1bHQgPSBbXTsKKyAgICBmb3IgKGxldCBrZXkgaW4gb2JqZWN0
KQorICAgICAgICByZXN1bHQucHVzaChrZXkpOworICAgIHJldHVybiByZXN1bHQ7Cit9KTsKIAot
ICAgIGZ1bmN0aW9uIHF1ZXJ5T2JqZWN0cygpIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1bWVudHMpOwotICAgIH0sCitpbmplY3RlZFNj
cmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgidmFsdWVzIiwgZnVuY3Rpb24ob2JqZWN0KSB7
CisgICAgbGV0IHJlc3VsdCA9IFtdOworICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpCisgICAg
ICAgIHJlc3VsdC5wdXNoKG9iamVjdFtrZXldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfSk7CiAK
LSAgICBmdW5jdGlvbiBxdWVyeUhvbGRlcnMoKSB7Ci0gICAgICAgIHJldHVybiBJbmplY3RlZFNj
cmlwdEhvc3QucXVlcnlIb2xkZXJzKC4uLmFyZ3VtZW50cyk7Ci0gICAgfSwKLV07CitpbmplY3Rl
ZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgicXVlcnlJbnN0YW5jZXMiLCBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5SW5zdGFuY2VzKC4uLmFy
Z3VtZW50cyk7Cit9KTsKIAotZm9yIChsZXQgaSA9IDA7IGkgPCBCYXNpY0NvbW1hbmRMaW5lQVBJ
Lm1ldGhvZHMubGVuZ3RoOyArK2kpIHsKLSAgICBsZXQgbWV0aG9kID0gQmFzaWNDb21tYW5kTGlu
ZUFQSS5tZXRob2RzW2ldOwotICAgIG1ldGhvZC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1
cm4gImZ1bmN0aW9uICIgKyBtZXRob2QubmFtZSArICIoKSB7IFtDb21tYW5kIExpbmUgQVBJXSB9
IjsgfTsKLX0KK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJxdWVyeU9i
amVjdHMiLCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5
SW5zdGFuY2VzKC4uLmFyZ3VtZW50cyk7Cit9KTsKKworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFu
ZExpbmVBUElNZXRob2QoInF1ZXJ5SG9sZGVycyIsIGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdEhvc3QucXVlcnlIb2xkZXJzKC4uLmFyZ3VtZW50cyk7Cit9KTsKKworaW5q
ZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImluc3BlY3QiLCBmdW5jdGlvbihv
YmplY3QpIHsKKyAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQuaW5zcGVjdE9iamVjdChvYmplY3Qp
OworfSk7CiAKIHJldHVybiBpbmplY3RlZFNjcmlwdDsKIH0pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKaW5kZXggZDVm
ODRlZDc0OGQ2MGUyOWY2NzFhZjI3YWExYjI3YjJjMWY0NWQxOS4uZmU5NzQyYzg0MDhjMmZkZmJi
ODc4ZjI4ZGFjZmI1OTM0MTU0OWExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcwpAQCAtMjgsMTQ1ICsyOCwxNDMg
QEAKIAogLy8jIHNvdXJjZVVSTD1fX0luamVjdGVkU2NyaXB0X0NvbW1hbmRMaW5lQVBJTW9kdWxl
U291cmNlLmpzCiAKLShmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5k
b3csIGluamVjdGVkU2NyaXB0SWQsIGluamVjdGVkU2NyaXB0LCBSZW1vdGVPYmplY3QsIENvbW1h
bmRMaW5lQVBJSG9zdCkgeworKGZ1bmN0aW9uIChJbmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3Rl
ZEdsb2JhbE9iamVjdCwgaW5qZWN0ZWRTY3JpcHRJZCwgaW5qZWN0ZWRTY3JpcHQsIFJlbW90ZU9i
amVjdCwgQ29tbWFuZExpbmVBUElIb3N0KSB7CiAKIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTUyMjk0PiBXZWIgSW5zcGVjdG9yOiBQYXJzZSBJbmplY3RlZFNjcmlwdFNvdXJjZSBh
cyBhIGJ1aWx0LWluIHRvIGdldCBndWFyYW50ZWVkIG5vbi11c2VyLW92ZXJyaWRkZW4gYnVpbHQt
aW5zCiAKLWZ1bmN0aW9uIGJpbmQoZnVuYywgdGhpc09iamVjdCwgLi4ub3V0ZXJBcmdzKQotewot
ICAgIHJldHVybiBmdW5jdGlvbiguLi5pbm5lckFyZ3MpIHsKLSAgICAgICAgcmV0dXJuIGZ1bmMu
YXBwbHkodGhpc09iamVjdCwgb3V0ZXJBcmdzLmNvbmNhdChpbm5lckFyZ3MpKTsKLSAgICB9Owot
fQoraW5qZWN0ZWRTY3JpcHQuX2luc3BlY3RPYmplY3QgPSBmdW5jdGlvbihvYmplY3QpIHsKKyAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKKyAgICAgICAgcmV0dXJuOwogCi0vKioKLSAq
IEBjb25zdHJ1Y3RvcgotICogQHBhcmFtIHtDb21tYW5kTGluZUFQSUltcGx9IGNvbW1hbmRMaW5l
QVBJSW1wbAotICogQHBhcmFtIHtPYmplY3R9IGNhbGxGcmFtZQotICovCi1mdW5jdGlvbiBDb21t
YW5kTGluZUFQSShjb21tYW5kTGluZUFQSUltcGwsIGNhbGxGcmFtZSkKLXsKLSAgICBsZXQgc2F2
ZWRSZXN1bHRBbGlhcyA9IEluamVjdGVkU2NyaXB0SG9zdC5zYXZlZFJlc3VsdEFsaWFzOworICAg
IHZhciBvYmplY3RJZCA9IFJlbW90ZU9iamVjdC5jcmVhdGUob2JqZWN0LCAiIik7CisgICAgdmFy
IGhpbnRzID0ge307CiAKLSAgICBsZXQgZGVmaW5lR2V0dGVyID0gKGtleSwgdmFsdWUpID0+IHsK
LSAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAg
bGV0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgIHZhbHVlID0gZnVuY3Rpb24o
KSB7IHJldHVybiBvcmlnaW5hbFZhbHVlOyB9OwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5f
X2RlZmluZUdldHRlcl9fKCIkIiArIGtleSwgdmFsdWUpOwotICAgICAgICBpZiAoc2F2ZWRSZXN1
bHRBbGlhcykKLSAgICAgICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXyhzYXZlZFJlc3VsdEFs
aWFzICsga2V5LCB2YWx1ZSk7Ci0gICAgfTsKLQotICAgIGlmICgiX2xhc3RSZXN1bHQiIGluIGlu
amVjdGVkU2NyaXB0KQotICAgICAgICBkZWZpbmVHZXR0ZXIoIl8iLCBpbmplY3RlZFNjcmlwdC5f
bGFzdFJlc3VsdCk7Ci0KLSAgICBpZiAoIl9leGNlcHRpb25WYWx1ZSIgaW4gaW5qZWN0ZWRTY3Jp
cHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiZXhjZXB0aW9uIiwgaW5qZWN0ZWRTY3JpcHQuX2V4
Y2VwdGlvblZhbHVlKTsKLQotICAgIGlmICgiX2V2ZW50VmFsdWUiIGluIGluamVjdGVkU2NyaXB0
KQotICAgICAgICBkZWZpbmVHZXR0ZXIoImV2ZW50IiwgaW5qZWN0ZWRTY3JpcHQuX2V2ZW50VmFs
dWUpOwotCi0gICAgLy8gJDAKLSAgICBkZWZpbmVHZXR0ZXIoIjAiLCBiaW5kKGNvbW1hbmRMaW5l
QVBJSW1wbC5faW5zcGVjdGVkT2JqZWN0LCBjb21tYW5kTGluZUFQSUltcGwpKTsKLQotICAgIC8v
ICQxLSQ5OQotICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGluamVjdGVkU2NyaXB0Ll9zYXZlZFJl
c3VsdHMubGVuZ3RoOyArK2kpCi0gICAgICAgIGRlZmluZUdldHRlcihpLCBiaW5kKGluamVjdGVk
U2NyaXB0Ll9zYXZlZFJlc3VsdCwgaW5qZWN0ZWRTY3JpcHQsIGkpKTsKLQotICAgIC8vIENvbW1h
bmQgTGluZSBBUEkgbWV0aG9kcy4KLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IENvbW1hbmRMaW5l
QVBJLm1ldGhvZHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgbGV0IG1ldGhvZCA9IENvbW1hbmRM
aW5lQVBJLm1ldGhvZHNbaV07Ci0gICAgICAgIHRoaXNbbWV0aG9kXSA9IGJpbmQoY29tbWFuZExp
bmVBUElJbXBsW21ldGhvZF0sIGNvbW1hbmRMaW5lQVBJSW1wbCk7Ci0gICAgICAgIHRoaXNbbWV0
aG9kXS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gImZ1bmN0aW9uICIgKyBtZXRob2Qg
KyAiKCkgeyBbQ29tbWFuZCBMaW5lIEFQSV0gfSIgfTsKKyAgICBzd2l0Y2ggKFJlbW90ZU9iamVj
dC5kZXNjcmliZShvYmplY3QpKSB7CisgICAgY2FzZSAiRGF0YWJhc2UiOgorICAgICAgICB2YXIg
ZGF0YWJhc2VJZCA9IENvbW1hbmRMaW5lQVBJSG9zdC5kYXRhYmFzZUlkKG9iamVjdCkKKyAgICAg
ICAgaWYgKGRhdGFiYXNlSWQpCisgICAgICAgICAgICBoaW50cy5kYXRhYmFzZUlkID0gZGF0YWJh
c2VJZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiU3RvcmFnZSI6CisgICAgICAgIHZhciBz
dG9yYWdlSWQgPSBDb21tYW5kTGluZUFQSUhvc3Quc3RvcmFnZUlkKG9iamVjdCkKKyAgICAgICAg
aWYgKHN0b3JhZ2VJZCkKKyAgICAgICAgICAgIGhpbnRzLmRvbVN0b3JhZ2VJZCA9IEluamVjdGVk
U2NyaXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBzdG9yYWdlSWQgKyAiKSIpOworICAgICAgICBicmVh
azsKICAgICB9Ci19CiAKLS8qKgotICogQHR5cGUge0FycmF5LjxzdHJpbmc+fQotICogQGNvbnN0
Ci0gKi8KLUNvbW1hbmRMaW5lQVBJLm1ldGhvZHMgPSBbCi0gICAgIiQiLAotICAgICIkJCIsCi0g
ICAgIiR4IiwKLSAgICAiY2xlYXIiLAotICAgICJjb3B5IiwKLSAgICAiZGlyIiwKLSAgICAiZGly
eG1sIiwKLSAgICAiZ2V0RXZlbnRMaXN0ZW5lcnMiLAotICAgICJpbnNwZWN0IiwKLSAgICAia2V5
cyIsCi0gICAgIm1vbml0b3JFdmVudHMiLAotICAgICJwcm9maWxlIiwKLSAgICAicHJvZmlsZUVu
ZCIsCi0gICAgInF1ZXJ5SW5zdGFuY2VzIiwKLSAgICAicXVlcnlPYmplY3RzIiwKLSAgICAicXVl
cnlIb2xkZXJzIiwKLSAgICAic2NyZWVuc2hvdCIsCi0gICAgInRhYmxlIiwKLSAgICAidW5tb25p
dG9yRXZlbnRzIiwKLSAgICAidmFsdWVzIiwKLV07CisgICAgQ29tbWFuZExpbmVBUElIb3N0Lmlu
c3BlY3Qob2JqZWN0SWQsIGhpbnRzKTsKKyAgICByZXR1cm4gb2JqZWN0OworfTsKIAotLyoqCi0g
KiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gQ29tbWFuZExpbmVBUElJbXBsKCkKK2luamVj
dGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJR2V0dGVyKCIwIiwgZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIENvbW1hbmRMaW5lQVBJSG9zdC5pbnNwZWN0ZWRPYmplY3QoKTsKK30pOworCitpbmpl
Y3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiY29weSIsIGZ1bmN0aW9uKG9iamVj
dCkgeworICAgIHZhciBzdHJpbmc7CisgICAgdmFyIHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3Vi
dHlwZShvYmplY3QpOworICAgIGlmIChzdWJ0eXBlID09PSAibm9kZSIpCisgICAgICAgIHN0cmlu
ZyA9IG9iamVjdC5vdXRlckhUTUw7CisgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gInJlZ2V4cCIp
CisgICAgICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OworICAgIGVsc2UgaWYgKGluamVjdGVkU2Ny
aXB0LmlzUHJpbWl0aXZlVmFsdWUob2JqZWN0KSkKKyAgICAgICAgc3RyaW5nID0gIiIgKyBvYmpl
Y3Q7CisgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gInN5bWJvbCIpCisgICAgICAgIHN0
cmluZyA9IFN0cmluZyhvYmplY3QpOworICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICJm
dW5jdGlvbiIpCisgICAgICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OworICAgIGVsc2UgeworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCBu
dWxsLCAiICAiKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgc3RyaW5nID0g
IiIgKyBvYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb21tYW5kTGluZUFQSUhvc3Qu
Y29weVRleHQoc3RyaW5nKTsKK30pOworCitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQ
SU1ldGhvZCgiZ2V0RXZlbnRMaXN0ZW5lcnMiLCBmdW5jdGlvbih0YXJnZXQpIHsKKyAgICByZXR1
cm4gQ29tbWFuZExpbmVBUElIb3N0LmdldEV2ZW50TGlzdGVuZXJzKHRhcmdldCk7Cit9KTsKKwor
ZnVuY3Rpb24gbG9nRXZlbnQoZXZlbnQpCiB7CisgICAgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNv
bnNvbGUubG9nKGV2ZW50LnR5cGUsIGV2ZW50KTsKIH0KIAotQ29tbWFuZExpbmVBUElJbXBsLnBy
b3RvdHlwZSA9IHsKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IKLSAg
ICAgKiBAcGFyYW0ge05vZGU9fSBzdGFydAotICAgICAqLwotICAgICQ6IGZ1bmN0aW9uIChzZWxl
Y3Rvciwgc3RhcnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY2FuUXVlcnlTZWxlY3Rvck9u
Tm9kZShzdGFydCkpCitmdW5jdGlvbiBub3JtYWxpemVFdmVudFR5cGVzKHR5cGVzKSB7CisgICAg
aWYgKHR5cGVvZiB0eXBlcyA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgIHR5cGVzID0gWyAibW91
c2UiLCAia2V5IiwgInRvdWNoIiwgImNvbnRyb2wiLCAibG9hZCIsICJ1bmxvYWQiLCAiYWJvcnQi
LCAiZXJyb3IiLCAic2VsZWN0IiwgImNoYW5nZSIsICJzdWJtaXQiLCAicmVzZXQiLCAiZm9jdXMi
LCAiYmx1ciIsICJyZXNpemUiLCAic2Nyb2xsIiwgInNlYXJjaCIsICJkZXZpY2Vtb3Rpb24iLCAi
ZGV2aWNlb3JpZW50YXRpb24iIF07CisgICAgZWxzZSBpZiAodHlwZW9mIHR5cGVzID09PSAic3Ry
aW5nIikKKyAgICAgICAgdHlwZXMgPSBbdHlwZXNdOworCisgICAgdmFyIHJlc3VsdCA9IFtdOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYg
KHR5cGVzW2ldID09PSAibW91c2UiKQorICAgICAgICAgICAgcmVzdWx0LnNwbGljZSgwLCAwLCAi
bW91c2Vkb3duIiwgIm1vdXNldXAiLCAiY2xpY2siLCAiZGJsY2xpY2siLCAibW91c2Vtb3ZlIiwg
Im1vdXNlb3ZlciIsICJtb3VzZW91dCIsICJtb3VzZXdoZWVsIik7CisgICAgICAgIGVsc2UgaWYg
KHR5cGVzW2ldID09PSAia2V5IikKKyAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwgMCwgImtl
eWRvd24iLCAia2V5dXAiLCAia2V5cHJlc3MiLCAidGV4dElucHV0Iik7CisgICAgICAgIGVsc2Ug
aWYgKHR5cGVzW2ldID09PSAidG91Y2giKQorICAgICAgICAgICAgcmVzdWx0LnNwbGljZSgwLCAw
LCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5jZWwiKTsK
KyAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0gPT09ICJjb250cm9sIikKKyAgICAgICAgICAgIHJl
c3VsdC5zcGxpY2UoMCwgMCwgInJlc2l6ZSIsICJzY3JvbGwiLCAiem9vbSIsICJmb2N1cyIsICJi
bHVyIiwgInNlbGVjdCIsICJjaGFuZ2UiLCAic3VibWl0IiwgInJlc2V0Iik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKHR5cGVzW2ldKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoIm1v
bml0b3JFdmVudHMiLCBmdW5jdGlvbihvYmplY3QsIHR5cGVzKSB7CisgICAgaWYgKCFvYmplY3Qg
fHwgIW9iamVjdC5hZGRFdmVudExpc3RlbmVyIHx8ICFvYmplY3QucmVtb3ZlRXZlbnRMaXN0ZW5l
cikKKyAgICAgICAgcmV0dXJuOworICAgIHR5cGVzID0gbm9ybWFsaXplRXZlbnRUeXBlcyh0eXBl
cyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgeworICAgICAg
ICBvYmplY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlc1tpXSwgbG9nRXZlbnQsIGZhbHNlKTsK
KyAgICAgICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIodHlwZXNbaV0sIGxvZ0V2ZW50LCBmYWxz
ZSk7CisgICAgfQorfSk7CisKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9k
KCJ1bm1vbml0b3JFdmVudHMiLCBmdW5jdGlvbihvYmplY3QsIHR5cGVzKSB7CisgICAgaWYgKCFv
YmplY3QgfHwgIW9iamVjdC5hZGRFdmVudExpc3RlbmVyIHx8ICFvYmplY3QucmVtb3ZlRXZlbnRM
aXN0ZW5lcikKKyAgICAgICAgcmV0dXJuOworICAgIHR5cGVzID0gbm9ybWFsaXplRXZlbnRUeXBl
cyh0eXBlcyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZXNbaV0sIGxvZ0V2ZW50LCBmYWxz
ZSk7Cit9KTsKKworaWYgKGluc3BlY3RlZEdsb2JhbE9iamVjdC5kb2N1bWVudCAmJiBpbnNwZWN0
ZWRHbG9iYWxPYmplY3QuTm9kZSkgeworICAgIGZ1bmN0aW9uIGNhblF1ZXJ5U2VsZWN0b3JPbk5v
ZGUobm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZSAmJiBJbmplY3RlZFNjcmlwdEhvc3Quc3Vi
dHlwZShub2RlKSA9PT0gIm5vZGUiICYmIChub2RlLm5vZGVUeXBlID09PSBpbnNwZWN0ZWRHbG9i
YWxPYmplY3QuTm9kZS5FTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gaW5zcGVjdGVk
R2xvYmFsT2JqZWN0Lk5vZGUuRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBpbnNw
ZWN0ZWRHbG9iYWxPYmplY3QuTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsKKyAgICB9CisK
KyAgICBpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiJCIsIGZ1bmN0aW9u
KHNlbGVjdG9yLCBzdGFydCkgeworICAgICAgICBpZiAoY2FuUXVlcnlTZWxlY3Rvck9uTm9kZShz
dGFydCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhcnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7
CiAKLSAgICAgICAgdmFyIHJlc3VsdCA9IGluc3BlY3RlZFdpbmRvdy5kb2N1bWVudC5xdWVyeVNl
bGVjdG9yKHNlbGVjdG9yKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGluc3BlY3RlZEdsb2JhbE9i
amVjdC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgICAgaWYgKHJlc3Vs
dCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKICAgICAgICAgaWYgKHNlbGVjdG9yICYm
IHNlbGVjdG9yWzBdICE9PSAiIyIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RlZFdp
bmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rvcik7CisgICAgICAgICAgICByZXN1
bHQgPSBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0
b3IpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAgICAgIGluc3BlY3Rl
ZFdpbmRvdy5jb25zb2xlLndhcm4oIlRoZSBjb25zb2xlIGZ1bmN0aW9uICQoKSBoYXMgY2hhbmdl
ZCBmcm9tICQ9Z2V0RWxlbWVudEJ5SWQoaWQpIHRvICQ9cXVlcnlTZWxlY3RvcihzZWxlY3Rvciku
IFlvdSBtaWdodCB0cnkgJChcIiMlc1wiKSIsIHNlbGVjdG9yKTsKKyAgICAgICAgICAgICAgICBp
bnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS53YXJuKCJUaGUgY29uc29sZSBmdW5jdGlvbiAk
KCkgaGFzIGNoYW5nZWQgZnJvbSAkPWdldEVsZW1lbnRCeUlkKGlkKSB0byAkPXF1ZXJ5U2VsZWN0
b3Ioc2VsZWN0b3IpLiBZb3UgbWlnaHQgdHJ5ICQoXCIjJXNcIikiLCBzZWxlY3Rvcik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCisgICAgfSk7CiAKLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gc2VsZWN0b3IKLSAgICAgKiBAcGFyYW0ge05vZGU9fSBzdGFydAotICAg
ICAqLwotICAgICQkOiBmdW5jdGlvbiAoc2VsZWN0b3IsIHN0YXJ0KQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX2NhblF1ZXJ5U2VsZWN0b3JPbk5vZGUoc3RhcnQpKQorICAgIGluamVjdGVkU2Ny
aXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCIkJCIsIGZ1bmN0aW9uKHNlbGVjdG9yLCBzdGFy
dCkgeworICAgICAgICBpZiAoY2FuUXVlcnlTZWxlY3Rvck9uTm9kZShzdGFydCkpCiAgICAgICAg
ICAgICByZXR1cm4gQXJyYXkuZnJvbShzdGFydC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7
Ci0gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGluc3BlY3RlZFdpbmRvdy5kb2N1bWVudC5xdWVy
eVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7Ci0gICAgfSwKKyAgICAgICAgcmV0dXJuIEFycmF5LmZy
b20oaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0
b3IpKTsKKyAgICB9KTsKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Tm9kZT19IG5vZGUKLSAg
ICAgKiBAcmV0dXJuIHtib29sZWFufQotICAgICAqLwotICAgIF9jYW5RdWVyeVNlbGVjdG9yT25O
b2RlOiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhbm9kZSAmJiBJbmpl
Y3RlZFNjcmlwdEhvc3Quc3VidHlwZShub2RlKSA9PT0gIm5vZGUiICYmIChub2RlLm5vZGVUeXBl
ID09PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5U
X05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHhwYXRoCi0gICAgICog
QHBhcmFtIHtOb2RlPX0gY29udGV4dAotICAgICAqLwotICAgICR4OiBmdW5jdGlvbih4cGF0aCwg
Y29udGV4dCkKLSAgICB7Ci0gICAgICAgIHZhciBkb2MgPSAoY29udGV4dCAmJiBjb250ZXh0Lm93
bmVyRG9jdW1lbnQpIHx8IGluc3BlY3RlZFdpbmRvdy5kb2N1bWVudDsKKyAgICBpbmplY3RlZFNj
cmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiJHgiLCBmdW5jdGlvbih4cGF0aCwgY29udGV4
dCkgeworICAgICAgICB2YXIgZG9jID0gKGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50
KSB8fCBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuZG9jdW1lbnQ7CiAgICAgICAgIHZhciByZXN1bHQg
PSBkb2MuZXZhbHVhdGUoeHBhdGgsIGNvbnRleHQgfHwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5B
TllfVFlQRSwgbnVsbCk7CiAgICAgICAgIHN3aXRjaCAocmVzdWx0LnJlc3VsdFR5cGUpIHsKICAg
ICAgICAgY2FzZSBYUGF0aFJlc3VsdC5OVU1CRVJfVFlQRToKQEAgLTE4MiwyMTAgKzE4MCw5IEBA
IENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgbm9kZXMu
cHVzaChub2RlKTsKICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgfQotICAgIH0s
Ci0KLSAgICBkaXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNwZWN0ZWRX
aW5kb3cuY29uc29sZS5kaXIuYXBwbHkoaW5zcGVjdGVkV2luZG93LmNvbnNvbGUsIGFyZ3VtZW50
cykKLSAgICB9LAotCi0gICAgZGlyeG1sOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1
cm4gaW5zcGVjdGVkV2luZG93LmNvbnNvbGUuZGlyeG1sLmFwcGx5KGluc3BlY3RlZFdpbmRvdy5j
b25zb2xlLCBhcmd1bWVudHMpCi0gICAgfSwKLQotICAgIGtleXM6IGZ1bmN0aW9uKG9iamVjdCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOwotICAgIH0sCi0KLSAg
ICB2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBb
XTsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkKLSAgICAgICAgICAgIHJlc3VsdC5w
dXNoKG9iamVjdFtrZXldKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAg
cHJvZmlsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRv
dy5jb25zb2xlLnByb2ZpbGUuYXBwbHkoaW5zcGVjdGVkV2luZG93LmNvbnNvbGUsIGFyZ3VtZW50
cykKLSAgICB9LAotCi0gICAgcHJvZmlsZUVuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLnByb2ZpbGVFbmQuYXBwbHkoaW5zcGVjdGVk
V2luZG93LmNvbnNvbGUsIGFyZ3VtZW50cykKLSAgICB9LAotCi0gICAgdGFibGU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNwZWN0ZWRXaW5kb3cuY29uc29sZS50YWJsZS5h
cHBseShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJndW1lbnRzKQotICAgIH0sCi0KLSAgICBz
Y3JlZW5zaG90OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gaW5zcGVjdGVkV2lu
ZG93LmNvbnNvbGUuc2NyZWVuc2hvdC5hcHBseShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJn
dW1lbnRzKQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0
Ci0gICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPnxzdHJpbmc9fSB0eXBlcwotICAgICAqLwot
ICAgIG1vbml0b3JFdmVudHM6IGZ1bmN0aW9uKG9iamVjdCwgdHlwZXMpCi0gICAgewotICAgICAg
ICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIgfHwgIW9iamVjdC5yZW1v
dmVFdmVudExpc3RlbmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0eXBlcyA9IHRo
aXMuX25vcm1hbGl6ZUV2ZW50VHlwZXModHlwZXMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBvYmplY3QucmVtb3ZlRXZlbnRM
aXN0ZW5lcih0eXBlc1tpXSwgdGhpcy5fbG9nRXZlbnQsIGZhbHNlKTsKLSAgICAgICAgICAgIG9i
amVjdC5hZGRFdmVudExpc3RlbmVyKHR5cGVzW2ldLCB0aGlzLl9sb2dFdmVudCwgZmFsc2UpOwot
ICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpl
Y3QKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fHN0cmluZz19IHR5cGVzCi0gICAgICov
Ci0gICAgdW5tb25pdG9yRXZlbnRzOiBmdW5jdGlvbihvYmplY3QsIHR5cGVzKQotICAgIHsKLSAg
ICAgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC5hZGRFdmVudExpc3RlbmVyIHx8ICFvYmplY3Qu
cmVtb3ZlRXZlbnRMaXN0ZW5lcikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdHlwZXMg
PSB0aGlzLl9ub3JtYWxpemVFdmVudFR5cGVzKHR5cGVzKTsKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG9iamVjdC5yZW1vdmVFdmVu
dExpc3RlbmVyKHR5cGVzW2ldLCB0aGlzLl9sb2dFdmVudCwgZmFsc2UpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0geyp9IG9iamVjdAotICAgICAqIEByZXR1cm4geyp9Ci0gICAg
ICovCi0gICAgaW5zcGVjdDogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX2luc3BlY3Qob2JqZWN0KTsKLSAgICB9LAotCi0gICAgcXVlcnlJbnN0YW5jZXMoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcygu
Li5hcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICBxdWVyeU9iamVjdHMoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1bWVudHMp
OwotICAgIH0sCi0KLSAgICBxdWVyeUhvbGRlcnMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIElu
amVjdGVkU2NyaXB0SG9zdC5xdWVyeUhvbGRlcnMoLi4uYXJndW1lbnRzKTsKLSAgICB9LAotCi0g
ICAgY29weTogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAgICAgdmFyIHN0cmluZzsKLSAg
ICAgICAgdmFyIHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3VidHlwZShvYmplY3QpOwotICAgICAg
ICBpZiAoc3VidHlwZSA9PT0gIm5vZGUiKQotICAgICAgICAgICAgc3RyaW5nID0gb2JqZWN0Lm91
dGVySFRNTDsKLSAgICAgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gInJlZ2V4cCIpCi0gICAgICAg
ICAgICBzdHJpbmcgPSAiIiArIG9iamVjdDsKLSAgICAgICAgZWxzZSBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQotICAgICAgICAgICAgc3RyaW5nID0gIiIgKyBv
YmplY3Q7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICJzeW1ib2wiKQotICAg
ICAgICAgICAgc3RyaW5nID0gU3RyaW5nKG9iamVjdCk7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGVv
ZiBvYmplY3QgPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICBzdHJpbmcgPSAiIiArIG9iamVj
dDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHN0
cmluZyA9IEpTT04uc3RyaW5naWZ5KG9iamVjdCwgbnVsbCwgIiAgIik7Ci0gICAgICAgICAgICB9
IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgc3RyaW5nID0gIiIgKyBvYmplY3Q7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDb21tYW5kTGluZUFQSUhvc3QuY29weVRl
eHQoc3RyaW5nKTsKLSAgICB9LAotCi0gICAgY2xlYXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIENvbW1hbmRMaW5lQVBJSG9zdC5jbGVhckNvbnNvbGVNZXNzYWdlcygpOwotICAgIH0sCi0K
LSAgICBnZXRFdmVudExpc3RlbmVyczogZnVuY3Rpb24odGFyZ2V0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIENvbW1hbmRMaW5lQVBJSG9zdC5nZXRFdmVudExpc3RlbmVycyh0YXJnZXQpOwotICAg
IH0sCi0KLSAgICBfaW5zcGVjdGVkT2JqZWN0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQ29tbWFuZExpbmVBUElIb3N0Lmluc3BlY3RlZE9iamVjdCgpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fHN0cmluZz19IHR5cGVzCi0gICAg
ICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59Ci0gICAgICovCi0gICAgX25vcm1hbGl6ZUV2ZW50
VHlwZXM6IGZ1bmN0aW9uKHR5cGVzKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiB0eXBlcyA9
PT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICB0eXBlcyA9IFsgIm1vdXNlIiwgImtleSIsICJ0
b3VjaCIsICJjb250cm9sIiwgImxvYWQiLCAidW5sb2FkIiwgImFib3J0IiwgImVycm9yIiwgInNl
bGVjdCIsICJjaGFuZ2UiLCAic3VibWl0IiwgInJlc2V0IiwgImZvY3VzIiwgImJsdXIiLCAicmVz
aXplIiwgInNjcm9sbCIsICJzZWFyY2giLCAiZGV2aWNlbW90aW9uIiwgImRldmljZW9yaWVudGF0
aW9uIiBdOwotICAgICAgICBlbHNlIGlmICh0eXBlb2YgdHlwZXMgPT09ICJzdHJpbmciKQotICAg
ICAgICAgICAgdHlwZXMgPSBbIHR5cGVzIF07Ci0KLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICBpZiAodHlwZXNbaV0gPT09ICJtb3VzZSIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnNw
bGljZSgwLCAwLCAibW91c2Vkb3duIiwgIm1vdXNldXAiLCAiY2xpY2siLCAiZGJsY2xpY2siLCAi
bW91c2Vtb3ZlIiwgIm1vdXNlb3ZlciIsICJtb3VzZW91dCIsICJtb3VzZXdoZWVsIik7Ci0gICAg
ICAgICAgICBlbHNlIGlmICh0eXBlc1tpXSA9PT0gImtleSIpCi0gICAgICAgICAgICAgICAgcmVz
dWx0LnNwbGljZSgwLCAwLCAia2V5ZG93biIsICJrZXl1cCIsICJrZXlwcmVzcyIsICJ0ZXh0SW5w
dXQiKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVzW2ldID09PSAidG91Y2giKQotICAgICAg
ICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwgMCwgInRvdWNoc3RhcnQiLCAidG91Y2htb3ZlIiwg
InRvdWNoZW5kIiwgInRvdWNoY2FuY2VsIik7Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlc1tp
XSA9PT0gImNvbnRyb2wiKQotICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwgMCwgInJl
c2l6ZSIsICJzY3JvbGwiLCAiem9vbSIsICJmb2N1cyIsICJibHVyIiwgInNlbGVjdCIsICJjaGFu
Z2UiLCAic3VibWl0IiwgInJlc2V0Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnB1c2godHlwZXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAg
ICovCi0gICAgX2xvZ0V2ZW50OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGluc3Bl
Y3RlZFdpbmRvdy5jb25zb2xlLmxvZyhldmVudC50eXBlLCBldmVudCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0Ci0gICAgICogQHJldHVybiB7Kn0KLSAgICAg
Ki8KLSAgICBfaW5zcGVjdDogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPT09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IG9iamVjdElkID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShvYmplY3QsICIiKTsKLSAgICAgICAgdmFy
IGhpbnRzID0ge307Ci0KLSAgICAgICAgc3dpdGNoIChSZW1vdGVPYmplY3QuZGVzY3JpYmUob2Jq
ZWN0KSkgewotICAgICAgICBjYXNlICJEYXRhYmFzZSI6Ci0gICAgICAgICAgICB2YXIgZGF0YWJh
c2VJZCA9IENvbW1hbmRMaW5lQVBJSG9zdC5kYXRhYmFzZUlkKG9iamVjdCkKLSAgICAgICAgICAg
IGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAgICAgIGhpbnRzLmRhdGFiYXNlSWQgPSBkYXRh
YmFzZUlkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgIlN0b3JhZ2UiOgotICAg
ICAgICAgICAgdmFyIHN0b3JhZ2VJZCA9IENvbW1hbmRMaW5lQVBJSG9zdC5zdG9yYWdlSWQob2Jq
ZWN0KQotICAgICAgICAgICAgaWYgKHN0b3JhZ2VJZCkKLSAgICAgICAgICAgICAgICBoaW50cy5k
b21TdG9yYWdlSWQgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgc3RvcmFnZUlk
ICsgIikiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29tbWFu
ZExpbmVBUElIb3N0Lmluc3BlY3Qob2JqZWN0SWQsIGhpbnRzKTsKLSAgICAgICAgcmV0dXJuIG9i
amVjdDsKLSAgICB9CisgICAgfSk7CiB9CiAKLWluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJ
ID0gQ29tbWFuZExpbmVBUEk7Ci1pbmplY3RlZFNjcmlwdC5fY29tbWFuZExpbmVBUElJbXBsID0g
bmV3IENvbW1hbmRMaW5lQVBJSW1wbCgpOwogCiAvLyBUaGlzIE1vZHVsZSBkb2Vzbid0IGV4cG9z
ZSBhbiBvYmplY3QsIGl0IGp1c3QgYWRkcyBhbiBleHRlbnNpb24gdGhhdCBJbmplY3RlZFNjcmlw
dCB1c2VzLgogLy8gSG93ZXZlciwgd2UgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCwgc28gdGhhdCBJ
bmplY3RlZFNjcmlwdCBrbm93cyB0aGlzIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZh
U2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblBy
b3ZpZGVyLmpzCmluZGV4IGE0N2U3ZGEyMWFiMmQ5NWE4M2I5ZjVhYjEyYzdmZDdiY2E5MDZlMjgu
LmM1OGY2MWY4OGE4MGJmYzMwNzFlNWFmNmVkN2IyZTllZDA3ZDkyM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRS
dW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3Zp
ZGVyLmpzCkBAIC00NCw2ICs0NCw0NyBAQCBXSS5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Q
cm92aWRlciA9IGNsYXNzIEphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZAogICAgICAg
ICBXSS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIu
RXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlLCB0aGlzLl9jbGVhckxhc3RQcm9wZXJ0aWVz
LCB0aGlzKTsKICAgICB9CiAKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRpYyBnZXQgX2NvbW1h
bmRMaW5lQVBJS2V5cygpCisgICAgeworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgIiRf
IiwKKyAgICAgICAgICAgICJhc3NlcnQiLAorICAgICAgICAgICAgImNsZWFyIiwKKyAgICAgICAg
ICAgICJjb3VudCIsCisgICAgICAgICAgICAiY291bnRSZXNldCIsCisgICAgICAgICAgICAiZGVi
dWciLAorICAgICAgICAgICAgImRpciIsCisgICAgICAgICAgICAiZGlyeG1sIiwKKyAgICAgICAg
ICAgICJlcnJvciIsCisgICAgICAgICAgICAiZ3JvdXAiLAorICAgICAgICAgICAgImdyb3VwQ29s
bGFwc2VkIiwKKyAgICAgICAgICAgICJncm91cEVuZCIsCisgICAgICAgICAgICAiaW5mbyIsCisg
ICAgICAgICAgICAiaW5zcGVjdCIsCisgICAgICAgICAgICAia2V5cyIsCisgICAgICAgICAgICAi
bG9nIiwKKyAgICAgICAgICAgICJwcm9maWxlIiwKKyAgICAgICAgICAgICJwcm9maWxlRW5kIiwK
KyAgICAgICAgICAgICJxdWVyeUhvbGRlcnMiLAorICAgICAgICAgICAgInF1ZXJ5SW5zdGFuY2Vz
IiwKKyAgICAgICAgICAgICJxdWVyeU9iamVjdHMiLAorICAgICAgICAgICAgInJlY29yZCIsCisg
ICAgICAgICAgICAicmVjb3JkRW5kIiwKKyAgICAgICAgICAgICJzY3JlZW5zaG90IiwKKyAgICAg
ICAgICAgICJ0YWJsZSIsCisgICAgICAgICAgICAidGFrZUhlYXBTbmFwc2hvdCIsCisgICAgICAg
ICAgICAidGltZSIsCisgICAgICAgICAgICAidGltZUVuZCIsCisgICAgICAgICAgICAidGltZUxv
ZyIsCisgICAgICAgICAgICAidGltZVN0YW1wIiwKKyAgICAgICAgICAgICJ0cmFjZSIsCisgICAg
ICAgICAgICAidmFsdWVzIiwKKyAgICAgICAgICAgICJ3YXJuIiwKKyAgICAgICAgXTsKKyAgICB9
CisKICAgICAvLyBQcm90ZWN0ZWQKIAogICAgIGNvbXBsZXRpb25Db250cm9sbGVyQ29tcGxldGlv
bnNOZWVkZWQoY29tcGxldGlvbkNvbnRyb2xsZXIsIGRlZmF1bHRDb21wbGV0aW9ucywgYmFzZSwg
cHJlZml4LCBzdWZmaXgsIGZvcmNlZCkKQEAgLTExMyw3ICsxNTQsNyBAQCBXSS5KYXZhU2NyaXB0
UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciA9IGNsYXNzIEphdmFTY3JpcHRSdW50aW1lQ29tcGxl
dGlvblByb3ZpZAogICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckxhc3RQ
cm9wZXJ0aWVzVGltZW91dCk7CiAgICAgICAgICAgICB0aGlzLl9jbGVhckxhc3RQcm9wZXJ0aWVz
VGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fY2xlYXJMYXN0UHJvcGVydGllcy5iaW5kKHRoaXMp
LCBXSS5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuQ2FjaGVkUHJvcGVydGllc0R1cmF0aW9u
KTsKIAotICAgICAgICAgICAgdGhpcy5fbGFzdFByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVz
IHx8IHt9OworICAgICAgICAgICAgdGhpcy5fbGFzdFByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5h
bWVzIHx8IFtdOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gZXZhbHVhdGVkKHJlc3Vs
dCwgd2FzVGhyb3duKQpAQCAtMjExLDQxICsyNTIsNjEgQEAgV0kuSmF2YVNjcmlwdFJ1bnRpbWVD
b21wbGV0aW9uUHJvdmlkZXIgPSBjbGFzcyBKYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92
aWQKIAogICAgICAgICBmdW5jdGlvbiByZWNlaXZlZFByb3BlcnR5TmFtZXMocHJvcGVydHlOYW1l
cykKICAgICAgICAgewotICAgICAgICAgICAgcHJvcGVydHlOYW1lcyA9IHByb3BlcnR5TmFtZXMg
fHwge307CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzID0gcHJvcGVydHlOYW1lcyA/IE9iamVj
dC5rZXlzKHByb3BlcnR5TmFtZXMpIDogW107CiAKICAgICAgICAgICAgIHVwZGF0ZUxhc3RQcm9w
ZXJ0eU5hbWVzLmNhbGwodGhpcywgcHJvcGVydHlOYW1lcyk7CiAKICAgICAgICAgICAgIFdJLnJ1
bnRpbWVNYW5hZ2VyLmFjdGl2ZUV4ZWN1dGlvbkNvbnRleHQudGFyZ2V0LlJ1bnRpbWVBZ2VudC5y
ZWxlYXNlT2JqZWN0R3JvdXAoImNvbXBsZXRpb24iKTsKIAogICAgICAgICAgICAgaWYgKCFiYXNl
KSB7Ci0gICAgICAgICAgICAgICAgbGV0IGNvbW1hbmRMaW5lQVBJID0gV0kuSmF2YVNjcmlwdFJ1
bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuX2NvbW1hbmRMaW5lQVBJLnNsaWNlKDApOwotICAgICAg
ICAgICAgICAgIGlmIChXSS5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxldCB0YXJnZXREYXRhID0gV0kuZGVidWdnZXJNYW5hZ2VyLmRhdGFGb3JUYXJnZXQo
V0kucnVudGltZU1hbmFnZXIuYWN0aXZlRXhlY3V0aW9uQ29udGV4dC50YXJnZXQpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0YS5wYXVzZVJlYXNvbiA9PT0gV0kuRGVidWdnZXJN
YW5hZ2VyLlBhdXNlUmVhc29uLkxpc3RlbmVyIHx8IHRhcmdldERhdGEucGF1c2VSZWFzb24gPT09
IFdJLkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5FdmVudExpc3RlbmVyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29tbWFuZExpbmVBUEkucHVzaCgiJGV2ZW50Iik7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRhcmdldERhdGEucGF1c2VSZWFzb24gPT09IFdJLkRlYnVnZ2Vy
TWFuYWdlci5QYXVzZVJlYXNvbi5FeGNlcHRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b21tYW5kTGluZUFQSS5wdXNoKCIkZXhjZXB0aW9uIik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGZvciAobGV0IG5hbWUgb2YgY29tbWFuZExpbmVBUEkpCi0gICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXNbbmFtZV0gPSB0cnVlOworICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVzLmNvbmNhdChKYXZhU2NyaXB0UnVudGltZUNvbXBs
ZXRpb25Qcm92aWRlci5fY29tbWFuZExpbmVBUElLZXlzKTsKIAogICAgICAgICAgICAgICAgIGxl
dCBzYXZlZFJlc3VsdEFsaWFzID0gV0kuc2V0dGluZ3MuY29uc29sZVNhdmVkUmVzdWx0QWxpYXMu
dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lc1tzYXZlZFJlc3VsdEFsaWFzICsgIjAiXSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXNbc2F2ZWRSZXN1bHRBbGlhcyArICJf
Il0gPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQorICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goc2F2ZWRSZXN1bHRBbGlhcyArICJfIik7
CisKKyAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gV0kucnVudGltZU1hbmFnZXIuYWN0aXZl
RXhlY3V0aW9uQ29udGV4dC50YXJnZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAoV0kuZGVidWdn
ZXJNYW5hZ2VyLnBhdXNlZCkgeworICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0RGF0YSA9
IFdJLmRlYnVnZ2VyTWFuYWdlci5kYXRhRm9yVGFyZ2V0KHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0YXJnZXREYXRhLnBhdXNlUmVhc29uID09PSBXSS5EZWJ1Z2dlck1hbmFnZXIu
UGF1c2VSZWFzb24uTGlzdGVuZXIgfHwgdGFyZ2V0RGF0YS5wYXVzZVJlYXNvbiA9PT0gV0kuRGVi
dWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJGV2ZW50Iik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLnB1c2goc2F2ZWRSZXN1bHRBbGlhcyArICJldmVudCIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldERhdGEu
cGF1c2VSZWFzb24gPT09IFdJLkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5FeGNlcHRpb24p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJGV4Y2VwdGlv
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKHNhdmVkUmVzdWx0QWxp
YXMgKyAiZXhjZXB0aW9uIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldC50eXBlKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBXSS5UYXJnZXQuVHlwZS5QYWdlOgorICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLnB1c2goIiQiKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5w
dXNoKCIkJCIpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goIiQwIik7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKHNhdmVkUmVzdWx0QWxpYXMgKyAiMCIpOwor
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goIiR4Iik7CisgICAgICAgICAg
ICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCisgICAgICAgICAgICAgICAgY2FzZSBXSS5UYXJnZXQu
VHlwZS5TZXJ2aWNlV29ya2VyOgorICAgICAgICAgICAgICAgIGNhc2UgV0kuVGFyZ2V0LlR5cGUu
V29ya2VyOgorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goImNvcHkiKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCJnZXRFdmVudExpc3RlbmVy
cyIpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goIm1vbml0b3JFdmVu
dHMiKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCJ1bm1vbml0b3JF
dmVudHMiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IER1ZSB0byBjYWNoaW5nLCBzb21ldGltZXMgb2xk
ICRuIHZhbHVlcyBzaG93IHVwIGFzIGNvbXBsZXRpb24gcmVzdWx0cyBldmVuIHRob3VnaCB0aGV5
IGFyZSBub3QgYXZhaWxhYmxlLiBXZSBzaG91bGQgY2xlYXIgdGhhdCBwcm9hY3RpdmVseS4KICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBXSS5Db25zb2xlQ29tbWFuZFJlc3Vs
dE1lc3NhZ2UubWF4aW11bVNhdmVkUmVzdWx0SW5kZXg7ICsraSkgewotICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzWyIkIiArIGldID0gdHJ1ZTsKLQorICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLnB1c2goIiQiICsgaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChz
YXZlZFJlc3VsdEFsaWFzKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lc1tz
YXZlZFJlc3VsdEFsaWFzICsgaV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5wdXNoKHNhdmVkUmVzdWx0QWxpYXMgKyBpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMgPSBPYmplY3Qua2V5
cyhwcm9wZXJ0eU5hbWVzKTsKLQogICAgICAgICAgICAgdmFyIGltcGxpY2l0U3VmZml4ID0gIiI7
CiAgICAgICAgICAgICBpZiAoYnJhY2tldE5vdGF0aW9uKSB7CiAgICAgICAgICAgICAgICAgdmFy
IHF1b3RlVXNlZCA9IHByZWZpeFswXSA9PT0gIiciID8gIiciIDogIlwiIjsKQEAgLTMxMywyOCAr
Mzc0LDMgQEAgV0kuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIgPSBjbGFzcyBK
YXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWQKICAgICAgICAgdGhpcy5fbGFzdFByb3Bl
cnR5TmFtZXMgPSBudWxsOwogICAgIH0KIH07Ci0KLVdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxl
dGlvblByb3ZpZGVyLl9jb21tYW5kTGluZUFQSSA9IFsKLSAgICAiJCIsCi0gICAgIiQkIiwKLSAg
ICAiJDAiLAotICAgICIkXyIsCi0gICAgIiR4IiwKLSAgICAiY2xlYXIiLAotICAgICJjb3B5IiwK
LSAgICAiZGlyIiwKLSAgICAiZGlyeG1sIiwKLSAgICAiZ2V0RXZlbnRMaXN0ZW5lcnMiLAotICAg
ICJpbnNwZWN0IiwKLSAgICAia2V5cyIsCi0gICAgIm1vbml0b3JFdmVudHMiLAotICAgICJwcm9m
aWxlIiwKLSAgICAicHJvZmlsZUVuZCIsCi0gICAgInF1ZXJ5SG9sZGVycyIsCi0gICAgInF1ZXJ5
SW5zdGFuY2VzIiwKLSAgICAicXVlcnlPYmplY3RzIiwKLSAgICAic2NyZWVuc2hvdCIsCi0gICAg
InRhYmxlIiwKLSAgICAidW5tb25pdG9yRXZlbnRzIiwKLSAgICAidmFsdWVzIiwKLV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376991</attachid>
            <date>2019-08-21 23:20:09 -0700</date>
            <delta_ts>2019-08-23 16:01:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200971-20190821232008.patch</filename>
            <type>text/plain</type>
            <size>45204</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDJmZGQ3NGVkMzIzOWU1ZTE2ODU4MjliNzBhZDY5
MDBiZDAxZGVkNmMuLmRhNzFkMjNiYzk4ODVkNGRkMmZmZjA0ZjI3ODlhOTNhNjMyNDhjNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTA4LTIxICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBj
cmVhdGUgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgYXBpIGZ1bmN0aW9ucyBmb3Igb3RoZXIgY29u
c29sZSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDA5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFeHBvc2UgYWxsIGBjb25zb2xlLipgIGZ1bmN0aW9ucyBpbiB0aGUgY29tbWFuZCBsaW5l
IEFQSSwgc2luY2UgdGhleSdyZSBhbGwgYWxyZWFkeSBhYmxlIHRvCisgICAgICAgIGJlIHJlZmVy
ZW5jZWQgdmlhIHRoZSBgY29uc29sZWAgb2JqZWN0LgorCisgICAgICAgIFByb3ZpZGUgYSBzaW1w
bGVyIGludGVyZmFjZSBmb3Igb3RoZXIgaW5qZWN0ZWQgc2NyaXB0cyB0byBtb2RpZnkgdGhlIGNv
bW1hbmQgbGluZSBBUEkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNb2R1
bGUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1vZHVsZTo6ZW5zdXJl
SW5qZWN0ZWQpOgorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpz
OgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLmluc3BlY3RPYmplY3QpOgorICAg
ICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLmFkZENvbW1hbmRMaW5lQVBJR2V0dGVyKTog
QWRkZWQuCisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUuYWRkQ29tbWFuZExpbmVB
UElNZXRob2QpOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5oYXNJ
bmplY3RlZE1vZHVsZSk6IEFkZGVkLgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBl
LmluamVjdE1vZHVsZSk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUuX2V2YWx1
YXRlT24pOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkpOiBBZGRlZC4K
KyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5tb2R1bGUpOiBEZWxldGVkLgorICAg
ICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLl9zYXZlZFJlc3VsdCk6IERlbGV0ZWQuCisg
ICAgICAgIChiaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEJhc2ljQ29tbWFuZExpbmVBUEkpOiBE
ZWxldGVkLgorICAgICAgICAoY2xlYXIpOiBEZWxldGVkLgorICAgICAgICAodGFibGUpOiBEZWxl
dGVkLgorICAgICAgICAocHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChwcm9maWxlRW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKGtleXMpOiBEZWxldGVkLgorICAgICAgICAodmFsdWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKHF1ZXJ5SW5zdGFuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKHF1ZXJ5
T2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChxdWVyeUhvbGRlcnMpOiBEZWxldGVkLgorCiAy
MDE5LTA4LTIwICBKdXN0aW4gTWljaGF1ZCAgPGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJZGVudGlmeSBtZW1jcHkgbG9vcHMgaW4gYjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3YTVhYmU4
MzEzZTU0MjdiNDZkMjA5NTcyOGQ5ODNlMjliMzYyMjc5Li4wYjc2MDBkYmY1N2ViZTgzODc5NTI2
NjNhMDlhZjg4MTEwY2QyZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTktMDgt
MjEgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGNyZWF0ZSBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBhcGkgZnVuY3Rpb25zIGZvciBv
dGhlciBjb25zb2xlIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEV4cG9zZSBhbGwgYGNvbnNvbGUuKmAgZnVuY3Rpb25zIGluIHRoZSBjb21t
YW5kIGxpbmUgQVBJLCBzaW5jZSB0aGV5J3JlIGFsbCBhbHJlYWR5IGFibGUgdG8KKyAgICAgICAg
YmUgcmVmZXJlbmNlZCB2aWEgdGhlIGBjb25zb2xlYCBvYmplY3QuCisKKyAgICAgICAgUHJvdmlk
ZSBhIHNpbXBsZXIgaW50ZXJmYWNlIGZvciBvdGhlciBpbmplY3RlZCBzY3JpcHRzIHRvIG1vZGlm
eSB0aGUgY29tbWFuZCBsaW5lIEFQSS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGlu
ZUFQSU1vZHVsZVNvdXJjZS5qczoKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Ll9pbnNwZWN0T2Jq
ZWN0KTogQWRkZWQuCisgICAgICAgIChsb2dFdmVudCk6IEFkZGVkLgorICAgICAgICAobm9ybWFs
aXplRXZlbnRUeXBlcyk6IEFkZGVkLgorICAgICAgICAoY2FuUXVlcnlTZWxlY3Rvck9uTm9kZSk6
IEFkZGVkLgorICAgICAgICAoYmluZCk6IERlbGV0ZWQuCisgICAgICAgICh2YWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgICh0aGlzLm1ldGhvZC50b1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChD
b21tYW5kTGluZUFQSSk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZSk6IERlbGV0ZWQu
CisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLl9jYW5RdWVyeVNlbGVjdG9y
T25Ob2RlKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUu
eCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLmRpcik6
IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLmRpcnhtbCk6
IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLmtleXMpOiBE
ZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS52YWx1ZXMpOiBE
ZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5wcm9maWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUucHJvZmlsZUVu
ZCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLnRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUuc2NyZWVu
c2hvdCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLm1v
bml0b3JFdmVudHMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3Rv
dHlwZS51bm1vbml0b3JFdmVudHMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJ
bXBsLnByb3RvdHlwZS5pbnNwZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJ
SW1wbC5wcm90b3R5cGUucXVlcnlJbnN0YW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFu
ZExpbmVBUElJbXBsLnByb3RvdHlwZS5xdWVyeU9iamVjdHMpOiBEZWxldGVkLgorICAgICAgICAo
Q29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5xdWVyeUhvbGRlcnMpOiBEZWxldGVkLgorICAg
ICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5jb3B5KTogRGVsZXRlZC4KKyAgICAg
ICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUuY2xlYXIpOiBEZWxldGVkLgorICAgICAg
ICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5nZXRFdmVudExpc3RlbmVycyk6IERlbGV0
ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLl9pbnNwZWN0ZWRPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5fbm9y
bWFsaXplRXZlbnRUeXBlcyk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwu
cHJvdG90eXBlLl9sb2dFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUlt
cGwucHJvdG90eXBlLl9pbnNwZWN0KTogRGVsZXRlZC4KKwogMjAxOS0wOC0yMCAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBuZXh0RWxlbWVudFdpdGhHcmVhdGVy
VGFiSW5kZXggc2hvdWxkIHVzZSBzaGFkb3dBZGp1c3RlZFRhYkluZGV4CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZwppbmRleCA4MGNiNGQzZmE0NGM5ZDAwODQzZWViMDBiZmE5Yjc4NDQ2NmRmZDY5Li5j
OTIwMTc5MzAyZGUxMTE5NmEzMTFkNmJmM2Y5OTk4ZWYwNjU0MjIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wOC0yMSAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogY3JlYXRlIGFkZGl0aW9u
YWwgY29tbWFuZCBsaW5lIGFwaSBmdW5jdGlvbnMgZm9yIG90aGVyIGNvbnNvbGUgbWV0aG9kcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwOTcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlIGFs
bCBgY29uc29sZS4qYCBmdW5jdGlvbnMgaW4gdGhlIGNvbW1hbmQgbGluZSBBUEksIHNpbmNlIHRo
ZXkncmUgYWxsIGFscmVhZHkgYWJsZSB0bworICAgICAgICBiZSByZWZlcmVuY2VkIHZpYSB0aGUg
YGNvbnNvbGVgIG9iamVjdC4KKworICAgICAgICBQcm92aWRlIGEgc2ltcGxlciBpbnRlcmZhY2Ug
Zm9yIG90aGVyIGluamVjdGVkIHNjcmlwdHMgdG8gbW9kaWZ5IHRoZSBjb21tYW5kIGxpbmUgQVBJ
LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0UnVudGlt
ZUNvbXBsZXRpb25Qcm92aWRlci5qczoKKyAgICAgICAgKFdJLkphdmFTY3JpcHRSdW50aW1lQ29t
cGxldGlvblByb3ZpZGVyLnByb3RvdHlwZS5nZXQgX2NvbW1hbmRMaW5lQVBJS2V5cyk6IEFkZGVk
LgorICAgICAgICAoV0kuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90
eXBlLmNvbXBsZXRpb25Db250cm9sbGVyQ29tcGxldGlvbnNOZWVkZWQudXBkYXRlTGFzdFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoV0kuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlk
ZXIucHJvdG90eXBlLmNvbXBsZXRpb25Db250cm9sbGVyQ29tcGxldGlvbnNOZWVkZWQucmVjZWl2
ZWRQcm9wZXJ0eU5hbWVzKToKKwogMjAxOS0wOC0yMSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU291cmNlczogaW5jcmVhc2UgdGhl
IGZpbHRlciBiYXIncyB3aWR0aCB3aGVuIGl0J3MgZm9jdXNlZCBpZiBhIHJlc291cmNlIHR5cGUg
ZmlsdGVyIGlzIGFjdGl2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmNwcAppbmRleCA0MDNmNjcxMmM2YjM2OTRiZDE2
MzhlNWZkYWRhNzIyNDA5ZjA0MTQzLi5mZDAyMDZlYzc0NWUzOGJkMzg4M2JjNzYzZTk1ZjY2MjUy
NTQ3ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TW9kdWxlLmNwcApAQCAtNjIsMjAgKzYyLDIxIEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHRNb2R1bGU6OmVuc3VyZUluamVjdGVkKEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5q
ZWN0ZWRTY3JpcHRNCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGUgSW5qZWN0ZWRTY3JpcHQgYSBt
b2R1bGUgaXRzZWxmLgogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihpbmplY3RlZFNjcmlw
dC5zY3JpcHRTdGF0ZSgpKTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24oaW5qZWN0ZWRTY3JpcHQuaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgIm1vZHVsZSJfcywg
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmZ1bmN0aW9uQ2Fs
bEhhbmRsZXIoKSk7CisgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0LmluamVjdGVkU2NyaXB0T2JqZWN0KCksICJoYXNJbmplY3RlZE1vZHVs
ZSJfcywgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmZ1bmN0
aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobmFtZSgpKTsK
ICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwogICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBp
bmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4
Y2VwdGlvbik7CiAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOwotICAgIGlmIChoYWRFeGNlcHRp
b24gfHwgIXJlc3VsdFZhbHVlIHx8ICFyZXN1bHRWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYg
KGhhZEV4Y2VwdGlvbiB8fCAhcmVzdWx0VmFsdWUgfHwgIXJlc3VsdFZhbHVlLmlzQm9vbGVhbigp
IHx8ICFyZXN1bHRWYWx1ZS5hc0Jvb2xlYW4oKSkgewogICAgICAgICBEZXByZWNhdGVkOjpTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHQuaW5qZWN0ZWRTY3JpcHRPYmpl
Y3QoKSwgImluamVjdE1vZHVsZSJfcywgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JF
bnZpcm9ubWVudCgpLmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG5hbWUoKSk7CiAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNv
dXJjZSgpKTsKICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaG9zdChpbmplY3RlZFNj
cmlwdE1hbmFnZXIsIGluamVjdGVkU2NyaXB0LnNjcmlwdFN0YXRlKCkpKTsKICAgICAgICAgcmVz
dWx0VmFsdWUgPSBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVu
Y3Rpb24sIGhhZEV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChoYWRFeGNlcHRpb24pIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gcGFyc2UvZXhlY3V0ZSAlcyEiLCBuYW1lKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlc1xuIiwgc291cmNl
KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCmluZGV4IDM2M2FiNmFjMTZm
YWFlNDVlNThjM2M1NjAxYTg1ZTllYjZmYmMwMjIuLmExYzljZTVkNWY2ZDczNmZkNzJkODdjOGI2
YmM5NTBmODczODkzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwpAQCAtMTg2LDcgKzE4Niw3IEBAIGxldCBJ
bmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGNhbGxBcmdzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgdHJ5
IHsKICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRBcmdzW2ldID0gdGhpcy5fcmVzb2x2ZUNh
bGxBcmd1bWVudChjYWxsQXJnc1tpXSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIwMSw3ICsyMDEs
NyBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICAg
ICAgICAgIHdhc1Rocm93bjogZmFsc2UsCiAgICAgICAgICAgICAgICAgcmVzdWx0OiBSZW1vdGVP
YmplY3QuY3JlYXRlKGZ1bmMuYXBwbHkob2JqZWN0LCByZXNvbHZlZEFyZ3MpLCBvYmplY3RHcm91
cE5hbWUsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKICAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICByZXR1
cm4gdGhpcy5fY3JlYXRlVGhyb3duVmFsdWUoZSwgb2JqZWN0R3JvdXBOYW1lKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTM4OSw4ICszODksOCBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJ
bmplY3RlZFNjcmlwdAogCiAgICAgaW5zcGVjdE9iamVjdChvYmplY3QpCiAgICAgewotICAgICAg
ICBpZiAodGhpcy5fY29tbWFuZExpbmVBUElJbXBsKQotICAgICAgICAgICAgdGhpcy5fY29tbWFu
ZExpbmVBUElJbXBsLmluc3BlY3Qob2JqZWN0KTsKKyAgICAgICAgaWYgKHRoaXMuX2luc3BlY3RP
YmplY3QpCisgICAgICAgICAgICB0aGlzLl9pbnNwZWN0T2JqZWN0KG9iamVjdCk7CiAgICAgfQog
CiAgICAgcmVsZWFzZU9iamVjdChvYmplY3RJZCkKQEAgLTQxNywyNyArNDE3LDM2IEBAIGxldCBJ
bmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9vYmplY3RHcm91cHNbb2JqZWN0R3JvdXBOYW1lXTsKICAgICB9CiAKKyAgICAvLyBDb21tYW5k
TGluZUFQSQorCisgICAgYWRkQ29tbWFuZExpbmVBUElHZXR0ZXIobmFtZSwgZnVuYykKKyAgICB7
CisgICAgICAgIEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9nZXR0ZXJzLnB1c2goe25h
bWUsIGZ1bmN9KTsKKyAgICB9CisKKyAgICBhZGRDb21tYW5kTGluZUFQSU1ldGhvZChuYW1lLCBm
dW5jKQorICAgIHsKKyAgICAgICAgZnVuYy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
ImZ1bmN0aW9uICIgKyBuYW1lICsgIigpIHsgW0NvbW1hbmQgTGluZSBBUEldIH0iIH07CisgICAg
ICAgIEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9tZXRob2RzLnB1c2goe25hbWUsIGZ1
bmN9KTsKKyAgICB9CisKICAgICAvLyBJbmplY3RlZFNjcmlwdE1vZHVsZSBDKysgQVBJCiAKLSAg
ICBtb2R1bGUobmFtZSkKKyAgICBoYXNJbmplY3RlZE1vZHVsZShuYW1lKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX21vZHVsZXNbbmFtZV07CiAgICAgfQogCiAgICAgaW5qZWN0TW9kdWxl
KG5hbWUsIHNvdXJjZSwgaG9zdCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9tb2R1bGVz
W25hbWVdOworICAgICAgICB0aGlzLl9tb2R1bGVzW25hbWVdID0gZmFsc2U7CiAKICAgICAgICAg
bGV0IG1vZHVsZUZ1bmN0aW9uID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHNv
dXJjZSArICIpIik7Ci0gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5j
dGlvbiIpIHsKLSAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZSkK
LSAgICAgICAgICAgICAgICBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5lcnJvcigiV2Vi
IEluc3BlY3RvciBlcnJvcjogQSBmdW5jdGlvbiB3YXMgZXhwZWN0ZWQgZm9yIG1vZHVsZSAlcyBl
dmFsdWF0aW9uIiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQor
ICAgICAgICBpZiAodHlwZW9mIG1vZHVsZUZ1bmN0aW9uICE9PSAiZnVuY3Rpb24iKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBXZWIgSW5zcGVjdG9yOiBhIGZ1bmN0aW9uIHdhcyBleHBlY3Rl
ZCBmb3IgaW5qZWN0TW9kdWxlIjsKIAotICAgICAgICBsZXQgbW9kdWxlID0gbW9kdWxlRnVuY3Rp
b24uY2FsbChpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVj
dGVkR2xvYmFsT2JqZWN0LCBpbmplY3RlZFNjcmlwdElkLCB0aGlzLCBSZW1vdGVPYmplY3QsIGhv
c3QpOwotICAgICAgICB0aGlzLl9tb2R1bGVzW25hbWVdID0gbW9kdWxlOwotICAgICAgICByZXR1
cm4gbW9kdWxlOworICAgICAgICBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZEdsb2JhbE9i
amVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIGluamVjdGVk
U2NyaXB0SWQsIHRoaXMsIFJlbW90ZU9iamVjdCwgaG9zdCk7CisgICAgICAgIHRoaXMuX21vZHVs
ZXNbbmFtZV0gPSB0cnVlOwogICAgIH0KIAogICAgIC8vIEluamVjdGVkU2NyaXB0TW9kdWxlIEph
dmFTY3JpcHQgQVBJCkBAIC01NjAsNyArNTY5LDcgQEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xh
c3MgSW5qZWN0ZWRTY3JpcHQKICAgICAgICAgICAgICAgICByZXR1cm5PYmplY3Quc2F2ZWRSZXN1
bHRJbmRleCA9IHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7CiAKICAgICAgICAgICAgIHJldHVybiBy
ZXR1cm5PYmplY3Q7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgfSBjYXRjaCB7CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlVGhyb3duVmFsdWUoZSwgb2JqZWN0R3JvdXAp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTY4LDEzICs1NzcsOCBAQCBsZXQgSW5qZWN0ZWRTY3Jp
cHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgIF9ldmFsdWF0ZU9uKGV2YWxGdW5jdGlvbiwg
b2JqZWN0LCBleHByZXNzaW9uLCBpc0V2YWxPbkNhbGxGcmFtZSwgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJKQogICAgIHsKICAgICAgICAgbGV0IGNvbW1hbmRMaW5lQVBJID0gbnVsbDsKLSAgICAgICAg
aWYgKGluY2x1ZGVDb21tYW5kTGluZUFQSSkgewotICAgICAgICAgICAgaWYgKHRoaXMuQ29tbWFu
ZExpbmVBUEkpCi0gICAgICAgICAgICAgICAgY29tbWFuZExpbmVBUEkgPSBuZXcgdGhpcy5Db21t
YW5kTGluZUFQSSh0aGlzLl9jb21tYW5kTGluZUFQSUltcGwsIGlzRXZhbE9uQ2FsbEZyYW1lID8g
b2JqZWN0IDogbnVsbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tbWFu
ZExpbmVBUEkgPSBuZXcgQmFzaWNDb21tYW5kTGluZUFQSShpc0V2YWxPbkNhbGxGcmFtZSA/IG9i
amVjdCA6IG51bGwpOwotICAgICAgICB9Ci0KKyAgICAgICAgaWYgKGluY2x1ZGVDb21tYW5kTGlu
ZUFQSSkKKyAgICAgICAgICAgIGNvbW1hbmRMaW5lQVBJID0gbmV3IEluamVjdGVkU2NyaXB0LkNv
bW1hbmRMaW5lQVBJKGlzRXZhbE9uQ2FsbEZyYW1lID8gb2JqZWN0IDogbnVsbCkKICAgICAgICAg
cmV0dXJuIGV2YWxGdW5jdGlvbi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbiwgY29tbWFuZExpbmVB
UEkpOwogICAgIH0KIApAQCAtNjY0LDcgKzY2OCw3IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNs
YXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgICAgICAgICAgaWYgKGZha2VEZXNjcmlwdG9yLnZh
bHVlIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBJbmplY3RlZFNjcmlwdEhvc3QuaXNQcm9taXNlUmVq
ZWN0ZWRXaXRoTmF0aXZlR2V0dGVyVHlwZUVycm9yKGZha2VEZXNjcmlwdG9yLnZhbHVlKSkKICAg
ICAgICAgICAgICAgICAgICAgZmFrZURlc2NyaXB0b3IudmFsdWUuY2F0Y2goZnVuY3Rpb24oKXt9
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFrZURlc2NyaXB0b3I7Ci0gICAgICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgICBsZXQg
ZXJyb3JEZXNjcmlwdG9yID0ge25hbWUsIHZhbHVlOiBlLCB3YXNUaHJvd246IHRydWV9OwogICAg
ICAgICAgICAgICAgIGlmIChpc093blByb3BlcnR5KQogICAgICAgICAgICAgICAgICAgICBlcnJv
ckRlc2NyaXB0b3IuaXNPd24gPSB0cnVlOwpAQCAtODY5LDExICs4NzMsNiBAQCBsZXQgSW5qZWN0
ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICBpZiAodGhpcy5fbmV4dFNh
dmVkUmVzdWx0SW5kZXggPj0gMTAwKQogICAgICAgICAgICAgdGhpcy5fbmV4dFNhdmVkUmVzdWx0
SW5kZXggPSAxOwogICAgIH0KLQotICAgIF9zYXZlZFJlc3VsdChpbmRleCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zYXZlZFJlc3VsdHNbaW5kZXhdOwotICAgIH0KIH07CiAKIEluamVj
dGVkU2NyaXB0LkNvbGxlY3Rpb25Nb2RlID0gewpAQCAtOTQ5LDcgKzk0OCw3IEBAIGxldCBSZW1v
dGVPYmplY3QgPSBjbGFzcyBSZW1vdGVPYmplY3QKICAgICB7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICByZXR1cm4gbmV3IFJlbW90ZU9iamVjdChvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwg
Zm9yY2VWYWx1ZVR5cGUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpOwotICAgICAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICAgbGV0IGRlc2NyaXB0
aW9uOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFJl
bW90ZU9iamVjdC5kZXNjcmliZShlKTsKQEAgLTE0NTcsODAgKzE0NTYsODkgQEAgSW5qZWN0ZWRT
Y3JpcHQuQ2FsbEZyYW1lUHJveHkuX2NyZWF0ZVNjb3BlSnNvbiA9IGZ1bmN0aW9uKG9iamVjdCwg
e25hbWUsIHR5cGUsIGwKIAogLy8gLS0tLS0tLQogCi1mdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNP
YmplY3QsIC4uLm91dGVyQXJncykKK0luamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJID0gY2xh
c3MgQ29tbWFuZExpbmVBUEkKIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oLi4uaW5uZXJBcmdzKSB7
Ci0gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXNPYmplY3QsIG91dGVyQXJncy5jb25jYXQo
aW5uZXJBcmdzKSk7Ci0gICAgfTsKLX0KKyAgICBjb25zdHJ1Y3RvcihjYWxsRnJhbWUpCisgICAg
eworICAgICAgICBsZXQgc2F2ZWRSZXN1bHRBbGlhcyA9IEluamVjdGVkU2NyaXB0SG9zdC5zYXZl
ZFJlc3VsdEFsaWFzOwogCi1mdW5jdGlvbiBCYXNpY0NvbW1hbmRMaW5lQVBJKGNhbGxGcmFtZSkK
LXsKLSAgICBsZXQgc2F2ZWRSZXN1bHRBbGlhcyA9IEluamVjdGVkU2NyaXB0SG9zdC5zYXZlZFJl
c3VsdEFsaWFzOworICAgICAgICBsZXQgZGVmaW5lR2V0dGVyID0gKGtleSwgdmFsdWUpID0+IHsK
KyAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAg
ICAgICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHZhbHVl
ID0gZnVuY3Rpb24oKSB7IHJldHVybiBvcmlnaW5hbFZhbHVlOyB9OworICAgICAgICAgICAgfQog
Ci0gICAgbGV0IGRlZmluZUdldHRlciA9IChrZXksIHZhbHVlKSA9PiB7Ci0gICAgICAgIGlmICh0
eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAgIGxldCBvcmlnaW5hbFZh
bHVlID0gdmFsdWU7Ci0gICAgICAgICAgICB2YWx1ZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gb3Jp
Z2luYWxWYWx1ZTsgfTsKKyAgICAgICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXygiJCIgKyBr
ZXksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQorICAgICAgICAg
ICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXyhzYXZlZFJlc3VsdEFsaWFzICsga2V5LCB2YWx1
ZSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCJfbGFzdFJlc3VsdCIgaW4gaW5qZWN0ZWRT
Y3JpcHQpCisgICAgICAgICAgICBkZWZpbmVHZXR0ZXIoIl8iLCBpbmplY3RlZFNjcmlwdC5fbGFz
dFJlc3VsdCk7CisKKyAgICAgICAgaWYgKCJfZXhjZXB0aW9uVmFsdWUiIGluIGluamVjdGVkU2Ny
aXB0KQorICAgICAgICAgICAgZGVmaW5lR2V0dGVyKCJleGNlcHRpb24iLCBpbmplY3RlZFNjcmlw
dC5fZXhjZXB0aW9uVmFsdWUpOworCisgICAgICAgIGlmICgiX2V2ZW50VmFsdWUiIGluIGluamVj
dGVkU2NyaXB0KQorICAgICAgICAgICAgZGVmaW5lR2V0dGVyKCJldmVudCIsIGluamVjdGVkU2Ny
aXB0Ll9ldmVudFZhbHVlKTsKKworICAgICAgICAvLyAkMS0kOTkKKyAgICAgICAgZm9yIChsZXQg
aSA9IDE7IGkgPD0gaW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0cy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgZGVmaW5lR2V0dGVyKGksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBpbmplY3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHRzW2ldOworICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9fZGVmaW5lR2V0dGVyX18oIiQiICsga2V5LCB2
YWx1ZSk7Ci0gICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQotICAgICAgICAgICAgdGhpcy5f
X2RlZmluZUdldHRlcl9fKHNhdmVkUmVzdWx0QWxpYXMgKyBrZXksIHZhbHVlKTsKLSAgICB9Owor
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJ
Ll9nZXR0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsZXQge25hbWUsIGZ1bmN9ID0g
SW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkuX2dldHRlcnNbaV07CisgICAgICAgICAgICBk
ZWZpbmVHZXR0ZXIobmFtZSwgZnVuYyk7CisgICAgICAgIH0KIAotICAgIGlmICgiX2xhc3RSZXN1
bHQiIGluIGluamVjdGVkU2NyaXB0KQotICAgICAgICBkZWZpbmVHZXR0ZXIoIl8iLCBpbmplY3Rl
ZFNjcmlwdC5fbGFzdFJlc3VsdCk7Ci0KLSAgICBpZiAoIl9leGNlcHRpb25WYWx1ZSIgaW4gaW5q
ZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiZXhjZXB0aW9uIiwgaW5qZWN0ZWRT
Y3JpcHQuX2V4Y2VwdGlvblZhbHVlKTsKLQotICAgIGlmICgiX2V2ZW50VmFsdWUiIGluIGluamVj
dGVkU2NyaXB0KQotICAgICAgICBkZWZpbmVHZXR0ZXIoImV2ZW50IiwgaW5qZWN0ZWRTY3JpcHQu
X2V2ZW50VmFsdWUpOwotCi0gICAgLy8gJDEtJDk5Ci0gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0g
aW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0cy5sZW5ndGg7ICsraSkKLSAgICAgICAgZGVmaW5l
R2V0dGVyKGksIGJpbmQoaW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0LCBpbmplY3RlZFNjcmlw
dCwgaSkpOwotCi0gICAgLy8gQ29tbWFuZCBMaW5lIEFQSSBtZXRob2RzLgotICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgQmFzaWNDb21tYW5kTGluZUFQSS5tZXRob2RzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIGxldCBtZXRob2QgPSBCYXNpY0NvbW1hbmRMaW5lQVBJLm1ldGhvZHNbaV07Ci0gICAg
ICAgIHRoaXNbbWV0aG9kLm5hbWVdID0gbWV0aG9kOworICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9tZXRob2RzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBsZXQge25hbWUsIGZ1bmN9ID0gSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExp
bmVBUEkuX21ldGhvZHNbaV07CisgICAgICAgICAgICB0aGlzW25hbWVdID0gZnVuYzsKKyAgICAg
ICAgfQogICAgIH0KLX0KK307CiAKLUJhc2ljQ29tbWFuZExpbmVBUEkubWV0aG9kcyA9IFsKLSAg
ICBmdW5jdGlvbiBkaXIoKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5k
aXIoLi4uYXJndW1lbnRzKTsgfSwKLSAgICBmdW5jdGlvbiBjbGVhcigpIHsgcmV0dXJuIGluc3Bl
Y3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmNsZWFyKC4uLmFyZ3VtZW50cyk7IH0sCi0gICAgZnVu
Y3Rpb24gdGFibGUoKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS50YWJs
ZSguLi5hcmd1bWVudHMpOyB9LAotICAgIGZ1bmN0aW9uIHByb2ZpbGUoKSB7IHJldHVybiBpbnNw
ZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5wcm9maWxlKC4uLmFyZ3VtZW50cyk7IH0sCi0gICAg
ZnVuY3Rpb24gcHJvZmlsZUVuZCgpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25z
b2xlLnByb2ZpbGVFbmQoLi4uYXJndW1lbnRzKTsgfSwKK0luamVjdGVkU2NyaXB0LkNvbW1hbmRM
aW5lQVBJLl9nZXR0ZXJzID0gW107CitJbmplY3RlZFNjcmlwdC5Db21tYW5kTGluZUFQSS5fbWV0
aG9kcyA9IFtdOwogCi0gICAgZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgcmV0dXJuIE9iamVjdC5r
ZXlzKG9iamVjdCk7IH0sCi0gICAgZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkgewotICAgICAgICBs
ZXQgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpCi0gICAgICAg
ICAgICByZXN1bHQucHVzaChvYmplY3Rba2V5XSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfSwKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJrZXlzIiwgZnVu
Y3Rpb24ob2JqZWN0KSB7IHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOyB9KTsKK2luamVjdGVk
U2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ2YWx1ZXMiLCBmdW5jdGlvbihvYmplY3Qp
IHsgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqZWN0KTsgfSk7CiAKLSAgICBmdW5jdGlvbiBxdWVy
eUluc3RhbmNlcygpIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUlu
c3RhbmNlcyguLi5hcmd1bWVudHMpOwotICAgIH0sCitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5k
TGluZUFQSU1ldGhvZCgicXVlcnlJbnN0YW5jZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEluamVj
dGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVk
U2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJxdWVyeU9iamVjdHMiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1bWVudHMp
OyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJxdWVyeUhvbGRl
cnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUhvbGRlcnMo
Li4uYXJndW1lbnRzKTsgfSk7CiAKLSAgICBmdW5jdGlvbiBxdWVyeU9iamVjdHMoKSB7Ci0gICAg
ICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucXVlcnlJbnN0YW5jZXMoLi4uYXJndW1lbnRz
KTsKLSAgICB9LAoraW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImluc3Bl
Y3QiLCBmdW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIGluamVjdGVkU2NyaXB0Lmluc3BlY3RPYmpl
Y3Qob2JqZWN0KTsgfSk7CiAKLSAgICBmdW5jdGlvbiBxdWVyeUhvbGRlcnMoKSB7Ci0gICAgICAg
IHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucXVlcnlIb2xkZXJzKC4uLmFyZ3VtZW50cyk7Ci0g
ICAgfSwKLV07Ci0KLWZvciAobGV0IGkgPSAwOyBpIDwgQmFzaWNDb21tYW5kTGluZUFQSS5tZXRo
b2RzLmxlbmd0aDsgKytpKSB7Ci0gICAgbGV0IG1ldGhvZCA9IEJhc2ljQ29tbWFuZExpbmVBUEku
bWV0aG9kc1tpXTsKLSAgICBtZXRob2QudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuICJm
dW5jdGlvbiAiICsgbWV0aG9kLm5hbWUgKyAiKCkgeyBbQ29tbWFuZCBMaW5lIEFQSV0gfSI7IH07
Ci19CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiYXNzZXJ0IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5hc3NlcnQoLi4u
YXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgi
Y2xlYXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xl
LmNsZWFyKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVB
UElNZXRob2QoImNvdW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QuY29uc29sZS5jb3VudCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENv
bW1hbmRMaW5lQVBJTWV0aG9kKCJjb3VudFJlc2V0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNw
ZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5jb3VudFJlc2V0KC4uLmFyZ3VtZW50cyk7IH0pOwor
aW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImRlYnVnIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5kZWJ1ZyguLi5hcmd1bWVu
dHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJkaXIiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmRpciguLi5h
cmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJk
aXJ4bWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xl
LmRpcnhtbCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5l
QVBJTWV0aG9kKCJlcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2Jq
ZWN0LmNvbnNvbGUuZXJyb3IoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRD
b21tYW5kTGluZUFQSU1ldGhvZCgiZ3JvdXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3Rl
ZEdsb2JhbE9iamVjdC5jb25zb2xlLmdyb3VwKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRT
Y3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImdyb3VwQ29sbGFwc2VkIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5ncm91cENvbGxhcHNlZCgu
Li5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9k
KCJncm91cEVuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNv
bnNvbGUuZ3JvdXBFbmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21t
YW5kTGluZUFQSU1ldGhvZCgiaW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xv
YmFsT2JqZWN0LmNvbnNvbGUuaW5mbyguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0
LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJsb2ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3Bl
Y3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmxvZyguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVk
U2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJwcm9maWxlIiwgZnVuY3Rpb24oKSB7IHJl
dHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5wcm9maWxlKC4uLmFyZ3VtZW50cyk7
IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInByb2ZpbGVFbmQi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnByb2Zp
bGVFbmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQ
SU1ldGhvZCgicmVjb3JkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QuY29uc29sZS5yZWNvcmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRD
b21tYW5kTGluZUFQSU1ldGhvZCgicmVjb3JkRW5kIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNw
ZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5yZWNvcmRFbmQoLi4uYXJndW1lbnRzKTsgfSk7Citp
bmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgic2NyZWVuc2hvdCIsIGZ1bmN0
aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuc2NyZWVuc2hvdCgu
Li5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9k
KCJ0YWJsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNv
bGUudGFibGUoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGlu
ZUFQSU1ldGhvZCgidGFrZUhlYXBTbmFwc2hvdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVj
dGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUudGFrZUhlYXBTbmFwc2hvdCguLi5hcmd1bWVudHMpOyB9
KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ0aW1lIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS50aW1lKC4uLmFyZ3Vt
ZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInRpbWVF
bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRp
bWVFbmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQ
SU1ldGhvZCgidGltZUxvZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2Jq
ZWN0LmNvbnNvbGUudGltZUxvZyguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFk
ZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ0aW1lU3RhbXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlu
c3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRpbWVTdGFtcCguLi5hcmd1bWVudHMpOyB9KTsK
K2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ0cmFjZSIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUudHJhY2UoLi4uYXJndW1l
bnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgid2FybiIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUud2Fybigu
Li5hcmd1bWVudHMpOyB9KTsKIAogcmV0dXJuIGluamVjdGVkU2NyaXB0OwogfSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5q
cwppbmRleCBkNWY4NGVkNzQ4ZDYwZTI5ZjY3MWFmMjdhYTFiMjdiMmMxZjQ1ZDE5Li45ZDQxY2Iy
NTc3ZDI2Zjk2MDM3NjVhNTc0NWZhODMzNWEzNDRiOTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmpzCkBAIC0yOCwx
NDUgKzI4LDE5MiBAQAogCiAvLyMgc291cmNlVVJMPV9fSW5qZWN0ZWRTY3JpcHRfQ29tbWFuZExp
bmVBUElNb2R1bGVTb3VyY2UuanMKIAotKGZ1bmN0aW9uIChJbmplY3RlZFNjcmlwdEhvc3QsIGlu
c3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCwgaW5qZWN0ZWRTY3JpcHQsIFJlbW90ZU9i
amVjdCwgQ29tbWFuZExpbmVBUElIb3N0KSB7CisoZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9z
dCwgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBpbmplY3RlZFNjcmlwdElkLCBpbmplY3RlZFNjcmlw
dCwgUmVtb3RlT2JqZWN0LCBDb21tYW5kTGluZUFQSUhvc3QpIHsKIAogLy8gRklYTUU6IDxodHRw
czovL3dlYmtpdC5vcmcvYi8xNTIyOTQ+IFdlYiBJbnNwZWN0b3I6IFBhcnNlIEluamVjdGVkU2Ny
aXB0U291cmNlIGFzIGEgYnVpbHQtaW4gdG8gZ2V0IGd1YXJhbnRlZWQgbm9uLXVzZXItb3ZlcnJp
ZGRlbiBidWlsdC1pbnMKIAotZnVuY3Rpb24gYmluZChmdW5jLCB0aGlzT2JqZWN0LCAuLi5vdXRl
ckFyZ3MpCi17Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmlubmVyQXJncykgewotICAgICAgICBy
ZXR1cm4gZnVuYy5hcHBseSh0aGlzT2JqZWN0LCBvdXRlckFyZ3MuY29uY2F0KGlubmVyQXJncykp
OwotICAgIH07Ci19CitpbmplY3RlZFNjcmlwdC5faW5zcGVjdE9iamVjdCA9IGZ1bmN0aW9uKG9i
amVjdCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQorICAgICAgICByZXR1cm47
CiAKLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge0NvbW1hbmRMaW5lQVBJSW1wbH0g
Y29tbWFuZExpbmVBUElJbXBsCi0gKiBAcGFyYW0ge09iamVjdH0gY2FsbEZyYW1lCi0gKi8KLWZ1
bmN0aW9uIENvbW1hbmRMaW5lQVBJKGNvbW1hbmRMaW5lQVBJSW1wbCwgY2FsbEZyYW1lKQotewot
ICAgIGxldCBzYXZlZFJlc3VsdEFsaWFzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LnNhdmVkUmVzdWx0
QWxpYXM7CisgICAgdmFyIG9iamVjdElkID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShvYmplY3QsICIi
KTsKKyAgICB2YXIgaGludHMgPSB7fTsKIAotICAgIGxldCBkZWZpbmVHZXR0ZXIgPSAoa2V5LCB2
YWx1ZSkgPT4gewotICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iKSB7Ci0g
ICAgICAgICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgdmFsdWUg
PSBmdW5jdGlvbigpIHsgcmV0dXJuIG9yaWdpbmFsVmFsdWU7IH07Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLl9fZGVmaW5lR2V0dGVyX18oIiQiICsga2V5LCB2YWx1ZSk7Ci0gICAgICAgIGlm
IChzYXZlZFJlc3VsdEFsaWFzKQotICAgICAgICAgICAgdGhpcy5fX2RlZmluZUdldHRlcl9fKHNh
dmVkUmVzdWx0QWxpYXMgKyBrZXksIHZhbHVlKTsKLSAgICB9OwotCi0gICAgaWYgKCJfbGFzdFJl
c3VsdCIgaW4gaW5qZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiXyIsIGluamVj
dGVkU2NyaXB0Ll9sYXN0UmVzdWx0KTsKLQotICAgIGlmICgiX2V4Y2VwdGlvblZhbHVlIiBpbiBp
bmplY3RlZFNjcmlwdCkKLSAgICAgICAgZGVmaW5lR2V0dGVyKCJleGNlcHRpb24iLCBpbmplY3Rl
ZFNjcmlwdC5fZXhjZXB0aW9uVmFsdWUpOwotCi0gICAgaWYgKCJfZXZlbnRWYWx1ZSIgaW4gaW5q
ZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiZXZlbnQiLCBpbmplY3RlZFNjcmlw
dC5fZXZlbnRWYWx1ZSk7Ci0KLSAgICAvLyAkMAotICAgIGRlZmluZUdldHRlcigiMCIsIGJpbmQo
Y29tbWFuZExpbmVBUElJbXBsLl9pbnNwZWN0ZWRPYmplY3QsIGNvbW1hbmRMaW5lQVBJSW1wbCkp
OwotCi0gICAgLy8gJDEtJDk5Ci0gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gaW5qZWN0ZWRTY3Jp
cHQuX3NhdmVkUmVzdWx0cy5sZW5ndGg7ICsraSkKLSAgICAgICAgZGVmaW5lR2V0dGVyKGksIGJp
bmQoaW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0LCBpbmplY3RlZFNjcmlwdCwgaSkpOwotCi0g
ICAgLy8gQ29tbWFuZCBMaW5lIEFQSSBtZXRob2RzLgotICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
Q29tbWFuZExpbmVBUEkubWV0aG9kcy5sZW5ndGg7ICsraSkgewotICAgICAgICBsZXQgbWV0aG9k
ID0gQ29tbWFuZExpbmVBUEkubWV0aG9kc1tpXTsKLSAgICAgICAgdGhpc1ttZXRob2RdID0gYmlu
ZChjb21tYW5kTGluZUFQSUltcGxbbWV0aG9kXSwgY29tbWFuZExpbmVBUElJbXBsKTsKLSAgICAg
ICAgdGhpc1ttZXRob2RdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiAiZnVuY3Rpb24g
IiArIG1ldGhvZCArICIoKSB7IFtDb21tYW5kIExpbmUgQVBJXSB9IiB9OworICAgIHN3aXRjaCAo
UmVtb3RlT2JqZWN0LmRlc2NyaWJlKG9iamVjdCkpIHsKKyAgICBjYXNlICJEYXRhYmFzZSI6Cisg
ICAgICAgIHZhciBkYXRhYmFzZUlkID0gQ29tbWFuZExpbmVBUElIb3N0LmRhdGFiYXNlSWQob2Jq
ZWN0KQorICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIGhpbnRzLmRhdGFiYXNl
SWQgPSBkYXRhYmFzZUlkOworICAgICAgICBicmVhazsKKyAgICBjYXNlICJTdG9yYWdlIjoKKyAg
ICAgICAgdmFyIHN0b3JhZ2VJZCA9IENvbW1hbmRMaW5lQVBJSG9zdC5zdG9yYWdlSWQob2JqZWN0
KQorICAgICAgICBpZiAoc3RvcmFnZUlkKQorICAgICAgICAgICAgaGludHMuZG9tU3RvcmFnZUlk
ID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHN0b3JhZ2VJZCArICIpIik7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KLX0KIAotLyoqCi0gKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59
Ci0gKiBAY29uc3QKLSAqLwotQ29tbWFuZExpbmVBUEkubWV0aG9kcyA9IFsKLSAgICAiJCIsCi0g
ICAgIiQkIiwKLSAgICAiJHgiLAotICAgICJjbGVhciIsCi0gICAgImNvcHkiLAotICAgICJkaXIi
LAotICAgICJkaXJ4bWwiLAotICAgICJnZXRFdmVudExpc3RlbmVycyIsCi0gICAgImluc3BlY3Qi
LAotICAgICJrZXlzIiwKLSAgICAibW9uaXRvckV2ZW50cyIsCi0gICAgInByb2ZpbGUiLAotICAg
ICJwcm9maWxlRW5kIiwKLSAgICAicXVlcnlJbnN0YW5jZXMiLAotICAgICJxdWVyeU9iamVjdHMi
LAotICAgICJxdWVyeUhvbGRlcnMiLAotICAgICJzY3JlZW5zaG90IiwKLSAgICAidGFibGUiLAot
ICAgICJ1bm1vbml0b3JFdmVudHMiLAotICAgICJ2YWx1ZXMiLAotXTsKKyAgICBDb21tYW5kTGlu
ZUFQSUhvc3QuaW5zcGVjdChvYmplY3RJZCwgaGludHMpOworICAgIHJldHVybiBvYmplY3Q7Cit9
OwogCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBDb21tYW5kTGluZUFQSUlt
cGwoKQoraW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElHZXR0ZXIoIjAiLCBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gQ29tbWFuZExpbmVBUElIb3N0Lmluc3BlY3RlZE9iamVjdCgpOwor
fSk7CisKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJjb3B5IiwgZnVu
Y3Rpb24ob2JqZWN0KSB7CisgICAgdmFyIHN0cmluZzsKKyAgICB2YXIgc3VidHlwZSA9IFJlbW90
ZU9iamVjdC5zdWJ0eXBlKG9iamVjdCk7CisgICAgaWYgKHN1YnR5cGUgPT09ICJub2RlIikKKyAg
ICAgICAgc3RyaW5nID0gb2JqZWN0Lm91dGVySFRNTDsKKyAgICBlbHNlIGlmIChzdWJ0eXBlID09
PSAicmVnZXhwIikKKyAgICAgICAgc3RyaW5nID0gIiIgKyBvYmplY3Q7CisgICAgZWxzZSBpZiAo
aW5qZWN0ZWRTY3JpcHQuaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQorICAgICAgICBzdHJpbmcg
PSAiIiArIG9iamVjdDsKKyAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAic3ltYm9sIikK
KyAgICAgICAgc3RyaW5nID0gU3RyaW5nKG9iamVjdCk7CisgICAgZWxzZSBpZiAodHlwZW9mIG9i
amVjdCA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgc3RyaW5nID0gIiIgKyBvYmplY3Q7CisgICAg
ZWxzZSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdHJpbmcgPSBKU09OLnN0cmluZ2lm
eShvYmplY3QsIG51bGwsICIgICIpOworICAgICAgICB9IGNhdGNoIHsKKyAgICAgICAgICAgIHN0
cmluZyA9ICIiICsgb2JqZWN0OworICAgICAgICB9CisgICAgfQorCisgICAgQ29tbWFuZExpbmVB
UElIb3N0LmNvcHlUZXh0KHN0cmluZyk7Cit9KTsKKworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFu
ZExpbmVBUElNZXRob2QoImdldEV2ZW50TGlzdGVuZXJzIiwgZnVuY3Rpb24odGFyZ2V0KSB7Cisg
ICAgcmV0dXJuIENvbW1hbmRMaW5lQVBJSG9zdC5nZXRFdmVudExpc3RlbmVycyh0YXJnZXQpOwor
fSk7CisKK2Z1bmN0aW9uIGxvZ0V2ZW50KGV2ZW50KQogeworICAgIGluc3BlY3RlZEdsb2JhbE9i
amVjdC5jb25zb2xlLmxvZyhldmVudC50eXBlLCBldmVudCk7CiB9CiAKLUNvbW1hbmRMaW5lQVBJ
SW1wbC5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVj
dG9yCi0gICAgICogQHBhcmFtIHtOb2RlPX0gc3RhcnQKLSAgICAgKi8KLSAgICAkOiBmdW5jdGlv
biAoc2VsZWN0b3IsIHN0YXJ0KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NhblF1ZXJ5U2Vs
ZWN0b3JPbk5vZGUoc3RhcnQpKQorZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRUeXBlcyh0eXBlcykg
eworICAgIGlmICh0eXBlb2YgdHlwZXMgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgIHR5cGVz
ID0gWworICAgICAgICAgICAgIm1vdXNlIiwKKyAgICAgICAgICAgICJrZXkiLAorICAgICAgICAg
ICAgInRvdWNoIiwKKyAgICAgICAgICAgICJjb250cm9sIiwKKyAgICAgICAgICAgICJhYm9ydCIs
CisgICAgICAgICAgICAiYmx1ciIsCisgICAgICAgICAgICAiY2hhbmdlIiwKKyAgICAgICAgICAg
ICJkZXZpY2Vtb3Rpb24iLAorICAgICAgICAgICAgImRldmljZW9yaWVudGF0aW9uIgorICAgICAg
ICAgICAgImVycm9yIiwKKyAgICAgICAgICAgICJmb2N1cyIsCisgICAgICAgICAgICAibG9hZCIs
CisgICAgICAgICAgICAicmVzZXQiLAorICAgICAgICAgICAgInJlc2l6ZSIsCisgICAgICAgICAg
ICAic2Nyb2xsIiwKKyAgICAgICAgICAgICJzZWFyY2giLAorICAgICAgICAgICAgInNlbGVjdCIs
CisgICAgICAgICAgICAic3VibWl0IiwKKyAgICAgICAgICAgICJ1bmxvYWQiLAorICAgICAgICBd
OworICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGVzID09PSAic3RyaW5nIikKKyAgICAgICAgdHlw
ZXMgPSBbdHlwZXNdOworCisgICAgdmFyIHJlc3VsdCA9IFtdOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHR5cGVzW2ldID09PSAibW91
c2UiKSB7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFsKKyAgICAgICAgICAg
ICAgICAiY2xpY2siLAorICAgICAgICAgICAgICAgICJkYmxjbGljayIsCisgICAgICAgICAgICAg
ICAgIm1vdXNlZG93biIsCisgICAgICAgICAgICAgICAgIm1vdXNlbW92ZSIsCisgICAgICAgICAg
ICAgICAgIm1vdXNlb3V0IiwKKyAgICAgICAgICAgICAgICAibW91c2VvdmVyIiwKKyAgICAgICAg
ICAgICAgICAibW91c2V1cCIsCisgICAgICAgICAgICAgICAgIm1vdXNld2hlZWwiCisgICAgICAg
ICAgICBdKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlc1tpXSA9PT0gImtleSIpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoWworICAgICAgICAgICAgICAgICJrZXlkb3du
IiwKKyAgICAgICAgICAgICAgICAia2V5cHJlc3MiLAorICAgICAgICAgICAgICAgICJrZXl1cCIs
CisgICAgICAgICAgICAgICAgInRleHRJbnB1dCIKKyAgICAgICAgICAgIF0pOworICAgICAgICB9
IGVsc2UgaWYgKHR5cGVzW2ldID09PSAidG91Y2giKSB7CisgICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQuY29uY2F0KFsKKyAgICAgICAgICAgICAgICAidG91Y2hjYW5jZWwiCisgICAgICAgICAg
ICAgICAgInRvdWNoZW5kIiwKKyAgICAgICAgICAgICAgICAidG91Y2htb3ZlIiwKKyAgICAgICAg
ICAgICAgICAidG91Y2hzdGFydCIsCisgICAgICAgICAgICBdKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0eXBlc1tpXSA9PT0gImNvbnRyb2wiKSB7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQu
Y29uY2F0KFsKKyAgICAgICAgICAgICAgICAiYmx1ciIsCisgICAgICAgICAgICAgICAgImNoYW5n
ZSIsCisgICAgICAgICAgICAgICAgImZvY3VzIiwKKyAgICAgICAgICAgICAgICAicmVzZXQiCisg
ICAgICAgICAgICAgICAgInJlc2l6ZSIsCisgICAgICAgICAgICAgICAgInNjcm9sbCIsCisgICAg
ICAgICAgICAgICAgInNlbGVjdCIsCisgICAgICAgICAgICAgICAgInN1Ym1pdCIsCisgICAgICAg
ICAgICAgICAgInpvb20iLAorICAgICAgICAgICAgXSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcmVzdWx0LnB1c2godHlwZXNbaV0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgibW9uaXRvckV2ZW50
cyIsIGZ1bmN0aW9uKG9iamVjdCwgdHlwZXMpIHsKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0
LmFkZEV2ZW50TGlzdGVuZXIgfHwgIW9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKQorICAgICAg
ICByZXR1cm47CisgICAgdHlwZXMgPSBub3JtYWxpemVFdmVudFR5cGVzKHR5cGVzKTsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIG9iamVjdC5y
ZW1vdmVFdmVudExpc3RlbmVyKHR5cGVzW2ldLCBsb2dFdmVudCwgZmFsc2UpOworICAgICAgICBv
YmplY3QuYWRkRXZlbnRMaXN0ZW5lcih0eXBlc1tpXSwgbG9nRXZlbnQsIGZhbHNlKTsKKyAgICB9
Cit9KTsKKworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInVubW9uaXRv
ckV2ZW50cyIsIGZ1bmN0aW9uKG9iamVjdCwgdHlwZXMpIHsKKyAgICBpZiAoIW9iamVjdCB8fCAh
b2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIgfHwgIW9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKQor
ICAgICAgICByZXR1cm47CisgICAgdHlwZXMgPSBub3JtYWxpemVFdmVudFR5cGVzKHR5cGVzKTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKQorICAgICAgICBvYmpl
Y3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlc1tpXSwgbG9nRXZlbnQsIGZhbHNlKTsKK30pOwor
CitpZiAoaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmRvY3VtZW50ICYmIGluc3BlY3RlZEdsb2JhbE9i
amVjdC5Ob2RlKSB7CisgICAgZnVuY3Rpb24gY2FuUXVlcnlTZWxlY3Rvck9uTm9kZShub2RlKSB7
CisgICAgICAgIHJldHVybiBub2RlICYmIEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBlKG5vZGUp
ID09PSAibm9kZSIgJiYgKG5vZGUubm9kZVR5cGUgPT09IGluc3BlY3RlZEdsb2JhbE9iamVjdC5O
b2RlLkVMRU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBpbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QuTm9kZS5ET0NVTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IGluc3BlY3RlZEdsb2Jh
bE9iamVjdC5Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpOworICAgIH0KKworICAgIGluamVj
dGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCIkIiwgZnVuY3Rpb24oc2VsZWN0b3Is
IHN0YXJ0KSB7CisgICAgICAgIGlmIChjYW5RdWVyeVNlbGVjdG9yT25Ob2RlKHN0YXJ0KSkKICAg
ICAgICAgICAgIHJldHVybiBzdGFydC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKIAotICAgICAg
ICB2YXIgcmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2Vs
ZWN0b3IpOworICAgICAgICB2YXIgcmVzdWx0ID0gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKwogICAgICAgICBpZiAoc2VsZWN0b3IgJiYgc2VsZWN0b3Jb
MF0gIT09ICIjIikgewotICAgICAgICAgICAgcmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGluc3Bl
Y3RlZEdsb2JhbE9iamVjdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rvcik7CiAgICAg
ICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmNv
bnNvbGUud2FybigiVGhlIGNvbnNvbGUgZnVuY3Rpb24gJCgpIGhhcyBjaGFuZ2VkIGZyb20gJD1n
ZXRFbGVtZW50QnlJZChpZCkgdG8gJD1xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKS4gWW91IG1pZ2h0
IHRyeSAkKFwiIyVzXCIpIiwgc2VsZWN0b3IpOworICAgICAgICAgICAgICAgIGluc3BlY3RlZEds
b2JhbE9iamVjdC5jb25zb2xlLndhcm4oIlRoZSBjb25zb2xlIGZ1bmN0aW9uICQoKSBoYXMgY2hh
bmdlZCBmcm9tICQ9Z2V0RWxlbWVudEJ5SWQoaWQpIHRvICQ9cXVlcnlTZWxlY3RvcihzZWxlY3Rv
cikuIFlvdSBtaWdodCB0cnkgJChcIiMlc1wiKSIsIHNlbGVjdG9yKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfSwKKyAgICB9KTsKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBzZWxlY3RvcgotICAgICAqIEBwYXJhbSB7Tm9kZT19IHN0YXJ0Ci0gICAgICovCi0gICAg
JCQ6IGZ1bmN0aW9uIChzZWxlY3Rvciwgc3RhcnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
Y2FuUXVlcnlTZWxlY3Rvck9uTm9kZShzdGFydCkpCisgICAgaW5qZWN0ZWRTY3JpcHQuYWRkQ29t
bWFuZExpbmVBUElNZXRob2QoIiQkIiwgZnVuY3Rpb24oc2VsZWN0b3IsIHN0YXJ0KSB7CisgICAg
ICAgIGlmIChjYW5RdWVyeVNlbGVjdG9yT25Ob2RlKHN0YXJ0KSkKICAgICAgICAgICAgIHJldHVy
biBBcnJheS5mcm9tKHN0YXJ0LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTsKLSAgICAgICAg
cmV0dXJuIEFycmF5LmZyb20oaW5zcGVjdGVkV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JB
bGwoc2VsZWN0b3IpKTsKLSAgICB9LAorICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpbnNwZWN0
ZWRHbG9iYWxPYmplY3QuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpOworICAg
IH0pOwogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtOb2RlPX0gbm9kZQotICAgICAqIEByZXR1
cm4ge2Jvb2xlYW59Ci0gICAgICovCi0gICAgX2NhblF1ZXJ5U2VsZWN0b3JPbk5vZGU6IGZ1bmN0
aW9uKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gISFub2RlICYmIEluamVjdGVkU2NyaXB0
SG9zdC5zdWJ0eXBlKG5vZGUpID09PSAibm9kZSIgJiYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUu
RUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSB8fCBu
b2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30geHBhdGgKLSAgICAgKiBAcGFyYW0ge05v
ZGU9fSBjb250ZXh0Ci0gICAgICovCi0gICAgJHg6IGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KQot
ICAgIHsKLSAgICAgICAgdmFyIGRvYyA9IChjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVu
dCkgfHwgaW5zcGVjdGVkV2luZG93LmRvY3VtZW50OworICAgIGluamVjdGVkU2NyaXB0LmFkZENv
bW1hbmRMaW5lQVBJTWV0aG9kKCIkeCIsIGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KSB7CisgICAg
ICAgIHZhciBkb2MgPSAoY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpIHx8IGluc3Bl
Y3RlZEdsb2JhbE9iamVjdC5kb2N1bWVudDsKICAgICAgICAgdmFyIHJlc3VsdCA9IGRvYy5ldmFs
dWF0ZSh4cGF0aCwgY29udGV4dCB8fCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0LkFOWV9UWVBFLCBu
dWxsKTsKICAgICAgICAgc3dpdGNoIChyZXN1bHQucmVzdWx0VHlwZSkgewogICAgICAgICBjYXNl
IFhQYXRoUmVzdWx0Lk5VTUJFUl9UWVBFOgpAQCAtMTgyLDIxMyArMjI5LDcgQEAgQ29tbWFuZExp
bmVBUElJbXBsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUp
OwogICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICB9Ci0gICAgfSwKLQotICAgIGRp
cjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5jb25z
b2xlLmRpci5hcHBseShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJndW1lbnRzKQotICAgIH0s
Ci0KLSAgICBkaXJ4bWw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNwZWN0
ZWRXaW5kb3cuY29uc29sZS5kaXJ4bWwuYXBwbHkoaW5zcGVjdGVkV2luZG93LmNvbnNvbGUsIGFy
Z3VtZW50cykKLSAgICB9LAotCi0gICAga2V5czogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7Ci0gICAgfSwKLQotICAgIHZhbHVlczog
ZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KQotICAgICAgICAgICAgcmVzdWx0LnB1c2gob2JqZWN0
W2tleV0pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBwcm9maWxlOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gaW5zcGVjdGVkV2luZG93LmNvbnNvbGUu
cHJvZmlsZS5hcHBseShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJndW1lbnRzKQotICAgIH0s
Ci0KLSAgICBwcm9maWxlRW5kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gaW5z
cGVjdGVkV2luZG93LmNvbnNvbGUucHJvZmlsZUVuZC5hcHBseShpbnNwZWN0ZWRXaW5kb3cuY29u
c29sZSwgYXJndW1lbnRzKQotICAgIH0sCi0KLSAgICB0YWJsZTogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLnRhYmxlLmFwcGx5KGluc3Bl
Y3RlZFdpbmRvdy5jb25zb2xlLCBhcmd1bWVudHMpCi0gICAgfSwKLQotICAgIHNjcmVlbnNob3Q6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNwZWN0ZWRXaW5kb3cuY29uc29s
ZS5zY3JlZW5zaG90LmFwcGx5KGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLCBhcmd1bWVudHMpCi0g
ICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKLSAgICAgKiBA
cGFyYW0ge0FycmF5LjxzdHJpbmc+fHN0cmluZz19IHR5cGVzCi0gICAgICovCi0gICAgbW9uaXRv
ckV2ZW50czogZnVuY3Rpb24ob2JqZWN0LCB0eXBlcykKLSAgICB7Ci0gICAgICAgIGlmICghb2Jq
ZWN0IHx8ICFvYmplY3QuYWRkRXZlbnRMaXN0ZW5lciB8fCAhb2JqZWN0LnJlbW92ZUV2ZW50TGlz
dGVuZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHR5cGVzID0gdGhpcy5fbm9ybWFs
aXplRXZlbnRUeXBlcyh0eXBlcyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIG9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKHR5
cGVzW2ldLCB0aGlzLl9sb2dFdmVudCwgZmFsc2UpOwotICAgICAgICAgICAgb2JqZWN0LmFkZEV2
ZW50TGlzdGVuZXIodHlwZXNbaV0sIHRoaXMuX2xvZ0V2ZW50LCBmYWxzZSk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAotICAgICAq
IEBwYXJhbSB7QXJyYXkuPHN0cmluZz58c3RyaW5nPX0gdHlwZXMKLSAgICAgKi8KLSAgICB1bm1v
bml0b3JFdmVudHM6IGZ1bmN0aW9uKG9iamVjdCwgdHlwZXMpCi0gICAgewotICAgICAgICBpZiAo
IW9iamVjdCB8fCAhb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIgfHwgIW9iamVjdC5yZW1vdmVFdmVu
dExpc3RlbmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0eXBlcyA9IHRoaXMuX25v
cm1hbGl6ZUV2ZW50VHlwZXModHlwZXMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5
cGVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIo
dHlwZXNbaV0sIHRoaXMuX2xvZ0V2ZW50LCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7Kn0gb2JqZWN0Ci0gICAgICogQHJldHVybiB7Kn0KLSAgICAgKi8KLSAgICBp
bnNwZWN0OiBmdW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faW5z
cGVjdChvYmplY3QpOwotICAgIH0sCi0KLSAgICBxdWVyeUluc3RhbmNlcygpCi0gICAgewotICAg
ICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5SW5zdGFuY2VzKC4uLmFyZ3VtZW50
cyk7Ci0gICAgfSwKLQotICAgIHF1ZXJ5T2JqZWN0cygpCi0gICAgewotICAgICAgICByZXR1cm4g
SW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5SW5zdGFuY2VzKC4uLmFyZ3VtZW50cyk7Ci0gICAgfSwK
LQotICAgIHF1ZXJ5SG9sZGVycygpCi0gICAgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3Jp
cHRIb3N0LnF1ZXJ5SG9sZGVycyguLi5hcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICBjb3B5OiBm
dW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAgICB2YXIgc3RyaW5nOwotICAgICAgICB2YXIg
c3VidHlwZSA9IFJlbW90ZU9iamVjdC5zdWJ0eXBlKG9iamVjdCk7Ci0gICAgICAgIGlmIChzdWJ0
eXBlID09PSAibm9kZSIpCi0gICAgICAgICAgICBzdHJpbmcgPSBvYmplY3Qub3V0ZXJIVE1MOwot
ICAgICAgICBlbHNlIGlmIChzdWJ0eXBlID09PSAicmVnZXhwIikKLSAgICAgICAgICAgIHN0cmlu
ZyA9ICIiICsgb2JqZWN0OwotICAgICAgICBlbHNlIGlmIChpbmplY3RlZFNjcmlwdC5pc1ByaW1p
dGl2ZVZhbHVlKG9iamVjdCkpCi0gICAgICAgICAgICBzdHJpbmcgPSAiIiArIG9iamVjdDsKLSAg
ICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gInN5bWJvbCIpCi0gICAgICAgICAgICBz
dHJpbmcgPSBTdHJpbmcob2JqZWN0KTsKLSAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9
PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3RyaW5nID0gSlNP
Ti5zdHJpbmdpZnkob2JqZWN0LCBudWxsLCAiICAiKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgICAgICBzdHJpbmcgPSAiIiArIG9iamVjdDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIENvbW1hbmRMaW5lQVBJSG9zdC5jb3B5VGV4dChzdHJpbmcp
OwotICAgIH0sCi0KLSAgICBjbGVhcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQ29tbWFu
ZExpbmVBUElIb3N0LmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7Ci0gICAgfSwKLQotICAgIGdldEV2
ZW50TGlzdGVuZXJzOiBmdW5jdGlvbih0YXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm4gQ29t
bWFuZExpbmVBUElIb3N0LmdldEV2ZW50TGlzdGVuZXJzKHRhcmdldCk7Ci0gICAgfSwKLQotICAg
IF9pbnNwZWN0ZWRPYmplY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb21t
YW5kTGluZUFQSUhvc3QuaW5zcGVjdGVkT2JqZWN0KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz58c3RyaW5nPX0gdHlwZXMKLSAgICAgKiBAcmV0dXJu
IHtBcnJheS48c3RyaW5nPn0KLSAgICAgKi8KLSAgICBfbm9ybWFsaXplRXZlbnRUeXBlczogZnVu
Y3Rpb24odHlwZXMpCi0gICAgewotICAgICAgICBpZiAodHlwZW9mIHR5cGVzID09PSAidW5kZWZp
bmVkIikKLSAgICAgICAgICAgIHR5cGVzID0gWyAibW91c2UiLCAia2V5IiwgInRvdWNoIiwgImNv
bnRyb2wiLCAibG9hZCIsICJ1bmxvYWQiLCAiYWJvcnQiLCAiZXJyb3IiLCAic2VsZWN0IiwgImNo
YW5nZSIsICJzdWJtaXQiLCAicmVzZXQiLCAiZm9jdXMiLCAiYmx1ciIsICJyZXNpemUiLCAic2Ny
b2xsIiwgInNlYXJjaCIsICJkZXZpY2Vtb3Rpb24iLCAiZGV2aWNlb3JpZW50YXRpb24iIF07Ci0g
ICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0eXBlcyA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0
eXBlcyA9IFsgdHlwZXMgXTsKLQotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0
eXBlc1tpXSA9PT0gIm1vdXNlIikKLSAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKDAsIDAs
ICJtb3VzZWRvd24iLCAibW91c2V1cCIsICJjbGljayIsICJkYmxjbGljayIsICJtb3VzZW1vdmUi
LCAibW91c2VvdmVyIiwgIm1vdXNlb3V0IiwgIm1vdXNld2hlZWwiKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKHR5cGVzW2ldID09PSAia2V5IikKLSAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNl
KDAsIDAsICJrZXlkb3duIiwgImtleXVwIiwgImtleXByZXNzIiwgInRleHRJbnB1dCIpOwotICAg
ICAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0gPT09ICJ0b3VjaCIpCi0gICAgICAgICAgICAgICAg
cmVzdWx0LnNwbGljZSgwLCAwLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQi
LCAidG91Y2hjYW5jZWwiKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVzW2ldID09PSAiY29u
dHJvbCIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnNwbGljZSgwLCAwLCAicmVzaXplIiwgInNj
cm9sbCIsICJ6b29tIiwgImZvY3VzIiwgImJsdXIiLCAic2VsZWN0IiwgImNoYW5nZSIsICJzdWJt
aXQiLCAicmVzZXQiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQu
cHVzaCh0eXBlc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBf
bG9nRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaW5zcGVjdGVkV2luZG93
LmNvbnNvbGUubG9nKGV2ZW50LnR5cGUsIGV2ZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHsqfSBvYmplY3QKLSAgICAgKiBAcmV0dXJuIHsqfQotICAgICAqLwotICAgIF9p
bnNwZWN0OiBmdW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAgICBpZiAoYXJndW1lbnRzLmxl
bmd0aCA9PT0gMCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgb2JqZWN0SWQg
PSBSZW1vdGVPYmplY3QuY3JlYXRlKG9iamVjdCwgIiIpOwotICAgICAgICB2YXIgaGludHMgPSB7
fTsKLQotICAgICAgICBzd2l0Y2ggKFJlbW90ZU9iamVjdC5kZXNjcmliZShvYmplY3QpKSB7Ci0g
ICAgICAgIGNhc2UgIkRhdGFiYXNlIjoKLSAgICAgICAgICAgIHZhciBkYXRhYmFzZUlkID0gQ29t
bWFuZExpbmVBUElIb3N0LmRhdGFiYXNlSWQob2JqZWN0KQotICAgICAgICAgICAgaWYgKGRhdGFi
YXNlSWQpCi0gICAgICAgICAgICAgICAgaGludHMuZGF0YWJhc2VJZCA9IGRhdGFiYXNlSWQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiU3RvcmFnZSI6Ci0gICAgICAgICAgICB2
YXIgc3RvcmFnZUlkID0gQ29tbWFuZExpbmVBUElIb3N0LnN0b3JhZ2VJZChvYmplY3QpCi0gICAg
ICAgICAgICBpZiAoc3RvcmFnZUlkKQotICAgICAgICAgICAgICAgIGhpbnRzLmRvbVN0b3JhZ2VJ
ZCA9IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBzdG9yYWdlSWQgKyAiKSIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBDb21tYW5kTGluZUFQSUhv
c3QuaW5zcGVjdChvYmplY3RJZCwgaGludHMpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAg
IH0KKyAgICB9KTsKIH0KIAotaW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkgPSBDb21tYW5k
TGluZUFQSTsKLWluamVjdGVkU2NyaXB0Ll9jb21tYW5kTGluZUFQSUltcGwgPSBuZXcgQ29tbWFu
ZExpbmVBUElJbXBsKCk7Ci0KLS8vIFRoaXMgTW9kdWxlIGRvZXNuJ3QgZXhwb3NlIGFuIG9iamVj
dCwgaXQganVzdCBhZGRzIGFuIGV4dGVuc2lvbiB0aGF0IEluamVjdGVkU2NyaXB0IHVzZXMuCi0v
LyBIb3dldmVyLCB3ZSByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LCBzbyB0aGF0IEluamVjdGVkU2Ny
aXB0IGtub3dzIHRoaXMgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZC4KLXJldHVybiB7fTsKLQogfSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1bnRpbWVDb21w
bGV0aW9uUHJvdmlkZXIuanMKaW5kZXggYTQ3ZTdkYTIxYWIyZDk1YTgzYjlmNWFiMTJjN2ZkN2Jj
YTkwNmUyOC4uYzU4ZjYxZjg4YTgwYmZjMzA3MWU1YWY2ZWQ3YjJlOWVkMDdkOTIzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2
YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0
aW9uUHJvdmlkZXIuanMKQEAgLTQ0LDYgKzQ0LDQ3IEBAIFdJLkphdmFTY3JpcHRSdW50aW1lQ29t
cGxldGlvblByb3ZpZGVyID0gY2xhc3MgSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlk
CiAgICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2Vy
TWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2NsZWFyTGFzdFBy
b3BlcnRpZXMsIHRoaXMpOwogICAgIH0KIAorICAgIC8vIFN0YXRpYworCisgICAgc3RhdGljIGdl
dCBfY29tbWFuZExpbmVBUElLZXlzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBbCisgICAgICAg
ICAgICAiJF8iLAorICAgICAgICAgICAgImFzc2VydCIsCisgICAgICAgICAgICAiY2xlYXIiLAor
ICAgICAgICAgICAgImNvdW50IiwKKyAgICAgICAgICAgICJjb3VudFJlc2V0IiwKKyAgICAgICAg
ICAgICJkZWJ1ZyIsCisgICAgICAgICAgICAiZGlyIiwKKyAgICAgICAgICAgICJkaXJ4bWwiLAor
ICAgICAgICAgICAgImVycm9yIiwKKyAgICAgICAgICAgICJncm91cCIsCisgICAgICAgICAgICAi
Z3JvdXBDb2xsYXBzZWQiLAorICAgICAgICAgICAgImdyb3VwRW5kIiwKKyAgICAgICAgICAgICJp
bmZvIiwKKyAgICAgICAgICAgICJpbnNwZWN0IiwKKyAgICAgICAgICAgICJrZXlzIiwKKyAgICAg
ICAgICAgICJsb2ciLAorICAgICAgICAgICAgInByb2ZpbGUiLAorICAgICAgICAgICAgInByb2Zp
bGVFbmQiLAorICAgICAgICAgICAgInF1ZXJ5SG9sZGVycyIsCisgICAgICAgICAgICAicXVlcnlJ
bnN0YW5jZXMiLAorICAgICAgICAgICAgInF1ZXJ5T2JqZWN0cyIsCisgICAgICAgICAgICAicmVj
b3JkIiwKKyAgICAgICAgICAgICJyZWNvcmRFbmQiLAorICAgICAgICAgICAgInNjcmVlbnNob3Qi
LAorICAgICAgICAgICAgInRhYmxlIiwKKyAgICAgICAgICAgICJ0YWtlSGVhcFNuYXBzaG90IiwK
KyAgICAgICAgICAgICJ0aW1lIiwKKyAgICAgICAgICAgICJ0aW1lRW5kIiwKKyAgICAgICAgICAg
ICJ0aW1lTG9nIiwKKyAgICAgICAgICAgICJ0aW1lU3RhbXAiLAorICAgICAgICAgICAgInRyYWNl
IiwKKyAgICAgICAgICAgICJ2YWx1ZXMiLAorICAgICAgICAgICAgIndhcm4iLAorICAgICAgICBd
OworICAgIH0KKwogICAgIC8vIFByb3RlY3RlZAogCiAgICAgY29tcGxldGlvbkNvbnRyb2xsZXJD
b21wbGV0aW9uc05lZWRlZChjb21wbGV0aW9uQ29udHJvbGxlciwgZGVmYXVsdENvbXBsZXRpb25z
LCBiYXNlLCBwcmVmaXgsIHN1ZmZpeCwgZm9yY2VkKQpAQCAtMTEzLDcgKzE1NCw3IEBAIFdJLkph
dmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyID0gY2xhc3MgSmF2YVNjcmlwdFJ1bnRp
bWVDb21wbGV0aW9uUHJvdmlkCiAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Ns
ZWFyTGFzdFByb3BlcnRpZXNUaW1lb3V0KTsKICAgICAgICAgICAgIHRoaXMuX2NsZWFyTGFzdFBy
b3BlcnRpZXNUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLl9jbGVhckxhc3RQcm9wZXJ0aWVzLmJp
bmQodGhpcyksIFdJLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5DYWNoZWRQcm9wZXJ0aWVz
RHVyYXRpb24pOwogCi0gICAgICAgICAgICB0aGlzLl9sYXN0UHJvcGVydHlOYW1lcyA9IHByb3Bl
cnR5TmFtZXMgfHwge307CisgICAgICAgICAgICB0aGlzLl9sYXN0UHJvcGVydHlOYW1lcyA9IHBy
b3BlcnR5TmFtZXMgfHwgW107CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBldmFsdWF0
ZWQocmVzdWx0LCB3YXNUaHJvd24pCkBAIC0yMTEsNDEgKzI1Miw2MSBAQCBXSS5KYXZhU2NyaXB0
UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciA9IGNsYXNzIEphdmFTY3JpcHRSdW50aW1lQ29tcGxl
dGlvblByb3ZpZAogCiAgICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVkUHJvcGVydHlOYW1lcyhwcm9w
ZXJ0eU5hbWVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzID0gcHJvcGVy
dHlOYW1lcyB8fCB7fTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eU5hbWVz
ID8gT2JqZWN0LmtleXMocHJvcGVydHlOYW1lcykgOiBbXTsKIAogICAgICAgICAgICAgdXBkYXRl
TGFzdFByb3BlcnR5TmFtZXMuY2FsbCh0aGlzLCBwcm9wZXJ0eU5hbWVzKTsKIAogICAgICAgICAg
ICAgV0kucnVudGltZU1hbmFnZXIuYWN0aXZlRXhlY3V0aW9uQ29udGV4dC50YXJnZXQuUnVudGlt
ZUFnZW50LnJlbGVhc2VPYmplY3RHcm91cCgiY29tcGxldGlvbiIpOwogCiAgICAgICAgICAgICBp
ZiAoIWJhc2UpIHsKLSAgICAgICAgICAgICAgICBsZXQgY29tbWFuZExpbmVBUEkgPSBXSS5KYXZh
U2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5fY29tbWFuZExpbmVBUEkuc2xpY2UoMCk7
Ci0gICAgICAgICAgICAgICAgaWYgKFdJLmRlYnVnZ2VyTWFuYWdlci5wYXVzZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbGV0IHRhcmdldERhdGEgPSBXSS5kZWJ1Z2dlck1hbmFnZXIuZGF0YUZv
clRhcmdldChXSS5ydW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRpb25Db250ZXh0LnRhcmdldCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRhLnBhdXNlUmVhc29uID09PSBXSS5E
ZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uTGlzdGVuZXIgfHwgdGFyZ2V0RGF0YS5wYXVzZVJl
YXNvbiA9PT0gV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkV2ZW50TGlzdGVuZXIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZUFQSS5wdXNoKCIkZXZlbnQiKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0RGF0YS5wYXVzZVJlYXNvbiA9PT0gV0ku
RGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbW1hbmRMaW5lQVBJLnB1c2goIiRleGNlcHRpb24iKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBjb21tYW5kTGluZUFQSSkKLSAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lc1tuYW1lXSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcyA9IHByb3BlcnR5TmFtZXMuY29uY2F0KEphdmFTY3JpcHRSdW50
aW1lQ29tcGxldGlvblByb3ZpZGVyLl9jb21tYW5kTGluZUFQSUtleXMpOwogCiAgICAgICAgICAg
ICAgICAgbGV0IHNhdmVkUmVzdWx0QWxpYXMgPSBXSS5zZXR0aW5ncy5jb25zb2xlU2F2ZWRSZXN1
bHRBbGlhcy52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlhcykgewot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzW3NhdmVkUmVzdWx0QWxpYXMgKyAiMCJd
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lc1tzYXZlZFJlc3VsdEFs
aWFzICsgIl8iXSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMp
CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChzYXZlZFJlc3VsdEFsaWFz
ICsgIl8iKTsKKworICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBXSS5ydW50aW1lTWFuYWdl
ci5hY3RpdmVFeGVjdXRpb25Db250ZXh0LnRhcmdldDsKKworICAgICAgICAgICAgICAgIGlmIChX
SS5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCB0YXJn
ZXREYXRhID0gV0kuZGVidWdnZXJNYW5hZ2VyLmRhdGFGb3JUYXJnZXQodGFyZ2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGEucGF1c2VSZWFzb24gPT09IFdJLkRlYnVnZ2Vy
TWFuYWdlci5QYXVzZVJlYXNvbi5MaXN0ZW5lciB8fCB0YXJnZXREYXRhLnBhdXNlUmVhc29uID09
PSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uRXZlbnRMaXN0ZW5lcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCIkZXZlbnQiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChzYXZlZFJlc3VsdEFsaWFzICsgImV2ZW50Iik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFy
Z2V0RGF0YS5wYXVzZVJlYXNvbiA9PT0gV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkV4
Y2VwdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCIk
ZXhjZXB0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlh
cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goc2F2ZWRS
ZXN1bHRBbGlhcyArICJleGNlcHRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0LnR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIFdJLlRhcmdldC5UeXBlLlBhZ2U6CisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJCIpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLnB1c2goIiQkIik7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVz
aCgiJDAiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goc2F2ZWRSZXN1bHRBbGlhcyAr
ICIwIik7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJHgiKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gKKyAgICAgICAgICAgICAgICBjYXNlIFdJ
LlRhcmdldC5UeXBlLlNlcnZpY2VXb3JrZXI6CisgICAgICAgICAgICAgICAgY2FzZSBXSS5UYXJn
ZXQuVHlwZS5Xb3JrZXI6CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgi
Y29weSIpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goImdldEV2ZW50
TGlzdGVuZXJzIik7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgibW9u
aXRvckV2ZW50cyIpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goInVu
bW9uaXRvckV2ZW50cyIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRHVlIHRvIGNhY2hpbmcsIHNvbWV0
aW1lcyBvbGQgJG4gdmFsdWVzIHNob3cgdXAgYXMgY29tcGxldGlvbiByZXN1bHRzIGV2ZW4gdGhv
dWdoIHRoZXkgYXJlIG5vdCBhdmFpbGFibGUuIFdlIHNob3VsZCBjbGVhciB0aGF0IHByb2FjdGl2
ZWx5LgogICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IFdJLkNvbnNvbGVDb21t
YW5kUmVzdWx0TWVzc2FnZS5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXNbIiQiICsgaV0gPSB0cnVlOwotCisgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJCIgKyBpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzW3NhdmVkUmVzdWx0QWxpYXMgKyBpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goc2F2ZWRSZXN1bHRBbGlhcyArIGkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJvcGVydHlOYW1lcyA9IE9i
amVjdC5rZXlzKHByb3BlcnR5TmFtZXMpOwotCiAgICAgICAgICAgICB2YXIgaW1wbGljaXRTdWZm
aXggPSAiIjsKICAgICAgICAgICAgIGlmIChicmFja2V0Tm90YXRpb24pIHsKICAgICAgICAgICAg
ICAgICB2YXIgcXVvdGVVc2VkID0gcHJlZml4WzBdID09PSAiJyIgPyAiJyIgOiAiXCIiOwpAQCAt
MzEzLDI4ICszNzQsMyBAQCBXSS5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciA9
IGNsYXNzIEphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZAogICAgICAgICB0aGlzLl9s
YXN0UHJvcGVydHlOYW1lcyA9IG51bGw7CiAgICAgfQogfTsKLQotV0kuSmF2YVNjcmlwdFJ1bnRp
bWVDb21wbGV0aW9uUHJvdmlkZXIuX2NvbW1hbmRMaW5lQVBJID0gWwotICAgICIkIiwKLSAgICAi
JCQiLAotICAgICIkMCIsCi0gICAgIiRfIiwKLSAgICAiJHgiLAotICAgICJjbGVhciIsCi0gICAg
ImNvcHkiLAotICAgICJkaXIiLAotICAgICJkaXJ4bWwiLAotICAgICJnZXRFdmVudExpc3RlbmVy
cyIsCi0gICAgImluc3BlY3QiLAotICAgICJrZXlzIiwKLSAgICAibW9uaXRvckV2ZW50cyIsCi0g
ICAgInByb2ZpbGUiLAotICAgICJwcm9maWxlRW5kIiwKLSAgICAicXVlcnlIb2xkZXJzIiwKLSAg
ICAicXVlcnlJbnN0YW5jZXMiLAotICAgICJxdWVyeU9iamVjdHMiLAotICAgICJzY3JlZW5zaG90
IiwKLSAgICAidGFibGUiLAotICAgICJ1bm1vbml0b3JFdmVudHMiLAotICAgICJ2YWx1ZXMiLAot
XTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377170</attachid>
            <date>2019-08-23 16:01:44 -0700</date>
            <delta_ts>2019-08-23 16:27:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200971-20190823160143.patch</filename>
            <type>text/plain</type>
            <size>42899</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGVlODVmOGVhMzIyMGU2ODliNTI0ZjRkMjBkN2U1
Njc5NWM5MGI3ZjAuLjY0YWI1MTQwMjZkNjFhMWY4YWFlNjEzY2ZkOTdiMTFmZjE2NmQ3ZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTA4LTIzICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBj
cmVhdGUgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgYXBpIGZ1bmN0aW9ucyBmb3Igb3RoZXIgY29u
c29sZSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDA5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAg
ICAgICAgRXhwb3NlIGFsbCBgY29uc29sZS4qYCBmdW5jdGlvbnMgaW4gdGhlIGNvbW1hbmQgbGlu
ZSBBUEksIHNpbmNlIHRoZXkncmUgYWxsIGFscmVhZHkgYWJsZSB0bworICAgICAgICBiZSByZWZl
cmVuY2VkIHZpYSB0aGUgYGNvbnNvbGVgIG9iamVjdC4KKworICAgICAgICBQcm92aWRlIGEgc2lt
cGxlciBpbnRlcmZhY2UgZm9yIG90aGVyIGluamVjdGVkIHNjcmlwdHMgdG8gbW9kaWZ5IHRoZSBj
b21tYW5kIGxpbmUgQVBJLgorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9k
dWxlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNb2R1bGU6OmVuc3Vy
ZUluamVjdGVkKToKKworICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
czoKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5pbnNwZWN0T2JqZWN0KToKKyAg
ICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5hZGRDb21tYW5kTGluZUFQSUdldHRlcik6
IEFkZGVkLgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLmFkZENvbW1hbmRMaW5l
QVBJTWV0aG9kKTogQWRkZWQuCisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUuaGFz
SW5qZWN0ZWRNb2R1bGUpOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlw
ZS5pbmplY3RNb2R1bGUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLl9ldmFs
dWF0ZU9uKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJKTogQWRkZWQu
CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUubW9kdWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5fc2F2ZWRSZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoYmluZCk6IERlbGV0ZWQuCisgICAgICAgIChCYXNpY0NvbW1hbmRMaW5lQVBJKTog
RGVsZXRlZC4KKyAgICAgICAgKGNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKHRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKHByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAocHJvZmlsZUVuZCk6
IERlbGV0ZWQuCisgICAgICAgIChrZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKHZhbHVlcyk6IERl
bGV0ZWQuCisgICAgICAgIChxdWVyeUluc3RhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChxdWVy
eU9iamVjdHMpOiBEZWxldGVkLgorICAgICAgICAocXVlcnlIb2xkZXJzKTogRGVsZXRlZC4KKwog
MjAxOS0wOC0yMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW3dh
dGNoT1NdIERpc2FibGUgQ29udGVudCBGaWx0ZXJpbmcgaW4gdGhlIHNpbXVsYXRvciBidWlsZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDc3MGVjMGYzYTgyNThkOGJlYzYxNGVjY2E2N2I4ZjZkZjQ4MjA3ZjguLmQ1
YzNiOTRjMTI3NmY5NzE2NThjZjkyNDJhODhmZWJhMzJiNWY4MTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAxOS0wOC0yMyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogY3JlYXRlIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5l
IGFwaSBmdW5jdGlvbnMgZm9yIG90aGVyIGNvbnNvbGUgbWV0aG9kcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwOTcxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIEV4cG9zZSBhbGwgYGNvbnNvbGUuKmAg
ZnVuY3Rpb25zIGluIHRoZSBjb21tYW5kIGxpbmUgQVBJLCBzaW5jZSB0aGV5J3JlIGFsbCBhbHJl
YWR5IGFibGUgdG8KKyAgICAgICAgYmUgcmVmZXJlbmNlZCB2aWEgdGhlIGBjb25zb2xlYCBvYmpl
Y3QuCisKKyAgICAgICAgUHJvdmlkZSBhIHNpbXBsZXIgaW50ZXJmYWNlIGZvciBvdGhlciBpbmpl
Y3RlZCBzY3JpcHRzIHRvIG1vZGlmeSB0aGUgY29tbWFuZCBsaW5lIEFQSS4KKworICAgICAgICAq
IGluc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qczoKKyAgICAgICAgKGluamVj
dGVkU2NyaXB0Ll9pbnNwZWN0T2JqZWN0KTogQWRkZWQuCisgICAgICAgIChub3JtYWxpemVFdmVu
dFR5cGVzKTogQWRkZWQuCisgICAgICAgIChsb2dFdmVudCk6IEFkZGVkLgorICAgICAgICAoY2Fu
UXVlcnlTZWxlY3Rvck9uTm9kZSk6IEFkZGVkLgorICAgICAgICAoYmluZCk6IERlbGV0ZWQuCisg
ICAgICAgICh2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICh0aGlzLm1ldGhvZC50b1N0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSSk6IERlbGV0ZWQuCisgICAgICAgIChD
b21tYW5kTGluZUFQSUltcGwpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBs
LnByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90
eXBlLl9jYW5RdWVyeVNlbGVjdG9yT25Ob2RlKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRM
aW5lQVBJSW1wbC5wcm90b3R5cGUueCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQ
SUltcGwucHJvdG90eXBlLmRpcik6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUlt
cGwucHJvdG90eXBlLmRpcnhtbCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUlt
cGwucHJvdG90eXBlLmtleXMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBs
LnByb3RvdHlwZS52YWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBs
LnByb3RvdHlwZS5wcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1w
bC5wcm90b3R5cGUucHJvZmlsZUVuZCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQ
SUltcGwucHJvdG90eXBlLnRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJ
SW1wbC5wcm90b3R5cGUuc2NyZWVuc2hvdCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGlu
ZUFQSUltcGwucHJvdG90eXBlLm1vbml0b3JFdmVudHMpOiBEZWxldGVkLgorICAgICAgICAoQ29t
bWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS51bm1vbml0b3JFdmVudHMpOiBEZWxldGVkLgorICAg
ICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5pbnNwZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUucXVlcnlJbnN0YW5jZXMpOiBEZWxl
dGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5xdWVyeU9iamVjdHMp
OiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5xdWVyeUhv
bGRlcnMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5j
b3B5KTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUuY2xl
YXIpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5nZXRF
dmVudExpc3RlbmVycyk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJv
dG90eXBlLl9pbnNwZWN0ZWRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVB
UElJbXBsLnByb3RvdHlwZS5fbm9ybWFsaXplRXZlbnRUeXBlcyk6IERlbGV0ZWQuCisgICAgICAg
IChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLl9sb2dFdmVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLl9pbnNwZWN0KTogRGVsZXRlZC4KKwog
MjAxOS0wOC0yMiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbU1ZHXSAtd2Via2l0LWNsaXAtcGF0aCB0cmVhdHMgdXJsKGFiYyN4eXopIGFzIHVy
bCgjeHl6KSBiZWNhdXNlIGl0IGNoZWNrcyBvbmx5IFVSTCBmcmFnbWVudCBwYXJ0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwppbmRleCBiZTljMTBjMzM3OTY3MDg2NzFjOTNlNjFmODQ1ZDJkOWMxNGNh
YjUxLi42YzBlNGQ5N2I2YmRjZTIwYzQ0NTBjMDA5MjBkMzgzMzkyZTZiOGFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOS0wOC0yMyAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogY3JlYXRlIGFk
ZGl0aW9uYWwgY29tbWFuZCBsaW5lIGFwaSBmdW5jdGlvbnMgZm9yIG90aGVyIGNvbnNvbGUgbWV0
aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAw
OTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIEV4
cG9zZSBhbGwgYGNvbnNvbGUuKmAgZnVuY3Rpb25zIGluIHRoZSBjb21tYW5kIGxpbmUgQVBJLCBz
aW5jZSB0aGV5J3JlIGFsbCBhbHJlYWR5IGFibGUgdG8KKyAgICAgICAgYmUgcmVmZXJlbmNlZCB2
aWEgdGhlIGBjb25zb2xlYCBvYmplY3QuCisKKyAgICAgICAgUHJvdmlkZSBhIHNpbXBsZXIgaW50
ZXJmYWNlIGZvciBvdGhlciBpbmplY3RlZCBzY3JpcHRzIHRvIG1vZGlmeSB0aGUgY29tbWFuZCBs
aW5lIEFQSS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlw
dFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuanM6CisgICAgICAgIChXSS5KYXZhU2NyaXB0UnVu
dGltZUNvbXBsZXRpb25Qcm92aWRlci5wcm90b3R5cGUuZ2V0IF9jb21tYW5kTGluZUFQSUtleXMp
OiBBZGRlZC4KKyAgICAgICAgKFdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVy
LnByb3RvdHlwZS5jb21wbGV0aW9uQ29udHJvbGxlckNvbXBsZXRpb25zTmVlZGVkLnVwZGF0ZUxh
c3RQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlv
blByb3ZpZGVyLnByb3RvdHlwZS5jb21wbGV0aW9uQ29udHJvbGxlckNvbXBsZXRpb25zTmVlZGVk
LnJlY2VpdmVkUHJvcGVydHlOYW1lcyk6CisKIDIwMTktMDgtMjIgIERldmluIFJvdXNzbyAgPGRy
b3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnNvbGU6IGF1dG9t
YXRpY2FsbHkgc2VsZWN0IHRoZSAiRXZhbHVhdGlvbnMiIGZpbHRlciB3aGVuZXZlciBydW5uaW5n
IGNvbW1hbmRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRNb2R1bGUuY3BwCmluZGV4IDQwM2Y2NzEyYzZiMzY5NGJkMTYzOGU1ZmRh
ZGE3MjI0MDlmMDQxNDMuLmZkMDIwNmVjNzQ1ZTM4YmQzODgzYmM3NjNlOTVmNjYyNTI1NDdmMzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNb2R1bGUuY3BwCkBAIC02MiwyMCArNjIsMjEgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dE1vZHVsZTo6ZW5zdXJlSW5qZWN0ZWQoSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNj
cmlwdE0KIAogICAgIC8vIEZJWE1FOiBNYWtlIHRoZSBJbmplY3RlZFNjcmlwdCBhIG1vZHVsZSBp
dHNlbGYuCiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKGluamVjdGVkU2NyaXB0LnNjcmlw
dFN0YXRlKCkpOwotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdC5pbmplY3RlZFNjcmlwdE9iamVjdCgpLCAibW9kdWxlIl9zLCBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25tZW50KCkuZnVuY3Rpb25DYWxsSGFuZGxl
cigpKTsKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0
ZWRTY3JpcHQuaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImhhc0luamVjdGVkTW9kdWxlIl9zLCBp
bmplY3RlZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25tZW50KCkuZnVuY3Rpb25DYWxs
SGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChuYW1lKCkpOwogICAgIGJv
b2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgYXV0byByZXN1bHRWYWx1ZSA9IGluamVjdGVk
U2NyaXB0LmNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChmdW5jdGlvbiwgaGFkRXhjZXB0aW9u
KTsKICAgICBBU1NFUlQoIWhhZEV4Y2VwdGlvbik7Ci0gICAgaWYgKGhhZEV4Y2VwdGlvbiB8fCAh
cmVzdWx0VmFsdWUgfHwgIXJlc3VsdFZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoaGFkRXhj
ZXB0aW9uIHx8ICFyZXN1bHRWYWx1ZSB8fCAhcmVzdWx0VmFsdWUuaXNCb29sZWFuKCkgfHwgIXJl
c3VsdFZhbHVlLmFzQm9vbGVhbigpKSB7CiAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdC5pbmplY3RlZFNjcmlwdE9iamVjdCgpLCAi
aW5qZWN0TW9kdWxlIl9zLCBpbmplY3RlZFNjcmlwdE1hbmFnZXItPmluc3BlY3RvckVudmlyb25t
ZW50KCkuZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQobmFtZSgpKTsKICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc291cmNlKCkp
OwogICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChob3N0KGluamVjdGVkU2NyaXB0TWFu
YWdlciwgaW5qZWN0ZWRTY3JpcHQuc2NyaXB0U3RhdGUoKSkpOwogICAgICAgICByZXN1bHRWYWx1
ZSA9IGluamVjdGVkU2NyaXB0LmNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChmdW5jdGlvbiwg
aGFkRXhjZXB0aW9uKTsKICAgICAgICAgaWYgKGhhZEV4Y2VwdGlvbikgewotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBX
VEZMb2dBbHdheXMoIkZhaWxlZCB0byBwYXJzZS9leGVjdXRlICVzISIsIG5hbWUoKS5hc2NpaSgp
LmRhdGEoKSk7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIiVzXG4iLCBzb3VyY2UoKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKaW5kZXggMzYzYWI2YWMxNmZhYWU0NWU1
OGMzYzU2MDFhODVlOWViNmZiYzAyMi4uN2IzOGM5OGQ2ZjgxZDk3NzYwNzEwMzBiNDNkOGY0ZjAw
NTRjZDJiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0U291cmNlLmpzCkBAIC0zODksOCArMzg5LDggQEAgbGV0IEluamVjdGVk
U2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKIAogICAgIGluc3BlY3RPYmplY3Qob2JqZWN0
KQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2NvbW1hbmRMaW5lQVBJSW1wbCkKLSAgICAgICAg
ICAgIHRoaXMuX2NvbW1hbmRMaW5lQVBJSW1wbC5pbnNwZWN0KG9iamVjdCk7CisgICAgICAgIGlm
ICh0aGlzLl9pbnNwZWN0T2JqZWN0KQorICAgICAgICAgICAgdGhpcy5faW5zcGVjdE9iamVjdChv
YmplY3QpOwogICAgIH0KIAogICAgIHJlbGVhc2VPYmplY3Qob2JqZWN0SWQpCkBAIC00MTcsMjcg
KzQxNywzNiBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAg
ICAgICBkZWxldGUgdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07CiAgICAgfQog
CisgICAgLy8gQ29tbWFuZExpbmVBUEkKKworICAgIGFkZENvbW1hbmRMaW5lQVBJR2V0dGVyKG5h
bWUsIGZ1bmMpCisgICAgeworICAgICAgICBJbmplY3RlZFNjcmlwdC5Db21tYW5kTGluZUFQSS5f
Z2V0dGVycy5wdXNoKHtuYW1lLCBmdW5jfSk7CisgICAgfQorCisgICAgYWRkQ29tbWFuZExpbmVB
UElNZXRob2QobmFtZSwgZnVuYykKKyAgICB7CisgICAgICAgIGZ1bmMudG9TdHJpbmcgPSBmdW5j
dGlvbigpIHsgcmV0dXJuICJmdW5jdGlvbiAiICsgbmFtZSArICIoKSB7IFtDb21tYW5kIExpbmUg
QVBJXSB9IiB9OworICAgICAgICBJbmplY3RlZFNjcmlwdC5Db21tYW5kTGluZUFQSS5fbWV0aG9k
cy5wdXNoKHtuYW1lLCBmdW5jfSk7CisgICAgfQorCiAgICAgLy8gSW5qZWN0ZWRTY3JpcHRNb2R1
bGUgQysrIEFQSQogCi0gICAgbW9kdWxlKG5hbWUpCisgICAgaGFzSW5qZWN0ZWRNb2R1bGUobmFt
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGVzW25hbWVdOwogICAgIH0KIAog
ICAgIGluamVjdE1vZHVsZShuYW1lLCBzb3VyY2UsIGhvc3QpCiAgICAgewotICAgICAgICBkZWxl
dGUgdGhpcy5fbW9kdWxlc1tuYW1lXTsKKyAgICAgICAgdGhpcy5fbW9kdWxlc1tuYW1lXSA9IGZh
bHNlOwogCiAgICAgICAgIGxldCBtb2R1bGVGdW5jdGlvbiA9IEluamVjdGVkU2NyaXB0SG9zdC5l
dmFsdWF0ZSgiKCIgKyBzb3VyY2UgKyAiKSIpOwotICAgICAgICBpZiAodHlwZW9mIG1vZHVsZUZ1
bmN0aW9uICE9PSAiZnVuY3Rpb24iKSB7Ci0gICAgICAgICAgICBpZiAoaW5zcGVjdGVkR2xvYmFs
T2JqZWN0LmNvbnNvbGUpCi0gICAgICAgICAgICAgICAgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNv
bnNvbGUuZXJyb3IoIldlYiBJbnNwZWN0b3IgZXJyb3I6IEEgZnVuY3Rpb24gd2FzIGV4cGVjdGVk
IGZvciBtb2R1bGUgJXMgZXZhbHVhdGlvbiIsIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVGdW5jdGlvbiAhPT0gImZ1
bmN0aW9uIikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogV2ViIEluc3BlY3RvcjogYSBmdW5j
dGlvbiB3YXMgZXhwZWN0ZWQgZm9yIGluamVjdE1vZHVsZSI7CisgICAgICAgIG1vZHVsZUZ1bmN0
aW9uLmNhbGwoaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3QsIGluc3Bl
Y3RlZEdsb2JhbE9iamVjdCwgaW5qZWN0ZWRTY3JpcHRJZCwgdGhpcywgUmVtb3RlT2JqZWN0LCBo
b3N0KTsKIAotICAgICAgICBsZXQgbW9kdWxlID0gbW9kdWxlRnVuY3Rpb24uY2FsbChpbnNwZWN0
ZWRHbG9iYWxPYmplY3QsIEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkR2xvYmFsT2JqZWN0
LCBpbmplY3RlZFNjcmlwdElkLCB0aGlzLCBSZW1vdGVPYmplY3QsIGhvc3QpOwotICAgICAgICB0
aGlzLl9tb2R1bGVzW25hbWVdID0gbW9kdWxlOwotICAgICAgICByZXR1cm4gbW9kdWxlOworICAg
ICAgICB0aGlzLl9tb2R1bGVzW25hbWVdID0gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJbmplY3Rl
ZFNjcmlwdE1vZHVsZSBKYXZhU2NyaXB0IEFQSQpAQCAtNTY4LDEzICs1NzcsOCBAQCBsZXQgSW5q
ZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgIF9ldmFsdWF0ZU9uKGV2YWxG
dW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uLCBpc0V2YWxPbkNhbGxGcmFtZSwgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJKQogICAgIHsKICAgICAgICAgbGV0IGNvbW1hbmRMaW5lQVBJID0gbnVsbDsK
LSAgICAgICAgaWYgKGluY2x1ZGVDb21tYW5kTGluZUFQSSkgewotICAgICAgICAgICAgaWYgKHRo
aXMuQ29tbWFuZExpbmVBUEkpCi0gICAgICAgICAgICAgICAgY29tbWFuZExpbmVBUEkgPSBuZXcg
dGhpcy5Db21tYW5kTGluZUFQSSh0aGlzLl9jb21tYW5kTGluZUFQSUltcGwsIGlzRXZhbE9uQ2Fs
bEZyYW1lID8gb2JqZWN0IDogbnVsbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29tbWFuZExpbmVBUEkgPSBuZXcgQmFzaWNDb21tYW5kTGluZUFQSShpc0V2YWxPbkNhbGxG
cmFtZSA/IG9iamVjdCA6IG51bGwpOwotICAgICAgICB9Ci0KKyAgICAgICAgaWYgKGluY2x1ZGVD
b21tYW5kTGluZUFQSSkKKyAgICAgICAgICAgIGNvbW1hbmRMaW5lQVBJID0gbmV3IEluamVjdGVk
U2NyaXB0LkNvbW1hbmRMaW5lQVBJKGlzRXZhbE9uQ2FsbEZyYW1lID8gb2JqZWN0IDogbnVsbCkK
ICAgICAgICAgcmV0dXJuIGV2YWxGdW5jdGlvbi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbiwgY29t
bWFuZExpbmVBUEkpOwogICAgIH0KIApAQCAtODY5LDExICs4NzMsNiBAQCBsZXQgSW5qZWN0ZWRT
Y3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICBpZiAodGhpcy5fbmV4dFNhdmVk
UmVzdWx0SW5kZXggPj0gMTAwKQogICAgICAgICAgICAgdGhpcy5fbmV4dFNhdmVkUmVzdWx0SW5k
ZXggPSAxOwogICAgIH0KLQotICAgIF9zYXZlZFJlc3VsdChpbmRleCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9zYXZlZFJlc3VsdHNbaW5kZXhdOwotICAgIH0KIH07CiAKIEluamVjdGVk
U2NyaXB0LkNvbGxlY3Rpb25Nb2RlID0gewpAQCAtMTQ1Nyw4MCArMTQ1Niw4OSBAQCBJbmplY3Rl
ZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5fY3JlYXRlU2NvcGVKc29uID0gZnVuY3Rpb24ob2JqZWN0
LCB7bmFtZSwgdHlwZSwgbAogCiAvLyAtLS0tLS0tCiAKLWZ1bmN0aW9uIGJpbmQoZnVuYywgdGhp
c09iamVjdCwgLi4ub3V0ZXJBcmdzKQorSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkgPSBj
bGFzcyBDb21tYW5kTGluZUFQSQogewotICAgIHJldHVybiBmdW5jdGlvbiguLi5pbm5lckFyZ3Mp
IHsKLSAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc09iamVjdCwgb3V0ZXJBcmdzLmNvbmNh
dChpbm5lckFyZ3MpKTsKLSAgICB9OwotfQorICAgIGNvbnN0cnVjdG9yKGNhbGxGcmFtZSkKKyAg
ICB7CisgICAgICAgIGxldCBzYXZlZFJlc3VsdEFsaWFzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LnNh
dmVkUmVzdWx0QWxpYXM7CiAKLWZ1bmN0aW9uIEJhc2ljQ29tbWFuZExpbmVBUEkoY2FsbEZyYW1l
KQotewotICAgIGxldCBzYXZlZFJlc3VsdEFsaWFzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LnNhdmVk
UmVzdWx0QWxpYXM7CisgICAgICAgIGxldCBkZWZpbmVHZXR0ZXIgPSAoa2V5LCB2YWx1ZSkgPT4g
eworICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gImZ1bmN0aW9uIikgeworICAgICAg
ICAgICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgdmFs
dWUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG9yaWdpbmFsVmFsdWU7IH07CisgICAgICAgICAgICB9
CiAKLSAgICBsZXQgZGVmaW5lR2V0dGVyID0gKGtleSwgdmFsdWUpID0+IHsKLSAgICAgICAgaWYg
KHR5cGVvZiB2YWx1ZSAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgbGV0IG9yaWdpbmFs
VmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgIHZhbHVlID0gZnVuY3Rpb24oKSB7IHJldHVybiBv
cmlnaW5hbFZhbHVlOyB9OworICAgICAgICAgICAgdGhpcy5fX2RlZmluZUdldHRlcl9fKCIkIiAr
IGtleSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCisgICAgICAg
ICAgICAgICAgdGhpcy5fX2RlZmluZUdldHRlcl9fKHNhdmVkUmVzdWx0QWxpYXMgKyBrZXksIHZh
bHVlKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIl9sYXN0UmVzdWx0IiBpbiBpbmplY3Rl
ZFNjcmlwdCkKKyAgICAgICAgICAgIGRlZmluZUdldHRlcigiXyIsIGluamVjdGVkU2NyaXB0Ll9s
YXN0UmVzdWx0KTsKKworICAgICAgICBpZiAoIl9leGNlcHRpb25WYWx1ZSIgaW4gaW5qZWN0ZWRT
Y3JpcHQpCisgICAgICAgICAgICBkZWZpbmVHZXR0ZXIoImV4Y2VwdGlvbiIsIGluamVjdGVkU2Ny
aXB0Ll9leGNlcHRpb25WYWx1ZSk7CisKKyAgICAgICAgaWYgKCJfZXZlbnRWYWx1ZSIgaW4gaW5q
ZWN0ZWRTY3JpcHQpCisgICAgICAgICAgICBkZWZpbmVHZXR0ZXIoImV2ZW50IiwgaW5qZWN0ZWRT
Y3JpcHQuX2V2ZW50VmFsdWUpOworCisgICAgICAgIC8vICQxLSQ5OQorICAgICAgICBmb3IgKGxl
dCBpID0gMTsgaSA8PSBpbmplY3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHRzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBkZWZpbmVHZXR0ZXIoaSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGluamVjdGVkU2NyaXB0Ll9zYXZlZFJlc3VsdHNbaV07CisgICAgICAgICAgICB9
KTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXygiJCIgKyBrZXks
IHZhbHVlKTsKLSAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCi0gICAgICAgICAgICB0aGlz
Ll9fZGVmaW5lR2V0dGVyX18oc2F2ZWRSZXN1bHRBbGlhcyArIGtleSwgdmFsdWUpOwotICAgIH07
CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVB
UEkuX2dldHRlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCB7bmFtZSwgZnVuY30g
PSBJbmplY3RlZFNjcmlwdC5Db21tYW5kTGluZUFQSS5fZ2V0dGVyc1tpXTsKKyAgICAgICAgICAg
IGRlZmluZUdldHRlcihuYW1lLCBmdW5jKTsKKyAgICAgICAgfQogCi0gICAgaWYgKCJfbGFzdFJl
c3VsdCIgaW4gaW5qZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiXyIsIGluamVj
dGVkU2NyaXB0Ll9sYXN0UmVzdWx0KTsKLQotICAgIGlmICgiX2V4Y2VwdGlvblZhbHVlIiBpbiBp
bmplY3RlZFNjcmlwdCkKLSAgICAgICAgZGVmaW5lR2V0dGVyKCJleGNlcHRpb24iLCBpbmplY3Rl
ZFNjcmlwdC5fZXhjZXB0aW9uVmFsdWUpOwotCi0gICAgaWYgKCJfZXZlbnRWYWx1ZSIgaW4gaW5q
ZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiZXZlbnQiLCBpbmplY3RlZFNjcmlw
dC5fZXZlbnRWYWx1ZSk7Ci0KLSAgICAvLyAkMS0kOTkKLSAgICBmb3IgKGxldCBpID0gMTsgaSA8
PSBpbmplY3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHRzLmxlbmd0aDsgKytpKQotICAgICAgICBkZWZp
bmVHZXR0ZXIoaSwgYmluZChpbmplY3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHQsIGluamVjdGVkU2Ny
aXB0LCBpKSk7Ci0KLSAgICAvLyBDb21tYW5kIExpbmUgQVBJIG1ldGhvZHMuCi0gICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBCYXNpY0NvbW1hbmRMaW5lQVBJLm1ldGhvZHMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgbGV0IG1ldGhvZCA9IEJhc2ljQ29tbWFuZExpbmVBUEkubWV0aG9kc1tpXTsKLSAg
ICAgICAgdGhpc1ttZXRob2QubmFtZV0gPSBtZXRob2Q7CisgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkuX21ldGhvZHMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGxldCB7bmFtZSwgZnVuY30gPSBJbmplY3RlZFNjcmlwdC5Db21tYW5k
TGluZUFQSS5fbWV0aG9kc1tpXTsKKyAgICAgICAgICAgIHRoaXNbbmFtZV0gPSBmdW5jOworICAg
ICAgICB9CiAgICAgfQotfQorfTsKIAotQmFzaWNDb21tYW5kTGluZUFQSS5tZXRob2RzID0gWwot
ICAgIGZ1bmN0aW9uIGRpcigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xl
LmRpciguLi5hcmd1bWVudHMpOyB9LAotICAgIGZ1bmN0aW9uIGNsZWFyKCkgeyByZXR1cm4gaW5z
cGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuY2xlYXIoLi4uYXJndW1lbnRzKTsgfSwKLSAgICBm
dW5jdGlvbiB0YWJsZSgpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRh
YmxlKC4uLmFyZ3VtZW50cyk7IH0sCi0gICAgZnVuY3Rpb24gcHJvZmlsZSgpIHsgcmV0dXJuIGlu
c3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnByb2ZpbGUoLi4uYXJndW1lbnRzKTsgfSwKLSAg
ICBmdW5jdGlvbiBwcm9maWxlRW5kKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNv
bnNvbGUucHJvZmlsZUVuZCguLi5hcmd1bWVudHMpOyB9LAorSW5qZWN0ZWRTY3JpcHQuQ29tbWFu
ZExpbmVBUEkuX2dldHRlcnMgPSBbXTsKK0luamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9t
ZXRob2RzID0gW107CiAKLSAgICBmdW5jdGlvbiBrZXlzKG9iamVjdCkgeyByZXR1cm4gT2JqZWN0
LmtleXMob2JqZWN0KTsgfSwKLSAgICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7Ci0gICAgICAg
IGxldCByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yIChsZXQga2V5IGluIG9iamVjdCkKLSAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKG9iamVjdFtrZXldKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9LAoraW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImtleXMiLCBm
dW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7IH0pOworaW5qZWN0
ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInZhbHVlcyIsIGZ1bmN0aW9uKG9iamVj
dCkgeyByZXR1cm4gT2JqZWN0LnZhbHVlcyhvYmplY3QpOyB9KTsKIAotICAgIGZ1bmN0aW9uIHF1
ZXJ5SW5zdGFuY2VzKCkgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5
SW5zdGFuY2VzKC4uLmFyZ3VtZW50cyk7Ci0gICAgfSwKK2luamVjdGVkU2NyaXB0LmFkZENvbW1h
bmRMaW5lQVBJTWV0aG9kKCJxdWVyeUluc3RhbmNlcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5SW5zdGFuY2VzKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0
ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInF1ZXJ5T2JqZWN0cyIsIGZ1bmN0aW9u
KCkgeyByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5SW5zdGFuY2VzKC4uLmFyZ3VtZW50
cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInF1ZXJ5SG9s
ZGVycyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5SG9sZGVy
cyguLi5hcmd1bWVudHMpOyB9KTsKIAotICAgIGZ1bmN0aW9uIHF1ZXJ5T2JqZWN0cygpIHsKLSAg
ICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1bWVu
dHMpOwotICAgIH0sCitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiaW5z
cGVjdCIsIGZ1bmN0aW9uKG9iamVjdCkgeyByZXR1cm4gaW5qZWN0ZWRTY3JpcHQuaW5zcGVjdE9i
amVjdChvYmplY3QpOyB9KTsKIAotICAgIGZ1bmN0aW9uIHF1ZXJ5SG9sZGVycygpIHsKLSAgICAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUhvbGRlcnMoLi4uYXJndW1lbnRzKTsK
LSAgICB9LAotXTsKLQotZm9yIChsZXQgaSA9IDA7IGkgPCBCYXNpY0NvbW1hbmRMaW5lQVBJLm1l
dGhvZHMubGVuZ3RoOyArK2kpIHsKLSAgICBsZXQgbWV0aG9kID0gQmFzaWNDb21tYW5kTGluZUFQ
SS5tZXRob2RzW2ldOwotICAgIG1ldGhvZC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4g
ImZ1bmN0aW9uICIgKyBtZXRob2QubmFtZSArICIoKSB7IFtDb21tYW5kIExpbmUgQVBJXSB9Ijsg
fTsKLX0KK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJhc3NlcnQiLCBm
dW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmFzc2VydCgu
Li5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9k
KCJjbGVhciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNv
bGUuY2xlYXIoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGlu
ZUFQSU1ldGhvZCgiY291bnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9i
amVjdC5jb25zb2xlLmNvdW50KC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRk
Q29tbWFuZExpbmVBUElNZXRob2QoImNvdW50UmVzZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlu
c3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmNvdW50UmVzZXQoLi4uYXJndW1lbnRzKTsgfSk7
CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiZGVidWciLCBmdW5jdGlv
bigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmRlYnVnKC4uLmFyZ3Vt
ZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImRpciIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuZGlyKC4u
LmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2Qo
ImRpcnhtbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNv
bGUuZGlyeG1sKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExp
bmVBUElNZXRob2QoImVycm9yIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxP
YmplY3QuY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFk
ZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJncm91cCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVj
dGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuZ3JvdXAoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3Rl
ZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiZ3JvdXBDb2xsYXBzZWQiLCBmdW5jdGlv
bigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmdyb3VwQ29sbGFwc2Vk
KC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRo
b2QoImdyb3VwRW5kIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3Qu
Y29uc29sZS5ncm91cEVuZCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENv
bW1hbmRMaW5lQVBJTWV0aG9kKCJpbmZvIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRH
bG9iYWxPYmplY3QuY29uc29sZS5pbmZvKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3Jp
cHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImxvZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5z
cGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUubG9nKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0
ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInByb2ZpbGUiLCBmdW5jdGlvbigpIHsg
cmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnByb2ZpbGUoLi4uYXJndW1lbnRz
KTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgicHJvZmlsZUVu
ZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUucHJv
ZmlsZUVuZCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5l
QVBJTWV0aG9kKCJyZWNvcmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9i
amVjdC5jb25zb2xlLnJlY29yZCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFk
ZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJyZWNvcmRFbmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlu
c3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnJlY29yZEVuZCguLi5hcmd1bWVudHMpOyB9KTsK
K2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJzY3JlZW5zaG90IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5zY3JlZW5zaG90
KC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRo
b2QoInRhYmxlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29u
c29sZS50YWJsZSguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRM
aW5lQVBJTWV0aG9kKCJ0YWtlSGVhcFNuYXBzaG90IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNw
ZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS50YWtlSGVhcFNuYXBzaG90KC4uLmFyZ3VtZW50cyk7
IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInRpbWUiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRpbWUoLi4uYXJn
dW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgidGlt
ZUVuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUu
dGltZUVuZCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5l
QVBJTWV0aG9kKCJ0aW1lTG9nIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxP
YmplY3QuY29uc29sZS50aW1lTG9nKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQu
YWRkQ29tbWFuZExpbmVBUElNZXRob2QoInRpbWVTdGFtcCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
aW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUudGltZVN0YW1wKC4uLmFyZ3VtZW50cyk7IH0p
OworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInRyYWNlIiwgZnVuY3Rp
b24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS50cmFjZSguLi5hcmd1
bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ3YXJu
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS53YXJu
KC4uLmFyZ3VtZW50cyk7IH0pOwogCiByZXR1cm4gaW5qZWN0ZWRTY3JpcHQ7CiB9KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNl
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNl
LmpzCmluZGV4IGQ1Zjg0ZWQ3NDhkNjBlMjlmNjcxYWYyN2FhMWIyN2IyYzFmNDVkMTkuLjhlNTVj
NmZhNzU3NGQyZjg0MTQ0ODg0OWUyMDdjNTU2MjIwODFiZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKQEAgLTI4
LDE0NSArMjgsMTQ0IEBACiAKIC8vIyBzb3VyY2VVUkw9X19JbmplY3RlZFNjcmlwdF9Db21tYW5k
TGluZUFQSU1vZHVsZVNvdXJjZS5qcwogCi0oZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwg
aW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElkLCBpbmplY3RlZFNjcmlwdCwgUmVtb3Rl
T2JqZWN0LCBDb21tYW5kTGluZUFQSUhvc3QpIHsKKyhmdW5jdGlvbiAoSW5qZWN0ZWRTY3JpcHRI
b3N0LCBpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIGluamVjdGVkU2NyaXB0SWQsIGluamVjdGVkU2Ny
aXB0LCBSZW1vdGVPYmplY3QsIENvbW1hbmRMaW5lQVBJSG9zdCkgewogCiAvLyBGSVhNRTogPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzE1MjI5ND4gV2ViIEluc3BlY3RvcjogUGFyc2UgSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UgYXMgYSBidWlsdC1pbiB0byBnZXQgZ3VhcmFudGVlZCBub24tdXNlci1vdmVy
cmlkZGVuIGJ1aWx0LWlucwogCi1mdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNPYmplY3QsIC4uLm91
dGVyQXJncykKLXsKLSAgICByZXR1cm4gZnVuY3Rpb24oLi4uaW5uZXJBcmdzKSB7Ci0gICAgICAg
IHJldHVybiBmdW5jLmFwcGx5KHRoaXNPYmplY3QsIG91dGVyQXJncy5jb25jYXQoaW5uZXJBcmdz
KSk7Ci0gICAgfTsKLX0KK2luamVjdGVkU2NyaXB0Ll9pbnNwZWN0T2JqZWN0ID0gZnVuY3Rpb24o
b2JqZWN0KSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCisgICAgICAgIHJldHVy
bjsKIAotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBwYXJhbSB7Q29tbWFuZExpbmVBUElJbXBs
fSBjb21tYW5kTGluZUFQSUltcGwKLSAqIEBwYXJhbSB7T2JqZWN0fSBjYWxsRnJhbWUKLSAqLwot
ZnVuY3Rpb24gQ29tbWFuZExpbmVBUEkoY29tbWFuZExpbmVBUElJbXBsLCBjYWxsRnJhbWUpCi17
Ci0gICAgbGV0IHNhdmVkUmVzdWx0QWxpYXMgPSBJbmplY3RlZFNjcmlwdEhvc3Quc2F2ZWRSZXN1
bHRBbGlhczsKKyAgICBsZXQgb2JqZWN0SWQgPSBSZW1vdGVPYmplY3QuY3JlYXRlKG9iamVjdCwg
IiIpOworICAgIGxldCBoaW50cyA9IHt9OwogCi0gICAgbGV0IGRlZmluZUdldHRlciA9IChrZXks
IHZhbHVlKSA9PiB7Ci0gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpIHsK
LSAgICAgICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICB2YWx1
ZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gb3JpZ2luYWxWYWx1ZTsgfTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXygiJCIgKyBrZXksIHZhbHVlKTsKLSAgICAgICAg
aWYgKHNhdmVkUmVzdWx0QWxpYXMpCi0gICAgICAgICAgICB0aGlzLl9fZGVmaW5lR2V0dGVyX18o
c2F2ZWRSZXN1bHRBbGlhcyArIGtleSwgdmFsdWUpOwotICAgIH07Ci0KLSAgICBpZiAoIl9sYXN0
UmVzdWx0IiBpbiBpbmplY3RlZFNjcmlwdCkKLSAgICAgICAgZGVmaW5lR2V0dGVyKCJfIiwgaW5q
ZWN0ZWRTY3JpcHQuX2xhc3RSZXN1bHQpOwotCi0gICAgaWYgKCJfZXhjZXB0aW9uVmFsdWUiIGlu
IGluamVjdGVkU2NyaXB0KQotICAgICAgICBkZWZpbmVHZXR0ZXIoImV4Y2VwdGlvbiIsIGluamVj
dGVkU2NyaXB0Ll9leGNlcHRpb25WYWx1ZSk7Ci0KLSAgICBpZiAoIl9ldmVudFZhbHVlIiBpbiBp
bmplY3RlZFNjcmlwdCkKLSAgICAgICAgZGVmaW5lR2V0dGVyKCJldmVudCIsIGluamVjdGVkU2Ny
aXB0Ll9ldmVudFZhbHVlKTsKLQotICAgIC8vICQwCi0gICAgZGVmaW5lR2V0dGVyKCIwIiwgYmlu
ZChjb21tYW5kTGluZUFQSUltcGwuX2luc3BlY3RlZE9iamVjdCwgY29tbWFuZExpbmVBUElJbXBs
KSk7Ci0KLSAgICAvLyAkMS0kOTkKLSAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBpbmplY3RlZFNj
cmlwdC5fc2F2ZWRSZXN1bHRzLmxlbmd0aDsgKytpKQotICAgICAgICBkZWZpbmVHZXR0ZXIoaSwg
YmluZChpbmplY3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHQsIGluamVjdGVkU2NyaXB0LCBpKSk7Ci0K
LSAgICAvLyBDb21tYW5kIExpbmUgQVBJIG1ldGhvZHMuCi0gICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBDb21tYW5kTGluZUFQSS5tZXRob2RzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGxldCBtZXRo
b2QgPSBDb21tYW5kTGluZUFQSS5tZXRob2RzW2ldOwotICAgICAgICB0aGlzW21ldGhvZF0gPSBi
aW5kKGNvbW1hbmRMaW5lQVBJSW1wbFttZXRob2RdLCBjb21tYW5kTGluZUFQSUltcGwpOwotICAg
ICAgICB0aGlzW21ldGhvZF0udG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuICJmdW5jdGlv
biAiICsgbWV0aG9kICsgIigpIHsgW0NvbW1hbmQgTGluZSBBUEldIH0iIH07CisgICAgc3dpdGNo
IChSZW1vdGVPYmplY3QuZGVzY3JpYmUob2JqZWN0KSkgeworICAgIGNhc2UgIkRhdGFiYXNlIjoK
KyAgICAgICAgbGV0IGRhdGFiYXNlSWQgPSBDb21tYW5kTGluZUFQSUhvc3QuZGF0YWJhc2VJZChv
YmplY3QpCisgICAgICAgIGlmIChkYXRhYmFzZUlkKQorICAgICAgICAgICAgaGludHMuZGF0YWJh
c2VJZCA9IGRhdGFiYXNlSWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIlN0b3JhZ2UiOgor
ICAgICAgICBsZXQgc3RvcmFnZUlkID0gQ29tbWFuZExpbmVBUElIb3N0LnN0b3JhZ2VJZChvYmpl
Y3QpCisgICAgICAgIGlmIChzdG9yYWdlSWQpCisgICAgICAgICAgICBoaW50cy5kb21TdG9yYWdl
SWQgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgc3RvcmFnZUlkICsgIikiKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgQ29tbWFuZExpbmVBUElIb3N0Lmluc3BlY3Qo
b2JqZWN0SWQsIGhpbnRzKTsKKyAgICByZXR1cm4gb2JqZWN0OworfTsKKworaW5qZWN0ZWRTY3Jp
cHQuYWRkQ29tbWFuZExpbmVBUElHZXR0ZXIoIjAiLCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
Q29tbWFuZExpbmVBUElIb3N0Lmluc3BlY3RlZE9iamVjdCgpOworfSk7CisKK2luamVjdGVkU2Ny
aXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJjb3B5IiwgZnVuY3Rpb24ob2JqZWN0KSB7Cisg
ICAgbGV0IHN0cmluZyA9IG51bGw7CisKKyAgICBsZXQgc3VidHlwZSA9IFJlbW90ZU9iamVjdC5z
dWJ0eXBlKG9iamVjdCk7CisgICAgaWYgKHN1YnR5cGUgPT09ICJub2RlIikKKyAgICAgICAgc3Ry
aW5nID0gb2JqZWN0Lm91dGVySFRNTDsKKyAgICBlbHNlIGlmIChzdWJ0eXBlID09PSAicmVnZXhw
IikKKyAgICAgICAgc3RyaW5nID0gIiIgKyBvYmplY3Q7CisgICAgZWxzZSBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQorICAgICAgICBzdHJpbmcgPSAiIiArIG9i
amVjdDsKKyAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAic3ltYm9sIikKKyAgICAgICAg
c3RyaW5nID0gU3RyaW5nKG9iamVjdCk7CisgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0g
ImZ1bmN0aW9uIikKKyAgICAgICAgc3RyaW5nID0gIiIgKyBvYmplY3Q7CisgICAgZWxzZSB7Cisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvYmplY3Qs
IG51bGwsICIgICIpOworICAgICAgICB9IGNhdGNoIHsKKyAgICAgICAgICAgIHN0cmluZyA9ICIi
ICsgb2JqZWN0OworICAgICAgICB9CisgICAgfQorCisgICAgQ29tbWFuZExpbmVBUElIb3N0LmNv
cHlUZXh0KHN0cmluZyk7Cit9KTsKKworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElN
ZXRob2QoImdldEV2ZW50TGlzdGVuZXJzIiwgZnVuY3Rpb24odGFyZ2V0KSB7CisgICAgcmV0dXJu
IENvbW1hbmRMaW5lQVBJSG9zdC5nZXRFdmVudExpc3RlbmVycyh0YXJnZXQpOworfSk7CisKK2Z1
bmN0aW9uIG5vcm1hbGl6ZUV2ZW50VHlwZXModHlwZXMpIHsKKyAgICBpZiAodHlwZXMgPT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgdHlwZXMgPSBbIm1vdXNlIiwgImtleSIsICJ0b3VjaCIsICJjb250
cm9sIiwgImFib3J0IiwgImJsdXIiLCAiY2hhbmdlIiwgImRldmljZW1vdGlvbiIsICJkZXZpY2Vv
cmllbnRhdGlvbiIsICJlcnJvciIsICJmb2N1cyIsICJsb2FkIiwgInJlc2V0IiwgInJlc2l6ZSIs
ICJzY3JvbGwiLCAic2VhcmNoIiwgInNlbGVjdCIsICJzdWJtaXQiLCAidW5sb2FkIl07CisgICAg
ZWxzZSBpZiAodHlwZW9mIHR5cGVzID09PSAic3RyaW5nIikKKyAgICAgICAgdHlwZXMgPSBbdHlw
ZXNdOworCisgICAgbGV0IHJlc3VsdCA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlw
ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHR5cGVzW2ldID09PSAibW91c2UiKQorICAg
ICAgICAgICAgcmVzdWx0LnB1c2goImNsaWNrIiwgImRibGNsaWNrIiwgIm1vdXNlZG93biIsICJt
b3VzZW1vdmUiLCAibW91c2VvdXQiLCAibW91c2VvdmVyIiwgIm1vdXNldXAiLCAibW91c2V3aGVl
bCIpOworICAgICAgICBlbHNlIGlmICh0eXBlc1tpXSA9PT0gImtleSIpCisgICAgICAgICAgICBy
ZXN1bHQucHVzaCgia2V5ZG93biIsICJrZXlwcmVzcyIsICJrZXl1cCIsICJ0ZXh0SW5wdXQiKTsK
KyAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0gPT09ICJ0b3VjaCIpCisgICAgICAgICAgICByZXN1
bHQucHVzaCgidG91Y2hjYW5jZWwiLCAidG91Y2hlbmQiLCAidG91Y2htb3ZlIiwgInRvdWNoc3Rh
cnQiKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0gPT09ICJjb250cm9sIikKKyAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKCJibHVyIiwgImNoYW5nZSIsICJmb2N1cyIsICJyZXNldCIsICJyZXNp
emUiLCAic2Nyb2xsIiwgInNlbGVjdCIsICJzdWJtaXQiLCAiem9vbSIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXN1bHQucHVzaCh0eXBlc1tpXSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLS8qKgotICogQHR5cGUge0FycmF5LjxzdHJpbmc+fQotICogQGNvbnN0Ci0g
Ki8KLUNvbW1hbmRMaW5lQVBJLm1ldGhvZHMgPSBbCi0gICAgIiQiLAotICAgICIkJCIsCi0gICAg
IiR4IiwKLSAgICAiY2xlYXIiLAotICAgICJjb3B5IiwKLSAgICAiZGlyIiwKLSAgICAiZGlyeG1s
IiwKLSAgICAiZ2V0RXZlbnRMaXN0ZW5lcnMiLAotICAgICJpbnNwZWN0IiwKLSAgICAia2V5cyIs
Ci0gICAgIm1vbml0b3JFdmVudHMiLAotICAgICJwcm9maWxlIiwKLSAgICAicHJvZmlsZUVuZCIs
Ci0gICAgInF1ZXJ5SW5zdGFuY2VzIiwKLSAgICAicXVlcnlPYmplY3RzIiwKLSAgICAicXVlcnlI
b2xkZXJzIiwKLSAgICAic2NyZWVuc2hvdCIsCi0gICAgInRhYmxlIiwKLSAgICAidW5tb25pdG9y
RXZlbnRzIiwKLSAgICAidmFsdWVzIiwKLV07Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKi8K
LWZ1bmN0aW9uIENvbW1hbmRMaW5lQVBJSW1wbCgpCitmdW5jdGlvbiBsb2dFdmVudChldmVudCkK
IHsKKyAgICBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5sb2coZXZlbnQudHlwZSwgZXZl
bnQpOwogfQogCi1Db21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlID0gewotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvcgotICAgICAqIEBwYXJhbSB7Tm9kZT19IHN0YXJ0
Ci0gICAgICovCi0gICAgJDogZnVuY3Rpb24gKHNlbGVjdG9yLCBzdGFydCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9jYW5RdWVyeVNlbGVjdG9yT25Ob2RlKHN0YXJ0KSkKK2luamVjdGVkU2Ny
aXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJtb25pdG9yRXZlbnRzIiwgZnVuY3Rpb24ob2Jq
ZWN0LCB0eXBlcykgeworICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QuYWRkRXZlbnRMaXN0ZW5l
ciB8fCAhb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIpCisgICAgICAgIHJldHVybjsKKyAgICB0
eXBlcyA9IG5vcm1hbGl6ZUV2ZW50VHlwZXModHlwZXMpOworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVu
ZXIodHlwZXNbaV0sIGxvZ0V2ZW50LCBmYWxzZSk7CisgICAgICAgIG9iamVjdC5hZGRFdmVudExp
c3RlbmVyKHR5cGVzW2ldLCBsb2dFdmVudCwgZmFsc2UpOworICAgIH0KK30pOworCitpbmplY3Rl
ZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgidW5tb25pdG9yRXZlbnRzIiwgZnVuY3Rp
b24ob2JqZWN0LCB0eXBlcykgeworICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QuYWRkRXZlbnRM
aXN0ZW5lciB8fCAhb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIpCisgICAgICAgIHJldHVybjsK
KyAgICB0eXBlcyA9IG5vcm1hbGl6ZUV2ZW50VHlwZXModHlwZXMpOworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kpCisgICAgICAgIG9iamVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKHR5cGVzW2ldLCBsb2dFdmVudCwgZmFsc2UpOworfSk7CisKK2lmIChpbnNwZWN0ZWRH
bG9iYWxPYmplY3QuZG9jdW1lbnQgJiYgaW5zcGVjdGVkR2xvYmFsT2JqZWN0Lk5vZGUpIHsKKyAg
ICBmdW5jdGlvbiBjYW5RdWVyeVNlbGVjdG9yT25Ob2RlKG5vZGUpIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUgJiYgSW5qZWN0ZWRTY3JpcHRIb3N0LnN1YnR5cGUobm9kZSkgPT09ICJub2RlIiAmJiAo
bm9kZS5ub2RlVHlwZSA9PT0gaW5zcGVjdGVkR2xvYmFsT2JqZWN0Lk5vZGUuRUxFTUVOVF9OT0RF
IHx8IG5vZGUubm9kZVR5cGUgPT09IGluc3BlY3RlZEdsb2JhbE9iamVjdC5Ob2RlLkRPQ1VNRU5U
X05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gaW5zcGVjdGVkR2xvYmFsT2JqZWN0Lk5vZGUuRE9D
VU1FTlRfRlJBR01FTlRfTk9ERSk7CisgICAgfQorCisgICAgaW5qZWN0ZWRTY3JpcHQuYWRkQ29t
bWFuZExpbmVBUElNZXRob2QoIiQiLCBmdW5jdGlvbihzZWxlY3Rvciwgc3RhcnQpIHsKKyAgICAg
ICAgaWYgKGNhblF1ZXJ5U2VsZWN0b3JPbk5vZGUoc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJu
IHN0YXJ0LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogCi0gICAgICAgIHZhciByZXN1bHQgPSBp
bnNwZWN0ZWRXaW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgICAg
IGxldCByZXN1bHQgPSBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cihzZWxlY3Rvcik7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworCiAgICAgICAgIGlmIChzZWxlY3RvciAmJiBzZWxlY3RvclswXSAhPT0gIiMiKSB7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBpbnNwZWN0ZWRXaW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoc2VsZWN0b3IpOworICAgICAgICAgICAgcmVzdWx0ID0gaW5zcGVjdGVkR2xvYmFsT2JqZWN0
LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yKTsKICAgICAgICAgICAgIGlmIChyZXN1
bHQpIHsKLSAgICAgICAgICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuY29uc29sZS53YXJuKCJUaGUg
Y29uc29sZSBmdW5jdGlvbiAkKCkgaGFzIGNoYW5nZWQgZnJvbSAkPWdldEVsZW1lbnRCeUlkKGlk
KSB0byAkPXF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpLiBZb3UgbWlnaHQgdHJ5ICQoXCIjJXNcIiki
LCBzZWxlY3Rvcik7CisgICAgICAgICAgICAgICAgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNv
bGUud2FybigiVGhlIGNvbnNvbGUgZnVuY3Rpb24gJCgpIGhhcyBjaGFuZ2VkIGZyb20gJD1nZXRF
bGVtZW50QnlJZChpZCkgdG8gJD1xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKS4gWW91IG1pZ2h0IHRy
eSAkKFwiIyVzXCIpIiwgc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
LAorICAgIH0pOwogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yCi0g
ICAgICogQHBhcmFtIHtOb2RlPX0gc3RhcnQKLSAgICAgKi8KLSAgICAkJDogZnVuY3Rpb24gKHNl
bGVjdG9yLCBzdGFydCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jYW5RdWVyeVNlbGVjdG9y
T25Ob2RlKHN0YXJ0KSkKKyAgICBpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhv
ZCgiJCQiLCBmdW5jdGlvbihzZWxlY3Rvciwgc3RhcnQpIHsKKyAgICAgICAgaWYgKGNhblF1ZXJ5
U2VsZWN0b3JPbk5vZGUoc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3Rh
cnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpOwotICAgICAgICByZXR1cm4gQXJyYXkuZnJv
bShpbnNwZWN0ZWRXaW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpOwot
ICAgIH0sCisgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGluc3BlY3RlZEdsb2JhbE9iamVjdC5k
b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7CisgICAgfSk7CiAKLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge05vZGU9fSBub2RlCi0gICAgICogQHJldHVybiB7Ym9vbGVhbn0KLSAg
ICAgKi8KLSAgICBfY2FuUXVlcnlTZWxlY3Rvck9uTm9kZTogZnVuY3Rpb24obm9kZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhIW5vZGUgJiYgSW5qZWN0ZWRTY3JpcHRIb3N0LnN1YnR5cGUobm9k
ZSkgPT09ICJub2RlIiAmJiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgfHwg
bm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09
IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nfSB4cGF0aAotICAgICAqIEBwYXJhbSB7Tm9kZT19IGNvbnRleHQKLSAg
ICAgKi8KLSAgICAkeDogZnVuY3Rpb24oeHBhdGgsIGNvbnRleHQpCi0gICAgewotICAgICAgICB2
YXIgZG9jID0gKGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50KSB8fCBpbnNwZWN0ZWRX
aW5kb3cuZG9jdW1lbnQ7CisgICAgaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRo
b2QoIiR4IiwgZnVuY3Rpb24oeHBhdGgsIGNvbnRleHQpIHsKKyAgICAgICAgbGV0IGRvYyA9IChj
b250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCkgfHwgaW5zcGVjdGVkR2xvYmFsT2JqZWN0
LmRvY3VtZW50OwogICAgICAgICB2YXIgcmVzdWx0ID0gZG9jLmV2YWx1YXRlKHhwYXRoLCBjb250
ZXh0IHx8IGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuQU5ZX1RZUEUsIG51bGwpOwogICAgICAgICBz
d2l0Y2ggKHJlc3VsdC5yZXN1bHRUeXBlKSB7CiAgICAgICAgIGNhc2UgWFBhdGhSZXN1bHQuTlVN
QkVSX1RZUEU6CkBAIC0xODIsMjEzICsxODEsNyBAQCBDb21tYW5kTGluZUFQSUltcGwucHJvdG90
eXBlID0gewogICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gbm9kZXM7CiAgICAgICAgIH0KLSAgICB9LAotCi0gICAgZGlyOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gaW5zcGVjdGVkV2luZG93LmNvbnNvbGUuZGlyLmFwcGx5KGlu
c3BlY3RlZFdpbmRvdy5jb25zb2xlLCBhcmd1bWVudHMpCi0gICAgfSwKLQotICAgIGRpcnhtbDog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5jb25zb2xl
LmRpcnhtbC5hcHBseShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJndW1lbnRzKQotICAgIH0s
Ci0KLSAgICBrZXlzOiBmdW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gT2Jq
ZWN0LmtleXMob2JqZWN0KTsKLSAgICB9LAotCi0gICAgdmFsdWVzOiBmdW5jdGlvbihvYmplY3Qp
Ci0gICAgewotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIGtleSBp
biBvYmplY3QpCi0gICAgICAgICAgICByZXN1bHQucHVzaChvYmplY3Rba2V5XSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIHByb2ZpbGU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBpbnNwZWN0ZWRXaW5kb3cuY29uc29sZS5wcm9maWxlLmFwcGx5KGlu
c3BlY3RlZFdpbmRvdy5jb25zb2xlLCBhcmd1bWVudHMpCi0gICAgfSwKLQotICAgIHByb2ZpbGVF
bmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNwZWN0ZWRXaW5kb3cuY29u
c29sZS5wcm9maWxlRW5kLmFwcGx5KGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLCBhcmd1bWVudHMp
Ci0gICAgfSwKLQotICAgIHRhYmxlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4g
aW5zcGVjdGVkV2luZG93LmNvbnNvbGUudGFibGUuYXBwbHkoaW5zcGVjdGVkV2luZG93LmNvbnNv
bGUsIGFyZ3VtZW50cykKLSAgICB9LAotCi0gICAgc2NyZWVuc2hvdDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLnNjcmVlbnNob3QuYXBw
bHkoaW5zcGVjdGVkV2luZG93LmNvbnNvbGUsIGFyZ3VtZW50cykKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0
cmluZz58c3RyaW5nPX0gdHlwZXMKLSAgICAgKi8KLSAgICBtb25pdG9yRXZlbnRzOiBmdW5jdGlv
bihvYmplY3QsIHR5cGVzKQotICAgIHsKLSAgICAgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC5h
ZGRFdmVudExpc3RlbmVyIHx8ICFvYmplY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdHlwZXMgPSB0aGlzLl9ub3JtYWxpemVFdmVudFR5cGVzKHR5
cGVzKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZXNbaV0sIHRoaXMuX2xv
Z0V2ZW50LCBmYWxzZSk7Ci0gICAgICAgICAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcih0eXBl
c1tpXSwgdGhpcy5fbG9nRXZlbnQsIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0Ci0gICAgICogQHBhcmFtIHtBcnJheS48
c3RyaW5nPnxzdHJpbmc9fSB0eXBlcwotICAgICAqLwotICAgIHVubW9uaXRvckV2ZW50czogZnVu
Y3Rpb24ob2JqZWN0LCB0eXBlcykKLSAgICB7Ci0gICAgICAgIGlmICghb2JqZWN0IHx8ICFvYmpl
Y3QuYWRkRXZlbnRMaXN0ZW5lciB8fCAhb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHR5cGVzID0gdGhpcy5fbm9ybWFsaXplRXZlbnRUeXBl
cyh0eXBlcyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICBvYmplY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlc1tpXSwgdGhpcy5f
bG9nRXZlbnQsIGZhbHNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsqfSBv
YmplY3QKLSAgICAgKiBAcmV0dXJuIHsqfQotICAgICAqLwotICAgIGluc3BlY3Q6IGZ1bmN0aW9u
KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pbnNwZWN0KG9iamVjdCk7Ci0g
ICAgfSwKLQotICAgIHF1ZXJ5SW5zdGFuY2VzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdEhvc3QucXVlcnlJbnN0YW5jZXMoLi4uYXJndW1lbnRzKTsKLSAgICB9LAotCi0g
ICAgcXVlcnlPYmplY3RzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhv
c3QucXVlcnlJbnN0YW5jZXMoLi4uYXJndW1lbnRzKTsKLSAgICB9LAotCi0gICAgcXVlcnlIb2xk
ZXJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucXVlcnlIb2xk
ZXJzKC4uLmFyZ3VtZW50cyk7Ci0gICAgfSwKLQotICAgIGNvcHk6IGZ1bmN0aW9uKG9iamVjdCkK
LSAgICB7Ci0gICAgICAgIHZhciBzdHJpbmc7Ci0gICAgICAgIHZhciBzdWJ0eXBlID0gUmVtb3Rl
T2JqZWN0LnN1YnR5cGUob2JqZWN0KTsKLSAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJub2RlIikK
LSAgICAgICAgICAgIHN0cmluZyA9IG9iamVjdC5vdXRlckhUTUw7Ci0gICAgICAgIGVsc2UgaWYg
KHN1YnR5cGUgPT09ICJyZWdleHAiKQotICAgICAgICAgICAgc3RyaW5nID0gIiIgKyBvYmplY3Q7
Ci0gICAgICAgIGVsc2UgaWYgKGluamVjdGVkU2NyaXB0LmlzUHJpbWl0aXZlVmFsdWUob2JqZWN0
KSkKLSAgICAgICAgICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OwotICAgICAgICBlbHNlIGlmICh0
eXBlb2Ygb2JqZWN0ID09PSAic3ltYm9sIikKLSAgICAgICAgICAgIHN0cmluZyA9IFN0cmluZyhv
YmplY3QpOwotICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAiZnVuY3Rpb24iKQot
ICAgICAgICAgICAgc3RyaW5nID0gIiIgKyBvYmplY3Q7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvYmpl
Y3QsIG51bGwsICIgICIpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAg
ICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgQ29tbWFuZExpbmVBUElIb3N0LmNvcHlUZXh0KHN0cmluZyk7Ci0gICAgfSwKLQotICAg
IGNsZWFyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBDb21tYW5kTGluZUFQSUhvc3QuY2xl
YXJDb25zb2xlTWVzc2FnZXMoKTsKLSAgICB9LAotCi0gICAgZ2V0RXZlbnRMaXN0ZW5lcnM6IGZ1
bmN0aW9uKHRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb21tYW5kTGluZUFQSUhvc3Qu
Z2V0RXZlbnRMaXN0ZW5lcnModGFyZ2V0KTsKLSAgICB9LAotCi0gICAgX2luc3BlY3RlZE9iamVj
dDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbW1hbmRMaW5lQVBJSG9zdC5p
bnNwZWN0ZWRPYmplY3QoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtBcnJh
eS48c3RyaW5nPnxzdHJpbmc9fSB0eXBlcwotICAgICAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+
fQotICAgICAqLwotICAgIF9ub3JtYWxpemVFdmVudFR5cGVzOiBmdW5jdGlvbih0eXBlcykKLSAg
ICB7Ci0gICAgICAgIGlmICh0eXBlb2YgdHlwZXMgPT09ICJ1bmRlZmluZWQiKQotICAgICAgICAg
ICAgdHlwZXMgPSBbICJtb3VzZSIsICJrZXkiLCAidG91Y2giLCAiY29udHJvbCIsICJsb2FkIiwg
InVubG9hZCIsICJhYm9ydCIsICJlcnJvciIsICJzZWxlY3QiLCAiY2hhbmdlIiwgInN1Ym1pdCIs
ICJyZXNldCIsICJmb2N1cyIsICJibHVyIiwgInJlc2l6ZSIsICJzY3JvbGwiLCAic2VhcmNoIiwg
ImRldmljZW1vdGlvbiIsICJkZXZpY2VvcmllbnRhdGlvbiIgXTsKLSAgICAgICAgZWxzZSBpZiAo
dHlwZW9mIHR5cGVzID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHR5cGVzID0gWyB0eXBlcyBd
OwotCi0gICAgICAgIHZhciByZXN1bHQgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0eXBlcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKHR5cGVzW2ldID09PSAibW91
c2UiKQotICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwgMCwgIm1vdXNlZG93biIsICJt
b3VzZXVwIiwgImNsaWNrIiwgImRibGNsaWNrIiwgIm1vdXNlbW92ZSIsICJtb3VzZW92ZXIiLCAi
bW91c2VvdXQiLCAibW91c2V3aGVlbCIpOwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0g
PT09ICJrZXkiKQotICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwgMCwgImtleWRvd24i
LCAia2V5dXAiLCAia2V5cHJlc3MiLCAidGV4dElucHV0Iik7Ci0gICAgICAgICAgICBlbHNlIGlm
ICh0eXBlc1tpXSA9PT0gInRvdWNoIikKLSAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKDAs
IDAsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92ZSIsICJ0b3VjaGVuZCIsICJ0b3VjaGNhbmNlbCIp
OwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0gPT09ICJjb250cm9sIikKLSAgICAgICAg
ICAgICAgICByZXN1bHQuc3BsaWNlKDAsIDAsICJyZXNpemUiLCAic2Nyb2xsIiwgInpvb20iLCAi
Zm9jdXMiLCAiYmx1ciIsICJzZWxlY3QiLCAiY2hhbmdlIiwgInN1Ym1pdCIsICJyZXNldCIpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHR5cGVzW2ldKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAqLwotICAgIF9sb2dFdmVudDogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuY29uc29sZS5sb2coZXZl
bnQudHlwZSwgZXZlbnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0geyp9IG9i
amVjdAotICAgICAqIEByZXR1cm4geyp9Ci0gICAgICovCi0gICAgX2luc3BlY3Q6IGZ1bmN0aW9u
KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBvYmplY3RJZCA9IFJlbW90ZU9iamVjdC5j
cmVhdGUob2JqZWN0LCAiIik7Ci0gICAgICAgIHZhciBoaW50cyA9IHt9OwotCi0gICAgICAgIHN3
aXRjaCAoUmVtb3RlT2JqZWN0LmRlc2NyaWJlKG9iamVjdCkpIHsKLSAgICAgICAgY2FzZSAiRGF0
YWJhc2UiOgotICAgICAgICAgICAgdmFyIGRhdGFiYXNlSWQgPSBDb21tYW5kTGluZUFQSUhvc3Qu
ZGF0YWJhc2VJZChvYmplY3QpCi0gICAgICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAg
ICAgICAgICBoaW50cy5kYXRhYmFzZUlkID0gZGF0YWJhc2VJZDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlICJTdG9yYWdlIjoKLSAgICAgICAgICAgIHZhciBzdG9yYWdlSWQgPSBD
b21tYW5kTGluZUFQSUhvc3Quc3RvcmFnZUlkKG9iamVjdCkKLSAgICAgICAgICAgIGlmIChzdG9y
YWdlSWQpCi0gICAgICAgICAgICAgICAgaGludHMuZG9tU3RvcmFnZUlkID0gSW5qZWN0ZWRTY3Jp
cHRIb3N0LmV2YWx1YXRlKCIoIiArIHN0b3JhZ2VJZCArICIpIik7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIENvbW1hbmRMaW5lQVBJSG9zdC5pbnNwZWN0KG9iamVj
dElkLCBoaW50cyk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQorICAgIH0pOwogfQog
Ci1pbmplY3RlZFNjcmlwdC5Db21tYW5kTGluZUFQSSA9IENvbW1hbmRMaW5lQVBJOwotaW5qZWN0
ZWRTY3JpcHQuX2NvbW1hbmRMaW5lQVBJSW1wbCA9IG5ldyBDb21tYW5kTGluZUFQSUltcGwoKTsK
LQotLy8gVGhpcyBNb2R1bGUgZG9lc24ndCBleHBvc2UgYW4gb2JqZWN0LCBpdCBqdXN0IGFkZHMg
YW4gZXh0ZW5zaW9uIHRoYXQgSW5qZWN0ZWRTY3JpcHQgdXNlcy4KLS8vIEhvd2V2ZXIsIHdlIHJl
dHVybiBhbiBlbXB0eSBvYmplY3QsIHNvIHRoYXQgSW5qZWN0ZWRTY3JpcHQga25vd3MgdGhpcyBt
b2R1bGUgaGFzIGJlZW4gbG9hZGVkLgotcmV0dXJuIHt9OwotCiB9KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1
bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5q
cwppbmRleCBhNDdlN2RhMjFhYjJkOTVhODNiOWY1YWIxMmM3ZmQ3YmNhOTA2ZTI4Li5kMTJkNDJi
MzYwZTFlNWE4ZDMyMTgxZTA0MjJiMjY2NDliOTU2MGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0UnVudGltZUNv
bXBsZXRpb25Qcm92aWRlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5qcwpA
QCAtNDQsNiArNDQsNTAgQEAgV0kuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIg
PSBjbGFzcyBKYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWQKICAgICAgICAgV0kuZGVi
dWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFj
dGl2ZUNhbGxGcmFtZURpZENoYW5nZSwgdGhpcy5fY2xlYXJMYXN0UHJvcGVydGllcywgdGhpcyk7
CiAgICAgfQogCisgICAgLy8gU3RhdGljCisKKyAgICBzdGF0aWMgZ2V0IF9jb21tYW5kTGluZUFQ
SUtleXMoKQorICAgIHsKKyAgICAgICAgaWYgKCFKYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Q
cm92aWRlci5fX2NhY2hlZENvbW1hbmRMaW5lQVBJS2V5cykgeworICAgICAgICAgICAgSmF2YVNj
cmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuX19jYWNoZWRDb21tYW5kTGluZUFQSUtleXMg
PSBbCisgICAgICAgICAgICAgICAgIiRfIiwKKyAgICAgICAgICAgICAgICAiYXNzZXJ0IiwKKyAg
ICAgICAgICAgICAgICAiY2xlYXIiLAorICAgICAgICAgICAgICAgICJjb3VudCIsCisgICAgICAg
ICAgICAgICAgImNvdW50UmVzZXQiLAorICAgICAgICAgICAgICAgICJkZWJ1ZyIsCisgICAgICAg
ICAgICAgICAgImRpciIsCisgICAgICAgICAgICAgICAgImRpcnhtbCIsCisgICAgICAgICAgICAg
ICAgImVycm9yIiwKKyAgICAgICAgICAgICAgICAiZ3JvdXAiLAorICAgICAgICAgICAgICAgICJn
cm91cENvbGxhcHNlZCIsCisgICAgICAgICAgICAgICAgImdyb3VwRW5kIiwKKyAgICAgICAgICAg
ICAgICAiaW5mbyIsCisgICAgICAgICAgICAgICAgImluc3BlY3QiLAorICAgICAgICAgICAgICAg
ICJrZXlzIiwKKyAgICAgICAgICAgICAgICAibG9nIiwKKyAgICAgICAgICAgICAgICAicHJvZmls
ZSIsCisgICAgICAgICAgICAgICAgInByb2ZpbGVFbmQiLAorICAgICAgICAgICAgICAgICJxdWVy
eUhvbGRlcnMiLAorICAgICAgICAgICAgICAgICJxdWVyeUluc3RhbmNlcyIsCisgICAgICAgICAg
ICAgICAgInF1ZXJ5T2JqZWN0cyIsCisgICAgICAgICAgICAgICAgInJlY29yZCIsCisgICAgICAg
ICAgICAgICAgInJlY29yZEVuZCIsCisgICAgICAgICAgICAgICAgInNjcmVlbnNob3QiLAorICAg
ICAgICAgICAgICAgICJ0YWJsZSIsCisgICAgICAgICAgICAgICAgInRha2VIZWFwU25hcHNob3Qi
LAorICAgICAgICAgICAgICAgICJ0aW1lIiwKKyAgICAgICAgICAgICAgICAidGltZUVuZCIsCisg
ICAgICAgICAgICAgICAgInRpbWVMb2ciLAorICAgICAgICAgICAgICAgICJ0aW1lU3RhbXAiLAor
ICAgICAgICAgICAgICAgICJ0cmFjZSIsCisgICAgICAgICAgICAgICAgInZhbHVlcyIsCisgICAg
ICAgICAgICAgICAgIndhcm4iLAorICAgICAgICAgICAgXTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuX19jYWNoZWRDb21tYW5k
TGluZUFQSUtleXM7CisgICAgfQorCiAgICAgLy8gUHJvdGVjdGVkCiAKICAgICBjb21wbGV0aW9u
Q29udHJvbGxlckNvbXBsZXRpb25zTmVlZGVkKGNvbXBsZXRpb25Db250cm9sbGVyLCBkZWZhdWx0
Q29tcGxldGlvbnMsIGJhc2UsIHByZWZpeCwgc3VmZml4LCBmb3JjZWQpCkBAIC0xMTMsNyArMTU3
LDcgQEAgV0kuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIgPSBjbGFzcyBKYXZh
U2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWQKICAgICAgICAgICAgICAgICBjbGVhclRpbWVv
dXQodGhpcy5fY2xlYXJMYXN0UHJvcGVydGllc1RpbWVvdXQpOwogICAgICAgICAgICAgdGhpcy5f
Y2xlYXJMYXN0UHJvcGVydGllc1RpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuX2NsZWFyTGFzdFBy
b3BlcnRpZXMuYmluZCh0aGlzKSwgV0kuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLkNhY2hl
ZFByb3BlcnRpZXNEdXJhdGlvbik7CiAKLSAgICAgICAgICAgIHRoaXMuX2xhc3RQcm9wZXJ0eU5h
bWVzID0gcHJvcGVydHlOYW1lcyB8fCB7fTsKKyAgICAgICAgICAgIHRoaXMuX2xhc3RQcm9wZXJ0
eU5hbWVzID0gcHJvcGVydHlOYW1lcyB8fCBbXTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0
aW9uIGV2YWx1YXRlZChyZXN1bHQsIHdhc1Rocm93bikKQEAgLTIxMSw0MSArMjU1LDYwIEBAIFdJ
LkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyID0gY2xhc3MgSmF2YVNjcmlwdFJ1
bnRpbWVDb21wbGV0aW9uUHJvdmlkCiAKICAgICAgICAgZnVuY3Rpb24gcmVjZWl2ZWRQcm9wZXJ0
eU5hbWVzKHByb3BlcnR5TmFtZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMgPSBwcm9wZXJ0eU5hbWVzIHx8IHt9OworICAgICAgICAgICAgcHJvcGVydHlOYW1lcyA9IHBy
b3BlcnR5TmFtZXMgPyBPYmplY3Qua2V5cyhwcm9wZXJ0eU5hbWVzKSA6IFtdOwogCiAgICAgICAg
ICAgICB1cGRhdGVMYXN0UHJvcGVydHlOYW1lcy5jYWxsKHRoaXMsIHByb3BlcnR5TmFtZXMpOwog
CiAgICAgICAgICAgICBXSS5ydW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRpb25Db250ZXh0LnRh
cmdldC5SdW50aW1lQWdlbnQucmVsZWFzZU9iamVjdEdyb3VwKCJjb21wbGV0aW9uIik7CiAKICAg
ICAgICAgICAgIGlmICghYmFzZSkgewotICAgICAgICAgICAgICAgIGxldCBjb21tYW5kTGluZUFQ
SSA9IFdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLl9jb21tYW5kTGluZUFQ
SS5zbGljZSgwKTsKLSAgICAgICAgICAgICAgICBpZiAoV0kuZGVidWdnZXJNYW5hZ2VyLnBhdXNl
ZCkgewotICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0RGF0YSA9IFdJLmRlYnVnZ2VyTWFu
YWdlci5kYXRhRm9yVGFyZ2V0KFdJLnJ1bnRpbWVNYW5hZ2VyLmFjdGl2ZUV4ZWN1dGlvbkNvbnRl
eHQudGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGEucGF1c2VSZWFz
b24gPT09IFdJLkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5MaXN0ZW5lciB8fCB0YXJnZXRE
YXRhLnBhdXNlUmVhc29uID09PSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uRXZlbnRM
aXN0ZW5lcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lQVBJLnB1c2goIiRl
dmVudCIpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXREYXRhLnBhdXNlUmVh
c29uID09PSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uRXhjZXB0aW9uKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWFuZExpbmVBUEkucHVzaCgiJGV4Y2VwdGlvbiIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGxldCBuYW1lIG9mIGNvbW1hbmRM
aW5lQVBJKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzW25hbWVdID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goLi4uSmF2YVNjcmlwdFJ1bnRpbWVD
b21wbGV0aW9uUHJvdmlkZXIuX2NvbW1hbmRMaW5lQVBJS2V5cyk7CiAKICAgICAgICAgICAgICAg
ICBsZXQgc2F2ZWRSZXN1bHRBbGlhcyA9IFdJLnNldHRpbmdzLmNvbnNvbGVTYXZlZFJlc3VsdEFs
aWFzLnZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXNbc2F2ZWRSZXN1bHRBbGlhcyArICIwIl0gPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzW3NhdmVkUmVzdWx0QWxpYXMg
KyAiXyJdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlhcykKKyAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKHNhdmVkUmVzdWx0QWxpYXMgKyAi
XyIpOworCisgICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IFdJLnJ1bnRpbWVNYW5hZ2VyLmFj
dGl2ZUV4ZWN1dGlvbkNvbnRleHQudGFyZ2V0OworCisgICAgICAgICAgICAgICAgaWYgKFdJLmRl
YnVnZ2VyTWFuYWdlci5wYXVzZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldERh
dGEgPSBXSS5kZWJ1Z2dlck1hbmFnZXIuZGF0YUZvclRhcmdldCh0YXJnZXQpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodGFyZ2V0RGF0YS5wYXVzZVJlYXNvbiA9PT0gV0kuRGVidWdnZXJNYW5h
Z2VyLlBhdXNlUmVhc29uLkxpc3RlbmVyIHx8IHRhcmdldERhdGEucGF1c2VSZWFzb24gPT09IFdJ
LkRlYnVnZ2VyTWFuYWdlci5QYXVzZVJlYXNvbi5FdmVudExpc3RlbmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goIiRldmVudCIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKHNhdmVkUmVzdWx0QWxpYXMgKyAiZXZlbnQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXREYXRhLnBhdXNlUmVhc29uID09PSBX
SS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uRXhjZXB0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goIiRleGNlcHRpb24iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChzYXZlZFJlc3VsdEFsaWFzICsgImV4Y2VwdGlvbiIp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgc3dpdGNoICh0YXJnZXQudHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgV0kuVGFy
Z2V0LlR5cGUuUGFnZToKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCIk
Iik7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJCQiKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCIkMCIpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMucHVzaChzYXZlZFJlc3VsdEFsaWFzICsgIjAiKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5wdXNoKCIkeCIpOworICAgICAgICAgICAgICAgICAgICAvLyBmYWxs
dGhyb3VnaAorICAgICAgICAgICAgICAgIGNhc2UgV0kuVGFyZ2V0LlR5cGUuU2VydmljZVdvcmtl
cjoKKyAgICAgICAgICAgICAgICBjYXNlIFdJLlRhcmdldC5UeXBlLldvcmtlcjoKKyAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCJjb3B5Iik7CisgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMucHVzaCgiZ2V0RXZlbnRMaXN0ZW5lcnMiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCJtb25pdG9yRXZlbnRzIik7CisgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgidW5tb25pdG9yRXZlbnRzIik7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBEdWUgdG8gY2FjaGluZywgc29tZXRpbWVzIG9sZCAkbiB2YWx1ZXMgc2hvdyB1
cCBhcyBjb21wbGV0aW9uIHJlc3VsdHMgZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IGF2YWlsYWJs
ZS4gV2Ugc2hvdWxkIGNsZWFyIHRoYXQgcHJvYWN0aXZlbHkuCiAgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPD0gV0kuQ29uc29sZUNvbW1hbmRSZXN1bHRNZXNzYWdlLm1heGltdW1T
YXZlZFJlc3VsdEluZGV4OyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
c1siJCIgKyBpXSA9IHRydWU7Ci0KKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5w
dXNoKCIkIiArIGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlhcykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXNbc2F2ZWRSZXN1bHRBbGlhcyAr
IGldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChz
YXZlZFJlc3VsdEFsaWFzICsgaSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlOYW1lcyk7
Ci0KICAgICAgICAgICAgIHZhciBpbXBsaWNpdFN1ZmZpeCA9ICIiOwogICAgICAgICAgICAgaWYg
KGJyYWNrZXROb3RhdGlvbikgewogICAgICAgICAgICAgICAgIHZhciBxdW90ZVVzZWQgPSBwcmVm
aXhbMF0gPT09ICInIiA/ICInIiA6ICJcIiI7CkBAIC0zMTMsMjggKzM3NiwzIEBAIFdJLkphdmFT
Y3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyID0gY2xhc3MgSmF2YVNjcmlwdFJ1bnRpbWVD
b21wbGV0aW9uUHJvdmlkCiAgICAgICAgIHRoaXMuX2xhc3RQcm9wZXJ0eU5hbWVzID0gbnVsbDsK
ICAgICB9CiB9OwotCi1XSS5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5fY29t
bWFuZExpbmVBUEkgPSBbCi0gICAgIiQiLAotICAgICIkJCIsCi0gICAgIiQwIiwKLSAgICAiJF8i
LAotICAgICIkeCIsCi0gICAgImNsZWFyIiwKLSAgICAiY29weSIsCi0gICAgImRpciIsCi0gICAg
ImRpcnhtbCIsCi0gICAgImdldEV2ZW50TGlzdGVuZXJzIiwKLSAgICAiaW5zcGVjdCIsCi0gICAg
ImtleXMiLAotICAgICJtb25pdG9yRXZlbnRzIiwKLSAgICAicHJvZmlsZSIsCi0gICAgInByb2Zp
bGVFbmQiLAotICAgICJxdWVyeUhvbGRlcnMiLAotICAgICJxdWVyeUluc3RhbmNlcyIsCi0gICAg
InF1ZXJ5T2JqZWN0cyIsCi0gICAgInNjcmVlbnNob3QiLAotICAgICJ0YWJsZSIsCi0gICAgInVu
bW9uaXRvckV2ZW50cyIsCi0gICAgInZhbHVlcyIsCi1dOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377176</attachid>
            <date>2019-08-23 16:27:43 -0700</date>
            <delta_ts>2019-08-23 17:47:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200971-20190823162742.patch</filename>
            <type>text/plain</type>
            <size>45665</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDE1NDI1NDc3ZDYwNWQyMjFhMDhmN2MwZTQ1ODY0
YzVhMTBmZTk3NjcuLmYxYWUwZjc3MGY3ODk2ZTNiMjY4MzJmMjEzNjczZDhhMmRiOGU4M2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTA4LTIzICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBj
cmVhdGUgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgYXBpIGZ1bmN0aW9ucyBmb3Igb3RoZXIgY29u
c29sZSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDA5NzEKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAg
ICAgICAgRXhwb3NlIGFsbCBgY29uc29sZS4qYCBmdW5jdGlvbnMgaW4gdGhlIGNvbW1hbmQgbGlu
ZSBBUEksIHNpbmNlIHRoZXkncmUgYWxsIGFscmVhZHkgYWJsZSB0bworICAgICAgICBiZSByZWZl
cmVuY2VkIHZpYSB0aGUgYGNvbnNvbGVgIG9iamVjdC4KKworICAgICAgICBQcm92aWRlIGEgc2lt
cGxlciBpbnRlcmZhY2UgZm9yIG90aGVyIGluamVjdGVkIHNjcmlwdHMgdG8gbW9kaWZ5IHRoZSBj
b21tYW5kIGxpbmUgQVBJLgorCisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TW9k
dWxlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNb2R1bGU6OmVuc3Vy
ZUluamVjdGVkKToKKworICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
czoKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5pbnNwZWN0T2JqZWN0KToKKyAg
ICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5hZGRDb21tYW5kTGluZUFQSUdldHRlcik6
IEFkZGVkLgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLmFkZENvbW1hbmRMaW5l
QVBJTWV0aG9kKTogQWRkZWQuCisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUuaGFz
SW5qZWN0ZWRNb2R1bGUpOiBBZGRlZC4KKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlw
ZS5pbmplY3RNb2R1bGUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlLl9ldmFs
dWF0ZU9uKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJKTogQWRkZWQu
CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUubW9kdWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEluamVjdGVkU2NyaXB0LnByb3RvdHlwZS5fc2F2ZWRSZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoYmluZCk6IERlbGV0ZWQuCisgICAgICAgIChCYXNpY0NvbW1hbmRMaW5lQVBJKTog
RGVsZXRlZC4KKyAgICAgICAgKGNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKHRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKHByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAocHJvZmlsZUVuZCk6
IERlbGV0ZWQuCisgICAgICAgIChrZXlzKTogRGVsZXRlZC4KKyAgICAgICAgKHZhbHVlcyk6IERl
bGV0ZWQuCisgICAgICAgIChxdWVyeUluc3RhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChxdWVy
eU9iamVjdHMpOiBEZWxldGVkLgorICAgICAgICAocXVlcnlIb2xkZXJzKTogRGVsZXRlZC4KKwog
MjAxOS0wOC0yMyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMjViOTll
ZWZkMjI3NmM5MjI5ZDM1Zjk5MmY2NDBjZWIwYmYyYTQyLi5mZGVmZDZjOGQ2NGMzODcxZWU3ODJl
N2Y1MjFkYzg3ZTU4NzZhZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTktMDgt
MjMgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGNyZWF0ZSBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBhcGkgZnVuY3Rpb25zIGZvciBv
dGhlciBjb25zb2xlIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFy
by4KKworICAgICAgICBFeHBvc2UgYWxsIGBjb25zb2xlLipgIGZ1bmN0aW9ucyBpbiB0aGUgY29t
bWFuZCBsaW5lIEFQSSwgc2luY2UgdGhleSdyZSBhbGwgYWxyZWFkeSBhYmxlIHRvCisgICAgICAg
IGJlIHJlZmVyZW5jZWQgdmlhIHRoZSBgY29uc29sZWAgb2JqZWN0LgorCisgICAgICAgIFByb3Zp
ZGUgYSBzaW1wbGVyIGludGVyZmFjZSBmb3Igb3RoZXIgaW5qZWN0ZWQgc2NyaXB0cyB0byBtb2Rp
ZnkgdGhlIGNvbW1hbmQgbGluZSBBUEkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29tbWFuZExp
bmVBUElNb2R1bGVTb3VyY2UuanM6CisgICAgICAgIChpbmplY3RlZFNjcmlwdC5faW5zcGVjdE9i
amVjdCk6IEFkZGVkLgorICAgICAgICAobm9ybWFsaXplRXZlbnRUeXBlcyk6IEFkZGVkLgorICAg
ICAgICAobG9nRXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKGNhblF1ZXJ5U2VsZWN0b3JPbk5vZGUp
OiBBZGRlZC4KKyAgICAgICAgKGJpbmQpOiBEZWxldGVkLgorICAgICAgICAodmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAodGhpcy5tZXRob2QudG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAo
Q29tbWFuZExpbmVBUEkpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsKTog
RGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5fY2FuUXVlcnlTZWxlY3Rv
ck9uTm9kZSk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBl
LngpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5kaXIp
OiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5kaXJ4bWwp
OiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5rZXlzKTog
RGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUudmFsdWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUucHJvZmlsZSk6
IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLnByb2ZpbGVF
bmQpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS50YWJs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLnNjcmVl
bnNob3QpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5t
b25pdG9yRXZlbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90
b3R5cGUudW5tb25pdG9yRXZlbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJ
SW1wbC5wcm90b3R5cGUuaW5zcGVjdCk6IERlbGV0ZWQuCisgICAgICAgIChDb21tYW5kTGluZUFQ
SUltcGwucHJvdG90eXBlLnF1ZXJ5SW5zdGFuY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1h
bmRMaW5lQVBJSW1wbC5wcm90b3R5cGUucXVlcnlPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAg
KENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUucXVlcnlIb2xkZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUuY29weSk6IERlbGV0ZWQuCisgICAg
ICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLmNsZWFyKTogRGVsZXRlZC4KKyAgICAg
ICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUuZ2V0RXZlbnRMaXN0ZW5lcnMpOiBEZWxl
dGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZS5faW5zcGVjdGVkT2Jq
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUuX25v
cm1hbGl6ZUV2ZW50VHlwZXMpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJbXBs
LnByb3RvdHlwZS5fbG9nRXZlbnQpOiBEZWxldGVkLgorICAgICAgICAoQ29tbWFuZExpbmVBUElJ
bXBsLnByb3RvdHlwZS5faW5zcGVjdCk6IERlbGV0ZWQuCisKIDIwMTktMDgtMjMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gW1dlYktpdDJd
IFRhcHBpbmcgb24gdGhlIOKAnEnigJlt4oCdIHRleHQgc3VnZ2VzdGlvbiBhZnRlciB0eXBpbmcg
4oCcaeKAmeKAnSBkb2VzIG5vdGhpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDg1NjUy
NjA5YmU5Y2NiOTFmN2ViOWU3YmE4NTlmZDBjMDg3ODVkNDMuLmQwNGE2OTQ5YThiYmU5Zjc3MTk5
YjhkMDEyN2FlOTJlZTY2NDUwMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDE5LTA4LTIzICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBjcmVhdGUgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgYXBp
IGZ1bmN0aW9ucyBmb3Igb3RoZXIgY29uc29sZSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA5NzEKKworICAgICAgICBSZXZpZXdlZCBi
eSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAgICAgRXhwb3NlIGFsbCBgY29uc29sZS4qYCBmdW5j
dGlvbnMgaW4gdGhlIGNvbW1hbmQgbGluZSBBUEksIHNpbmNlIHRoZXkncmUgYWxsIGFscmVhZHkg
YWJsZSB0bworICAgICAgICBiZSByZWZlcmVuY2VkIHZpYSB0aGUgYGNvbnNvbGVgIG9iamVjdC4K
KworICAgICAgICBQcm92aWRlIGEgc2ltcGxlciBpbnRlcmZhY2UgZm9yIG90aGVyIGluamVjdGVk
IHNjcmlwdHMgdG8gbW9kaWZ5IHRoZSBjb21tYW5kIGxpbmUgQVBJLgorCisgICAgICAgICogVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRl
ci5qczoKKyAgICAgICAgKFdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLnBy
b3RvdHlwZS5nZXQgX2NvbW1hbmRMaW5lQVBJS2V5cyk6IEFkZGVkLgorICAgICAgICAoV0kuSmF2
YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBsZXRpb25Db250
cm9sbGVyQ29tcGxldGlvbnNOZWVkZWQudXBkYXRlTGFzdFByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoV0kuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIucHJvdG90eXBlLmNvbXBs
ZXRpb25Db250cm9sbGVyQ29tcGxldGlvbnNOZWVkZWQucmVjZWl2ZWRQcm9wZXJ0eU5hbWVzKToK
KwogMjAxOS0wOC0yMyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogdHJhbnNwYXJlbmN5IGNoZWNrZXJib2FyZCBpcyB0b28gYnJpZ2h0
IGluIGRhcmsgbW9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0TW9kdWxlLmNwcAppbmRleCA0MDNmNjcxMmM2YjM2OTRiZDE2Mzhl
NWZkYWRhNzIyNDA5ZjA0MTQzLi5mZDAyMDZlYzc0NWUzOGJkMzg4M2JjNzYzZTk1ZjY2MjUyNTQ3
ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TW9kdWxlLmNwcApAQCAtNjIsMjAgKzYyLDIxIEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHRNb2R1bGU6OmVuc3VyZUluamVjdGVkKEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNCiAKICAgICAvLyBGSVhNRTogTWFrZSB0aGUgSW5qZWN0ZWRTY3JpcHQgYSBtb2R1
bGUgaXRzZWxmLgogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihpbmplY3RlZFNjcmlwdC5z
Y3JpcHRTdGF0ZSgpKTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24oaW5qZWN0ZWRTY3JpcHQuaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgIm1vZHVsZSJfcywgaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmZ1bmN0aW9uQ2FsbEhh
bmRsZXIoKSk7CisgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGlu
amVjdGVkU2NyaXB0LmluamVjdGVkU2NyaXB0T2JqZWN0KCksICJoYXNJbmplY3RlZE1vZHVsZSJf
cywgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZpcm9ubWVudCgpLmZ1bmN0aW9u
Q2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobmFtZSgpKTsKICAg
ICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwogICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBpbmpl
Y3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4Y2Vw
dGlvbik7CiAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOwotICAgIGlmIChoYWRFeGNlcHRpb24g
fHwgIXJlc3VsdFZhbHVlIHx8ICFyZXN1bHRWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKGhh
ZEV4Y2VwdGlvbiB8fCAhcmVzdWx0VmFsdWUgfHwgIXJlc3VsdFZhbHVlLmlzQm9vbGVhbigpIHx8
ICFyZXN1bHRWYWx1ZS5hc0Jvb2xlYW4oKSkgewogICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHQuaW5qZWN0ZWRTY3JpcHRPYmplY3Qo
KSwgImluamVjdE1vZHVsZSJfcywgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbnNwZWN0b3JFbnZp
cm9ubWVudCgpLmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KG5hbWUoKSk7CiAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJj
ZSgpKTsKICAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaG9zdChpbmplY3RlZFNjcmlw
dE1hbmFnZXIsIGluamVjdGVkU2NyaXB0LnNjcmlwdFN0YXRlKCkpKTsKICAgICAgICAgcmVzdWx0
VmFsdWUgPSBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rp
b24sIGhhZEV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChoYWRFeGNlcHRpb24pIHsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gcGFyc2UvZXhlY3V0ZSAlcyEiLCBuYW1lKCkuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlc1xuIiwgc291cmNlKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCmluZGV4IDM2M2FiNmFjMTZmYWFl
NDVlNThjM2M1NjAxYTg1ZTllYjZmYmMwMjIuLjdiMzhjOThkNmY4MWQ5Nzc2MDcxMDMwYjQzZDhm
NGYwMDU0Y2QyYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwpAQCAtMzg5LDggKzM4OSw4IEBAIGxldCBJbmpl
Y3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAKICAgICBpbnNwZWN0T2JqZWN0KG9i
amVjdCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jb21tYW5kTGluZUFQSUltcGwpCi0gICAg
ICAgICAgICB0aGlzLl9jb21tYW5kTGluZUFQSUltcGwuaW5zcGVjdChvYmplY3QpOworICAgICAg
ICBpZiAodGhpcy5faW5zcGVjdE9iamVjdCkKKyAgICAgICAgICAgIHRoaXMuX2luc3BlY3RPYmpl
Y3Qob2JqZWN0KTsKICAgICB9CiAKICAgICByZWxlYXNlT2JqZWN0KG9iamVjdElkKQpAQCAtNDE3
LDI3ICs0MTcsMzYgQEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQK
ICAgICAgICAgZGVsZXRlIHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOwogICAg
IH0KIAorICAgIC8vIENvbW1hbmRMaW5lQVBJCisKKyAgICBhZGRDb21tYW5kTGluZUFQSUdldHRl
cihuYW1lLCBmdW5jKQorICAgIHsKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVB
UEkuX2dldHRlcnMucHVzaCh7bmFtZSwgZnVuY30pOworICAgIH0KKworICAgIGFkZENvbW1hbmRM
aW5lQVBJTWV0aG9kKG5hbWUsIGZ1bmMpCisgICAgeworICAgICAgICBmdW5jLnRvU3RyaW5nID0g
ZnVuY3Rpb24oKSB7IHJldHVybiAiZnVuY3Rpb24gIiArIG5hbWUgKyAiKCkgeyBbQ29tbWFuZCBM
aW5lIEFQSV0gfSIgfTsKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkuX21l
dGhvZHMucHVzaCh7bmFtZSwgZnVuY30pOworICAgIH0KKwogICAgIC8vIEluamVjdGVkU2NyaXB0
TW9kdWxlIEMrKyBBUEkKIAotICAgIG1vZHVsZShuYW1lKQorICAgIGhhc0luamVjdGVkTW9kdWxl
KG5hbWUpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKICAgICB9
CiAKICAgICBpbmplY3RNb2R1bGUobmFtZSwgc291cmNlLCBob3N0KQogICAgIHsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX21vZHVsZXNbbmFtZV07CisgICAgICAgIHRoaXMuX21vZHVsZXNbbmFtZV0g
PSBmYWxzZTsKIAogICAgICAgICBsZXQgbW9kdWxlRnVuY3Rpb24gPSBJbmplY3RlZFNjcmlwdEhv
c3QuZXZhbHVhdGUoIigiICsgc291cmNlICsgIikiKTsKLSAgICAgICAgaWYgKHR5cGVvZiBtb2R1
bGVGdW5jdGlvbiAhPT0gImZ1bmN0aW9uIikgewotICAgICAgICAgICAgaWYgKGluc3BlY3RlZEds
b2JhbE9iamVjdC5jb25zb2xlKQotICAgICAgICAgICAgICAgIGluc3BlY3RlZEdsb2JhbE9iamVj
dC5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9yIGVycm9yOiBBIGZ1bmN0aW9uIHdhcyBleHBl
Y3RlZCBmb3IgbW9kdWxlICVzIGV2YWx1YXRpb24iLCBuYW1lKTsKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09
ICJmdW5jdGlvbiIpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IFdlYiBJbnNwZWN0b3I6IGEg
ZnVuY3Rpb24gd2FzIGV4cGVjdGVkIGZvciBpbmplY3RNb2R1bGUiOworICAgICAgICBtb2R1bGVG
dW5jdGlvbi5jYWxsKGluc3BlY3RlZEdsb2JhbE9iamVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LCBp
bnNwZWN0ZWRHbG9iYWxPYmplY3QsIGluamVjdGVkU2NyaXB0SWQsIHRoaXMsIFJlbW90ZU9iamVj
dCwgaG9zdCk7CiAKLSAgICAgICAgbGV0IG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5z
cGVjdGVkR2xvYmFsT2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZEdsb2JhbE9i
amVjdCwgaW5qZWN0ZWRTY3JpcHRJZCwgdGhpcywgUmVtb3RlT2JqZWN0LCBob3N0KTsKLSAgICAg
ICAgdGhpcy5fbW9kdWxlc1tuYW1lXSA9IG1vZHVsZTsKLSAgICAgICAgcmV0dXJuIG1vZHVsZTsK
KyAgICAgICAgdGhpcy5fbW9kdWxlc1tuYW1lXSA9IHRydWU7CiAgICAgfQogCiAgICAgLy8gSW5q
ZWN0ZWRTY3JpcHRNb2R1bGUgSmF2YVNjcmlwdCBBUEkKQEAgLTU2OCwxMyArNTc3LDggQEAgbGV0
IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAgICBfZXZhbHVhdGVPbihl
dmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiwgaXNFdmFsT25DYWxsRnJhbWUsIGluY2x1
ZGVDb21tYW5kTGluZUFQSSkKICAgICB7CiAgICAgICAgIGxldCBjb21tYW5kTGluZUFQSSA9IG51
bGw7Ci0gICAgICAgIGlmIChpbmNsdWRlQ29tbWFuZExpbmVBUEkpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLkNvbW1hbmRMaW5lQVBJKQotICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lQVBJID0g
bmV3IHRoaXMuQ29tbWFuZExpbmVBUEkodGhpcy5fY29tbWFuZExpbmVBUElJbXBsLCBpc0V2YWxP
bkNhbGxGcmFtZSA/IG9iamVjdCA6IG51bGwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNvbW1hbmRMaW5lQVBJID0gbmV3IEJhc2ljQ29tbWFuZExpbmVBUEkoaXNFdmFsT25D
YWxsRnJhbWUgPyBvYmplY3QgOiBudWxsKTsKLSAgICAgICAgfQotCisgICAgICAgIGlmIChpbmNs
dWRlQ29tbWFuZExpbmVBUEkpCisgICAgICAgICAgICBjb21tYW5kTGluZUFQSSA9IG5ldyBJbmpl
Y3RlZFNjcmlwdC5Db21tYW5kTGluZUFQSShpc0V2YWxPbkNhbGxGcmFtZSA/IG9iamVjdCA6IG51
bGwpCiAgICAgICAgIHJldHVybiBldmFsRnVuY3Rpb24uY2FsbChvYmplY3QsIGV4cHJlc3Npb24s
IGNvbW1hbmRMaW5lQVBJKTsKICAgICB9CiAKQEAgLTg2OSwxMSArODczLDYgQEAgbGV0IEluamVj
dGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAgICAgICAgaWYgKHRoaXMuX25leHRT
YXZlZFJlc3VsdEluZGV4ID49IDEwMCkKICAgICAgICAgICAgIHRoaXMuX25leHRTYXZlZFJlc3Vs
dEluZGV4ID0gMTsKICAgICB9Ci0KLSAgICBfc2F2ZWRSZXN1bHQoaW5kZXgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fc2F2ZWRSZXN1bHRzW2luZGV4XTsKLSAgICB9CiB9OwogCiBJbmpl
Y3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZSA9IHsKQEAgLTE0NTcsODAgKzE0NTYsODkgQEAgSW5q
ZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkuX2NyZWF0ZVNjb3BlSnNvbiA9IGZ1bmN0aW9uKG9i
amVjdCwge25hbWUsIHR5cGUsIGwKIAogLy8gLS0tLS0tLQogCi1mdW5jdGlvbiBiaW5kKGZ1bmMs
IHRoaXNPYmplY3QsIC4uLm91dGVyQXJncykKK0luamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJ
ID0gY2xhc3MgQ29tbWFuZExpbmVBUEkKIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oLi4uaW5uZXJB
cmdzKSB7Ci0gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXNPYmplY3QsIG91dGVyQXJncy5j
b25jYXQoaW5uZXJBcmdzKSk7Ci0gICAgfTsKLX0KKyAgICBjb25zdHJ1Y3RvcihjYWxsRnJhbWUp
CisgICAgeworICAgICAgICBsZXQgc2F2ZWRSZXN1bHRBbGlhcyA9IEluamVjdGVkU2NyaXB0SG9z
dC5zYXZlZFJlc3VsdEFsaWFzOwogCi1mdW5jdGlvbiBCYXNpY0NvbW1hbmRMaW5lQVBJKGNhbGxG
cmFtZSkKLXsKLSAgICBsZXQgc2F2ZWRSZXN1bHRBbGlhcyA9IEluamVjdGVkU2NyaXB0SG9zdC5z
YXZlZFJlc3VsdEFsaWFzOworICAgICAgICBsZXQgZGVmaW5lR2V0dGVyID0gKGtleSwgdmFsdWUp
ID0+IHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpIHsKKyAg
ICAgICAgICAgICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAg
IHZhbHVlID0gZnVuY3Rpb24oKSB7IHJldHVybiBvcmlnaW5hbFZhbHVlOyB9OworICAgICAgICAg
ICAgfQogCi0gICAgbGV0IGRlZmluZUdldHRlciA9IChrZXksIHZhbHVlKSA9PiB7Ci0gICAgICAg
IGlmICh0eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAgIGxldCBvcmln
aW5hbFZhbHVlID0gdmFsdWU7Ci0gICAgICAgICAgICB2YWx1ZSA9IGZ1bmN0aW9uKCkgeyByZXR1
cm4gb3JpZ2luYWxWYWx1ZTsgfTsKKyAgICAgICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXygi
JCIgKyBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQorICAg
ICAgICAgICAgICAgIHRoaXMuX19kZWZpbmVHZXR0ZXJfXyhzYXZlZFJlc3VsdEFsaWFzICsga2V5
LCB2YWx1ZSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCJfbGFzdFJlc3VsdCIgaW4gaW5q
ZWN0ZWRTY3JpcHQpCisgICAgICAgICAgICBkZWZpbmVHZXR0ZXIoIl8iLCBpbmplY3RlZFNjcmlw
dC5fbGFzdFJlc3VsdCk7CisKKyAgICAgICAgaWYgKCJfZXhjZXB0aW9uVmFsdWUiIGluIGluamVj
dGVkU2NyaXB0KQorICAgICAgICAgICAgZGVmaW5lR2V0dGVyKCJleGNlcHRpb24iLCBpbmplY3Rl
ZFNjcmlwdC5fZXhjZXB0aW9uVmFsdWUpOworCisgICAgICAgIGlmICgiX2V2ZW50VmFsdWUiIGlu
IGluamVjdGVkU2NyaXB0KQorICAgICAgICAgICAgZGVmaW5lR2V0dGVyKCJldmVudCIsIGluamVj
dGVkU2NyaXB0Ll9ldmVudFZhbHVlKTsKKworICAgICAgICAvLyAkMS0kOTkKKyAgICAgICAgZm9y
IChsZXQgaSA9IDE7IGkgPD0gaW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0cy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgZGVmaW5lR2V0dGVyKGksIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC5fc2F2ZWRSZXN1bHRzW2ldOworICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9fZGVmaW5lR2V0dGVyX18oIiQiICsg
a2V5LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQotICAgICAgICAgICAg
dGhpcy5fX2RlZmluZUdldHRlcl9fKHNhdmVkUmVzdWx0QWxpYXMgKyBrZXksIHZhbHVlKTsKLSAg
ICB9OworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IEluamVjdGVkU2NyaXB0LkNvbW1hbmRM
aW5lQVBJLl9nZXR0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsZXQge25hbWUsIGZ1
bmN9ID0gSW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkuX2dldHRlcnNbaV07CisgICAgICAg
ICAgICBkZWZpbmVHZXR0ZXIobmFtZSwgZnVuYyk7CisgICAgICAgIH0KIAotICAgIGlmICgiX2xh
c3RSZXN1bHQiIGluIGluamVjdGVkU2NyaXB0KQotICAgICAgICBkZWZpbmVHZXR0ZXIoIl8iLCBp
bmplY3RlZFNjcmlwdC5fbGFzdFJlc3VsdCk7Ci0KLSAgICBpZiAoIl9leGNlcHRpb25WYWx1ZSIg
aW4gaW5qZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiZXhjZXB0aW9uIiwgaW5q
ZWN0ZWRTY3JpcHQuX2V4Y2VwdGlvblZhbHVlKTsKLQotICAgIGlmICgiX2V2ZW50VmFsdWUiIGlu
IGluamVjdGVkU2NyaXB0KQotICAgICAgICBkZWZpbmVHZXR0ZXIoImV2ZW50IiwgaW5qZWN0ZWRT
Y3JpcHQuX2V2ZW50VmFsdWUpOwotCi0gICAgLy8gJDEtJDk5Ci0gICAgZm9yIChsZXQgaSA9IDE7
IGkgPD0gaW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0cy5sZW5ndGg7ICsraSkKLSAgICAgICAg
ZGVmaW5lR2V0dGVyKGksIGJpbmQoaW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0LCBpbmplY3Rl
ZFNjcmlwdCwgaSkpOwotCi0gICAgLy8gQ29tbWFuZCBMaW5lIEFQSSBtZXRob2RzLgotICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgQmFzaWNDb21tYW5kTGluZUFQSS5tZXRob2RzLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGxldCBtZXRob2QgPSBCYXNpY0NvbW1hbmRMaW5lQVBJLm1ldGhvZHNbaV07
Ci0gICAgICAgIHRoaXNbbWV0aG9kLm5hbWVdID0gbWV0aG9kOworICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IEluamVjdGVkU2NyaXB0LkNvbW1hbmRMaW5lQVBJLl9tZXRob2RzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBsZXQge25hbWUsIGZ1bmN9ID0gSW5qZWN0ZWRTY3JpcHQuQ29t
bWFuZExpbmVBUEkuX21ldGhvZHNbaV07CisgICAgICAgICAgICB0aGlzW25hbWVdID0gZnVuYzsK
KyAgICAgICAgfQogICAgIH0KLX0KK307CiAKLUJhc2ljQ29tbWFuZExpbmVBUEkubWV0aG9kcyA9
IFsKLSAgICBmdW5jdGlvbiBkaXIoKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29u
c29sZS5kaXIoLi4uYXJndW1lbnRzKTsgfSwKLSAgICBmdW5jdGlvbiBjbGVhcigpIHsgcmV0dXJu
IGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmNsZWFyKC4uLmFyZ3VtZW50cyk7IH0sCi0g
ICAgZnVuY3Rpb24gdGFibGUoKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29s
ZS50YWJsZSguLi5hcmd1bWVudHMpOyB9LAotICAgIGZ1bmN0aW9uIHByb2ZpbGUoKSB7IHJldHVy
biBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5wcm9maWxlKC4uLmFyZ3VtZW50cyk7IH0s
Ci0gICAgZnVuY3Rpb24gcHJvZmlsZUVuZCgpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVj
dC5jb25zb2xlLnByb2ZpbGVFbmQoLi4uYXJndW1lbnRzKTsgfSwKK0luamVjdGVkU2NyaXB0LkNv
bW1hbmRMaW5lQVBJLl9nZXR0ZXJzID0gW107CitJbmplY3RlZFNjcmlwdC5Db21tYW5kTGluZUFQ
SS5fbWV0aG9kcyA9IFtdOwogCi0gICAgZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgcmV0dXJuIE9i
amVjdC5rZXlzKG9iamVjdCk7IH0sCi0gICAgZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkgewotICAg
ICAgICBsZXQgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpCi0g
ICAgICAgICAgICByZXN1bHQucHVzaChvYmplY3Rba2V5XSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfSwKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJrZXlz
IiwgZnVuY3Rpb24ob2JqZWN0KSB7IHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOyB9KTsKK2lu
amVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ2YWx1ZXMiLCBmdW5jdGlvbihv
YmplY3QpIHsgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqZWN0KTsgfSk7CiAKLSAgICBmdW5jdGlv
biBxdWVyeUluc3RhbmNlcygpIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5x
dWVyeUluc3RhbmNlcyguLi5hcmd1bWVudHMpOwotICAgIH0sCitpbmplY3RlZFNjcmlwdC5hZGRD
b21tYW5kTGluZUFQSU1ldGhvZCgicXVlcnlJbnN0YW5jZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJu
IEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1bWVudHMpOyB9KTsKK2lu
amVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJxdWVyeU9iamVjdHMiLCBmdW5j
dGlvbigpIHsgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUluc3RhbmNlcyguLi5hcmd1
bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJxdWVy
eUhvbGRlcnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5xdWVyeUhv
bGRlcnMoLi4uYXJndW1lbnRzKTsgfSk7CiAKLSAgICBmdW5jdGlvbiBxdWVyeU9iamVjdHMoKSB7
Ci0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucXVlcnlJbnN0YW5jZXMoLi4uYXJn
dW1lbnRzKTsKLSAgICB9LAoraW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2Qo
Imluc3BlY3QiLCBmdW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIGluamVjdGVkU2NyaXB0Lmluc3Bl
Y3RPYmplY3Qob2JqZWN0KTsgfSk7CiAKLSAgICBmdW5jdGlvbiBxdWVyeUhvbGRlcnMoKSB7Ci0g
ICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucXVlcnlIb2xkZXJzKC4uLmFyZ3VtZW50
cyk7Ci0gICAgfSwKLV07Ci0KLWZvciAobGV0IGkgPSAwOyBpIDwgQmFzaWNDb21tYW5kTGluZUFQ
SS5tZXRob2RzLmxlbmd0aDsgKytpKSB7Ci0gICAgbGV0IG1ldGhvZCA9IEJhc2ljQ29tbWFuZExp
bmVBUEkubWV0aG9kc1tpXTsKLSAgICBtZXRob2QudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0
dXJuICJmdW5jdGlvbiAiICsgbWV0aG9kLm5hbWUgKyAiKCkgeyBbQ29tbWFuZCBMaW5lIEFQSV0g
fSI7IH07Ci19CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiYXNzZXJ0
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5hc3Nl
cnQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1l
dGhvZCgiY2xlYXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5j
b25zb2xlLmNsZWFyKC4uLmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFu
ZExpbmVBUElNZXRob2QoImNvdW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9i
YWxPYmplY3QuY29uc29sZS5jb3VudCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0
LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJjb3VudFJlc2V0IiwgZnVuY3Rpb24oKSB7IHJldHVy
biBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5jb3VudFJlc2V0KC4uLmFyZ3VtZW50cyk7
IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImRlYnVnIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5kZWJ1ZyguLi5h
cmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJk
aXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmRp
ciguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0
aG9kKCJkaXJ4bWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5j
b25zb2xlLmRpcnhtbCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1h
bmRMaW5lQVBJTWV0aG9kKCJlcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xv
YmFsT2JqZWN0LmNvbnNvbGUuZXJyb3IoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlw
dC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiZ3JvdXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlu
c3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmdyb3VwKC4uLmFyZ3VtZW50cyk7IH0pOworaW5q
ZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoImdyb3VwQ29sbGFwc2VkIiwgZnVu
Y3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5ncm91cENvbGxh
cHNlZCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJ
TWV0aG9kKCJncm91cEVuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2Jq
ZWN0LmNvbnNvbGUuZ3JvdXBFbmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5h
ZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiaW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVj
dGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuaW5mbyguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVk
U2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJsb2ciLCBmdW5jdGlvbigpIHsgcmV0dXJu
IGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmxvZyguLi5hcmd1bWVudHMpOyB9KTsKK2lu
amVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJwcm9maWxlIiwgZnVuY3Rpb24o
KSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5wcm9maWxlKC4uLmFyZ3Vt
ZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInByb2Zp
bGVFbmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xl
LnByb2ZpbGVFbmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5k
TGluZUFQSU1ldGhvZCgicmVjb3JkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9i
YWxPYmplY3QuY29uc29sZS5yZWNvcmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlw
dC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgicmVjb3JkRW5kIiwgZnVuY3Rpb24oKSB7IHJldHVy
biBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5yZWNvcmRFbmQoLi4uYXJndW1lbnRzKTsg
fSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgic2NyZWVuc2hvdCIs
IGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuc2NyZWVu
c2hvdCguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJ
TWV0aG9kKCJ0YWJsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0
LmNvbnNvbGUudGFibGUoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21t
YW5kTGluZUFQSU1ldGhvZCgidGFrZUhlYXBTbmFwc2hvdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4g
aW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUudGFrZUhlYXBTbmFwc2hvdCguLi5hcmd1bWVu
dHMpOyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ0aW1lIiwg
ZnVuY3Rpb24oKSB7IHJldHVybiBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS50aW1lKC4u
LmFyZ3VtZW50cyk7IH0pOworaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2Qo
InRpbWVFbmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25z
b2xlLnRpbWVFbmQoLi4uYXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5k
TGluZUFQSU1ldGhvZCgidGltZUxvZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xv
YmFsT2JqZWN0LmNvbnNvbGUudGltZUxvZyguLi5hcmd1bWVudHMpOyB9KTsKK2luamVjdGVkU2Ny
aXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ0aW1lU3RhbXAiLCBmdW5jdGlvbigpIHsgcmV0
dXJuIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLnRpbWVTdGFtcCguLi5hcmd1bWVudHMp
OyB9KTsKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJTWV0aG9kKCJ0cmFjZSIsIGZ1
bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUudHJhY2UoLi4u
YXJndW1lbnRzKTsgfSk7CitpbmplY3RlZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgi
d2FybiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUu
d2FybiguLi5hcmd1bWVudHMpOyB9KTsKIAogcmV0dXJuIGluamVjdGVkU2NyaXB0OwogfSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNv
dXJjZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNv
dXJjZS5qcwppbmRleCBkNWY4NGVkNzQ4ZDYwZTI5ZjY3MWFmMjdhYTFiMjdiMmMxZjQ1ZDE5Li44
ZTU1YzZmYTc1NzRkMmY4NDE0NDg4NDllMjA3YzU1NjIyMDgxYmQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmpzCkBA
IC0yOCwxNDUgKzI4LDE0NCBAQAogCiAvLyMgc291cmNlVVJMPV9fSW5qZWN0ZWRTY3JpcHRfQ29t
bWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKIAotKGZ1bmN0aW9uIChJbmplY3RlZFNjcmlwdEhv
c3QsIGluc3BlY3RlZFdpbmRvdywgaW5qZWN0ZWRTY3JpcHRJZCwgaW5qZWN0ZWRTY3JpcHQsIFJl
bW90ZU9iamVjdCwgQ29tbWFuZExpbmVBUElIb3N0KSB7CisoZnVuY3Rpb24gKEluamVjdGVkU2Ny
aXB0SG9zdCwgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBpbmplY3RlZFNjcmlwdElkLCBpbmplY3Rl
ZFNjcmlwdCwgUmVtb3RlT2JqZWN0LCBDb21tYW5kTGluZUFQSUhvc3QpIHsKIAogLy8gRklYTUU6
IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNTIyOTQ+IFdlYiBJbnNwZWN0b3I6IFBhcnNlIEluamVj
dGVkU2NyaXB0U291cmNlIGFzIGEgYnVpbHQtaW4gdG8gZ2V0IGd1YXJhbnRlZWQgbm9uLXVzZXIt
b3ZlcnJpZGRlbiBidWlsdC1pbnMKIAotZnVuY3Rpb24gYmluZChmdW5jLCB0aGlzT2JqZWN0LCAu
Li5vdXRlckFyZ3MpCi17Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmlubmVyQXJncykgewotICAg
ICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzT2JqZWN0LCBvdXRlckFyZ3MuY29uY2F0KGlubmVy
QXJncykpOwotICAgIH07Ci19CitpbmplY3RlZFNjcmlwdC5faW5zcGVjdE9iamVjdCA9IGZ1bmN0
aW9uKG9iamVjdCkgeworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQorICAgICAgICBy
ZXR1cm47CiAKLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAcGFyYW0ge0NvbW1hbmRMaW5lQVBJ
SW1wbH0gY29tbWFuZExpbmVBUElJbXBsCi0gKiBAcGFyYW0ge09iamVjdH0gY2FsbEZyYW1lCi0g
Ki8KLWZ1bmN0aW9uIENvbW1hbmRMaW5lQVBJKGNvbW1hbmRMaW5lQVBJSW1wbCwgY2FsbEZyYW1l
KQotewotICAgIGxldCBzYXZlZFJlc3VsdEFsaWFzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LnNhdmVk
UmVzdWx0QWxpYXM7CisgICAgbGV0IG9iamVjdElkID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShvYmpl
Y3QsICIiKTsKKyAgICBsZXQgaGludHMgPSB7fTsKIAotICAgIGxldCBkZWZpbmVHZXR0ZXIgPSAo
a2V5LCB2YWx1ZSkgPT4gewotICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24i
KSB7Ci0gICAgICAgICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAg
dmFsdWUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG9yaWdpbmFsVmFsdWU7IH07Ci0gICAgICAgIH0K
LQotICAgICAgICB0aGlzLl9fZGVmaW5lR2V0dGVyX18oIiQiICsga2V5LCB2YWx1ZSk7Ci0gICAg
ICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQotICAgICAgICAgICAgdGhpcy5fX2RlZmluZUdldHRl
cl9fKHNhdmVkUmVzdWx0QWxpYXMgKyBrZXksIHZhbHVlKTsKLSAgICB9OwotCi0gICAgaWYgKCJf
bGFzdFJlc3VsdCIgaW4gaW5qZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiXyIs
IGluamVjdGVkU2NyaXB0Ll9sYXN0UmVzdWx0KTsKLQotICAgIGlmICgiX2V4Y2VwdGlvblZhbHVl
IiBpbiBpbmplY3RlZFNjcmlwdCkKLSAgICAgICAgZGVmaW5lR2V0dGVyKCJleGNlcHRpb24iLCBp
bmplY3RlZFNjcmlwdC5fZXhjZXB0aW9uVmFsdWUpOwotCi0gICAgaWYgKCJfZXZlbnRWYWx1ZSIg
aW4gaW5qZWN0ZWRTY3JpcHQpCi0gICAgICAgIGRlZmluZUdldHRlcigiZXZlbnQiLCBpbmplY3Rl
ZFNjcmlwdC5fZXZlbnRWYWx1ZSk7Ci0KLSAgICAvLyAkMAotICAgIGRlZmluZUdldHRlcigiMCIs
IGJpbmQoY29tbWFuZExpbmVBUElJbXBsLl9pbnNwZWN0ZWRPYmplY3QsIGNvbW1hbmRMaW5lQVBJ
SW1wbCkpOwotCi0gICAgLy8gJDEtJDk5Ci0gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gaW5qZWN0
ZWRTY3JpcHQuX3NhdmVkUmVzdWx0cy5sZW5ndGg7ICsraSkKLSAgICAgICAgZGVmaW5lR2V0dGVy
KGksIGJpbmQoaW5qZWN0ZWRTY3JpcHQuX3NhdmVkUmVzdWx0LCBpbmplY3RlZFNjcmlwdCwgaSkp
OwotCi0gICAgLy8gQ29tbWFuZCBMaW5lIEFQSSBtZXRob2RzLgotICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgQ29tbWFuZExpbmVBUEkubWV0aG9kcy5sZW5ndGg7ICsraSkgewotICAgICAgICBsZXQg
bWV0aG9kID0gQ29tbWFuZExpbmVBUEkubWV0aG9kc1tpXTsKLSAgICAgICAgdGhpc1ttZXRob2Rd
ID0gYmluZChjb21tYW5kTGluZUFQSUltcGxbbWV0aG9kXSwgY29tbWFuZExpbmVBUElJbXBsKTsK
LSAgICAgICAgdGhpc1ttZXRob2RdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiAiZnVu
Y3Rpb24gIiArIG1ldGhvZCArICIoKSB7IFtDb21tYW5kIExpbmUgQVBJXSB9IiB9OworICAgIHN3
aXRjaCAoUmVtb3RlT2JqZWN0LmRlc2NyaWJlKG9iamVjdCkpIHsKKyAgICBjYXNlICJEYXRhYmFz
ZSI6CisgICAgICAgIGxldCBkYXRhYmFzZUlkID0gQ29tbWFuZExpbmVBUElIb3N0LmRhdGFiYXNl
SWQob2JqZWN0KQorICAgICAgICBpZiAoZGF0YWJhc2VJZCkKKyAgICAgICAgICAgIGhpbnRzLmRh
dGFiYXNlSWQgPSBkYXRhYmFzZUlkOworICAgICAgICBicmVhazsKKyAgICBjYXNlICJTdG9yYWdl
IjoKKyAgICAgICAgbGV0IHN0b3JhZ2VJZCA9IENvbW1hbmRMaW5lQVBJSG9zdC5zdG9yYWdlSWQo
b2JqZWN0KQorICAgICAgICBpZiAoc3RvcmFnZUlkKQorICAgICAgICAgICAgaGludHMuZG9tU3Rv
cmFnZUlkID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHN0b3JhZ2VJZCArICIp
Iik7CisgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIENvbW1hbmRMaW5lQVBJSG9zdC5pbnNw
ZWN0KG9iamVjdElkLCBoaW50cyk7CisgICAgcmV0dXJuIG9iamVjdDsKK307CisKK2luamVjdGVk
U2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJR2V0dGVyKCIwIiwgZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIENvbW1hbmRMaW5lQVBJSG9zdC5pbnNwZWN0ZWRPYmplY3QoKTsKK30pOworCitpbmplY3Rl
ZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgiY29weSIsIGZ1bmN0aW9uKG9iamVjdCkg
eworICAgIGxldCBzdHJpbmcgPSBudWxsOworCisgICAgbGV0IHN1YnR5cGUgPSBSZW1vdGVPYmpl
Y3Quc3VidHlwZShvYmplY3QpOworICAgIGlmIChzdWJ0eXBlID09PSAibm9kZSIpCisgICAgICAg
IHN0cmluZyA9IG9iamVjdC5vdXRlckhUTUw7CisgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gInJl
Z2V4cCIpCisgICAgICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OworICAgIGVsc2UgaWYgKGluamVj
dGVkU2NyaXB0LmlzUHJpbWl0aXZlVmFsdWUob2JqZWN0KSkKKyAgICAgICAgc3RyaW5nID0gIiIg
KyBvYmplY3Q7CisgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gInN5bWJvbCIpCisgICAg
ICAgIHN0cmluZyA9IFN0cmluZyhvYmplY3QpOworICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3Qg
PT09ICJmdW5jdGlvbiIpCisgICAgICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OworICAgIGVsc2Ug
eworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob2Jq
ZWN0LCBudWxsLCAiICAiKTsKKyAgICAgICAgfSBjYXRjaCB7CisgICAgICAgICAgICBzdHJpbmcg
PSAiIiArIG9iamVjdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIENvbW1hbmRMaW5lQVBJSG9z
dC5jb3B5VGV4dChzdHJpbmcpOworfSk7CisKK2luamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5l
QVBJTWV0aG9kKCJnZXRFdmVudExpc3RlbmVycyIsIGZ1bmN0aW9uKHRhcmdldCkgeworICAgIHJl
dHVybiBDb21tYW5kTGluZUFQSUhvc3QuZ2V0RXZlbnRMaXN0ZW5lcnModGFyZ2V0KTsKK30pOwor
CitmdW5jdGlvbiBub3JtYWxpemVFdmVudFR5cGVzKHR5cGVzKSB7CisgICAgaWYgKHR5cGVzID09
PSB1bmRlZmluZWQpCisgICAgICAgIHR5cGVzID0gWyJtb3VzZSIsICJrZXkiLCAidG91Y2giLCAi
Y29udHJvbCIsICJhYm9ydCIsICJibHVyIiwgImNoYW5nZSIsICJkZXZpY2Vtb3Rpb24iLCAiZGV2
aWNlb3JpZW50YXRpb24iLCAiZXJyb3IiLCAiZm9jdXMiLCAibG9hZCIsICJyZXNldCIsICJyZXNp
emUiLCAic2Nyb2xsIiwgInNlYXJjaCIsICJzZWxlY3QiLCAic3VibWl0IiwgInVubG9hZCJdOwor
ICAgIGVsc2UgaWYgKHR5cGVvZiB0eXBlcyA9PT0gInN0cmluZyIpCisgICAgICAgIHR5cGVzID0g
W3R5cGVzXTsKKworICAgIGxldCByZXN1bHQgPSBbXTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IHR5cGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICh0eXBlc1tpXSA9PT0gIm1vdXNlIikK
KyAgICAgICAgICAgIHJlc3VsdC5wdXNoKCJjbGljayIsICJkYmxjbGljayIsICJtb3VzZWRvd24i
LCAibW91c2Vtb3ZlIiwgIm1vdXNlb3V0IiwgIm1vdXNlb3ZlciIsICJtb3VzZXVwIiwgIm1vdXNl
d2hlZWwiKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZXNbaV0gPT09ICJrZXkiKQorICAgICAgICAg
ICAgcmVzdWx0LnB1c2goImtleWRvd24iLCAia2V5cHJlc3MiLCAia2V5dXAiLCAidGV4dElucHV0
Iik7CisgICAgICAgIGVsc2UgaWYgKHR5cGVzW2ldID09PSAidG91Y2giKQorICAgICAgICAgICAg
cmVzdWx0LnB1c2goInRvdWNoY2FuY2VsIiwgInRvdWNoZW5kIiwgInRvdWNobW92ZSIsICJ0b3Vj
aHN0YXJ0Iik7CisgICAgICAgIGVsc2UgaWYgKHR5cGVzW2ldID09PSAiY29udHJvbCIpCisgICAg
ICAgICAgICByZXN1bHQucHVzaCgiYmx1ciIsICJjaGFuZ2UiLCAiZm9jdXMiLCAicmVzZXQiLCAi
cmVzaXplIiwgInNjcm9sbCIsICJzZWxlY3QiLCAic3VibWl0IiwgInpvb20iKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmVzdWx0LnB1c2godHlwZXNbaV0pOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCi0vKioKLSAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn0KLSAqIEBjb25z
dAotICovCi1Db21tYW5kTGluZUFQSS5tZXRob2RzID0gWwotICAgICIkIiwKLSAgICAiJCQiLAot
ICAgICIkeCIsCi0gICAgImNsZWFyIiwKLSAgICAiY29weSIsCi0gICAgImRpciIsCi0gICAgImRp
cnhtbCIsCi0gICAgImdldEV2ZW50TGlzdGVuZXJzIiwKLSAgICAiaW5zcGVjdCIsCi0gICAgImtl
eXMiLAotICAgICJtb25pdG9yRXZlbnRzIiwKLSAgICAicHJvZmlsZSIsCi0gICAgInByb2ZpbGVF
bmQiLAotICAgICJxdWVyeUluc3RhbmNlcyIsCi0gICAgInF1ZXJ5T2JqZWN0cyIsCi0gICAgInF1
ZXJ5SG9sZGVycyIsCi0gICAgInNjcmVlbnNob3QiLAotICAgICJ0YWJsZSIsCi0gICAgInVubW9u
aXRvckV2ZW50cyIsCi0gICAgInZhbHVlcyIsCi1dOwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICovCi1mdW5jdGlvbiBDb21tYW5kTGluZUFQSUltcGwoKQorZnVuY3Rpb24gbG9nRXZlbnQoZXZl
bnQpCiB7CisgICAgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUubG9nKGV2ZW50LnR5cGUs
IGV2ZW50KTsKIH0KIAotQ29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZSA9IHsKLSAgICAvKioK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IKLSAgICAgKiBAcGFyYW0ge05vZGU9fSBz
dGFydAotICAgICAqLwotICAgICQ6IGZ1bmN0aW9uIChzZWxlY3Rvciwgc3RhcnQpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fY2FuUXVlcnlTZWxlY3Rvck9uTm9kZShzdGFydCkpCitpbmplY3Rl
ZFNjcmlwdC5hZGRDb21tYW5kTGluZUFQSU1ldGhvZCgibW9uaXRvckV2ZW50cyIsIGZ1bmN0aW9u
KG9iamVjdCwgdHlwZXMpIHsKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LmFkZEV2ZW50TGlz
dGVuZXIgfHwgIW9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKQorICAgICAgICByZXR1cm47Cisg
ICAgdHlwZXMgPSBub3JtYWxpemVFdmVudFR5cGVzKHR5cGVzKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIG9iamVjdC5yZW1vdmVFdmVudExp
c3RlbmVyKHR5cGVzW2ldLCBsb2dFdmVudCwgZmFsc2UpOworICAgICAgICBvYmplY3QuYWRkRXZl
bnRMaXN0ZW5lcih0eXBlc1tpXSwgbG9nRXZlbnQsIGZhbHNlKTsKKyAgICB9Cit9KTsKKworaW5q
ZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElNZXRob2QoInVubW9uaXRvckV2ZW50cyIsIGZ1
bmN0aW9uKG9iamVjdCwgdHlwZXMpIHsKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LmFkZEV2
ZW50TGlzdGVuZXIgfHwgIW9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKQorICAgICAgICByZXR1
cm47CisgICAgdHlwZXMgPSBub3JtYWxpemVFdmVudFR5cGVzKHR5cGVzKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKQorICAgICAgICBvYmplY3QucmVtb3ZlRXZl
bnRMaXN0ZW5lcih0eXBlc1tpXSwgbG9nRXZlbnQsIGZhbHNlKTsKK30pOworCitpZiAoaW5zcGVj
dGVkR2xvYmFsT2JqZWN0LmRvY3VtZW50ICYmIGluc3BlY3RlZEdsb2JhbE9iamVjdC5Ob2RlKSB7
CisgICAgZnVuY3Rpb24gY2FuUXVlcnlTZWxlY3Rvck9uTm9kZShub2RlKSB7CisgICAgICAgIHJl
dHVybiBub2RlICYmIEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBlKG5vZGUpID09PSAibm9kZSIg
JiYgKG5vZGUubm9kZVR5cGUgPT09IGluc3BlY3RlZEdsb2JhbE9iamVjdC5Ob2RlLkVMRU1FTlRf
Tk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuTm9kZS5ET0NV
TUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IGluc3BlY3RlZEdsb2JhbE9iamVjdC5Ob2Rl
LkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpOworICAgIH0KKworICAgIGluamVjdGVkU2NyaXB0LmFk
ZENvbW1hbmRMaW5lQVBJTWV0aG9kKCIkIiwgZnVuY3Rpb24oc2VsZWN0b3IsIHN0YXJ0KSB7Cisg
ICAgICAgIGlmIChjYW5RdWVyeVNlbGVjdG9yT25Ob2RlKHN0YXJ0KSkKICAgICAgICAgICAgIHJl
dHVybiBzdGFydC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKIAotICAgICAgICB2YXIgcmVzdWx0
ID0gaW5zcGVjdGVkV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOworICAg
ICAgICBsZXQgcmVzdWx0ID0gaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3Ioc2VsZWN0b3IpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKwogICAgICAgICBpZiAoc2VsZWN0b3IgJiYgc2VsZWN0b3JbMF0gIT09ICIjIikg
ewotICAgICAgICAgICAgcmVzdWx0ID0gaW5zcGVjdGVkV2luZG93LmRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKHNlbGVjdG9yKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RlZEdsb2JhbE9i
amVjdC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rvcik7CiAgICAgICAgICAgICBpZiAo
cmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUud2Fybigi
VGhlIGNvbnNvbGUgZnVuY3Rpb24gJCgpIGhhcyBjaGFuZ2VkIGZyb20gJD1nZXRFbGVtZW50QnlJ
ZChpZCkgdG8gJD1xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKS4gWW91IG1pZ2h0IHRyeSAkKFwiIyVz
XCIpIiwgc2VsZWN0b3IpOworICAgICAgICAgICAgICAgIGluc3BlY3RlZEdsb2JhbE9iamVjdC5j
b25zb2xlLndhcm4oIlRoZSBjb25zb2xlIGZ1bmN0aW9uICQoKSBoYXMgY2hhbmdlZCBmcm9tICQ9
Z2V0RWxlbWVudEJ5SWQoaWQpIHRvICQ9cXVlcnlTZWxlY3RvcihzZWxlY3RvcikuIFlvdSBtaWdo
dCB0cnkgJChcIiMlc1wiKSIsIHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfSwKKyAgICB9KTsKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3Rv
cgotICAgICAqIEBwYXJhbSB7Tm9kZT19IHN0YXJ0Ci0gICAgICovCi0gICAgJCQ6IGZ1bmN0aW9u
IChzZWxlY3Rvciwgc3RhcnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY2FuUXVlcnlTZWxl
Y3Rvck9uTm9kZShzdGFydCkpCisgICAgaW5qZWN0ZWRTY3JpcHQuYWRkQ29tbWFuZExpbmVBUElN
ZXRob2QoIiQkIiwgZnVuY3Rpb24oc2VsZWN0b3IsIHN0YXJ0KSB7CisgICAgICAgIGlmIChjYW5R
dWVyeVNlbGVjdG9yT25Ob2RlKHN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9t
KHN0YXJ0LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTsKLSAgICAgICAgcmV0dXJuIEFycmF5
LmZyb20oaW5zcGVjdGVkV2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3Ip
KTsKLSAgICB9LAorICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpOworICAgIH0pOwogCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtOb2RlPX0gbm9kZQotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59
Ci0gICAgICovCi0gICAgX2NhblF1ZXJ5U2VsZWN0b3JPbk5vZGU6IGZ1bmN0aW9uKG5vZGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gISFub2RlICYmIEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBl
KG5vZGUpID09PSAibm9kZSIgJiYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RF
IHx8IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBl
ID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30geHBhdGgKLSAgICAgKiBAcGFyYW0ge05vZGU9fSBjb250ZXh0
Ci0gICAgICovCi0gICAgJHg6IGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KQotICAgIHsKLSAgICAg
ICAgdmFyIGRvYyA9IChjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCkgfHwgaW5zcGVj
dGVkV2luZG93LmRvY3VtZW50OworICAgIGluamVjdGVkU2NyaXB0LmFkZENvbW1hbmRMaW5lQVBJ
TWV0aG9kKCIkeCIsIGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KSB7CisgICAgICAgIGxldCBkb2Mg
PSAoY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQpIHx8IGluc3BlY3RlZEdsb2JhbE9i
amVjdC5kb2N1bWVudDsKICAgICAgICAgdmFyIHJlc3VsdCA9IGRvYy5ldmFsdWF0ZSh4cGF0aCwg
Y29udGV4dCB8fCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0LkFOWV9UWVBFLCBudWxsKTsKICAgICAg
ICAgc3dpdGNoIChyZXN1bHQucmVzdWx0VHlwZSkgewogICAgICAgICBjYXNlIFhQYXRoUmVzdWx0
Lk5VTUJFUl9UWVBFOgpAQCAtMTgyLDIxMyArMTgxLDcgQEAgQ29tbWFuZExpbmVBUElJbXBsLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOwogICAgICAgICAg
ICAgcmV0dXJuIG5vZGVzOwogICAgICAgICB9Ci0gICAgfSwKLQotICAgIGRpcjogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLmRpci5hcHBs
eShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJndW1lbnRzKQotICAgIH0sCi0KLSAgICBkaXJ4
bWw6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNwZWN0ZWRXaW5kb3cuY29u
c29sZS5kaXJ4bWwuYXBwbHkoaW5zcGVjdGVkV2luZG93LmNvbnNvbGUsIGFyZ3VtZW50cykKLSAg
ICB9LAotCi0gICAga2V5czogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IE9iamVjdC5rZXlzKG9iamVjdCk7Ci0gICAgfSwKLQotICAgIHZhbHVlczogZnVuY3Rpb24ob2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gb2JqZWN0KQotICAgICAgICAgICAgcmVzdWx0LnB1c2gob2JqZWN0W2tleV0pOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBwcm9maWxlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gaW5zcGVjdGVkV2luZG93LmNvbnNvbGUucHJvZmlsZS5hcHBs
eShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJndW1lbnRzKQotICAgIH0sCi0KLSAgICBwcm9m
aWxlRW5kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gaW5zcGVjdGVkV2luZG93
LmNvbnNvbGUucHJvZmlsZUVuZC5hcHBseShpbnNwZWN0ZWRXaW5kb3cuY29uc29sZSwgYXJndW1l
bnRzKQotICAgIH0sCi0KLSAgICB0YWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLnRhYmxlLmFwcGx5KGluc3BlY3RlZFdpbmRvdy5j
b25zb2xlLCBhcmd1bWVudHMpCi0gICAgfSwKLQotICAgIHNjcmVlbnNob3Q6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNwZWN0ZWRXaW5kb3cuY29uc29sZS5zY3JlZW5zaG90
LmFwcGx5KGluc3BlY3RlZFdpbmRvdy5jb25zb2xlLCBhcmd1bWVudHMpCi0gICAgfSwKLQotICAg
IC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKLSAgICAgKiBAcGFyYW0ge0FycmF5
LjxzdHJpbmc+fHN0cmluZz19IHR5cGVzCi0gICAgICovCi0gICAgbW9uaXRvckV2ZW50czogZnVu
Y3Rpb24ob2JqZWN0LCB0eXBlcykKLSAgICB7Ci0gICAgICAgIGlmICghb2JqZWN0IHx8ICFvYmpl
Y3QuYWRkRXZlbnRMaXN0ZW5lciB8fCAhb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHR5cGVzID0gdGhpcy5fbm9ybWFsaXplRXZlbnRUeXBl
cyh0eXBlcyk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIG9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVzW2ldLCB0aGlz
Ll9sb2dFdmVudCwgZmFsc2UpOwotICAgICAgICAgICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIo
dHlwZXNbaV0sIHRoaXMuX2xvZ0V2ZW50LCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAotICAgICAqIEBwYXJhbSB7QXJy
YXkuPHN0cmluZz58c3RyaW5nPX0gdHlwZXMKLSAgICAgKi8KLSAgICB1bm1vbml0b3JFdmVudHM6
IGZ1bmN0aW9uKG9iamVjdCwgdHlwZXMpCi0gICAgewotICAgICAgICBpZiAoIW9iamVjdCB8fCAh
b2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIgfHwgIW9iamVjdC5yZW1vdmVFdmVudExpc3RlbmVyKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0eXBlcyA9IHRoaXMuX25vcm1hbGl6ZUV2ZW50
VHlwZXModHlwZXMpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsg
KytpKQotICAgICAgICAgICAgb2JqZWN0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZXNbaV0sIHRo
aXMuX2xvZ0V2ZW50LCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
Kn0gb2JqZWN0Ci0gICAgICogQHJldHVybiB7Kn0KLSAgICAgKi8KLSAgICBpbnNwZWN0OiBmdW5j
dGlvbihvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faW5zcGVjdChvYmplY3Qp
OwotICAgIH0sCi0KLSAgICBxdWVyeUluc3RhbmNlcygpCi0gICAgewotICAgICAgICByZXR1cm4g
SW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5SW5zdGFuY2VzKC4uLmFyZ3VtZW50cyk7Ci0gICAgfSwK
LQotICAgIHF1ZXJ5T2JqZWN0cygpCi0gICAgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3Jp
cHRIb3N0LnF1ZXJ5SW5zdGFuY2VzKC4uLmFyZ3VtZW50cyk7Ci0gICAgfSwKLQotICAgIHF1ZXJ5
SG9sZGVycygpCi0gICAgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LnF1ZXJ5
SG9sZGVycyguLi5hcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICBjb3B5OiBmdW5jdGlvbihvYmpl
Y3QpCi0gICAgewotICAgICAgICB2YXIgc3RyaW5nOwotICAgICAgICB2YXIgc3VidHlwZSA9IFJl
bW90ZU9iamVjdC5zdWJ0eXBlKG9iamVjdCk7Ci0gICAgICAgIGlmIChzdWJ0eXBlID09PSAibm9k
ZSIpCi0gICAgICAgICAgICBzdHJpbmcgPSBvYmplY3Qub3V0ZXJIVE1MOwotICAgICAgICBlbHNl
IGlmIChzdWJ0eXBlID09PSAicmVnZXhwIikKLSAgICAgICAgICAgIHN0cmluZyA9ICIiICsgb2Jq
ZWN0OwotICAgICAgICBlbHNlIGlmIChpbmplY3RlZFNjcmlwdC5pc1ByaW1pdGl2ZVZhbHVlKG9i
amVjdCkpCi0gICAgICAgICAgICBzdHJpbmcgPSAiIiArIG9iamVjdDsKLSAgICAgICAgZWxzZSBp
ZiAodHlwZW9mIG9iamVjdCA9PT0gInN5bWJvbCIpCi0gICAgICAgICAgICBzdHJpbmcgPSBTdHJp
bmcob2JqZWN0KTsKLSAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gImZ1bmN0aW9u
IikKLSAgICAgICAgICAgIHN0cmluZyA9ICIiICsgb2JqZWN0OwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3RyaW5nID0gSlNPTi5zdHJpbmdpZnko
b2JqZWN0LCBudWxsLCAiICAiKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAg
ICAgICAgICBzdHJpbmcgPSAiIiArIG9iamVjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIENvbW1hbmRMaW5lQVBJSG9zdC5jb3B5VGV4dChzdHJpbmcpOwotICAgIH0sCi0K
LSAgICBjbGVhcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQ29tbWFuZExpbmVBUElIb3N0
LmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7Ci0gICAgfSwKLQotICAgIGdldEV2ZW50TGlzdGVuZXJz
OiBmdW5jdGlvbih0YXJnZXQpCi0gICAgewotICAgICAgICByZXR1cm4gQ29tbWFuZExpbmVBUElI
b3N0LmdldEV2ZW50TGlzdGVuZXJzKHRhcmdldCk7Ci0gICAgfSwKLQotICAgIF9pbnNwZWN0ZWRP
YmplY3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb21tYW5kTGluZUFQSUhv
c3QuaW5zcGVjdGVkT2JqZWN0KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
QXJyYXkuPHN0cmluZz58c3RyaW5nPX0gdHlwZXMKLSAgICAgKiBAcmV0dXJuIHtBcnJheS48c3Ry
aW5nPn0KLSAgICAgKi8KLSAgICBfbm9ybWFsaXplRXZlbnRUeXBlczogZnVuY3Rpb24odHlwZXMp
Ci0gICAgewotICAgICAgICBpZiAodHlwZW9mIHR5cGVzID09PSAidW5kZWZpbmVkIikKLSAgICAg
ICAgICAgIHR5cGVzID0gWyAibW91c2UiLCAia2V5IiwgInRvdWNoIiwgImNvbnRyb2wiLCAibG9h
ZCIsICJ1bmxvYWQiLCAiYWJvcnQiLCAiZXJyb3IiLCAic2VsZWN0IiwgImNoYW5nZSIsICJzdWJt
aXQiLCAicmVzZXQiLCAiZm9jdXMiLCAiYmx1ciIsICJyZXNpemUiLCAic2Nyb2xsIiwgInNlYXJj
aCIsICJkZXZpY2Vtb3Rpb24iLCAiZGV2aWNlb3JpZW50YXRpb24iIF07Ci0gICAgICAgIGVsc2Ug
aWYgKHR5cGVvZiB0eXBlcyA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0eXBlcyA9IFsgdHlw
ZXMgXTsKLQotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmICh0eXBlc1tpXSA9PT0g
Im1vdXNlIikKLSAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKDAsIDAsICJtb3VzZWRvd24i
LCAibW91c2V1cCIsICJjbGljayIsICJkYmxjbGljayIsICJtb3VzZW1vdmUiLCAibW91c2VvdmVy
IiwgIm1vdXNlb3V0IiwgIm1vdXNld2hlZWwiKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVz
W2ldID09PSAia2V5IikKLSAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKDAsIDAsICJrZXlk
b3duIiwgImtleXVwIiwgImtleXByZXNzIiwgInRleHRJbnB1dCIpOwotICAgICAgICAgICAgZWxz
ZSBpZiAodHlwZXNbaV0gPT09ICJ0b3VjaCIpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnNwbGlj
ZSgwLCAwLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5j
ZWwiKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVzW2ldID09PSAiY29udHJvbCIpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LnNwbGljZSgwLCAwLCAicmVzaXplIiwgInNjcm9sbCIsICJ6b29t
IiwgImZvY3VzIiwgImJsdXIiLCAic2VsZWN0IiwgImNoYW5nZSIsICJzdWJtaXQiLCAicmVzZXQi
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0eXBlc1tp
XSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgKi8KLSAgICBfbG9nRXZlbnQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUubG9n
KGV2ZW50LnR5cGUsIGV2ZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHsq
fSBvYmplY3QKLSAgICAgKiBAcmV0dXJuIHsqfQotICAgICAqLwotICAgIF9pbnNwZWN0OiBmdW5j
dGlvbihvYmplY3QpCi0gICAgewotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgb2JqZWN0SWQgPSBSZW1vdGVPYmpl
Y3QuY3JlYXRlKG9iamVjdCwgIiIpOwotICAgICAgICB2YXIgaGludHMgPSB7fTsKLQotICAgICAg
ICBzd2l0Y2ggKFJlbW90ZU9iamVjdC5kZXNjcmliZShvYmplY3QpKSB7Ci0gICAgICAgIGNhc2Ug
IkRhdGFiYXNlIjoKLSAgICAgICAgICAgIHZhciBkYXRhYmFzZUlkID0gQ29tbWFuZExpbmVBUElI
b3N0LmRhdGFiYXNlSWQob2JqZWN0KQotICAgICAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAg
ICAgICAgICAgICAgaGludHMuZGF0YWJhc2VJZCA9IGRhdGFiYXNlSWQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSAiU3RvcmFnZSI6Ci0gICAgICAgICAgICB2YXIgc3RvcmFnZUlk
ID0gQ29tbWFuZExpbmVBUElIb3N0LnN0b3JhZ2VJZChvYmplY3QpCi0gICAgICAgICAgICBpZiAo
c3RvcmFnZUlkKQotICAgICAgICAgICAgICAgIGhpbnRzLmRvbVN0b3JhZ2VJZCA9IEluamVjdGVk
U2NyaXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBzdG9yYWdlSWQgKyAiKSIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBDb21tYW5kTGluZUFQSUhvc3QuaW5zcGVjdChv
YmplY3RJZCwgaGludHMpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KKyAgICB9KTsK
IH0KIAotaW5qZWN0ZWRTY3JpcHQuQ29tbWFuZExpbmVBUEkgPSBDb21tYW5kTGluZUFQSTsKLWlu
amVjdGVkU2NyaXB0Ll9jb21tYW5kTGluZUFQSUltcGwgPSBuZXcgQ29tbWFuZExpbmVBUElJbXBs
KCk7Ci0KLS8vIFRoaXMgTW9kdWxlIGRvZXNuJ3QgZXhwb3NlIGFuIG9iamVjdCwgaXQganVzdCBh
ZGRzIGFuIGV4dGVuc2lvbiB0aGF0IEluamVjdGVkU2NyaXB0IHVzZXMuCi0vLyBIb3dldmVyLCB3
ZSByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LCBzbyB0aGF0IEluamVjdGVkU2NyaXB0IGtub3dzIHRo
aXMgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZC4KLXJldHVybiB7fTsKLQogfSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3Jp
cHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlk
ZXIuanMKaW5kZXggYTQ3ZTdkYTIxYWIyZDk1YTgzYjlmNWFiMTJjN2ZkN2JjYTkwNmUyOC4uZDEy
ZDQyYjM2MGUxZTVhOGQzMjE4MWUwNDIyYjI2NjQ5Yjk1NjBlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1bnRp
bWVDb21wbGV0aW9uUHJvdmlkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIu
anMKQEAgLTQ0LDYgKzQ0LDUwIEBAIFdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3Zp
ZGVyID0gY2xhc3MgSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkCiAgICAgICAgIFdJ
LmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX2NsZWFyTGFzdFByb3BlcnRpZXMsIHRo
aXMpOwogICAgIH0KIAorICAgIC8vIFN0YXRpYworCisgICAgc3RhdGljIGdldCBfY29tbWFuZExp
bmVBUElLZXlzKCkKKyAgICB7CisgICAgICAgIGlmICghSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0
aW9uUHJvdmlkZXIuX19jYWNoZWRDb21tYW5kTGluZUFQSUtleXMpIHsKKyAgICAgICAgICAgIEph
dmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLl9fY2FjaGVkQ29tbWFuZExpbmVBUElL
ZXlzID0gWworICAgICAgICAgICAgICAgICIkXyIsCisgICAgICAgICAgICAgICAgImFzc2VydCIs
CisgICAgICAgICAgICAgICAgImNsZWFyIiwKKyAgICAgICAgICAgICAgICAiY291bnQiLAorICAg
ICAgICAgICAgICAgICJjb3VudFJlc2V0IiwKKyAgICAgICAgICAgICAgICAiZGVidWciLAorICAg
ICAgICAgICAgICAgICJkaXIiLAorICAgICAgICAgICAgICAgICJkaXJ4bWwiLAorICAgICAgICAg
ICAgICAgICJlcnJvciIsCisgICAgICAgICAgICAgICAgImdyb3VwIiwKKyAgICAgICAgICAgICAg
ICAiZ3JvdXBDb2xsYXBzZWQiLAorICAgICAgICAgICAgICAgICJncm91cEVuZCIsCisgICAgICAg
ICAgICAgICAgImluZm8iLAorICAgICAgICAgICAgICAgICJpbnNwZWN0IiwKKyAgICAgICAgICAg
ICAgICAia2V5cyIsCisgICAgICAgICAgICAgICAgImxvZyIsCisgICAgICAgICAgICAgICAgInBy
b2ZpbGUiLAorICAgICAgICAgICAgICAgICJwcm9maWxlRW5kIiwKKyAgICAgICAgICAgICAgICAi
cXVlcnlIb2xkZXJzIiwKKyAgICAgICAgICAgICAgICAicXVlcnlJbnN0YW5jZXMiLAorICAgICAg
ICAgICAgICAgICJxdWVyeU9iamVjdHMiLAorICAgICAgICAgICAgICAgICJyZWNvcmQiLAorICAg
ICAgICAgICAgICAgICJyZWNvcmRFbmQiLAorICAgICAgICAgICAgICAgICJzY3JlZW5zaG90IiwK
KyAgICAgICAgICAgICAgICAidGFibGUiLAorICAgICAgICAgICAgICAgICJ0YWtlSGVhcFNuYXBz
aG90IiwKKyAgICAgICAgICAgICAgICAidGltZSIsCisgICAgICAgICAgICAgICAgInRpbWVFbmQi
LAorICAgICAgICAgICAgICAgICJ0aW1lTG9nIiwKKyAgICAgICAgICAgICAgICAidGltZVN0YW1w
IiwKKyAgICAgICAgICAgICAgICAidHJhY2UiLAorICAgICAgICAgICAgICAgICJ2YWx1ZXMiLAor
ICAgICAgICAgICAgICAgICJ3YXJuIiwKKyAgICAgICAgICAgIF07CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLl9fY2FjaGVkQ29t
bWFuZExpbmVBUElLZXlzOworICAgIH0KKwogICAgIC8vIFByb3RlY3RlZAogCiAgICAgY29tcGxl
dGlvbkNvbnRyb2xsZXJDb21wbGV0aW9uc05lZWRlZChjb21wbGV0aW9uQ29udHJvbGxlciwgZGVm
YXVsdENvbXBsZXRpb25zLCBiYXNlLCBwcmVmaXgsIHN1ZmZpeCwgZm9yY2VkKQpAQCAtMTEzLDcg
KzE1Nyw3IEBAIFdJLkphdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyID0gY2xhc3Mg
SmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkCiAgICAgICAgICAgICAgICAgY2xlYXJU
aW1lb3V0KHRoaXMuX2NsZWFyTGFzdFByb3BlcnRpZXNUaW1lb3V0KTsKICAgICAgICAgICAgIHRo
aXMuX2NsZWFyTGFzdFByb3BlcnRpZXNUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLl9jbGVhckxh
c3RQcm9wZXJ0aWVzLmJpbmQodGhpcyksIFdJLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5D
YWNoZWRQcm9wZXJ0aWVzRHVyYXRpb24pOwogCi0gICAgICAgICAgICB0aGlzLl9sYXN0UHJvcGVy
dHlOYW1lcyA9IHByb3BlcnR5TmFtZXMgfHwge307CisgICAgICAgICAgICB0aGlzLl9sYXN0UHJv
cGVydHlOYW1lcyA9IHByb3BlcnR5TmFtZXMgfHwgW107CiAgICAgICAgIH0KIAogICAgICAgICBm
dW5jdGlvbiBldmFsdWF0ZWQocmVzdWx0LCB3YXNUaHJvd24pCkBAIC0yMTEsNDEgKzI1NSw2MCBA
QCBXSS5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciA9IGNsYXNzIEphdmFTY3Jp
cHRSdW50aW1lQ29tcGxldGlvblByb3ZpZAogCiAgICAgICAgIGZ1bmN0aW9uIHJlY2VpdmVkUHJv
cGVydHlOYW1lcyhwcm9wZXJ0eU5hbWVzKQogICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzID0gcHJvcGVydHlOYW1lcyB8fCB7fTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMg
PSBwcm9wZXJ0eU5hbWVzID8gT2JqZWN0LmtleXMocHJvcGVydHlOYW1lcykgOiBbXTsKIAogICAg
ICAgICAgICAgdXBkYXRlTGFzdFByb3BlcnR5TmFtZXMuY2FsbCh0aGlzLCBwcm9wZXJ0eU5hbWVz
KTsKIAogICAgICAgICAgICAgV0kucnVudGltZU1hbmFnZXIuYWN0aXZlRXhlY3V0aW9uQ29udGV4
dC50YXJnZXQuUnVudGltZUFnZW50LnJlbGVhc2VPYmplY3RHcm91cCgiY29tcGxldGlvbiIpOwog
CiAgICAgICAgICAgICBpZiAoIWJhc2UpIHsKLSAgICAgICAgICAgICAgICBsZXQgY29tbWFuZExp
bmVBUEkgPSBXSS5KYXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5fY29tbWFuZExp
bmVBUEkuc2xpY2UoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKFdJLmRlYnVnZ2VyTWFuYWdlci5w
YXVzZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldERhdGEgPSBXSS5kZWJ1Z2dl
ck1hbmFnZXIuZGF0YUZvclRhcmdldChXSS5ydW50aW1lTWFuYWdlci5hY3RpdmVFeGVjdXRpb25D
b250ZXh0LnRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRhLnBhdXNl
UmVhc29uID09PSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uTGlzdGVuZXIgfHwgdGFy
Z2V0RGF0YS5wYXVzZVJlYXNvbiA9PT0gV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkV2
ZW50TGlzdGVuZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kTGluZUFQSS5wdXNo
KCIkZXZlbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0RGF0YS5wYXVz
ZVJlYXNvbiA9PT0gV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkV4Y2VwdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lQVBJLnB1c2goIiRleGNlcHRpb24iKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChsZXQgbmFtZSBvZiBjb21t
YW5kTGluZUFQSSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lc1tuYW1lXSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKC4uLkphdmFTY3JpcHRSdW50
aW1lQ29tcGxldGlvblByb3ZpZGVyLl9jb21tYW5kTGluZUFQSUtleXMpOwogCiAgICAgICAgICAg
ICAgICAgbGV0IHNhdmVkUmVzdWx0QWxpYXMgPSBXSS5zZXR0aW5ncy5jb25zb2xlU2F2ZWRSZXN1
bHRBbGlhcy52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlhcykgewot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzW3NhdmVkUmVzdWx0QWxpYXMgKyAiMCJd
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lc1tzYXZlZFJlc3VsdEFs
aWFzICsgIl8iXSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMp
CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChzYXZlZFJlc3VsdEFsaWFz
ICsgIl8iKTsKKworICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBXSS5ydW50aW1lTWFuYWdl
ci5hY3RpdmVFeGVjdXRpb25Db250ZXh0LnRhcmdldDsKKworICAgICAgICAgICAgICAgIGlmIChX
SS5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKSB7CisgICAgICAgICAgICAgICAgICAgIGxldCB0YXJn
ZXREYXRhID0gV0kuZGVidWdnZXJNYW5hZ2VyLmRhdGFGb3JUYXJnZXQodGFyZ2V0KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGEucGF1c2VSZWFzb24gPT09IFdJLkRlYnVnZ2Vy
TWFuYWdlci5QYXVzZVJlYXNvbi5MaXN0ZW5lciB8fCB0YXJnZXREYXRhLnBhdXNlUmVhc29uID09
PSBXSS5EZWJ1Z2dlck1hbmFnZXIuUGF1c2VSZWFzb24uRXZlbnRMaXN0ZW5lcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCIkZXZlbnQiKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzYXZlZFJlc3VsdEFsaWFzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaChzYXZlZFJlc3VsdEFsaWFzICsgImV2ZW50Iik7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0RGF0YS5wYXVzZVJlYXNvbiA9
PT0gV0kuRGVidWdnZXJNYW5hZ2VyLlBhdXNlUmVhc29uLkV4Y2VwdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5wdXNoKCIkZXhjZXB0aW9uIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc2F2ZWRSZXN1bHRBbGlhcykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goc2F2ZWRSZXN1bHRBbGlhcyArICJleGNlcHRp
b24iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0LnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdJ
LlRhcmdldC5UeXBlLlBhZ2U6CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVz
aCgiJCIpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goIiQkIik7Cisg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJDAiKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxpYXMpCisgICAgICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLnB1c2goc2F2ZWRSZXN1bHRBbGlhcyArICIwIik7CisgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiJHgiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
ZmFsbHRocm91Z2gKKyAgICAgICAgICAgICAgICBjYXNlIFdJLlRhcmdldC5UeXBlLlNlcnZpY2VX
b3JrZXI6CisgICAgICAgICAgICAgICAgY2FzZSBXSS5UYXJnZXQuVHlwZS5Xb3JrZXI6CisgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgiY29weSIpOworICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goImdldEV2ZW50TGlzdGVuZXJzIik7CisgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMucHVzaCgibW9uaXRvckV2ZW50cyIpOworICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1c2goInVubW9uaXRvckV2ZW50cyIpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogRHVlIHRvIGNhY2hpbmcsIHNvbWV0aW1lcyBvbGQgJG4gdmFsdWVzIHNo
b3cgdXAgYXMgY29tcGxldGlvbiByZXN1bHRzIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCBhdmFp
bGFibGUuIFdlIHNob3VsZCBjbGVhciB0aGF0IHByb2FjdGl2ZWx5LgogICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAxOyBpIDw9IFdJLkNvbnNvbGVDb21tYW5kUmVzdWx0TWVzc2FnZS5tYXhp
bXVtU2F2ZWRSZXN1bHRJbmRleDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXNbIiQiICsgaV0gPSB0cnVlOwotCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMucHVzaCgiJCIgKyBpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNhdmVkUmVzdWx0QWxp
YXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzW3NhdmVkUmVzdWx0QWxp
YXMgKyBpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLnB1
c2goc2F2ZWRSZXN1bHRBbGlhcyArIGkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TmFt
ZXMpOwotCiAgICAgICAgICAgICB2YXIgaW1wbGljaXRTdWZmaXggPSAiIjsKICAgICAgICAgICAg
IGlmIChicmFja2V0Tm90YXRpb24pIHsKICAgICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0g
cHJlZml4WzBdID09PSAiJyIgPyAiJyIgOiAiXCIiOwpAQCAtMzEzLDI4ICszNzYsMyBAQCBXSS5K
YXZhU2NyaXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlciA9IGNsYXNzIEphdmFTY3JpcHRSdW50
aW1lQ29tcGxldGlvblByb3ZpZAogICAgICAgICB0aGlzLl9sYXN0UHJvcGVydHlOYW1lcyA9IG51
bGw7CiAgICAgfQogfTsKLQotV0kuSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIu
X2NvbW1hbmRMaW5lQVBJID0gWwotICAgICIkIiwKLSAgICAiJCQiLAotICAgICIkMCIsCi0gICAg
IiRfIiwKLSAgICAiJHgiLAotICAgICJjbGVhciIsCi0gICAgImNvcHkiLAotICAgICJkaXIiLAot
ICAgICJkaXJ4bWwiLAotICAgICJnZXRFdmVudExpc3RlbmVycyIsCi0gICAgImluc3BlY3QiLAot
ICAgICJrZXlzIiwKLSAgICAibW9uaXRvckV2ZW50cyIsCi0gICAgInByb2ZpbGUiLAotICAgICJw
cm9maWxlRW5kIiwKLSAgICAicXVlcnlIb2xkZXJzIiwKLSAgICAicXVlcnlJbnN0YW5jZXMiLAot
ICAgICJxdWVyeU9iamVjdHMiLAotICAgICJzY3JlZW5zaG90IiwKLSAgICAidGFibGUiLAotICAg
ICJ1bm1vbml0b3JFdmVudHMiLAotICAgICJ2YWx1ZXMiLAotXTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzYTI2MjZmZjMy
OTRhNTUzOGZjMDAxYzdhMjMwNjkzNjc0MTM5NDgwLi4wNTY0NmI5MDc4OTg0ZDkzNDMzNWEzY2Y5
ZmM0OTc4YjgwYTNkOTk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMDgtMjMgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNy
ZWF0ZSBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBhcGkgZnVuY3Rpb25zIGZvciBvdGhlciBjb25z
b2xlIG1ldGhvZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDk3MQorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAg
ICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9jcm9zcy1kb21haW4taW5zcGVjdGVkLW5v
ZGUtYWNjZXNzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY29uc29sZS9jb21t
YW5kLWxpbmUtYXBpLWV4cGVjdGVkLnR4dDoKKwogMjAxOS0wOC0yMyAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBbV2ViS2l0Ml0gVGFwcGlu
ZyBvbiB0aGUg4oCcSeKAmW3igJ0gdGV4dCBzdWdnZXN0aW9uIGFmdGVyIHR5cGluZyDigJxp4oCZ
4oCdIGRvZXMgbm90aGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvZG9tL2Nyb3NzLWRvbWFpbi1pbnNwZWN0ZWQtbm9kZS1hY2Nlc3MtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZG9tL2Nyb3NzLWRvbWFpbi1pbnNw
ZWN0ZWQtbm9kZS1hY2Nlc3MtZXhwZWN0ZWQudHh0CmluZGV4IDJiZDg2YjBjOGMyZmRmZTdjNzhh
ZGM3OWE2OTRiNThkODJlOTIzOGIuLjViMDhiNDFjZWNhMzdmY2E4ZTJhYzUwNzEyMGY3YWUxNWJj
ZGNjNWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RvbS9j
cm9zcy1kb21haW4taW5zcGVjdGVkLW5vZGUtYWNjZXNzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kb20vY3Jvc3MtZG9tYWluLWluc3BlY3RlZC1u
b2RlLWFjY2Vzcy1leHBlY3RlZC50eHQKQEAgLTEsNSArMSw1IEBACi1DT05TT0xFIE1FU1NBR0U6
IGxpbmUgNTE6IEJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTo4
MDAwIiBmcm9tIGFjY2Vzc2luZyBhIGZyYW1lIHdpdGggb3JpZ2luICJodHRwOi8vbG9jYWxob3N0
OjgwMDAiLiBQcm90b2NvbHMsIGRvbWFpbnMsIGFuZCBwb3J0cyBtdXN0IG1hdGNoLgotQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDUxOiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4gImh0dHA6Ly9s
b2NhbGhvc3Q6ODAwMCIgZnJvbSBhY2Nlc3NpbmcgYSBmcmFtZSB3aXRoIG9yaWdpbiAiaHR0cDov
LzEyNy4wLjAuMTo4MDAwIi4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMgbXVzdCBtYXRj
aC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA4OiBCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW4g
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIgZnJvbSBhY2Nlc3NpbmcgYSBmcmFtZSB3aXRoIG9yaWdp
biAiaHR0cDovL2xvY2FsaG9zdDo4MDAwIi4gUHJvdG9jb2xzLCBkb21haW5zLCBhbmQgcG9ydHMg
bXVzdCBtYXRjaC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA4OiBCbG9ja2VkIGEgZnJhbWUgd2l0
aCBvcmlnaW4gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIgZnJvbSBhY2Nlc3NpbmcgYSBmcmFtZSB3
aXRoIG9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIi4gUHJvdG9jb2xzLCBkb21haW5zLCBh
bmQgcG9ydHMgbXVzdCBtYXRjaC4KIFRlc3QgdGhhdCBjb2RlIGV2YWx1YXRlZCBpbiB0aGUgbWFp
biBmcmFtZSBjYW5ub3QgYWNjZXNzICQwIHRoYXQgcmVzb2x2ZXMgdG8gYSBub2RlIGluIGEgZnJh
bWUgZnJvbSBhIGRpZmZlcmVudCBkb21haW4uIEJ1ZyAxMDU0MjMuCiAKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29tbWFuZC1saW5lLWFwaS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLWV4cGVj
dGVkLnR4dAppbmRleCA0M2UwZGVhMzk3NjI5ZWQ2ZTM0NWY5NDg0MTY2NTRhMjUwZTQ3ZmRiLi42
Y2Y2OGI4NzlkYWY1MTUxNDYxMTMzOWRiZjViZWI1ZDMxN2JjMDY3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS9jb21tYW5kLWxpbmUtYXBpLWV4cGVj
dGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxNzogVGhlIGNv
bnNvbGUgZnVuY3Rpb24gJCgpIGhhcyBjaGFuZ2VkIGZyb20gJD1nZXRFbGVtZW50QnlJZChpZCkg
dG8gJD1xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKS4gWW91IG1pZ2h0IHRyeSAkKCIjJXMiKQorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDMxOiBUaGUgY29uc29sZSBmdW5jdGlvbiAkKCkgaGFzIGNoYW5n
ZWQgZnJvbSAkPWdldEVsZW1lbnRCeUlkKGlkKSB0byAkPXF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3Ip
LiBZb3UgbWlnaHQgdHJ5ICQoIiMlcyIpCiBUZXN0cyB0aGF0IGNvbW1hbmQgbGluZSBhcGkgd29y
a3MuCiAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>