<?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>135830</bug_id>
          
          <creation_ts>2014-08-11 22:54:25 -0700</creation_ts>
          <short_desc>Promise reactions in the Inspector page do not run when the debugger is paused on the inspected page</short_desc>
          <delta_ts>2016-02-06 06:28:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>135120</dependson>
          <blocked>135513</blocked>
    
    <blocked>135663</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>bburg</cc>
    
    <cc>chris.vno</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1028428</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-11 22:54:25 -0700</bug_when>
    <thetext>We are starting to use promises more in the inspector, so this is a fairly big problem.

I was under the impression that promise microtasks eventually run as a JSGlobalObjectTask through ScriptExecutionContext::postTask, so it&apos;s interesting that the inspector&apos;s Promises don&apos;t react when the debugger is paused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029664</commentid>
    <comment_count>1</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-17 11:13:47 -0700</bug_when>
    <thetext>Diagnosis;

Promise reactions create JSGlobalObjectTasks to run reactions, which are enqueued via Document::postTask. This in turn uses callOnMainThread() to get onto the main thread. Unfortunately, callOnMainThread uses a single global variable (&apos;callbacksPaused&apos;) to pause callbacks while the debugger is paused. So, the second-level debugger&apos;s tasks will not get called on the main thread until the nested event loop shuts down and the debugger unpauses callbacks on the main thread (called from PageScriptDebugServer::setJavaScriptPaused).

Potential fixes;

1. Make the inspector multi-process, so we can use global variables this way.

2. Segregate main thread callbacks by PageGroup (unit of JavaScript being paused). This would be unpleasant, and change how tasks from different pages are interleaved unless we use a round-robin approach or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029967</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-18 23:52:51 -0700</bug_when>
    <thetext>Moving the Inspector out-of-process is a task I am looking at this week. However, it will still be in-process for WebKit1 apps. So we likely need to fix this in WebCore too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030116</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-08-19 14:48:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Moving the Inspector out-of-process is a task I am looking at this week. However, it will still be in-process for WebKit1 apps. So we likely need to fix this in WebCore too.

Out of curiosity, why keep it in-process for WebKit1 apps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030136</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-19 16:00:04 -0700</bug_when>
    <thetext>We might be able to get it working out-of-process with WebKit1 too. I am focusing on a WK2 solution at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032017</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-28 09:54:12 -0700</bug_when>
    <thetext>To fix this in WebCore we would need a per-Page function queue, mutex, and have multiple callers to scheduleDispatchOnMainThread. I don&apos;t know that code well enough to tell if this is easy or hard (due to some subtle invariants). There are a lot of uses of callOnMainThread throughout WebCore and many of those don&apos;t have a Page context, so only some of the callbacks would be tied to a Page. So we might have to think carefully about what other parts of the code should/should not be suspended.

I wrote a quick workaround which defines WebInspector.Promise = RSVP.Promise, and uses WebInspector.Promise everywhere. RSVP (https://github.com/tildeio/rsvp.js) is an MIT-licensed promise library in JS. It should be easy to remove this workaround after we land a fix in WebCore or make progress towards multi-process Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032018</commentid>
    <comment_count>6</comment_count>
      <attachid>237316</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-28 10:05:53 -0700</bug_when>
    <thetext>Created attachment 237316
Proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032024</commentid>
    <comment_count>7</comment_count>
      <attachid>237317</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-28 10:25:19 -0700</bug_when>
    <thetext>Created attachment 237317
Proposed fix (rebased)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032029</commentid>
    <comment_count>8</comment_count>
      <attachid>237317</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-28 10:40:21 -0700</bug_when>
    <thetext>Comment on attachment 237317
Proposed fix (rebased)

If we go forward with the workaround patch, then the patch also needs to add some lines to copy-user-interface-resources.pl for copying the LICENSE file appropriately and minifying the script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032039</commentid>
    <comment_count>9</comment_count>
      <attachid>237317</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-28 11:42:54 -0700</bug_when>
    <thetext>Comment on attachment 237317
Proposed fix (rebased)

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

&gt; Source/WebInspectorUI/UserInterface/External/RSVP/LICENSE:1
&gt; +Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors

I&apos;ll file an internal OSS request for RSVP.

&gt; Source/WebInspectorUI/UserInterface/Main.html:145
&gt; +    &lt;script src=&quot;External/RSVP/rsvp.js&quot;&gt;&lt;/script&gt;

copy-user-interface-resources.pl needs modified to do the right thing when resources are combined. You can copy how Esprima.js is handled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032045</commentid>
    <comment_count>10</comment_count>
      <attachid>237321</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-28 12:13:35 -0700</bug_when>
    <thetext>Created attachment 237321
Proposed fix (with minification)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037054</commentid>
    <comment_count>11</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-09-24 15:51:38 -0700</bug_when>
    <thetext>This has been made unnecessary by the fix to https://bugs.webkit.org/show_bug.cgi?id=135120</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125616</commentid>
    <comment_count>12</comment_count>
      <attachid>237321</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-09-14 10:48:10 -0700</bug_when>
    <thetext>Comment on attachment 237321
Proposed fix (with minification)

Cleared review? from attachment 237321 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154084</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-08 17:59:17 -0800</bug_when>
    <thetext>Hi,

This bug was pointed to me by pecoraro@apple.com when i complained about the following behavior:

Here are the simple steps to reproduce it,
1.       Launch WinCairo and go to google.com
2.       Open Web inspector and open the script source of any .js script
3.       Set a breakpoint anywhere
4.       Reload the web page
 
What we see is the spinner spinning and never the script source. However, if one presses continue-script-execution from the debugger controls, we get the view back.

We see the same behavior in our application, both WinCairo and our app are WebKit1 based so we don&apos;t benefit from the multiple processes.  I attempted to apply the last patch to use the WebInspector.Promise instead of the default one.  I believe i&apos;ve applied it correctly but my behavior doesn&apos;t change at all.

Are there any suggestions? Perhaps the changes here would not work against my version (188436). Do you suspect a different problem?

Thank for any help

Chris</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154236</commentid>
    <comment_count>14</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-01-10 11:22:48 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Hi,
&gt; 
&gt; This bug was pointed to me by pecoraro@apple.com when i complained about the
&gt; following behavior:
&gt; 
&gt; Here are the simple steps to reproduce it,
&gt; 1.       Launch WinCairo and go to google.com
&gt; 2.       Open Web inspector and open the script source of any .js script
&gt; 3.       Set a breakpoint anywhere
&gt; 4.       Reload the web page
&gt;  
&gt; What we see is the spinner spinning and never the script source. However, if
&gt; one presses continue-script-execution from the debugger controls, we get the
&gt; view back.
&gt; 
&gt; We see the same behavior in our application, both WinCairo and our app are
&gt; WebKit1 based so we don&apos;t benefit from the multiple processes.  I attempted
&gt; to apply the last patch to use the WebInspector.Promise instead of the
&gt; default one.  I believe i&apos;ve applied it correctly but my behavior doesn&apos;t
&gt; change at all.
&gt; 
&gt; Are there any suggestions? Perhaps the changes here would not work against
&gt; my version (188436). Do you suspect a different problem?
&gt; 
&gt; Thank for any help
&gt; 
&gt; Chris

It&apos;s very likely that we have added more uses of Promise in the inspector codebase since the patch was written. So, you&apos;ll need to find those and replace with the WebInspector.Promise shim.

I think it still might be worth committing this shim to trunk so that Inspector is actually usable with a local WK1 view (mostly, for Windows). If you get it to work on your branch, I can do the additional build system work to make WebInspector.Promise only use the RSVP library for WK1 ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154405</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-11 10:36:20 -0800</bug_when>
    <thetext>&gt;&gt; you&apos;ll need to find those and replace with the WebInspector.Promise shim.
Yea, sorry i didn&apos;t mention that but i had already attempted that.  I applied the patch manually by looking at the diffs, and searching and replacing for appropriate spots where &quot;Promise&quot; should become &quot;WebInspector.Promise&quot;.  It is possible that i have made some mistake, but I believe i applied it all as intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154408</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-11 10:44:26 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt;&gt; you&apos;ll need to find those and replace with the WebInspector.Promise shim.
&gt; Yea, sorry i didn&apos;t mention that but i had already attempted that.  I
&gt; applied the patch manually by looking at the diffs, and searching and
&gt; replacing for appropriate spots where &quot;Promise&quot; should become
&gt; &quot;WebInspector.Promise&quot;.  It is possible that i have made some mistake, but I
&gt; believe i applied it all as intended.

My effected files were:
WebInspectorUI/Scripts/copy-user-interface-resources.pl
WebInspectorUI/UserInterface/Base/DOMUtilities.js
WebInspectorUI/UserInterface/Base/Test.js
WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js
WebInspectorUI/UserInterface/Controllers/DebuggerManager.js
WebInspectorUI/UserInterface/Controllers/ReplayManager.js
WebInspectorUI/UserInterface/External/RSVP/LICENSE
WebInspectorUI/UserInterface/External/RSVP/rsvp.js
WebInspectorUI/UserInterface/Main.html
WebInspectorUI/UserInterface/Models/CSSStyleSheet.js
WebInspectorUI/UserInterface/Models/ReplaySession.js
WebInspectorUI/UserInterface/Models/Resource.js
WebInspectorUI/UserInterface/Models/Script.js
WebInspectorUI/UserInterface/Models/SourceCode.js
WebInspectorUI/UserInterface/Models/SourceMapResource.js
WebInspectorUI/UserInterface/Models/WrappedPromise.js
WebInspectorUI/UserInterface/Protocol/InspectorBackend.js
WebInspectorUI/UserInterface/Views/ScopeChainDetailsSidebarPanel.js
WebInspectorUI/UserInterface/Views/TabBar.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154410</commentid>
    <comment_count>17</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-01-11 10:46:34 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt;&gt; you&apos;ll need to find those and replace with the WebInspector.Promise shim.
&gt; Yea, sorry i didn&apos;t mention that but i had already attempted that.  I
&gt; applied the patch manually by looking at the diffs, and searching and
&gt; replacing for appropriate spots where &quot;Promise&quot; should become
&gt; &quot;WebInspector.Promise&quot;.  It is possible that i have made some mistake, but I
&gt; believe i applied it all as intended.

I would attach a debugger to see where the inspector/inspected page is getting hung. Unfortunately, pretty much anything that indirectly uses callOnMainThread can cause the inspector to hang, and these are used in many places these days. Known issues might be data: blob urls (used by inspector for images), requestAnimationFrame, the FileStream API, and most media things (audio / media source / etc).

There is unfortunately not a lot that can be done, IMO. Ideally these things would be ActiveDOMObjects and suspend properly when the debugger pauses, but there have been many bugs in that part of the codebase that mistakenly allow some DOM features to execute while script is paused.

In the past, we got around the WK1 hang by using a remote Web Inspector, but that has never existed for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154799</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Vienneau">chris.vno</who>
    <bug_when>2016-01-12 11:29:29 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; In the past, we got around the WK1 hang by using a remote Web Inspector, but
&gt; that has never existed for Windows.

My port does have remote web inspector setup, I just tried it out in this scenario and found that it does function properly.  I think this will be an acceptable workaround for us as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162601</commentid>
    <comment_count>19</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-02-06 06:28:02 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; In the past, we got around the WK1 hang by using a remote Web Inspector, but
&gt; &gt; that has never existed for Windows.
&gt; 
&gt; My port does have remote web inspector setup, I just tried it out in this
&gt; scenario and found that it does function properly.  I think this will be an
&gt; acceptable workaround for us as well.

OK, marking WONTFIX again. Joe has proposed removing local WK1 inspector support since the underlying issue is unlikely to be addressed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237316</attachid>
            <date>2014-08-28 10:05:53 -0700</date>
            <delta_ts>2014-08-28 10:25:16 -0700</delta_ts>
            <desc>Proposed fix</desc>
            <filename>bug-135830-20140828100524.patch</filename>
            <type>text/plain</type>
            <size>65894</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyOTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA3
NDA2NGFlYzQyYjkxMWZiOTZhNTNlYjZmOWE4NGI5NmExZWVlYzgxLi44MDgwNzcxMjgyYjZiZDQ1
YzY3ODkxMjFkZDcwZGIwYjIzNGVkYjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNC0wOC0yOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgUHJvbWlzZSByZWFjdGlvbnMgaW4gdGhlIEluc3BlY3RvciBwYWdl
IGRvIG5vdCBydW4gd2hlbiB0aGUgZGVidWdnZXIgaXMgcGF1c2VkIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
ODMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyB3aWxsIGhvcGVmdWxseSBiZSBmaXhlZCBieSBtdWx0aS1wcm9jZXNzIFdlYiBJbnNwZWN0b3Ig
aW4gdGhlIGZ1dHVyZSwgYnV0IHVudGlsIHRoYXQgbGFuZHMsIHdlCisgICAgICAgIGNhbiB1c2Ug
YSBwdXJlLUphdmFTY3JpcHQgcHJvbWlzZXMgaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHVz
ZSBjYWxsT25NYWluVGhyZWFkIHVuZGVyIHRoZSBob29kLgorCisgICAgICAgIFJlZmFjdG9yIGFs
bCBjYWxsc2l0ZXMgdG8gdXNlIFdlYkluc3BlY3Rvci5Qcm9taXNlIGFzIHRoZSBjb25zdHJ1Y3Rv
ciwgd2hpY2ggaXMgYXNzaWduZWQKKyAgICAgICAgdG8gdGhlIFJTVlAuUHJvbWlzZSBjb25zdHJ1
Y3RvciBub3cgKGJ1dCBjYW4gcmV2ZXJ0IHRvIHRoZSBuYXRpdmUgUHJvbWlzZSBjb25zdHJ1Y3Rv
ciBsYXRlcikuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvRE9NVXRpbGl0aWVzLmpz
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzOgorICAgICAgICAoSW5zcGVj
dG9yVGVzdC5yZWxvYWRQYWdlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0RlYnVnZ2VyTWFuYWdlci5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L1JlcGxheU1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5w
cm90b3R5cGUuZ2V0U2Vzc2lvbi5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLnByb3RvdHlwZS5nZXRTZWdtZW50LmdldCB2YXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLmNyZWF0ZVNlc3Npb24ucmV0dXJuKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9u
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5fc3VwcHJl
c3NCcmVha3BvaW50c0FuZFJlc3VtZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5zdGFydENhcHR1cmluZy5yZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnNlZ21lbnRVbmxv
YWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQL0xJ
Q0VOU0U6IEFkZGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvUlNWUC9yc3Zw
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL01vZGVscy9SZXBsYXlTZXNzaW9uLmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yQmFja2VuZC5qczoKKyAgICAgICAgKEluc3BlY3Rv
ckJhY2tlbmQuQ29tbWFuZC5wcm90b3R5cGUucHJvbWlzZSk6CisKIDIwMTQtMDgtMTEgIEJyaWFu
IEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFkZCBlamVjdCBjdXJyZW50IHJlY29yZGluZyBidXR0b24gdG8gdGhlIHJlcGxheSBkYXNo
Ym9hcmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jh
c2UvRE9NVXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
QmFzZS9ET01VdGlsaXRpZXMuanMKaW5kZXggMmRiYTYxMzQ3MTU0NTQxMDcxMzEyYTExODQ3NDcy
OWExYmZkZTJkNC4uYjBjMTVlNDYzNzFlMjAyNjkxYWY0YmY2MGE3YTk3ODUxM2E3MzZlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9ET01VdGls
aXRpZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9E
T01VdGlsaXRpZXMuanMKQEAgLTI5LDYgKzI5LDkgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorLy8g
VGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHByb2JsZW1zIHdpdGggdGhlIGRlYnVnZ2VyIGFuZCBu
YXRpdmUgUHJvbWlzZXMuIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzU4MzA+CitXZWJJbnNwZWN0
b3IuUHJvbWlzZSA9IFJTVlAuUHJvbWlzZTsKKwogV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9y
Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpCiB7CiAgICAgdmFyIHRpdGxlID0gbm9kZS5ub2RlTmFtZUlu
Q29ycmVjdENhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvVGVzdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0Jhc2UvVGVzdC5qcwppbmRleCBhYjVhZjEwNGE0NGM5MmFlY2E4MWJlOGIwYzFiMmUzYThiNzll
ZWZhLi5lM2I1MzdhYTg0MGY3ZmRhYTRkMzBmNjY1NTg3MjM1ODA5NGQyMDVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzCkBAIC0yMTMs
NyArMjEzLDcgQEAgSW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlID0gZnVuY3Rpb24oc2hvdWxkSWdu
b3JlQ2FjaGUpCiAgICAgICAgICAgICB0aGlzLl9zaG91bGRSZXNlbmRSZXN1bHRzID0gdHJ1ZTsK
ICAgICAgICAgICAgIHRoaXMuX3Rlc3RQYWdlSXNSZWxvYWRpbmcgPSB0cnVlOwogCi0gICAgICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpOworICAgICAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5Qcm9taXNlLnJlc29sdmUobnVsbCk7CiAgICAgICAgIH0pOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9E
ZWJ1Z2dlck1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9EZWJ1Z2dlck1hbmFnZXIuanMKaW5kZXggMTczMmQzMzdjMTUyMDhkYmE4Yjhl
Yzk2ODViOWFkNjVkZjJmOGRlZC4uMDIxMDQyYjg3YTlhMDA5ZGRlYjg1YmI2YTlmYmFiNWQxMjEz
Nzg5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcwpAQCAtMTQzLDExICsx
NDMsMTEgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAg
cGF1c2U6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9wYXVzZWQpCi0gICAg
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLlByb21pc2UucmVzb2x2ZSgpOwogCiAgICAgICAgIHZhciBsaXN0ZW5lciA9IG5l
dyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcih0aGlzLCB0cnVlKTsKIAotICAgICAgICB2YXIg
bWFuYWdlclJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICB2YXIgbWFuYWdlclJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuUHJvbWlzZShmdW5j
dGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3QoV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlciwgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5F
dmVudC5QYXVzZWQsIHJlc29sdmUpOwogICAgICAgICB9KTsKIApAQCAtMTU4LDE3ICsxNTgsMTcg
QEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7CisgICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0
XSk7CiAgICAgfSwKIAogICAgIHJlc3VtZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYg
KCF0aGlzLl9wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2UucmVzb2x2ZSgpOwogCiAgICAg
ICAgIHZhciBsaXN0ZW5lciA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcih0aGlzLCB0
cnVlKTsKIAotICAgICAgICB2YXIgbWFuYWdlclJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9u
KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICB2YXIgbWFuYWdlclJlc3VsdCA9IG5ldyBXZWJJ
bnNwZWN0b3IuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAg
IGxpc3RlbmVyLmNvbm5lY3QoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlciwgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5SZXN1bWVkLCByZXNvbHZlKTsKICAgICAgICAgfSk7
CiAKQEAgLTE3OSwxNyArMTc5LDE3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgICAgfSk7
CiAKLSAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJl
c3VsdF0pOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2UuYWxsKFttYW5hZ2Vy
UmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwogICAgIH0sCiAKICAgICBzdGVwT3ZlcjogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQpCi0gICAgICAgICAgICByZXR1
cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJDYW5ub3Qgc3RlcCBvdmVyIGJlY2F1c2UgZGVi
dWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3ZlciBiZWNhdXNlIGRlYnVn
Z2VyIGlzIG5vdCBwYXVzZWQuIikpOwogCiAgICAgICAgIHZhciBsaXN0ZW5lciA9IG5ldyBXZWJJ
bnNwZWN0b3IuRXZlbnRMaXN0ZW5lcih0aGlzLCB0cnVlKTsKIAotICAgICAgICB2YXIgbWFuYWdl
clJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAg
ICB2YXIgbWFuYWdlclJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuUHJvbWlzZShmdW5jdGlvbihy
ZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3QoV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTWFuYWdlciwgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5B
Y3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHJlc29sdmUpOwogICAgICAgICB9KTsKIApAQCAtMjAw
LDE3ICsyMDAsMTcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsKIAotICAgICAg
ICByZXR1cm4gUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7Cisg
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHBy
b3RvY29sUmVzdWx0XSk7CiAgICAgfSwKIAogICAgIHN0ZXBJbnRvOiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkKLSAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlamVjdChuZXcgRXJyb3IoIkNhbm5vdCBzdGVwIGludG8gYmVjYXVzZSBkZWJ1Z2dlciBpcyBu
b3QgcGF1c2VkLiIpKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5y
ZWplY3QobmV3IEVycm9yKCJDYW5ub3Qgc3RlcCBpbnRvIGJlY2F1c2UgZGVidWdnZXIgaXMgbm90
IHBhdXNlZC4iKSk7CiAKICAgICAgICAgdmFyIGxpc3RlbmVyID0gbmV3IFdlYkluc3BlY3Rvci5F
dmVudExpc3RlbmVyKHRoaXMsIHRydWUpOwogCi0gICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0g
bmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHZhciBtYW5h
Z2VyUmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCkgewogICAgICAgICAgICAgbGlzdGVuZXIuY29ubmVjdChXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNYW5hZ2VyLCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxG
cmFtZURpZENoYW5nZSwgcmVzb2x2ZSk7CiAgICAgICAgIH0pOwogCkBAIC0yMjEsMTcgKzIyMSwx
NyBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHJldHVybiBQ
cm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRdKTsKKyAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5Qcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1
bHRdKTsKICAgICB9LAogCiAgICAgc3RlcE91dDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
aWYgKCF0aGlzLl9wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3
IEVycm9yKCJDYW5ub3Qgc3RlcCBvdXQgYmVjYXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIp
KTsKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5yZWplY3QobmV3IEVy
cm9yKCJDYW5ub3Qgc3RlcCBvdXQgYmVjYXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIpKTsK
IAogICAgICAgICB2YXIgbGlzdGVuZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIo
dGhpcywgdHJ1ZSk7CiAKLSAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBu
ZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAg
ICAgICAgICBsaXN0ZW5lci5jb25uZWN0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIsIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdl
LCByZXNvbHZlKTsKICAgICAgICAgfSk7CiAKQEAgLTI0Miw3ICsyNDIsNyBAQCBXZWJJbnNwZWN0
b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aHJvdyBl
cnJvcjsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFu
YWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRdKTsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5Qcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRdKTsKICAgICB9LAog
CiAgICAgZ2V0IGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlN
YW5hZ2VyLmpzCmluZGV4IDM2NGE2YjQzMTEwMWVhYjE5MDQxNjlmMmRjZDYyNDNjYTBlMTU5ZDku
LjAzMTZjN2EwNjRlMjc2ZWI0NDU5OTA0YjZiMTNjMTQ3ZDE1YjUyZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFn
ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvUmVwbGF5TWFuYWdlci5qcwpAQCAtMTc2LDcgKzE3Niw3IEBAIFdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgbmV3UHJvbWlzZSA9IFJlcGxh
eUFnZW50LmdldFNlc3Npb25EYXRhLnByb21pc2Uoc2Vzc2lvbklkKQogICAgICAgICAgICAgLnRo
ZW4oZnVuY3Rpb24ocGF5bG9hZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJl
c29sdmUoV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24uZnJvbVBheWxvYWQoc2Vzc2lvbklkLCBw
YXlsb2FkKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Qcm9taXNlLnJl
c29sdmUoV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb24uZnJvbVBheWxvYWQoc2Vzc2lvbklkLCBw
YXlsb2FkKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICB0aGlzLl9zZXNzaW9uUHJvbWlz
ZXMuc2V0KHNlc3Npb25JZCwgbmV3UHJvbWlzZSk7CkBAIC0xOTEsNyArMTkxLDcgQEAgV2ViSW5z
cGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBuZXdQcm9t
aXNlID0gUmVwbGF5QWdlbnQuZ2V0U2VnbWVudERhdGEucHJvbWlzZShzZWdtZW50SWQpCiAgICAg
ICAgICAgICAudGhlbihmdW5jdGlvbihwYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IFByb21pc2UucmVzb2x2ZShuZXcgV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Npb25TZWdtZW50KHNl
Z21lbnRJZCwgcGF5bG9hZCkpOworICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
UHJvbWlzZS5yZXNvbHZlKG5ldyBXZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lvblNlZ21lbnQoc2Vn
bWVudElkLCBwYXlsb2FkKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICB0aGlzLl9zZWdt
ZW50UHJvbWlzZXMuc2V0KHNlZ21lbnRJZCwgbmV3UHJvbWlzZSk7CkBAIC0yMzgsNyArMjM4LDcg
QEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAg
ICAgdmFyIGxpc3RlbmVyID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyKHRoaXMsIHRy
dWUpOwogCi0gICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24o
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0gbmV3IFdlYklu
c3BlY3Rvci5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICAg
bGlzdGVuZXIuY29ubmVjdChXZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlciwgV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIuRXZlbnQuU2Vzc2lvbkFkZGVkLCByZXNvbHZlKTsKICAgICAgICAgfSk7
CiAKQEAgLTI0OSw3ICsyNDksNyBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsKIAot
ICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMud2FpdFVudGlsSW5pdGlhbGl6ZWQoKSwg
cHJvdG9jb2xSZXN1bHQsIG1hbmFnZXJSZXN1bHRdKQorICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLlByb21pc2UuYWxsKFt0aGlzLndhaXRVbnRpbEluaXRpYWxpemVkKCksIHByb3RvY29sUmVz
dWx0LCBtYW5hZ2VyUmVzdWx0XSkKICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3VsdHMp
IHsKICAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSByZXN1bHRzLmxhc3RWYWx1ZTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZXZlbnQuZGF0YS5zZXNzaW9uSWQ7CkBAIC01NzgsNyArNTc4LDcg
QEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAvLyBi
ZSByZW1vdmVkIG9uY2UgdGhlIHNlZ21lbnQgaXMgY29tcGxldGUsIGFuZCB0aGVuIGl0cyBkYXRh
IHdpbGwgYmUgZmV0Y2hlZC4KICAgICAgICAgdmFyIGluY29tcGxldGVTZWdtZW50ID0gbmV3IFdl
Ykluc3BlY3Rvci5JbmNvbXBsZXRlU2Vzc2lvblNlZ21lbnQoc2VnbWVudElkKTsKICAgICAgICAg
dGhpcy5fc2VnbWVudHMuc2V0KHNlZ21lbnRJZCwgaW5jb21wbGV0ZVNlZ21lbnQpOwotICAgICAg
ICB0aGlzLl9zZWdtZW50UHJvbWlzZXMuc2V0KHNlZ21lbnRJZCwgUHJvbWlzZS5yZXNvbHZlKGlu
Y29tcGxldGVTZWdtZW50KSk7CisgICAgICAgIHRoaXMuX3NlZ21lbnRQcm9taXNlcy5zZXQoc2Vn
bWVudElkLCBXZWJJbnNwZWN0b3IuUHJvbWlzZS5yZXNvbHZlKGluY29tcGxldGVTZWdtZW50KSk7
CiAKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJl
cGxheU1hbmFnZXIuRXZlbnQuU2Vzc2lvblNlZ21lbnRBZGRlZCwge3NlZ21lbnRJZGVudGlmaWVy
OiBzZWdtZW50SWR9KTsKICAgICB9LApAQCAtNjE3LDcgKzYxNyw3IEBAIFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gV2FpdCBmb3IgYW55IG91dHN0
YW5kaW5nIHByb21pc2UgdG8gc2V0dGxlIHNvIGl0IGRvZXNuJ3QgZ2V0IHJlLWFkZGVkLgogICAg
ICAgICB0aGlzLmdldFNlZ21lbnQoc2VnbWVudElkKQogICAgICAgICAgICAgLmNhdGNoKGZ1bmN0
aW9uKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5yZXNvbHZlKCk7CiAg
ICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIG1hbmFnZXIu
X3NlZ21lbnRQcm9taXNlcy5kZWxldGUoc2VnbWVudElkKTsKICAgICAgICAgICAgICAgICB2YXIg
cmVtb3ZlZFNlZ21lbnQgPSBtYW5hZ2VyLl9zZWdtZW50cy50YWtlKHNlZ21lbnRJZCk7CkBAIC03
MDUsNyArNzA1LDcgQEAgV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgIHsKICAgICAgICAgdmFyIG1hbmFnZXIgPSB0aGlzOwogCi0gICAgICAgIHJldHVybiBuZXcg
UHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAg
ICAgIG1hbmFnZXIuX2JyZWFrcG9pbnRzV2VyZVN1cHByZXNzZWQgPSBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmJyZWFrcG9pbnRzRW5hYmxlZDsKICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNFbmFibGVkID0gZmFsc2U7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL1JTVlAvTElD
RU5TRSBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL1JTVlAv
TElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45NTRlYzU5OTJkZjc1MDg0OTljNDFkMGU5ZDdlZDc0ZWY1ZDUw
MzJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvRXh0ZXJuYWwvUlNWUC9MSUNFTlNFCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykg
MjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9y
cworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55
IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk
IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNv
ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24g
dGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli
dXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5k
IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk
bworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs
dWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh
cmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J
VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ
TSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD
T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBD
T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Mg
SU4gVEhFCitTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL1JTVlAvcnN2cC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL1JTVlAvcnN2cC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDFlNDU2OWFj
NThkZjBlMDU3YmEwY2Q0YjFkZTFjOTc4OTI0MmM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvUlNWUC9yc3ZwLmpzCkBAIC0w
LDAgKzEsMTYxMCBAQAorLyohCisgKiBAb3ZlcnZpZXcgUlNWUCAtIGEgdGlueSBpbXBsZW1lbnRh
dGlvbiBvZiBQcm9taXNlcy9BKy4KKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFll
aHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzCisgKiBA
bGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlCisgKiAgICAgICAgICAgIFNlZSBo
dHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGlsZGVpby9yc3ZwLmpzL21hc3Rlci9M
SUNFTlNFCisgKiBAdmVyc2lvbiAgIDMuMC4xMworICovCisKKyhmdW5jdGlvbigpIHsKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkZXZlbnRzJCRpbmRleE9mKGNhbGxi
YWNrcywgY2FsbGJhY2spIHsKKyAgICAgIGZvciAodmFyIGk9MCwgbD1jYWxsYmFja3MubGVuZ3Ro
OyBpPGw7IGkrKykgeworICAgICAgICBpZiAoY2FsbGJhY2tzW2ldID09PSBjYWxsYmFjaykgeyBy
ZXR1cm4gaTsgfQorICAgICAgfQorCisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gJCRyc3ZwJGV2ZW50cyQkY2FsbGJhY2tzRm9yKG9iamVjdCkgeworICAgICAgdmFyIGNh
bGxiYWNrcyA9IG9iamVjdC5fcHJvbWlzZUNhbGxiYWNrczsKKworICAgICAgaWYgKCFjYWxsYmFj
a3MpIHsKKyAgICAgICAgY2FsbGJhY2tzID0gb2JqZWN0Ll9wcm9taXNlQ2FsbGJhY2tzID0ge307
CisgICAgICB9CisKKyAgICAgIHJldHVybiBjYWxsYmFja3M7CisgICAgfQorCisgICAgdmFyICQk
cnN2cCRldmVudHMkJGRlZmF1bHQgPSB7CisKKyAgICAgIC8qKgorICAgICAgICBgUlNWUC5FdmVu
dFRhcmdldC5taXhpbmAgZXh0ZW5kcyBhbiBvYmplY3Qgd2l0aCBFdmVudFRhcmdldCBtZXRob2Rz
LiBGb3IKKyAgICAgICAgRXhhbXBsZToKKworICAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAg
IHZhciBvYmplY3QgPSB7fTsKKworICAgICAgICBSU1ZQLkV2ZW50VGFyZ2V0Lm1peGluKG9iamVj
dCk7CisKKyAgICAgICAgb2JqZWN0Lm9uKCdmaW5pc2hlZCcsIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgICAgLy8gaGFuZGxlIGV2ZW50CisgICAgICAgIH0pOworCisgICAgICAgIG9iamVjdC50
cmlnZ2VyKCdmaW5pc2hlZCcsIHsgZGV0YWlsOiB2YWx1ZSB9KTsKKyAgICAgICAgYGBgCisKKyAg
ICAgICAgYEV2ZW50VGFyZ2V0Lm1peGluYCBhbHNvIHdvcmtzIHdpdGggcHJvdG90eXBlczoKKwor
ICAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAgIHZhciBQZXJzb24gPSBmdW5jdGlvbigpIHt9
OworICAgICAgICBSU1ZQLkV2ZW50VGFyZ2V0Lm1peGluKFBlcnNvbi5wcm90b3R5cGUpOworCisg
ICAgICAgIHZhciB5ZWh1ZGEgPSBuZXcgUGVyc29uKCk7CisgICAgICAgIHZhciB0b20gPSBuZXcg
UGVyc29uKCk7CisKKyAgICAgICAgeWVodWRhLm9uKCdwb2tlJywgZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgICAgICBjb25zb2xlLmxvZygnWWVodWRhIHNheXMgT1cnKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgdG9tLm9uKCdwb2tlJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICBjb25z
b2xlLmxvZygnVG9tIHNheXMgT1cnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgeWVodWRhLnRy
aWdnZXIoJ3Bva2UnKTsKKyAgICAgICAgdG9tLnRyaWdnZXIoJ3Bva2UnKTsKKyAgICAgICAgYGBg
CisKKyAgICAgICAgQG1ldGhvZCBtaXhpbgorICAgICAgICBAZm9yIFJTVlAuRXZlbnRUYXJnZXQK
KyAgICAgICAgQHByaXZhdGUKKyAgICAgICAgQHBhcmFtIHtPYmplY3R9IG9iamVjdCBvYmplY3Qg
dG8gZXh0ZW5kIHdpdGggRXZlbnRUYXJnZXQgbWV0aG9kcworICAgICAgKi8KKyAgICAgIG1peGlu
OiBmdW5jdGlvbihvYmplY3QpIHsKKyAgICAgICAgb2JqZWN0Lm9uID0gdGhpcy5vbjsKKyAgICAg
ICAgb2JqZWN0Lm9mZiA9IHRoaXMub2ZmOworICAgICAgICBvYmplY3QudHJpZ2dlciA9IHRoaXMu
dHJpZ2dlcjsKKyAgICAgICAgb2JqZWN0Ll9wcm9taXNlQ2FsbGJhY2tzID0gdW5kZWZpbmVkOwor
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgIFJl
Z2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYGV2ZW50TmFtZWAgaXMgdHJp
Z2dlcmVkCisKKyAgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgICBvYmplY3Qub24oJ2V2ZW50
JywgZnVuY3Rpb24oZXZlbnRJbmZvKXsKKyAgICAgICAgICAvLyBoYW5kbGUgdGhlIGV2ZW50Cisg
ICAgICAgIH0pOworCisgICAgICAgIG9iamVjdC50cmlnZ2VyKCdldmVudCcpOworICAgICAgICBg
YGAKKworICAgICAgICBAbWV0aG9kIG9uCisgICAgICAgIEBmb3IgUlNWUC5FdmVudFRhcmdldAor
ICAgICAgICBAcHJpdmF0ZQorICAgICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lIG5hbWUg
b2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IKKyAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2Fs
bGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC4K
KyAgICAgICovCisgICAgICBvbjogZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxsYmFjaykgeworICAg
ICAgICB2YXIgYWxsQ2FsbGJhY2tzID0gJCRyc3ZwJGV2ZW50cyQkY2FsbGJhY2tzRm9yKHRoaXMp
LCBjYWxsYmFja3M7CisKKyAgICAgICAgY2FsbGJhY2tzID0gYWxsQ2FsbGJhY2tzW2V2ZW50TmFt
ZV07CisKKyAgICAgICAgaWYgKCFjYWxsYmFja3MpIHsKKyAgICAgICAgICBjYWxsYmFja3MgPSBh
bGxDYWxsYmFja3NbZXZlbnROYW1lXSA9IFtdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCQk
cnN2cCRldmVudHMkJGluZGV4T2YoY2FsbGJhY2tzLCBjYWxsYmFjaykgPT09IC0xKSB7CisgICAg
ICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgICAgICB9CisgICAgICB9LAorCisg
ICAgICAvKioKKyAgICAgICAgWW91IGNhbiB1c2UgYG9mZmAgdG8gc3RvcCBmaXJpbmcgYSBwYXJ0
aWN1bGFyIGNhbGxiYWNrIGZvciBhbiBldmVudDoKKworICAgICAgICBgYGBqYXZhc2NyaXB0Cisg
ICAgICAgIGZ1bmN0aW9uIGRvU3R1ZmYoKSB7IC8vIGRvIHN0dWZmISB9CisgICAgICAgIG9iamVj
dC5vbignc3R1ZmYnLCBkb1N0dWZmKTsKKworICAgICAgICBvYmplY3QudHJpZ2dlcignc3R1ZmYn
KTsgLy8gZG9TdHVmZiB3aWxsIGJlIGNhbGxlZAorCisgICAgICAgIC8vIFVucmVnaXN0ZXIgT05M
WSB0aGUgZG9TdHVmZiBjYWxsYmFjaworICAgICAgICBvYmplY3Qub2ZmKCdzdHVmZicsIGRvU3R1
ZmYpOworICAgICAgICBvYmplY3QudHJpZ2dlcignc3R1ZmYnKTsgLy8gZG9TdHVmZiB3aWxsIE5P
VCBiZSBjYWxsZWQKKyAgICAgICAgYGBgCisKKyAgICAgICAgSWYgeW91IGRvbid0IHBhc3MgYSBg
Y2FsbGJhY2tgIGFyZ3VtZW50IHRvIGBvZmZgLCBBTEwgY2FsbGJhY2tzIGZvciB0aGUKKyAgICAg
ICAgZXZlbnQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgZXZlbnQgZmlyZXMuIEZvciBl
eGFtcGxlOgorCisgICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgICAgdmFyIGNhbGxiYWNrMSA9
IGZ1bmN0aW9uKCl7fTsKKyAgICAgICAgdmFyIGNhbGxiYWNrMiA9IGZ1bmN0aW9uKCl7fTsKKwor
ICAgICAgICBvYmplY3Qub24oJ3N0dWZmJywgY2FsbGJhY2sxKTsKKyAgICAgICAgb2JqZWN0Lm9u
KCdzdHVmZicsIGNhbGxiYWNrMik7CisKKyAgICAgICAgb2JqZWN0LnRyaWdnZXIoJ3N0dWZmJyk7
IC8vIGNhbGxiYWNrMSBhbmQgY2FsbGJhY2syIHdpbGwgYmUgZXhlY3V0ZWQuCisKKyAgICAgICAg
b2JqZWN0Lm9mZignc3R1ZmYnKTsKKyAgICAgICAgb2JqZWN0LnRyaWdnZXIoJ3N0dWZmJyk7IC8v
IGNhbGxiYWNrMSBhbmQgY2FsbGJhY2syIHdpbGwgbm90IGJlIGV4ZWN1dGVkIQorICAgICAgICBg
YGAKKworICAgICAgICBAbWV0aG9kIG9mZgorICAgICAgICBAZm9yIFJTVlAuRXZlbnRUYXJnZXQK
KyAgICAgICAgQHByaXZhdGUKKyAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSBldmVu
dCB0byBzdG9wIGxpc3RlbmluZyB0bworICAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFj
ayBvcHRpb25hbCBhcmd1bWVudC4gSWYgZ2l2ZW4sIG9ubHkgdGhlIGZ1bmN0aW9uCisgICAgICAg
IGdpdmVuIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCdzIGNhbGxiYWNrIHF1ZXVlLiBJ
ZiBubyBgY2FsbGJhY2tgCisgICAgICAgIGFyZ3VtZW50IGlzIGdpdmVuLCBhbGwgY2FsbGJhY2tz
IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCdzIGNhbGxiYWNrCisgICAgICAgIHF1ZXVl
LgorICAgICAgKi8KKyAgICAgIG9mZjogZnVuY3Rpb24oZXZlbnROYW1lLCBjYWxsYmFjaykgewor
ICAgICAgICB2YXIgYWxsQ2FsbGJhY2tzID0gJCRyc3ZwJGV2ZW50cyQkY2FsbGJhY2tzRm9yKHRo
aXMpLCBjYWxsYmFja3MsIGluZGV4OworCisgICAgICAgIGlmICghY2FsbGJhY2spIHsKKyAgICAg
ICAgICBhbGxDYWxsYmFja3NbZXZlbnROYW1lXSA9IFtdOworICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdOwor
CisgICAgICAgIGluZGV4ID0gJCRyc3ZwJGV2ZW50cyQkaW5kZXhPZihjYWxsYmFja3MsIGNhbGxi
YWNrKTsKKworICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7IGNhbGxiYWNrcy5zcGxpY2UoaW5k
ZXgsIDEpOyB9CisgICAgICB9LAorCisgICAgICAvKioKKyAgICAgICAgVXNlIGB0cmlnZ2VyYCB0
byBmaXJlIGN1c3RvbSBldmVudHMuIEZvciBleGFtcGxlOgorCisgICAgICAgIGBgYGphdmFzY3Jp
cHQKKyAgICAgICAgb2JqZWN0Lm9uKCdmb28nLCBmdW5jdGlvbigpeworICAgICAgICAgIGNvbnNv
bGUubG9nKCdmb28gZXZlbnQgaGFwcGVuZWQhJyk7CisgICAgICAgIH0pOworICAgICAgICBvYmpl
Y3QudHJpZ2dlcignZm9vJyk7CisgICAgICAgIC8vICdmb28gZXZlbnQgaGFwcGVuZWQhJyBsb2dn
ZWQgdG8gdGhlIGNvbnNvbGUKKyAgICAgICAgYGBgCisKKyAgICAgICAgWW91IGNhbiBhbHNvIHBh
c3MgYSB2YWx1ZSBhcyBhIHNlY29uZCBhcmd1bWVudCB0byBgdHJpZ2dlcmAgdGhhdCB3aWxsIGJl
CisgICAgICAgIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byBhbGwgZXZlbnQgbGlzdGVuZXJzIGZv
ciB0aGUgZXZlbnQ6CisKKyAgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgICBvYmplY3Qub24o
J2ZvbycsIGZ1bmN0aW9uKHZhbHVlKXsKKyAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZS5uYW1l
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgb2JqZWN0LnRyaWdnZXIoJ2ZvbycsIHsgbmFtZTog
J2JhcicgfSk7CisgICAgICAgIC8vICdiYXInIGxvZ2dlZCB0byB0aGUgY29uc29sZQorICAgICAg
ICBgYGAKKworICAgICAgICBAbWV0aG9kIHRyaWdnZXIKKyAgICAgICAgQGZvciBSU1ZQLkV2ZW50
VGFyZ2V0CisgICAgICAgIEBwcml2YXRlCisgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5h
bWUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gYmUgdHJpZ2dlcmVkCisgICAgICAgIEBwYXJhbSB7QW55
fSBvcHRpb25zIG9wdGlvbmFsIHZhbHVlIHRvIGJlIHBhc3NlZCB0byBhbnkgZXZlbnQgaGFuZGxl
cnMgZm9yCisgICAgICAgIHRoZSBnaXZlbiBgZXZlbnROYW1lYAorICAgICAgKi8KKyAgICAgIHRy
aWdnZXI6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgYWxsQ2Fs
bGJhY2tzID0gJCRyc3ZwJGV2ZW50cyQkY2FsbGJhY2tzRm9yKHRoaXMpLCBjYWxsYmFja3MsIGNh
bGxiYWNrOworCisgICAgICAgIGlmIChjYWxsYmFja3MgPSBhbGxDYWxsYmFja3NbZXZlbnROYW1l
XSkgeworICAgICAgICAgIC8vIERvbid0IGNhY2hlIHRoZSBjYWxsYmFja3MubGVuZ3RoIHNpbmNl
IGl0IG1heSBncm93CisgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNhbGxiYWNrcy5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFja3NbaV07CisKKyAgICAgICAg
ICAgIGNhbGxiYWNrKG9wdGlvbnMpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQor
ICAgIH07CisKKyAgICB2YXIgJCRyc3ZwJGNvbmZpZyQkY29uZmlnID0geworICAgICAgaW5zdHJ1
bWVudDogZmFsc2UKKyAgICB9OworCisgICAgJCRyc3ZwJGV2ZW50cyQkZGVmYXVsdC5taXhpbigk
JHJzdnAkY29uZmlnJCRjb25maWcpOworCisgICAgZnVuY3Rpb24gJCRyc3ZwJGNvbmZpZyQkY29u
ZmlndXJlKG5hbWUsIHZhbHVlKSB7CisgICAgICBpZiAobmFtZSA9PT0gJ29uZXJyb3InKSB7Cisg
ICAgICAgIC8vIGhhbmRsZSBmb3IgbGVnYWN5IHVzZXJzIHRoYXQgZXhwZWN0IHRoZSBhY3R1YWwK
KyAgICAgICAgLy8gZXJyb3IgdG8gYmUgcGFzc2VkIHRvIHRoZWlyIGZ1bmN0aW9uIGFkZGVkIHZp
YQorICAgICAgICAvLyBgUlNWUC5jb25maWd1cmUoJ29uZXJyb3InLCBzb21lRnVuY3Rpb25IZXJl
KTtgCisgICAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy5vbignZXJyb3InLCB2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
IDIpIHsKKyAgICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnW25hbWVdID0gdmFsdWU7CisgICAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gJCRyc3ZwJGNvbmZpZyQkY29uZmlnW25hbWVdOwor
ICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkdXRpbHMkJG9iamVjdE9yRnVuY3Rpb24o
eCkgeworICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgeCA9
PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gJCR1dGls
cyQkaXNGdW5jdGlvbih4KSB7CisgICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7
CisgICAgfQorCisgICAgZnVuY3Rpb24gJCR1dGlscyQkaXNNYXliZVRoZW5hYmxlKHgpIHsKKyAg
ICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDsKKyAgICB9CisK
KyAgICB2YXIgJCR1dGlscyQkX2lzQXJyYXk7CisKKyAgICBpZiAoIUFycmF5LmlzQXJyYXkpIHsK
KyAgICAgICQkdXRpbHMkJF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHsKKyAgICAgICAgcmV0dXJu
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsK
KyAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICQkdXRpbHMkJF9pc0FycmF5ID0gQXJyYXku
aXNBcnJheTsKKyAgICB9CisKKyAgICB2YXIgJCR1dGlscyQkaXNBcnJheSA9ICQkdXRpbHMkJF9p
c0FycmF5OworICAgIHZhciAkJHV0aWxzJCRub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHsg
cmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9OworICAgIGZ1bmN0aW9uICQkdXRpbHMkJEYo
KSB7IH0KKworICAgIHZhciAkJHV0aWxzJCRvX2NyZWF0ZSA9IChPYmplY3QuY3JlYXRlIHx8IGZ1
bmN0aW9uIChvKSB7CisgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdTZWNvbmQgYXJndW1lbnQgbm90IHN1cHBvcnRlZCcpOworICAgICAg
fQorICAgICAgaWYgKHR5cGVvZiBvICE9PSAnb2JqZWN0JykgeworICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCcpOworICAgICAgfQorICAgICAg
JCR1dGlscyQkRi5wcm90b3R5cGUgPSBvOworICAgICAgcmV0dXJuIG5ldyAkJHV0aWxzJCRGKCk7
CisgICAgfSk7CisKKyAgICB2YXIgJCRpbnN0cnVtZW50JCRxdWV1ZSA9IFtdOworCisgICAgdmFy
ICQkaW5zdHJ1bWVudCQkZGVmYXVsdCA9IGZ1bmN0aW9uIGluc3RydW1lbnQoZXZlbnROYW1lLCBw
cm9taXNlLCBjaGlsZCkgeworICAgICAgaWYgKDEgPT09ICQkaW5zdHJ1bWVudCQkcXVldWUucHVz
aCh7CisgICAgICAgICAgbmFtZTogZXZlbnROYW1lLAorICAgICAgICAgIHBheWxvYWQ6IHsKKyAg
ICAgICAgICAgIGd1aWQ6IHByb21pc2UuX2d1aWRLZXkgKyBwcm9taXNlLl9pZCwKKyAgICAgICAg
ICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAorICAgICAgICAgICAgZGV0YWlsOiBwcm9taXNlLl9y
ZXN1bHQsCisgICAgICAgICAgICBjaGlsZEd1aWQ6IGNoaWxkICYmIHByb21pc2UuX2d1aWRLZXkg
KyBjaGlsZC5faWQsCisgICAgICAgICAgICBsYWJlbDogcHJvbWlzZS5fbGFiZWwsCisgICAgICAg
ICAgICB0aW1lU3RhbXA6ICQkdXRpbHMkJG5vdygpLAorICAgICAgICAgICAgc3RhY2s6IG5ldyBF
cnJvcihwcm9taXNlLl9sYWJlbCkuc3RhY2sKKyAgICAgICAgICB9fSkpIHsKKworICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgdmFyIGVudHJ5OworICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8ICQkaW5zdHJ1bWVudCQkcXVldWUubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9ICQkaW5zdHJ1bWVudCQkcXVldWVbaV07
CisgICAgICAgICAgICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLnRyaWdnZXIoZW50cnkubmFt
ZSwgZW50cnkucGF5bG9hZCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgJCRpbnN0
cnVtZW50JCRxdWV1ZS5sZW5ndGggPSAwOworICAgICAgICAgICAgfSwgNTApOworICAgICAgICAg
IH0KKyAgICAgIH07CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkbm9vcCgpIHt9CisgICAg
dmFyICQkJGludGVybmFsJCRQRU5ESU5HICAgPSB2b2lkIDA7CisgICAgdmFyICQkJGludGVybmFs
JCRGVUxGSUxMRUQgPSAxOworICAgIHZhciAkJCRpbnRlcm5hbCQkUkVKRUNURUQgID0gMjsKKyAg
ICB2YXIgJCQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SID0gbmV3ICQkJGludGVybmFsJCRFcnJv
ck9iamVjdCgpOworCisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJGdldFRoZW4ocHJvbWlzZSkg
eworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbjsKKyAgICAgIH0gY2F0
Y2goZXJyb3IpIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yID0g
ZXJyb3I7CisgICAgICAgIHJldHVybiAkJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1I7CisgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJHRyeVRoZW4odGhlbiwgdmFs
dWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikgeworICAgICAgdHJ5IHsK
KyAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhh
bmRsZXIpOworICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHJldHVybiBlOworICAgICAgfQor
ICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUo
cHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHsKKyAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy5h
c3luYyhmdW5jdGlvbihwcm9taXNlKSB7CisgICAgICAgIHZhciBzZWFsZWQgPSBmYWxzZTsKKyAg
ICAgICAgdmFyIGVycm9yID0gJCQkaW50ZXJuYWwkJHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH0KKyAgICAg
ICAgICBzZWFsZWQgPSB0cnVlOworICAgICAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHsK
KyAgICAgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwg
dmFsdWUpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAg
ICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH0KKyAgICAgICAgICBzZWFsZWQgPSB0cnVlOwor
CisgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pOworICAgICAg
ICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykp
OworCisgICAgICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7CisgICAgICAgICAgc2VhbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycm9yKTsKKyAg
ICAgICAgfQorICAgICAgfSwgcHJvbWlzZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gJCQkaW50
ZXJuYWwkJGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlKSB7CisgICAgICBpZiAo
dGhlbmFibGUuX3N0YXRlID09PSAkJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7CisgICAgICAgICQk
JGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpOworICAgICAgfSBl
bHNlIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7CisgICAg
ICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICAkJCRpbnRlcm5hbCQkc3Vic2NyaWJlKHRoZW5hYmxlLCB1bmRl
ZmluZWQsIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1
ZSkgeworICAgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpOwor
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9t
aXNlLCB2YWx1ZSk7CisgICAgICAgICAgfQorICAgICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsK
KyAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7CisgICAgICAg
IH0pOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRoYW5kbGVN
YXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpIHsKKyAgICAgIGlmIChtYXliZVRo
ZW5hYmxlLmNvbnN0cnVjdG9yID09PSBwcm9taXNlLmNvbnN0cnVjdG9yKSB7CisgICAgICAgICQk
JGludGVybmFsJCRoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlKTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB0aGVuID0gJCQkaW50ZXJuYWwkJGdldFRoZW4obWF5
YmVUaGVuYWJsZSk7CisKKyAgICAgICAgaWYgKHRoZW4gPT09ICQkJGludGVybmFsJCRHRVRfVEhF
Tl9FUlJPUikgeworICAgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgJCQkaW50
ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGVuID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAkJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCBt
YXliZVRoZW5hYmxlKTsKKyAgICAgICAgfSBlbHNlIGlmICgkJHV0aWxzJCRpc0Z1bmN0aW9uKHRo
ZW4pKSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9t
aXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAk
JCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTsKKyAgICAgICAgfQor
ICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRyZXNvbHZlKHByb21p
c2UsIHZhbHVlKSB7CisgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgJCQk
aW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpOworICAgICAgfSBlbHNlIGlmICgkJHV0
aWxzJCRvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkgeworICAgICAgICAkJCRpbnRlcm5hbCQkaGFu
ZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCB2YWx1ZSk7CisgICAgICB9IGVsc2UgeworICAgICAg
ICAkJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7CisgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJHB1Ymxpc2hSZWplY3Rpb24ocHJvbWlzZSkgewor
ICAgICAgaWYgKHByb21pc2UuX29uZXJyb3IpIHsKKyAgICAgICAgcHJvbWlzZS5fb25lcnJvcihw
cm9taXNlLl9yZXN1bHQpOworICAgICAgfQorCisgICAgICAkJCRpbnRlcm5hbCQkcHVibGlzaChw
cm9taXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9t
aXNlLCB2YWx1ZSkgeworICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSAkJCRpbnRlcm5hbCQk
UEVORElORykgeyByZXR1cm47IH0KKworICAgICAgcHJvbWlzZS5fcmVzdWx0ID0gdmFsdWU7Cisg
ICAgICBwcm9taXNlLl9zdGF0ZSA9ICQkJGludGVybmFsJCRGVUxGSUxMRUQ7CisKKyAgICAgIGlm
IChwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgaWYgKCQkcnN2
cCRjb25maWckJGNvbmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAgICAgJCRpbnN0cnVtZW50JCRk
ZWZhdWx0KCdmdWxmaWxsZWQnLCBwcm9taXNlKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsK
KyAgICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLmFzeW5jKCQkJGludGVybmFsJCRwdWJsaXNo
LCBwcm9taXNlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQk
cmVqZWN0KHByb21pc2UsIHJlYXNvbikgeworICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSAk
JCRpbnRlcm5hbCQkUEVORElORykgeyByZXR1cm47IH0KKyAgICAgIHByb21pc2UuX3N0YXRlID0g
JCQkaW50ZXJuYWwkJFJFSkVDVEVEOworICAgICAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uOwor
CisgICAgICAkJHJzdnAkY29uZmlnJCRjb25maWcuYXN5bmMoJCQkaW50ZXJuYWwkJHB1Ymxpc2hS
ZWplY3Rpb24sIHByb21pc2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRz
dWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHsKKyAg
ICAgIHZhciBzdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7CisgICAgICB2YXIgbGVu
Z3RoID0gc3Vic2NyaWJlcnMubGVuZ3RoOworCisgICAgICBwYXJlbnQuX29uZXJyb3IgPSBudWxs
OworCisgICAgICBzdWJzY3JpYmVyc1tsZW5ndGhdID0gY2hpbGQ7CisgICAgICBzdWJzY3JpYmVy
c1tsZW5ndGggKyAkJCRpbnRlcm5hbCQkRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7CisgICAg
ICBzdWJzY3JpYmVyc1tsZW5ndGggKyAkJCRpbnRlcm5hbCQkUkVKRUNURURdICA9IG9uUmVqZWN0
aW9uOworCisgICAgICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHsKKyAgICAg
ICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLmFzeW5jKCQkJGludGVybmFsJCRwdWJsaXNoLCBwYXJl
bnQpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRwdWJsaXNo
KHByb21pc2UpIHsKKyAgICAgIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJz
OworICAgICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTsKKworICAgICAgaWYgKCQkcnN2
cCRjb25maWckJGNvbmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAgICQkaW5zdHJ1bWVudCQkZGVm
YXVsdChzZXR0bGVkID09PSAkJCRpbnRlcm5hbCQkRlVMRklMTEVEID8gJ2Z1bGZpbGxlZCcgOiAn
cmVqZWN0ZWQnLCBwcm9taXNlKTsKKyAgICAgIH0KKworICAgICAgaWYgKHN1YnNjcmliZXJzLmxl
bmd0aCA9PT0gMCkgeyByZXR1cm47IH0KKworICAgICAgdmFyIGNoaWxkLCBjYWxsYmFjaywgZGV0
YWlsID0gcHJvbWlzZS5fcmVzdWx0OworCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNj
cmliZXJzLmxlbmd0aDsgaSArPSAzKSB7CisgICAgICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07
CisgICAgICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdOworCisgICAgICAg
IGlmIChjaGlsZCkgeworICAgICAgICAgICQkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzZXR0
bGVkLCBjaGlsZCwgY2FsbGJhY2ssIGRldGFpbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgY2FsbGJhY2soZGV0YWlsKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBwcm9taXNl
Ll9zdWJzY3JpYmVycy5sZW5ndGggPSAwOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVy
bmFsJCRFcnJvck9iamVjdCgpIHsKKyAgICAgIHRoaXMuZXJyb3IgPSBudWxsOworICAgIH0KKwor
ICAgIHZhciAkJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SID0gbmV3ICQkJGludGVybmFsJCRF
cnJvck9iamVjdCgpOworCisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJHRyeUNhdGNoKGNhbGxi
YWNrLCBkZXRhaWwpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHJldHVybiBjYWxsYmFjayhkZXRh
aWwpOworICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICQkJGludGVybmFsJCRUUllfQ0FUQ0hf
RVJST1IuZXJyb3IgPSBlOworICAgICAgICByZXR1cm4gJCQkaW50ZXJuYWwkJFRSWV9DQVRDSF9F
UlJPUjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkaW52b2tl
Q2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkgeworICAgICAgdmFy
IGhhc0NhbGxiYWNrID0gJCR1dGlscyQkaXNGdW5jdGlvbihjYWxsYmFjayksCisgICAgICAgICAg
dmFsdWUsIGVycm9yLCBzdWNjZWVkZWQsIGZhaWxlZDsKKworICAgICAgaWYgKGhhc0NhbGxiYWNr
KSB7CisgICAgICAgIHZhbHVlID0gJCQkaW50ZXJuYWwkJHRyeUNhdGNoKGNhbGxiYWNrLCBkZXRh
aWwpOworCisgICAgICAgIGlmICh2YWx1ZSA9PT0gJCQkaW50ZXJuYWwkJFRSWV9DQVRDSF9FUlJP
UikgeworICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgZXJyb3IgPSB2YWx1ZS5l
cnJvcjsKKyAgICAgICAgICB2YWx1ZSA9IG51bGw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgc3VjY2VlZGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwcm9taXNlID09
PSB2YWx1ZSkgeworICAgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbmV3IFR5
cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9t
aXNlLicpKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgdmFsdWUgPSBkZXRhaWw7CisgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7CisgICAg
ICB9CisKKyAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gJCQkaW50ZXJuYWwkJFBFTkRJTkcp
IHsKKyAgICAgICAgLy8gbm9vcAorICAgICAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNj
ZWVkZWQpIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpOwor
ICAgICAgfSBlbHNlIGlmIChmYWlsZWQpIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChw
cm9taXNlLCBlcnJvcik7CisgICAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09ICQkJGludGVybmFs
JCRGVUxGSUxMRUQpIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFs
dWUpOworICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSAkJCRpbnRlcm5hbCQkUkVKRUNURUQp
IHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCB2YWx1ZSk7CisgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHBy
b21pc2UsIHJlc29sdmVyKSB7CisgICAgICB0cnkgeworICAgICAgICByZXNvbHZlcihmdW5jdGlv
biByZXNvbHZlUHJvbWlzZSh2YWx1ZSl7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlc29sdmUo
cHJvbWlzZSwgdmFsdWUpOworICAgICAgICB9LCBmdW5jdGlvbiByZWplY3RQcm9taXNlKHJlYXNv
bikgeworICAgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTsKKyAg
ICAgICAgfSk7CisgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVj
dChwcm9taXNlLCBlKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJGVudW1lcmF0
b3IkJG1ha2VTZXR0bGVkUmVzdWx0KHN0YXRlLCBwb3NpdGlvbiwgdmFsdWUpIHsKKyAgICAgIGlm
IChzdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJEZVTEZJTExFRCkgeworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgIHN0YXRlOiAnZnVsZmlsbGVkJywKKyAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAg
ICAgICAgfTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgc3Rh
dGU6ICdyZWplY3RlZCcsCisgICAgICAgICAgcmVhc29uOiB2YWx1ZQorICAgICAgICB9OworICAg
ICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkZW51bWVyYXRvciQkRW51bWVyYXRvcihDb25z
dHJ1Y3RvciwgaW5wdXQsIGFib3J0T25SZWplY3QsIGxhYmVsKSB7CisgICAgICB0aGlzLl9pbnN0
YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7CisgICAgICB0aGlzLnByb21pc2UgPSBuZXcg
Q29uc3RydWN0b3IoJCQkaW50ZXJuYWwkJG5vb3AsIGxhYmVsKTsKKyAgICAgIHRoaXMuX2Fib3J0
T25SZWplY3QgPSBhYm9ydE9uUmVqZWN0OworCisgICAgICBpZiAodGhpcy5fdmFsaWRhdGVJbnB1
dChpbnB1dCkpIHsKKyAgICAgICAgdGhpcy5faW5wdXQgICAgID0gaW5wdXQ7CisgICAgICAgIHRo
aXMubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDsKKyAgICAgICAgdGhpcy5fcmVtYWluaW5nID0g
aW5wdXQubGVuZ3RoOworCisgICAgICAgIHRoaXMuX2luaXQoKTsKKworICAgICAgICBpZiAodGhp
cy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAkJCRpbnRlcm5hbCQkZnVsZmlsbCh0aGlzLnBy
b21pc2UsIHRoaXMuX3Jlc3VsdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5s
ZW5ndGggPSB0aGlzLmxlbmd0aCB8fCAwOworICAgICAgICAgIHRoaXMuX2VudW1lcmF0ZSgpOwor
ICAgICAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHsKKyAgICAgICAgICAgICQkJGlu
dGVybmFsJCRmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICQkJGludGVybmFsJCRyZWplY3Qo
dGhpcy5wcm9taXNlLCB0aGlzLl92YWxpZGF0aW9uRXJyb3IoKSk7CisgICAgICB9CisgICAgfQor
CisgICAgJCRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVJbnB1dCA9
IGZ1bmN0aW9uKGlucHV0KSB7CisgICAgICByZXR1cm4gJCR1dGlscyQkaXNBcnJheShpbnB1dCk7
CisgICAgfTsKKworICAgICQkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlk
YXRpb25FcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5ldyBFcnJvcignQXJyYXkg
TWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Jyk7CisgICAgfTsKKworICAgICQkZW51
bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHsKKyAgICAg
IHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7CisgICAgfTsKKworICAgIHZh
ciAkJGVudW1lcmF0b3IkJGRlZmF1bHQgPSAkJGVudW1lcmF0b3IkJEVudW1lcmF0b3I7CisKKyAg
ICAkJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlv
bigpIHsKKyAgICAgIHZhciBsZW5ndGggID0gdGhpcy5sZW5ndGg7CisgICAgICB2YXIgcHJvbWlz
ZSA9IHRoaXMucHJvbWlzZTsKKyAgICAgIHZhciBpbnB1dCAgID0gdGhpcy5faW5wdXQ7CisKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBwcm9taXNlLl9zdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJFBFTkRJ
TkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIHRoaXMuX2VhY2hFbnRyeShpbnB1dFtp
XSwgaSk7CisgICAgICB9CisgICAgfTsKKworICAgICQkZW51bWVyYXRvciQkRW51bWVyYXRvci5w
cm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uKGVudHJ5LCBpKSB7CisgICAgICB2YXIgYyA9
IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7CisgICAgICBpZiAoJCR1dGlscyQkaXNNYXliZVRo
ZW5hYmxlKGVudHJ5KSkgeworICAgICAgICBpZiAoZW50cnkuY29uc3RydWN0b3IgPT09IGMgJiYg
ZW50cnkuX3N0YXRlICE9PSAkJCRpbnRlcm5hbCQkUEVORElORykgeworICAgICAgICAgIGVudHJ5
Ll9vbmVycm9yID0gbnVsbDsKKyAgICAgICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRl
LCBpLCBlbnRyeS5fcmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLl93
aWxsU2V0dGxlQXQoYy5yZXNvbHZlKGVudHJ5KSwgaSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHRoaXMuX3JlbWFpbmluZy0tOworICAgICAgICB0aGlzLl9yZXN1bHRbaV0g
PSB0aGlzLl9tYWtlUmVzdWx0KCQkJGludGVybmFsJCRGVUxGSUxMRUQsIGksIGVudHJ5KTsKKyAg
ICAgIH0KKyAgICB9OworCisgICAgJCRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5f
c2V0dGxlZEF0ID0gZnVuY3Rpb24oc3RhdGUsIGksIHZhbHVlKSB7CisgICAgICB2YXIgcHJvbWlz
ZSA9IHRoaXMucHJvbWlzZTsKKworICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAkJCRpbnRl
cm5hbCQkUEVORElORykgeworICAgICAgICB0aGlzLl9yZW1haW5pbmctLTsKKworICAgICAgICBp
ZiAodGhpcy5fYWJvcnRPblJlamVjdCAmJiBzdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJFJFSkVDVEVE
KSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCB2YWx1ZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5fcmVzdWx0W2ldID0gdGhpcy5fbWFrZVJlc3Vs
dChzdGF0ZSwgaSwgdmFsdWUpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICh0aGlz
Ll9yZW1haW5pbmcgPT09IDApIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlz
ZSwgdGhpcy5fcmVzdWx0KTsKKyAgICAgIH0KKyAgICB9OworCisgICAgJCRlbnVtZXJhdG9yJCRF
bnVtZXJhdG9yLnByb3RvdHlwZS5fbWFrZVJlc3VsdCA9IGZ1bmN0aW9uKHN0YXRlLCBpLCB2YWx1
ZSkgeworICAgICAgcmV0dXJuIHZhbHVlOworICAgIH07CisKKyAgICAkJGVudW1lcmF0b3IkJEVu
dW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbihwcm9taXNlLCBpKSB7
CisgICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7CisKKyAgICAgICQkJGludGVybmFsJCRzdWJz
Y3JpYmUocHJvbWlzZSwgdW5kZWZpbmVkLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICBlbnVt
ZXJhdG9yLl9zZXR0bGVkQXQoJCQkaW50ZXJuYWwkJEZVTEZJTExFRCwgaSwgdmFsdWUpOworICAg
ICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdCgk
JCRpbnRlcm5hbCQkUkVKRUNURUQsIGksIHJlYXNvbik7CisgICAgICB9KTsKKyAgICB9OworCisg
ICAgdmFyICQkcHJvbWlzZSRhbGwkJGRlZmF1bHQgPSBmdW5jdGlvbiBhbGwoZW50cmllcywgbGFi
ZWwpIHsKKyAgICAgIHJldHVybiBuZXcgJCRlbnVtZXJhdG9yJCRkZWZhdWx0KHRoaXMsIGVudHJp
ZXMsIHRydWUgLyogYWJvcnQgb24gcmVqZWN0ICovLCBsYWJlbCkucHJvbWlzZTsKKyAgICB9Owor
CisgICAgdmFyICQkcHJvbWlzZSRyYWNlJCRkZWZhdWx0ID0gZnVuY3Rpb24gcmFjZShlbnRyaWVz
LCBsYWJlbCkgeworICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KKyAgICAgIHZhciBD
b25zdHJ1Y3RvciA9IHRoaXM7CisKKyAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9y
KCQkJGludGVybmFsJCRub29wLCBsYWJlbCk7CisKKyAgICAgIGlmICghJCR1dGlscyQkaXNBcnJh
eShlbnRyaWVzKSkgeworICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIG5ldyBU
eXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7CisgICAgICAgIHJl
dHVybiBwcm9taXNlOworICAgICAgfQorCisgICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5n
dGg7CisKKyAgICAgIGZ1bmN0aW9uIG9uRnVsZmlsbG1lbnQodmFsdWUpIHsKKyAgICAgICAgJCQk
aW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpOworICAgICAgfQorCisgICAgICBmdW5j
dGlvbiBvblJlamVjdGlvbihyZWFzb24pIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChw
cm9taXNlLCByZWFzb24pOworICAgICAgfQorCisgICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlz
ZS5fc3RhdGUgPT09ICQkJGludGVybmFsJCRQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICAkJCRpbnRlcm5hbCQkc3Vic2NyaWJlKENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmll
c1tpXSksIHVuZGVmaW5lZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pOworICAgICAgfQor
CisgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICB9OworCisgICAgdmFyICQkcHJvbWlzZSRyZXNv
bHZlJCRkZWZhdWx0ID0gZnVuY3Rpb24gcmVzb2x2ZShvYmplY3QsIGxhYmVsKSB7CisgICAgICAv
KmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqLworICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpczsK
KworICAgICAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmpl
Y3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7CisgICAgICAgIHJldHVybiBvYmplY3Q7
CisgICAgICB9CisKKyAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKCQkJGludGVy
bmFsJCRub29wLCBsYWJlbCk7CisgICAgICAkJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCBv
YmplY3QpOworICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfTsKKworICAgIHZhciAkJHByb21p
c2UkcmVqZWN0JCRkZWZhdWx0ID0gZnVuY3Rpb24gcmVqZWN0KHJlYXNvbiwgbGFiZWwpIHsKKyAg
ICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovCisgICAgICB2YXIgQ29uc3RydWN0b3IgPSB0
aGlzOworICAgICAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3IoJCQkaW50ZXJuYWwkJG5v
b3AsIGxhYmVsKTsKKyAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTsK
KyAgICAgIHJldHVybiBwcm9taXNlOworICAgIH07CisKKyAgICB2YXIgJCRyc3ZwJHByb21pc2Uk
JGd1aWRLZXkgPSAncnN2cF8nICsgJCR1dGlscyQkbm93KCkgKyAnLSc7CisgICAgdmFyICQkcnN2
cCRwcm9taXNlJCRjb3VudGVyID0gMDsKKworICAgIGZ1bmN0aW9uICQkcnN2cCRwcm9taXNlJCRu
ZWVkc1Jlc29sdmVyKCkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFz
cyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlz
ZSBjb25zdHJ1Y3RvcicpOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRwcm9taXNlJCRu
ZWVkc05ldygpIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBjb25zdHJ1
Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3Qg
Y29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOworICAgIH0KKwor
ICAgIHZhciAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdCA9ICQkcnN2cCRwcm9taXNlJCRQcm9taXNl
OworCisgICAgLyoqCisgICAgICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVh
bCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlCisgICAgICBwcmltYXJ5
IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAg
bWV0aG9kLCB3aGljaAorICAgICAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhl
ciBhIHByb21pc2XDouKCrOKEonMgZXZlbnR1YWwgdmFsdWUgb3IgdGhlIHJlYXNvbgorICAgICAg
d2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCisKKyAgICAgIFRlcm1pbm9sb2d5
CisgICAgICAtLS0tLS0tLS0tLQorCisgICAgICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3Ig
ZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8g
dGhpcyBzcGVjaWZpY2F0aW9uLgorICAgICAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBm
dW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLgorICAgICAgLSBgdmFsdWVgIGlz
IGFueSBsZWdhbCBKYXZhU2NyaXB0IHZhbHVlIChpbmNsdWRpbmcgdW5kZWZpbmVkLCBhIHRoZW5h
YmxlLCBvciBhIHByb21pc2UpLgorICAgICAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQg
aXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuCisgICAgICAtIGByZWFzb25gIGlz
IGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuCisgICAg
ICAtIGBzZXR0bGVkYCB0aGUgZmluYWwgcmVzdGluZyBzdGF0ZSBvZiBhIHByb21pc2UsIGZ1bGZp
bGxlZCBvciByZWplY3RlZC4KKworICAgICAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhy
ZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLgorCisgICAgICBQcm9t
aXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUg
aW4gdGhlIGZ1bGZpbGxlZAorICAgICAgc3RhdGUuICBQcm9taXNlcyB0aGF0IGFyZSByZWplY3Rl
ZCBoYXZlIGEgcmVqZWN0aW9uIHJlYXNvbiBhbmQgYXJlIGluIHRoZQorICAgICAgcmVqZWN0ZWQg
c3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuCisKKyAgICAg
IFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlz
IHZhbHVlIGlzIGFsc28gYQorICAgICAgcHJvbWlzZSwgdGhlbiB0aGUgb3JpZ2luYWwgcHJvbWlz
ZSdzIHNldHRsZWQgc3RhdGUgd2lsbCBtYXRjaCB0aGUgdmFsdWUncworICAgICAgc2V0dGxlZCBz
dGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0
cyB3aWxsCisgICAgICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVz
KiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsCisgICAgICBpdHNlbGYgZnVsZmlsbC4KKwor
CisgICAgICBCYXNpYyBVc2FnZToKKyAgICAgIC0tLS0tLS0tLS0tLQorCisgICAgICBgYGBqcwor
ICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qp
IHsKKyAgICAgICAgLy8gb24gc3VjY2VzcworICAgICAgICByZXNvbHZlKHZhbHVlKTsKKworICAg
ICAgICAvLyBvbiBmYWlsdXJlCisgICAgICAgIHJlamVjdChyZWFzb24pOworICAgICAgfSk7CisK
KyAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAvLyBvbiBmdWxm
aWxsbWVudAorICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICAgIC8vIG9uIHJlamVj
dGlvbgorICAgICAgfSk7CisgICAgICBgYGAKKworICAgICAgQWR2YW5jZWQgVXNhZ2U6CisgICAg
ICAtLS0tLS0tLS0tLS0tLS0KKworICAgICAgUHJvbWlzZXMgc2hpbmUgd2hlbiBhYnN0cmFjdGlu
ZyBhd2F5IGFzeW5jaHJvbm91cyBpbnRlcmFjdGlvbnMgc3VjaCBhcworICAgICAgYFhNTEh0dHBS
ZXF1ZXN0YHMuCisKKyAgICAgIGBgYGpzCisgICAgICBmdW5jdGlvbiBnZXRKU09OKHVybCkgewor
ICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKKyAg
ICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKKyAgICAgICAgICB4aHIu
b3BlbignR0VUJywgdXJsKTsKKyAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFu
ZGxlcjsKKyAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nOworICAgICAgICAgIHho
ci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpOworICAgICAg
ICAgIHhoci5zZW5kKCk7CisKKyAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKCkgeworICAgICAg
ICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5ET05FKSB7CisgICAgICAgICAgICAg
IGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlz
LnJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWpl
Y3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czog
WycgKyB0aGlzLnN0YXR1cyArICddJykpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIGdldEpTT04oJy9w
b3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7CisgICAgICAgIC8vIG9uIGZ1bGZpbGxt
ZW50CisgICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsKKyAgICAgICAgLy8gb24gcmVqZWN0aW9u
CisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNl
cyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLgorCisgICAgICBgYGBqcworICAgICAg
UHJvbWlzZS5hbGwoWworICAgICAgICBnZXRKU09OKCcvcG9zdHMnKSwKKyAgICAgICAgZ2V0SlNP
TignL2NvbW1lbnRzJykKKyAgICAgIF0pLnRoZW4oZnVuY3Rpb24odmFsdWVzKXsKKyAgICAgICAg
dmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTgorICAgICAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVu
dHNKU09OCisKKyAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICAgIH0pOworICAgICAgYGBgCisK
KyAgICAgIEBjbGFzcyBSU1ZQLlByb21pc2UKKyAgICAgIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29s
dmVyCisgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJl
bGluZyB0aGUgcHJvbWlzZS4KKyAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KKyAgICAgIEBjb25z
dHJ1Y3RvcgorICAgICovCisgICAgZnVuY3Rpb24gJCRyc3ZwJHByb21pc2UkJFByb21pc2UocmVz
b2x2ZXIsIGxhYmVsKSB7CisgICAgICB0aGlzLl9pZCA9ICQkcnN2cCRwcm9taXNlJCRjb3VudGVy
Kys7CisgICAgICB0aGlzLl9sYWJlbCA9IGxhYmVsOworICAgICAgdGhpcy5fc3RhdGUgPSB1bmRl
ZmluZWQ7CisgICAgICB0aGlzLl9yZXN1bHQgPSB1bmRlZmluZWQ7CisgICAgICB0aGlzLl9zdWJz
Y3JpYmVycyA9IFtdOworCisgICAgICBpZiAoJCRyc3ZwJGNvbmZpZyQkY29uZmlnLmluc3RydW1l
bnQpIHsKKyAgICAgICAgJCRpbnN0cnVtZW50JCRkZWZhdWx0KCdjcmVhdGVkJywgdGhpcyk7Cisg
ICAgICB9CisKKyAgICAgIGlmICgkJCRpbnRlcm5hbCQkbm9vcCAhPT0gcmVzb2x2ZXIpIHsKKyAg
ICAgICAgaWYgKCEkJHV0aWxzJCRpc0Z1bmN0aW9uKHJlc29sdmVyKSkgeworICAgICAgICAgICQk
cnN2cCRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
ISh0aGlzIGluc3RhbmNlb2YgJCRyc3ZwJHByb21pc2UkJFByb21pc2UpKSB7CisgICAgICAgICAg
JCRyc3ZwJHByb21pc2UkJG5lZWRzTmV3KCk7CisgICAgICAgIH0KKworICAgICAgICAkJCRpbnRl
cm5hbCQkaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpOworICAgICAgfQorICAgIH0K
KworICAgIC8vIGRlcHJlY2F0ZWQKKyAgICAkJHJzdnAkcHJvbWlzZSQkUHJvbWlzZS5jYXN0ID0g
JCRwcm9taXNlJHJlc29sdmUkJGRlZmF1bHQ7CisKKyAgICAkJHJzdnAkcHJvbWlzZSQkUHJvbWlz
ZS5hbGwgPSAkJHByb21pc2UkYWxsJCRkZWZhdWx0OworICAgICQkcnN2cCRwcm9taXNlJCRQcm9t
aXNlLnJhY2UgPSAkJHByb21pc2UkcmFjZSQkZGVmYXVsdDsKKyAgICAkJHJzdnAkcHJvbWlzZSQk
UHJvbWlzZS5yZXNvbHZlID0gJCRwcm9taXNlJHJlc29sdmUkJGRlZmF1bHQ7CisgICAgJCRyc3Zw
JHByb21pc2UkJFByb21pc2UucmVqZWN0ID0gJCRwcm9taXNlJHJlamVjdCQkZGVmYXVsdDsKKwor
ICAgICQkcnN2cCRwcm9taXNlJCRQcm9taXNlLnByb3RvdHlwZSA9IHsKKyAgICAgIGNvbnN0cnVj
dG9yOiAkJHJzdnAkcHJvbWlzZSQkUHJvbWlzZSwKKworICAgICAgX2d1aWRLZXk6ICQkcnN2cCRw
cm9taXNlJCRndWlkS2V5LAorCisgICAgICBfb25lcnJvcjogZnVuY3Rpb24gKHJlYXNvbikgewor
ICAgICAgICAkJHJzdnAkY29uZmlnJCRjb25maWcudHJpZ2dlcignZXJyb3InLCByZWFzb24pOwor
ICAgICAgfSwKKworICAgIC8qKgorICAgICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5n
IHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsCisgICAgICB3aGlj
aCByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50
dWFsIHZhbHVlIG9yIHRoZQorICAgICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUg
ZnVsZmlsbGVkLgorCisgICAgICBgYGBqcworICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9u
KHVzZXIpeworICAgICAgICAvLyB1c2VyIGlzIGF2YWlsYWJsZQorICAgICAgfSwgZnVuY3Rpb24o
cmVhc29uKXsKKyAgICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2
ZW4gdGhlIHJlYXNvbiB3aHkKKyAgICAgIH0pOworICAgICAgYGBgCisKKyAgICAgIENoYWluaW5n
CisgICAgICAtLS0tLS0tLQorCisgICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBp
dHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJworICAgICAgcHJvbWlz
ZSBpcyByZXNvbHZlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHByb21pc2Un
cyBmdWxmaWxsbWVudAorICAgICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlm
IHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uCisKKyAgICAgIGBgYGpzCisgICAgICBm
aW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKKyAgICAgICAgcmV0dXJuIHVzZXIubmFt
ZTsKKyAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKKyAgICAgICAgcmV0dXJuICdkZWZhdWx0
IG5hbWUnOworICAgICAgfSkudGhlbihmdW5jdGlvbiAodXNlck5hbWUpIHsKKyAgICAgICAgLy8g
SWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5h
bWUsIG90aGVyd2lzZSBpdAorICAgICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2AKKyAg
ICAgIH0pOworCisgICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpOworICAg
ICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BmaW5k
VXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknKTsKKyAgICAgIH0pLnRoZW4oZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgIC8vIG5ldmVyIHJlYWNoZWQKKyAgICAgIH0sIGZ1bmN0aW9u
IChyZWFzb24pIHsKKyAgICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25g
IHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy4KKyAgICAgICAgLy8gSWYg
YGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3Rl
ZCBhbmQgd2UncmUgdW5oYXBweScuCisgICAgICB9KTsKKyAgICAgIGBgYAorICAgICAgSWYgdGhl
IGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIs
IHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0u
CisKKyAgICAgIGBgYGpzCisgICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsK
KyAgICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicp
OworICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgLy8gbmV2ZXIgcmVh
Y2hlZAorICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgLy8gbmV2ZXIg
cmVhY2hlZAorICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAgICAgICAvLyBUaGUgYFBl
ZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVy
ZQorICAgICAgfSk7CisgICAgICBgYGAKKworICAgICAgQXNzaW1pbGF0aW9uCisgICAgICAtLS0t
LS0tLS0tLS0KKworICAgICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdh
dGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmUKKyAgICAgIHJldHJpZXZlZCBh
c3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlz
ZSBpbiB0aGUKKyAgICAgIGZ1bGZpbGxtZW50IG9yIHJlamVjdGlvbiBoYW5kbGVyLiBUaGUgZG93
bnN0cmVhbSBwcm9taXNlIHdpbGwgdGhlbiBiZSBwZW5kaW5nCisgICAgICB1bnRpbCB0aGUgcmV0
dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi4K
KworICAgICAgYGBganMKKyAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikgewor
ICAgICAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7CisgICAgICB9KS50aGVu
KGZ1bmN0aW9uIChjb21tZW50cykgeworICAgICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFy
ZSBub3cgYXZhaWxhYmxlCisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBJZiB0aGUgYXNz
aW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2ls
bCBhbHNvIHJlamVjdC4KKworICAgICAgYGBganMKKyAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5j
dGlvbiAodXNlcikgeworICAgICAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7
CisgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykgeworICAgICAgICAvLyBJZiBgZmlu
ZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlCisg
ICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNC
eUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmUKKyAgICAgIH0pOwor
ICAgICAgYGBgCisKKyAgICAgIFNpbXBsZSBFeGFtcGxlCisgICAgICAtLS0tLS0tLS0tLS0tLQor
CisgICAgICBTeW5jaHJvbm91cyBFeGFtcGxlCisKKyAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAg
IHZhciByZXN1bHQ7CisKKyAgICAgIHRyeSB7CisgICAgICAgIHJlc3VsdCA9IGZpbmRSZXN1bHQo
KTsKKyAgICAgICAgLy8gc3VjY2VzcworICAgICAgfSBjYXRjaChyZWFzb24pIHsKKyAgICAgICAg
Ly8gZmFpbHVyZQorICAgICAgfQorICAgICAgYGBgCisKKyAgICAgIEVycmJhY2sgRXhhbXBsZQor
CisgICAgICBgYGBqcworICAgICAgZmluZFJlc3VsdChmdW5jdGlvbihyZXN1bHQsIGVycil7Cisg
ICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAvLyBmYWlsdXJlCisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgLy8gc3VjY2VzcworICAgICAgICB9CisgICAgICB9KTsKKyAgICAgIGBgYAor
CisgICAgICBQcm9taXNlIEV4YW1wbGU7CisKKyAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIGZp
bmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7CisgICAgICAgIC8vIHN1Y2Nlc3MKKyAg
ICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7CisgICAgICAgIC8vIGZhaWx1cmUKKyAgICAgIH0pOwor
ICAgICAgYGBgCisKKyAgICAgIEFkdmFuY2VkIEV4YW1wbGUKKyAgICAgIC0tLS0tLS0tLS0tLS0t
CisKKyAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGUKKworICAgICAgYGBgamF2YXNjcmlwdAorICAg
ICAgdmFyIGF1dGhvciwgYm9va3M7CisKKyAgICAgIHRyeSB7CisgICAgICAgIGF1dGhvciA9IGZp
bmRBdXRob3IoKTsKKyAgICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTsK
KyAgICAgICAgLy8gc3VjY2VzcworICAgICAgfSBjYXRjaChyZWFzb24pIHsKKyAgICAgICAgLy8g
ZmFpbHVyZQorICAgICAgfQorICAgICAgYGBgCisKKyAgICAgIEVycmJhY2sgRXhhbXBsZQorCisg
ICAgICBgYGBqcworCisgICAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7CisKKyAgICAg
IH0KKworICAgICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHsKKworICAgICAgfQorCisgICAg
ICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXsKKyAgICAgICAgaWYgKGVycikgewor
ICAgICAgICAgIGZhaWx1cmUoZXJyKTsKKyAgICAgICAgICAvLyBmYWlsdXJlCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihh
dXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHsKKyAgICAgICAgICAgICAgaWYgKGVycikgewor
ICAgICAgICAgICAgICAgIGZhaWx1cmUoZXJyKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgZm91bmRCb29rcyhib29rcyk7
CisgICAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHsKKyAgICAgICAgICAgICAgICAgIGZh
aWx1cmUocmVhc29uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgICAgIGZhaWx1
cmUoZXJyKTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy8gc3VjY2VzcworICAgICAgICB9Cisg
ICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBQcm9taXNlIEV4YW1wbGU7CisKKyAgICAgIGBg
YGphdmFzY3JpcHQKKyAgICAgIGZpbmRBdXRob3IoKS4KKyAgICAgICAgdGhlbihmaW5kQm9va3NC
eUF1dGhvcikuCisgICAgICAgIHRoZW4oZnVuY3Rpb24oYm9va3MpeworICAgICAgICAgIC8vIGZv
dW5kIGJvb2tzCisgICAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24peworICAgICAgICAvLyBz
b21ldGhpbmcgd2VudCB3cm9uZworICAgICAgfSk7CisgICAgICBgYGAKKworICAgICAgQG1ldGhv
ZCB0aGVuCisgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZ1bGZpbGxlZAorICAgICAgQHBhcmFt
IHtGdW5jdGlvbn0gb25SZWplY3RlZAorICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlv
bmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCisgICAgICBVc2VmdWwgZm9yIHRv
b2xpbmcuCisgICAgICBAcmV0dXJuIHtQcm9taXNlfQorICAgICovCisgICAgICB0aGVuOiBmdW5j
dGlvbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbiwgbGFiZWwpIHsKKyAgICAgICAgdmFyIHBh
cmVudCA9IHRoaXM7CisgICAgICAgIHZhciBzdGF0ZSA9IHBhcmVudC5fc3RhdGU7CisKKyAgICAg
ICAgaWYgKHN0YXRlID09PSAkJCRpbnRlcm5hbCQkRlVMRklMTEVEICYmICFvbkZ1bGZpbGxtZW50
IHx8IHN0YXRlID09PSAkJCRpbnRlcm5hbCQkUkVKRUNURUQgJiYgIW9uUmVqZWN0aW9uKSB7Cisg
ICAgICAgICAgaWYgKCQkcnN2cCRjb25maWckJGNvbmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAg
ICAgICAkJGluc3RydW1lbnQkJGRlZmF1bHQoJ2NoYWluZWQnLCB0aGlzLCB0aGlzKTsKKyAgICAg
ICAgICB9CisgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwYXJl
bnQuX29uZXJyb3IgPSBudWxsOworCisgICAgICAgIHZhciBjaGlsZCA9IG5ldyB0aGlzLmNvbnN0
cnVjdG9yKCQkJGludGVybmFsJCRub29wLCBsYWJlbCk7CisgICAgICAgIHZhciByZXN1bHQgPSBw
YXJlbnQuX3Jlc3VsdDsKKworICAgICAgICBpZiAoJCRyc3ZwJGNvbmZpZyQkY29uZmlnLmluc3Ry
dW1lbnQpIHsKKyAgICAgICAgICAkJGluc3RydW1lbnQkJGRlZmF1bHQoJ2NoYWluZWQnLCBwYXJl
bnQsIGNoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0ZSkgeworICAgICAgICAg
IHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1tzdGF0ZSAtIDFdOworICAgICAgICAgICQkcnN2cCRj
b25maWckJGNvbmZpZy5hc3luYyhmdW5jdGlvbigpeworICAgICAgICAgICAgJCQkaW50ZXJuYWwk
JGludm9rZUNhbGxiYWNrKHN0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHJlc3VsdCk7CisgICAgICAg
ICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJHN1YnNjcmli
ZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgICB9LAorCisgICAgLyoqCisgICAgICBgY2F0
Y2hgIGlzIHNpbXBseSBzdWdhciBmb3IgYHRoZW4odW5kZWZpbmVkLCBvblJlamVjdGlvbilgIHdo
aWNoIG1ha2VzIGl0IHRoZSBzYW1lCisgICAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkv
Y2F0Y2ggc3RhdGVtZW50LgorCisgICAgICBgYGBqcworICAgICAgZnVuY3Rpb24gZmluZEF1dGhv
cigpeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3In
KTsKKyAgICAgIH0KKworICAgICAgLy8gc3luY2hyb25vdXMKKyAgICAgIHRyeSB7CisgICAgICAg
IGZpbmRBdXRob3IoKTsKKyAgICAgIH0gY2F0Y2gocmVhc29uKSB7CisgICAgICAgIC8vIHNvbWV0
aGluZyB3ZW50IHdyb25nCisgICAgICB9CisKKyAgICAgIC8vIGFzeW5jIHdpdGggcHJvbWlzZXMK
KyAgICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24peworICAgICAgICAvLyBz
b21ldGhpbmcgd2VudCB3cm9uZworICAgICAgfSk7CisgICAgICBgYGAKKworICAgICAgQG1ldGhv
ZCBjYXRjaAorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb24KKyAgICAgIEBwYXJh
bSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNl
LgorICAgICAgVXNlZnVsIGZvciB0b29saW5nLgorICAgICAgQHJldHVybiB7UHJvbWlzZX0KKyAg
ICAqLworICAgICAgJ2NhdGNoJzogZnVuY3Rpb24ob25SZWplY3Rpb24sIGxhYmVsKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24sIGxhYmVsKTsKKyAgICAgIH0s
CisKKyAgICAvKioKKyAgICAgIGBmaW5hbGx5YCB3aWxsIGJlIGludm9rZWQgcmVnYXJkbGVzcyBv
ZiB0aGUgcHJvbWlzZSdzIGZhdGUganVzdCBhcyBuYXRpdmUKKyAgICAgIHRyeS9jYXRjaC9maW5h
bGx5IGJlaGF2ZXMKKworICAgICAgU3luY2hyb25vdXMgZXhhbXBsZToKKworICAgICAgYGBganMK
KyAgICAgIGZpbmRBdXRob3IoKSB7CisgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC41KSB7
CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG5ldyBBdXRob3IoKTsKKyAgICAgIH0KKworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIGZp
bmRBdXRob3IoKTsgLy8gc3VjY2VlZCBvciBmYWlsCisgICAgICB9IGNhdGNoKGVycm9yKSB7Cisg
ICAgICAgIHJldHVybiBmaW5kT3RoZXJBdXRoZXIoKTsKKyAgICAgIH0gZmluYWxseSB7CisgICAg
ICAgIC8vIGFsd2F5cyBydW5zCisgICAgICAgIC8vIGRvZXNuJ3QgYWZmZWN0IHRoZSByZXR1cm4g
dmFsdWUKKyAgICAgIH0KKyAgICAgIGBgYAorCisgICAgICBBc3luY2hyb25vdXMgZXhhbXBsZToK
KworICAgICAgYGBganMKKyAgICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24p
eworICAgICAgICByZXR1cm4gZmluZE90aGVyQXV0aGVyKCk7CisgICAgICB9KS5maW5hbGx5KGZ1
bmN0aW9uKCl7CisgICAgICAgIC8vIGF1dGhvciB3YXMgZWl0aGVyIGZvdW5kLCBvciBub3QKKyAg
ICAgIH0pOworICAgICAgYGBgCisKKyAgICAgIEBtZXRob2QgZmluYWxseQorICAgICAgQHBhcmFt
IHtGdW5jdGlvbn0gY2FsbGJhY2sKKyAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25h
bCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgorICAgICAgVXNlZnVsIGZvciB0b29s
aW5nLgorICAgICAgQHJldHVybiB7UHJvbWlzZX0KKyAgICAqLworICAgICAgJ2ZpbmFsbHknOiBm
dW5jdGlvbihjYWxsYmFjaywgbGFiZWwpIHsKKyAgICAgICAgdmFyIGNvbnN0cnVjdG9yID0gdGhp
cy5jb25zdHJ1Y3RvcjsKKworICAgICAgICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKHZhbHVl
KSB7CisgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhl
bihmdW5jdGlvbigpeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgIH0pOwor
ICAgICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHsKKyAgICAgICAgICByZXR1cm4gY29uc3RydWN0
b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICB0aHJv
dyByZWFzb247CisgICAgICAgICAgfSk7CisgICAgICAgIH0sIGxhYmVsKTsKKyAgICAgIH0KKyAg
ICB9OworCisgICAgZnVuY3Rpb24gJCRyc3ZwJG5vZGUkJFJlc3VsdCgpIHsKKyAgICAgIHRoaXMu
dmFsdWUgPSB1bmRlZmluZWQ7CisgICAgfQorCisgICAgdmFyICQkcnN2cCRub2RlJCRFUlJPUiA9
IG5ldyAkJHJzdnAkbm9kZSQkUmVzdWx0KCk7CisgICAgdmFyICQkcnN2cCRub2RlJCRHRVRfVEhF
Tl9FUlJPUiA9IG5ldyAkJHJzdnAkbm9kZSQkUmVzdWx0KCk7CisKKyAgICBmdW5jdGlvbiAkJHJz
dnAkbm9kZSQkZ2V0VGhlbihvYmopIHsKKyAgICAgIHRyeSB7CisgICAgICAgcmV0dXJuIG9iai50
aGVuOworICAgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgICAkJHJzdnAkbm9kZSQkRVJST1Iu
dmFsdWU9IGVycm9yOworICAgICAgICByZXR1cm4gJCRyc3ZwJG5vZGUkJEVSUk9SOworICAgICAg
fQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCR0cnlBcHBseShmLCBzLCBhKSB7
CisgICAgICB0cnkgeworICAgICAgICBmLmFwcGx5KHMsIGEpOworICAgICAgfSBjYXRjaChlcnJv
cikgeworICAgICAgICAkJHJzdnAkbm9kZSQkRVJST1IudmFsdWUgPSBlcnJvcjsKKyAgICAgICAg
cmV0dXJuICQkcnN2cCRub2RlJCRFUlJPUjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biAkJHJzdnAkbm9kZSQkbWFrZU9iamVjdChfLCBhcmd1bWVudE5hbWVzKSB7CisgICAgICB2YXIg
b2JqID0ge307CisgICAgICB2YXIgbmFtZTsKKyAgICAgIHZhciBpOworICAgICAgdmFyIGxlbmd0
aCA9IF8ubGVuZ3RoOworICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKworICAg
ICAgZm9yICh2YXIgeCA9IDA7IHggPCBsZW5ndGg7IHgrKykgeworICAgICAgICBhcmdzW3hdID0g
X1t4XTsKKyAgICAgIH0KKworICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgbmFtZSA9IGFyZ3VtZW50TmFtZXNbaV07CisgICAgICAgIG9i
altuYW1lXSA9IGFyZ3NbaSArIDFdOworICAgICAgfQorCisgICAgICByZXR1cm4gb2JqOworICAg
IH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCRhcnJheVJlc3VsdChfKSB7CisgICAgICB2
YXIgbGVuZ3RoID0gXy5sZW5ndGg7CisgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW5ndGgg
LSAxKTsKKworICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICBhcmdzW2kgLSAxXSA9IF9baV07CisgICAgICB9CisKKyAgICAgIHJldHVybiBhcmdzOworICAg
IH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCR3cmFwVGhlbmFibGUodGhlbiwgcHJvbWlz
ZSkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgdGhlbjogZnVuY3Rpb24ob25GdWxGaWxsbWVu
dCwgb25SZWplY3Rpb24pIHsKKyAgICAgICAgICByZXR1cm4gdGhlbi5jYWxsKHByb21pc2UsIG9u
RnVsRmlsbG1lbnQsIG9uUmVqZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICB9CisK
KyAgICB2YXIgJCRyc3ZwJG5vZGUkJGRlZmF1bHQgPSBmdW5jdGlvbiBkZW5vZGVpZnkobm9kZUZ1
bmMsIG9wdGlvbnMpIHsKKyAgICAgIHZhciBmbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7CisgICAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgICAg
dmFyIGFyZ3MgPSBuZXcgQXJyYXkobCArIDEpOworICAgICAgICB2YXIgYXJnOworICAgICAgICB2
YXIgcHJvbWlzZUlucHV0ID0gZmFsc2U7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
OyArK2kpIHsKKyAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07CisKKyAgICAgICAgICBpZiAo
IXByb21pc2VJbnB1dCkgeworICAgICAgICAgICAgLy8gVE9ETzogY2xlYW4gdGhpcyB1cAorICAg
ICAgICAgICAgcHJvbWlzZUlucHV0ID0gJCRyc3ZwJG5vZGUkJG5lZWRzUHJvbWlzZUlucHV0KGFy
Zyk7CisgICAgICAgICAgICBpZiAocHJvbWlzZUlucHV0ID09PSAkJHJzdnAkbm9kZSQkR0VUX1RI
RU5fRVJST1IpIHsKKyAgICAgICAgICAgICAgdmFyIHAgPSBuZXcgJCRyc3ZwJHByb21pc2UkJGRl
ZmF1bHQoJCQkaW50ZXJuYWwkJG5vb3ApOworICAgICAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVq
ZWN0KHAsICQkcnN2cCRub2RlJCRHRVRfVEhFTl9FUlJPUi52YWx1ZSk7CisgICAgICAgICAgICAg
IHJldHVybiBwOworICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9taXNlSW5wdXQgJiYgcHJvbWlz
ZUlucHV0ICE9PSB0cnVlKSB7CisgICAgICAgICAgICAgIGFyZyA9ICQkcnN2cCRub2RlJCR3cmFw
VGhlbmFibGUocHJvbWlzZUlucHV0LCBhcmcpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgICBhcmdzW2ldID0gYXJnOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHByb21p
c2UgPSBuZXcgJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQoJCQkaW50ZXJuYWwkJG5vb3ApOworCisg
ICAgICAgIGFyZ3NbbF0gPSBmdW5jdGlvbihlcnIsIHZhbCkgeworICAgICAgICAgIGlmIChlcnIp
CisgICAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycik7CisgICAgICAg
ICAgZWxzZSBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgJCQkaW50ZXJu
YWwkJHJlc29sdmUocHJvbWlzZSwgdmFsKTsKKyAgICAgICAgICBlbHNlIGlmIChvcHRpb25zID09
PSB0cnVlKQorICAgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgJCRyc3Zw
JG5vZGUkJGFycmF5UmVzdWx0KGFyZ3VtZW50cykpOworICAgICAgICAgIGVsc2UgaWYgKCQkdXRp
bHMkJGlzQXJyYXkob3B0aW9ucykpCisgICAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVzb2x2ZShw
cm9taXNlLCAkJHJzdnAkbm9kZSQkbWFrZU9iamVjdChhcmd1bWVudHMsIG9wdGlvbnMpKTsKKyAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2
YWwpOworICAgICAgICB9OworCisgICAgICAgIGlmIChwcm9taXNlSW5wdXQpIHsKKyAgICAgICAg
ICByZXR1cm4gJCRyc3ZwJG5vZGUkJGhhbmRsZVByb21pc2VJbnB1dChwcm9taXNlLCBhcmdzLCBu
b2RlRnVuYywgc2VsZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuICQkcnN2
cCRub2RlJCRoYW5kbGVWYWx1ZUlucHV0KHByb21pc2UsIGFyZ3MsIG5vZGVGdW5jLCBzZWxmKTsK
KyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgZm4uX19wcm90b19fID0gbm9kZUZ1bmM7CisK
KyAgICAgIHJldHVybiBmbjsKKyAgICB9OworCisgICAgZnVuY3Rpb24gJCRyc3ZwJG5vZGUkJGhh
bmRsZVZhbHVlSW5wdXQocHJvbWlzZSwgYXJncywgbm9kZUZ1bmMsIHNlbGYpIHsKKyAgICAgIHZh
ciByZXN1bHQgPSAkJHJzdnAkbm9kZSQkdHJ5QXBwbHkobm9kZUZ1bmMsIHNlbGYsIGFyZ3MpOwor
ICAgICAgaWYgKHJlc3VsdCA9PT0gJCRyc3ZwJG5vZGUkJEVSUk9SKSB7CisgICAgICAgICQkJGlu
dGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVzdWx0LnZhbHVlKTsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiBwcm9taXNlOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCRoYW5kbGVQ
cm9taXNlSW5wdXQocHJvbWlzZSwgYXJncywgbm9kZUZ1bmMsIHNlbGYpeworICAgICAgcmV0dXJu
ICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0LmFsbChhcmdzKS50aGVuKGZ1bmN0aW9uKGFyZ3Mpewor
ICAgICAgICB2YXIgcmVzdWx0ID0gJCRyc3ZwJG5vZGUkJHRyeUFwcGx5KG5vZGVGdW5jLCBzZWxm
LCBhcmdzKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PT0gJCRyc3ZwJG5vZGUkJEVSUk9SKSB7Cisg
ICAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZXN1bHQudmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBwcm9taXNlOworICAgICAgfSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gJCRyc3ZwJG5vZGUkJG5lZWRzUHJvbWlzZUlucHV0KGFyZykgeworICAgICAgaWYg
KGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JykgeworICAgICAgICBpZiAoYXJnLmNvbnN0
cnVjdG9yID09PSAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdCkgeworICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiAkJHJzdnAkbm9kZSQkZ2V0
VGhlbihhcmcpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICB9CisgICAgfQorCisgICAgdmFyICQkcnN2cCRhbGwkJGRlZmF1bHQgPSBmdW5j
dGlvbiBhbGwoYXJyYXksIGxhYmVsKSB7CisgICAgICByZXR1cm4gJCRyc3ZwJHByb21pc2UkJGRl
ZmF1bHQuYWxsKGFycmF5LCBsYWJlbCk7CisgICAgfTsKKworICAgIGZ1bmN0aW9uICQkcnN2cCRh
bGwkc2V0dGxlZCQkQWxsU2V0dGxlZChDb25zdHJ1Y3RvciwgZW50cmllcywgbGFiZWwpIHsKKyAg
ICAgIHRoaXMuX3N1cGVyQ29uc3RydWN0b3IoQ29uc3RydWN0b3IsIGVudHJpZXMsIGZhbHNlIC8q
IGRvbid0IGFib3J0IG9uIHJlamVjdCAqLywgbGFiZWwpOworICAgIH0KKworICAgICQkcnN2cCRh
bGwkc2V0dGxlZCQkQWxsU2V0dGxlZC5wcm90b3R5cGUgPSAkJHV0aWxzJCRvX2NyZWF0ZSgkJGVu
dW1lcmF0b3IkJGRlZmF1bHQucHJvdG90eXBlKTsKKyAgICAkJHJzdnAkYWxsJHNldHRsZWQkJEFs
bFNldHRsZWQucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yID0gJCRlbnVtZXJhdG9yJCRkZWZh
dWx0OworICAgICQkcnN2cCRhbGwkc2V0dGxlZCQkQWxsU2V0dGxlZC5wcm90b3R5cGUuX21ha2VS
ZXN1bHQgPSAkJGVudW1lcmF0b3IkJG1ha2VTZXR0bGVkUmVzdWx0OworCisgICAgJCRyc3ZwJGFs
bCRzZXR0bGVkJCRBbGxTZXR0bGVkLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rp
b24oKSB7CisgICAgICByZXR1cm4gbmV3IEVycm9yKCdhbGxTZXR0bGVkIG11c3QgYmUgY2FsbGVk
IHdpdGggYW4gYXJyYXknKTsKKyAgICB9OworCisgICAgdmFyICQkcnN2cCRhbGwkc2V0dGxlZCQk
ZGVmYXVsdCA9IGZ1bmN0aW9uIGFsbFNldHRsZWQoZW50cmllcywgbGFiZWwpIHsKKyAgICAgIHJl
dHVybiBuZXcgJCRyc3ZwJGFsbCRzZXR0bGVkJCRBbGxTZXR0bGVkKCQkcnN2cCRwcm9taXNlJCRk
ZWZhdWx0LCBlbnRyaWVzLCBsYWJlbCkucHJvbWlzZTsKKyAgICB9OworCisgICAgdmFyICQkcnN2
cCRyYWNlJCRkZWZhdWx0ID0gZnVuY3Rpb24gcmFjZShhcnJheSwgbGFiZWwpIHsKKyAgICAgIHJl
dHVybiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdC5yYWNlKGFycmF5LCBsYWJlbCk7CisgICAgfTsK
KworICAgIGZ1bmN0aW9uICQkcHJvbWlzZSRoYXNoJCRQcm9taXNlSGFzaChDb25zdHJ1Y3Rvciwg
b2JqZWN0LCBsYWJlbCkgeworICAgICAgdGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihDb25zdHJ1Y3Rv
ciwgb2JqZWN0LCB0cnVlLCBsYWJlbCk7CisgICAgfQorCisgICAgdmFyICQkcHJvbWlzZSRoYXNo
JCRkZWZhdWx0ID0gJCRwcm9taXNlJGhhc2gkJFByb21pc2VIYXNoOworICAgICQkcHJvbWlzZSRo
YXNoJCRQcm9taXNlSGFzaC5wcm90b3R5cGUgPSAkJHV0aWxzJCRvX2NyZWF0ZSgkJGVudW1lcmF0
b3IkJGRlZmF1bHQucHJvdG90eXBlKTsKKyAgICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2gu
cHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yID0gJCRlbnVtZXJhdG9yJCRkZWZhdWx0OworCisg
ICAgJCRwcm9taXNlJGhhc2gkJFByb21pc2VIYXNoLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9u
KCkgeworICAgICAgdGhpcy5fcmVzdWx0ID0ge307CisgICAgfTsKKworICAgICQkcHJvbWlzZSRo
YXNoJCRQcm9taXNlSGFzaC5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXQgPSBmdW5jdGlvbihpbnB1
dCkgeworICAgICAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCc7Cisg
ICAgfTsKKworICAgICQkcHJvbWlzZSRoYXNoJCRQcm9taXNlSGFzaC5wcm90b3R5cGUuX3ZhbGlk
YXRpb25FcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5ldyBFcnJvcignUHJvbWlz
ZS5oYXNoIG11c3QgYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0Jyk7CisgICAgfTsKKworICAgICQk
cHJvbWlzZSRoYXNoJCRQcm9taXNlSGFzaC5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7CisgICAgICB2YXIgaW5wdXQg
ICA9IHRoaXMuX2lucHV0OworICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKKworICAgICAgZm9yICh2
YXIga2V5IGluIGlucHV0KSB7CisgICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gJCQkaW50
ZXJuYWwkJFBFTkRJTkcgJiYgaW5wdXQuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAg
IHJlc3VsdHMucHVzaCh7CisgICAgICAgICAgICBwb3NpdGlvbjoga2V5LAorICAgICAgICAgICAg
ZW50cnk6IGlucHV0W2tleV0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICB2YXIgbGVuZ3RoID0gcmVzdWx0cy5sZW5ndGg7CisgICAgICB0aGlzLl9yZW1haW5pbmcg
PSBsZW5ndGg7CisgICAgICB2YXIgcmVzdWx0OworCisgICAgICBmb3IgKHZhciBpID0gMDsgcHJv
bWlzZS5fc3RhdGUgPT09ICQkJGludGVybmFsJCRQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldOworICAgICAgICB0aGlzLl9lYWNoRW50cnko
cmVzdWx0LmVudHJ5LCByZXN1bHQucG9zaXRpb24pOworICAgICAgfQorICAgIH07CisKKyAgICB2
YXIgJCRyc3ZwJGhhc2gkJGRlZmF1bHQgPSBmdW5jdGlvbiBoYXNoKG9iamVjdCwgbGFiZWwpIHsK
KyAgICAgIHJldHVybiBuZXcgJCRwcm9taXNlJGhhc2gkJGRlZmF1bHQoJCRyc3ZwJHByb21pc2Uk
JGRlZmF1bHQsIG9iamVjdCwgbGFiZWwpLnByb21pc2U7CisgICAgfTsKKworICAgIGZ1bmN0aW9u
ICQkcnN2cCRoYXNoJHNldHRsZWQkJEhhc2hTZXR0bGVkKENvbnN0cnVjdG9yLCBvYmplY3QsIGxh
YmVsKSB7CisgICAgICB0aGlzLl9zdXBlckNvbnN0cnVjdG9yKENvbnN0cnVjdG9yLCBvYmplY3Qs
IGZhbHNlLCBsYWJlbCk7CisgICAgfQorCisgICAgJCRyc3ZwJGhhc2gkc2V0dGxlZCQkSGFzaFNl
dHRsZWQucHJvdG90eXBlID0gJCR1dGlscyQkb19jcmVhdGUoJCRwcm9taXNlJGhhc2gkJGRlZmF1
bHQucHJvdG90eXBlKTsKKyAgICAkJHJzdnAkaGFzaCRzZXR0bGVkJCRIYXNoU2V0dGxlZC5wcm90
b3R5cGUuX3N1cGVyQ29uc3RydWN0b3IgPSAkJGVudW1lcmF0b3IkJGRlZmF1bHQ7CisgICAgJCRy
c3ZwJGhhc2gkc2V0dGxlZCQkSGFzaFNldHRsZWQucHJvdG90eXBlLl9tYWtlUmVzdWx0ID0gJCRl
bnVtZXJhdG9yJCRtYWtlU2V0dGxlZFJlc3VsdDsKKworICAgICQkcnN2cCRoYXNoJHNldHRsZWQk
JEhhc2hTZXR0bGVkLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yID0gZnVuY3Rpb24oKSB7Cisg
ICAgICByZXR1cm4gbmV3IEVycm9yKCdoYXNoU2V0dGxlZCBtdXN0IGJlIGNhbGxlZCB3aXRoIGFu
IG9iamVjdCcpOworICAgIH07CisKKyAgICB2YXIgJCRyc3ZwJGhhc2gkc2V0dGxlZCQkZGVmYXVs
dCA9IGZ1bmN0aW9uIGhhc2hTZXR0bGVkKG9iamVjdCwgbGFiZWwpIHsKKyAgICAgIHJldHVybiBu
ZXcgJCRyc3ZwJGhhc2gkc2V0dGxlZCQkSGFzaFNldHRsZWQoJCRyc3ZwJHByb21pc2UkJGRlZmF1
bHQsIG9iamVjdCwgbGFiZWwpLnByb21pc2U7CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkcmV0
aHJvdyQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJldGhyb3cocmVhc29uKSB7CisgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0aHJvdyByZWFzb247CisgICAgICB9KTsKKyAgICAg
IHRocm93IHJlYXNvbjsKKyAgICB9OworCisgICAgdmFyICQkcnN2cCRkZWZlciQkZGVmYXVsdCA9
IGZ1bmN0aW9uIGRlZmVyKGxhYmVsKSB7CisgICAgICB2YXIgZGVmZXJyZWQgPSB7IH07CisKKyAg
ICAgIGRlZmVycmVkLnByb21pc2UgPSBuZXcgJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIGRlZmVycmVkLnJlc29sdmUgPSByZXNvbHZl
OworICAgICAgICBkZWZlcnJlZC5yZWplY3QgPSByZWplY3Q7CisgICAgICB9LCBsYWJlbCk7CisK
KyAgICAgIHJldHVybiBkZWZlcnJlZDsKKyAgICB9OworCisgICAgdmFyICQkcnN2cCRtYXAkJGRl
ZmF1bHQgPSBmdW5jdGlvbiBtYXAocHJvbWlzZXMsIG1hcEZuLCBsYWJlbCkgeworICAgICAgcmV0
dXJuICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0LmFsbChwcm9taXNlcywgbGFiZWwpLnRoZW4oZnVu
Y3Rpb24odmFsdWVzKSB7CisgICAgICAgIGlmICghJCR1dGlscyQkaXNGdW5jdGlvbihtYXBGbikp
IHsKKyAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGEgZnVuY3Rp
b24gYXMgbWFwJ3Mgc2Vjb25kIGFyZ3VtZW50LiIpOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IGxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgIHZhciByZXN1bHRzID0gbmV3IEFycmF5
KGxlbmd0aCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICAgIHJlc3VsdHNbaV0gPSBtYXBGbih2YWx1ZXNbaV0pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0LmFsbChyZXN1bHRzLCBsYWJlbCk7
CisgICAgICB9KTsKKyAgICB9OworCisgICAgdmFyICQkcnN2cCRyZXNvbHZlJCRkZWZhdWx0ID0g
ZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSwgbGFiZWwpIHsKKyAgICAgIHJldHVybiAkJHJzdnAkcHJv
bWlzZSQkZGVmYXVsdC5yZXNvbHZlKHZhbHVlLCBsYWJlbCk7CisgICAgfTsKKworICAgIHZhciAk
JHJzdnAkcmVqZWN0JCRkZWZhdWx0ID0gZnVuY3Rpb24gcmVqZWN0KHJlYXNvbiwgbGFiZWwpIHsK
KyAgICAgIHJldHVybiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdC5yZWplY3QocmVhc29uLCBsYWJl
bCk7CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkZmlsdGVyJCRkZWZhdWx0ID0gZnVuY3Rpb24g
ZmlsdGVyKHByb21pc2VzLCBmaWx0ZXJGbiwgbGFiZWwpIHsKKyAgICAgIHJldHVybiAkJHJzdnAk
cHJvbWlzZSQkZGVmYXVsdC5hbGwocHJvbWlzZXMsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKHZhbHVl
cykgeworICAgICAgICBpZiAoISQkdXRpbHMkJGlzRnVuY3Rpb24oZmlsdGVyRm4pKSB7CisgICAg
ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIGZp
bHRlcidzIHNlY29uZCBhcmd1bWVudC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZW5n
dGggPSB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2YXIgZmlsdGVyZWQgPSBuZXcgQXJyYXkobGVu
Z3RoKTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgZmlsdGVyZWRbaV0gPSBmaWx0ZXJGbih2YWx1ZXNbaV0pOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0LmFsbChmaWx0ZXJlZCwgbGFiZWwp
LnRoZW4oZnVuY3Rpb24oZmlsdGVyZWQpIHsKKyAgICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBB
cnJheShsZW5ndGgpOworICAgICAgICAgIHZhciBuZXdMZW5ndGggPSAwOworCisgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGZpbHRl
cmVkW2ldKSB7CisgICAgICAgICAgICAgIHJlc3VsdHNbbmV3TGVuZ3RoXSA9IHZhbHVlc1tpXTsK
KyAgICAgICAgICAgICAgbmV3TGVuZ3RoKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor
CisgICAgICAgICAgcmVzdWx0cy5sZW5ndGggPSBuZXdMZW5ndGg7CisKKyAgICAgICAgICByZXR1
cm4gcmVzdWx0czsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9OworCisgICAgdmFyICQk
cnN2cCRhc2FwJCRsZW4gPSAwOworCisgICAgdmFyICQkcnN2cCRhc2FwJCRkZWZhdWx0ID0gZnVu
Y3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7CisgICAgICAkJHJzdnAkYXNhcCQkcXVldWVbJCRy
c3ZwJGFzYXAkJGxlbl0gPSBjYWxsYmFjazsKKyAgICAgICQkcnN2cCRhc2FwJCRxdWV1ZVskJHJz
dnAkYXNhcCQkbGVuICsgMV0gPSBhcmc7CisgICAgICAkJHJzdnAkYXNhcCQkbGVuICs9IDI7Cisg
ICAgICBpZiAoJCRyc3ZwJGFzYXAkJGxlbiA9PT0gMikgeworICAgICAgICAvLyBJZiBsZW4gaXMg
MSwgdGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guCisg
ICAgICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBx
dWV1ZSBpcyBmbHVzaGVkLCB0aGV5CisgICAgICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRo
aXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy4KKyAgICAgICAgJCRyc3ZwJGFzYXAkJHNj
aGVkdWxlRmx1c2goKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgdmFyICQkcnN2cCRhc2FwJCRi
cm93c2VyR2xvYmFsID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSA/IHdpbmRvdyA6
IHt9OworICAgIHZhciAkJHJzdnAkYXNhcCQkQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSAkJHJz
dnAkYXNhcCQkYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8ICQkcnN2cCRhc2FwJCRi
cm93c2VyR2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7CisKKyAgICAvLyB0ZXN0IGZvciB3
ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMAorICAgIHZhciAkJHJzdnAkYXNhcCQkaXNXb3JrZXIg
PSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmCisgICAgICB0eXBl
b2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYKKyAgICAgIHR5cGVvZiBNZXNzYWdl
Q2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7CisKKyAgICAvLyBub2RlCisgICAgZnVuY3Rpb24gJCRy
c3ZwJGFzYXAkJHVzZU5leHRUaWNrKCkgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
ICAgICBwcm9jZXNzLm5leHRUaWNrKCQkcnN2cCRhc2FwJCRmbHVzaCk7CisgICAgICB9OworICAg
IH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCkgewor
ICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAwOworICAgICAgdmFyIG9ic2VydmVyID0gbmV3ICQkcnN2
cCRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlcigkJHJzdnAkYXNhcCQkZmx1c2gpOworICAg
ICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7CisgICAgICBvYnNlcnZl
ci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsKKworICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgeworICAgICAgICBub2RlLmRhdGEgPSAoaXRlcmF0aW9ucyA9ICsraXRlcmF0
aW9ucyAlIDIpOworICAgICAgfTsKKyAgICB9CisKKyAgICAvLyB3ZWIgd29ya2VyCisgICAgZnVu
Y3Rpb24gJCRyc3ZwJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCkgeworICAgICAgdmFyIGNoYW5u
ZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKKyAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdl
ID0gJCRyc3ZwJGFzYXAkJGZsdXNoOworICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTsKKyAgICAgIH07CisgICAgfQorCisgICAg
ZnVuY3Rpb24gJCRyc3ZwJGFzYXAkJHVzZVNldFRpbWVvdXQoKSB7CisgICAgICByZXR1cm4gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHNldFRpbWVvdXQoJCRyc3ZwJGFzYXAkJGZsdXNoLCAxKTsKKyAg
ICAgIH07CisgICAgfQorCisgICAgdmFyICQkcnN2cCRhc2FwJCRxdWV1ZSA9IG5ldyBBcnJheSgx
MDAwKTsKKworICAgIGZ1bmN0aW9uICQkcnN2cCRhc2FwJCRmbHVzaCgpIHsKKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgJCRyc3ZwJGFzYXAkJGxlbjsgaSs9MikgeworICAgICAgICB2YXIgY2Fs
bGJhY2sgPSAkJHJzdnAkYXNhcCQkcXVldWVbaV07CisgICAgICAgIHZhciBhcmcgPSAkJHJzdnAk
YXNhcCQkcXVldWVbaSsxXTsKKworICAgICAgICBjYWxsYmFjayhhcmcpOworCisgICAgICAgICQk
cnN2cCRhc2FwJCRxdWV1ZVtpXSA9IHVuZGVmaW5lZDsKKyAgICAgICAgJCRyc3ZwJGFzYXAkJHF1
ZXVlW2krMV0gPSB1bmRlZmluZWQ7CisgICAgICB9CisKKyAgICAgICQkcnN2cCRhc2FwJCRsZW4g
PSAwOworICAgIH0KKworICAgIHZhciAkJHJzdnAkYXNhcCQkc2NoZWR1bGVGbHVzaDsKKworICAg
IC8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNz
aW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6CisgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5k
ZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNz
XScpIHsKKyAgICAgICQkcnN2cCRhc2FwJCRzY2hlZHVsZUZsdXNoID0gJCRyc3ZwJGFzYXAkJHVz
ZU5leHRUaWNrKCk7CisgICAgfSBlbHNlIGlmICgkJHJzdnAkYXNhcCQkQnJvd3Nlck11dGF0aW9u
T2JzZXJ2ZXIpIHsKKyAgICAgICQkcnN2cCRhc2FwJCRzY2hlZHVsZUZsdXNoID0gJCRyc3ZwJGFz
YXAkJHVzZU11dGF0aW9uT2JzZXJ2ZXIoKTsKKyAgICB9IGVsc2UgaWYgKCQkcnN2cCRhc2FwJCRp
c1dvcmtlcikgeworICAgICAgJCRyc3ZwJGFzYXAkJHNjaGVkdWxlRmx1c2ggPSAkJHJzdnAkYXNh
cCQkdXNlTWVzc2FnZUNoYW5uZWwoKTsKKyAgICB9IGVsc2UgeworICAgICAgJCRyc3ZwJGFzYXAk
JHNjaGVkdWxlRmx1c2ggPSAkJHJzdnAkYXNhcCQkdXNlU2V0VGltZW91dCgpOworICAgIH0KKwor
ICAgIC8vIGRlZmF1bHQgYXN5bmMgaXMgYXNhcDsKKyAgICAkJHJzdnAkY29uZmlnJCRjb25maWcu
YXN5bmMgPSAkJHJzdnAkYXNhcCQkZGVmYXVsdDsKKworICAgIHZhciAkJHJzdnAkJGNhc3QgPSAk
JHJzdnAkcmVzb2x2ZSQkZGVmYXVsdDsKKworICAgIGZ1bmN0aW9uICQkcnN2cCQkYXN5bmMoY2Fs
bGJhY2ssIGFyZykgeworICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLmFzeW5jKGNhbGxiYWNr
LCBhcmcpOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCQkb24oKSB7CisgICAgICAkJHJz
dnAkY29uZmlnJCRjb25maWcub24uYXBwbHkoJCRyc3ZwJGNvbmZpZyQkY29uZmlnLCBhcmd1bWVu
dHMpOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCQkb2ZmKCkgeworICAgICAgJCRyc3Zw
JGNvbmZpZyQkY29uZmlnLm9mZi5hcHBseSgkJHJzdnAkY29uZmlnJCRjb25maWcsIGFyZ3VtZW50
cyk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIGluc3RydW1lbnRhdGlvbiB0aHJvdWdoIGB3aW5k
b3cuX19QUk9NSVNFX0lOVFJVTUVOVEFUSU9OX19gCisgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09
ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3dbJ19fUFJPTUlTRV9JTlNUUlVNRU5UQVRJT05f
XyddID09PSAnb2JqZWN0JykgeworICAgICAgdmFyICQkcnN2cCQkY2FsbGJhY2tzID0gd2luZG93
WydfX1BST01JU0VfSU5TVFJVTUVOVEFUSU9OX18nXTsKKyAgICAgICQkcnN2cCRjb25maWckJGNv
bmZpZ3VyZSgnaW5zdHJ1bWVudCcsIHRydWUpOworICAgICAgZm9yICh2YXIgJCRyc3ZwJCRldmVu
dE5hbWUgaW4gJCRyc3ZwJCRjYWxsYmFja3MpIHsKKyAgICAgICAgaWYgKCQkcnN2cCQkY2FsbGJh
Y2tzLmhhc093blByb3BlcnR5KCQkcnN2cCQkZXZlbnROYW1lKSkgeworICAgICAgICAgICQkcnN2
cCQkb24oJCRyc3ZwJCRldmVudE5hbWUsICQkcnN2cCQkY2FsbGJhY2tzWyQkcnN2cCQkZXZlbnRO
YW1lXSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgcnN2cCR1bWQkJFJT
VlAgPSB7CisgICAgICAncmFjZSc6ICQkcnN2cCRyYWNlJCRkZWZhdWx0LAorICAgICAgJ1Byb21p
c2UnOiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdCwKKyAgICAgICdhbGxTZXR0bGVkJzogJCRyc3Zw
JGFsbCRzZXR0bGVkJCRkZWZhdWx0LAorICAgICAgJ2hhc2gnOiAkJHJzdnAkaGFzaCQkZGVmYXVs
dCwKKyAgICAgICdoYXNoU2V0dGxlZCc6ICQkcnN2cCRoYXNoJHNldHRsZWQkJGRlZmF1bHQsCisg
ICAgICAnZGVub2RlaWZ5JzogJCRyc3ZwJG5vZGUkJGRlZmF1bHQsCisgICAgICAnb24nOiAkJHJz
dnAkJG9uLAorICAgICAgJ29mZic6ICQkcnN2cCQkb2ZmLAorICAgICAgJ21hcCc6ICQkcnN2cCRt
YXAkJGRlZmF1bHQsCisgICAgICAnZmlsdGVyJzogJCRyc3ZwJGZpbHRlciQkZGVmYXVsdCwKKyAg
ICAgICdyZXNvbHZlJzogJCRyc3ZwJHJlc29sdmUkJGRlZmF1bHQsCisgICAgICAncmVqZWN0Jzog
JCRyc3ZwJHJlamVjdCQkZGVmYXVsdCwKKyAgICAgICdhbGwnOiAkJHJzdnAkYWxsJCRkZWZhdWx0
LAorICAgICAgJ3JldGhyb3cnOiAkJHJzdnAkcmV0aHJvdyQkZGVmYXVsdCwKKyAgICAgICdkZWZl
cic6ICQkcnN2cCRkZWZlciQkZGVmYXVsdCwKKyAgICAgICdFdmVudFRhcmdldCc6ICQkcnN2cCRl
dmVudHMkJGRlZmF1bHQsCisgICAgICAnY29uZmlndXJlJzogJCRyc3ZwJGNvbmZpZyQkY29uZmln
dXJlLAorICAgICAgJ2FzeW5jJzogJCRyc3ZwJCRhc3luYworICAgIH07CisKKyAgICAvKiBnbG9i
YWwgZGVmaW5lOnRydWUgbW9kdWxlOnRydWUgd2luZG93OiB0cnVlICovCisgICAgaWYgKHR5cGVv
ZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAgICAgZGVmaW5lKGZ1
bmN0aW9uKCkgeyByZXR1cm4gcnN2cCR1bWQkJFJTVlA7IH0pOworICAgIH0gZWxzZSBpZiAodHlw
ZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKKyAgICAgIG1v
ZHVsZS5leHBvcnRzID0gcnN2cCR1bWQkJFJTVlA7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhp
cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgIHRoaXNbJ1JTVlAnXSA9IHJzdnAkdW1kJCRSU1ZQ
OworICAgIH0KK30pLmNhbGwodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9NYWluLmh0bWwKaW5kZXggOWQ2MjMxMzFjNzhmMmU3YTkyNTg3Y2IyZTA5YjEzNGUy
OTA1MjUwNy4uZDhmZGI1ZjY1MjNiMTRmM2UzNmM4YjI4NWE5NTYwMGU1MGQ3MmJlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbApAQCAtMTQzLDYg
KzE0Myw4IEBACiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJDb250cm9sbGVycy9D
b2RlTWlycm9yR3JhZGllbnRFZGl0aW5nQ29udHJvbGxlci5jc3MiPgogICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250
cm9sbGVyLmNzcyI+CiAKKyAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvUlNWUC9yc3ZwLmpzIj48
L3NjcmlwdD4KKwogICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Db2RlTWlycm9yL2NvZGVtaXJy
b3IuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0NvZGVNaXJyb3Iv
Y2xvanVyZS5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvUmVwbGF5U2Vzc2lvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXBsYXlTZXNzaW9uLmpzCmluZGV4IGMxMWEzZWRh
NDE5NDFlMGRjN2MxYTE0ZmE4N2E3MDFmNDk3NDlmYTAuLjI1NjM2MDMxMWMyODAzYjQwMDc2ZWQ4
NGY2NmZkZWUwM2Q4NGU4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9SZXBsYXlTZXNzaW9uLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXBsYXlTZXNzaW9uLmpzCkBAIC03Myw3ICs3Myw3
IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IHBlbmRpbmdTZWdtZW50cy5wdXNoKFdlYkluc3BlY3Rvci5yZXBsYXlNYW5hZ2VyLmdldFNlZ21l
bnQoc2VnbWVudElkKSk7CiAKICAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzOwotICAgICAgICBQ
cm9taXNlLmFsbChwZW5kaW5nU2VnbWVudHMpLnRoZW4oCisgICAgICAgIFdlYkluc3BlY3Rvci5Q
cm9taXNlLmFsbChwZW5kaW5nU2VnbWVudHMpLnRoZW4oCiAgICAgICAgICAgICBmdW5jdGlvbihz
ZWdtZW50c0FycmF5KSB7CiAgICAgICAgICAgICAgICAgc2Vzc2lvbi5fc2VnbWVudHMgPSBzZWdt
ZW50c0FycmF5OwogICAgICAgICAgICAgICAgIHNlc3Npb24uZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uLkV2ZW50LlNlZ21lbnRzQ2hhbmdlZCwge29s
ZFNlZ21lbnRzOiBvbGRTZWdtZW50c30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yQmFja2VuZC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckJhY2tlbmQuanMK
aW5kZXggZmU0ZTkzZTNlNGQwNGM3ZWU2YzgyMWNiYjUxMzA0MjdlNmY4YjgxMy4uMzQ3MjAxYTdl
MWIwZWFlMjU2OWVlYTIwODNmZmFhNzQyYTM5OWE4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yQmFja2VuZC5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JC
YWNrZW5kLmpzCkBAIC0zODgsNyArMzg4LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5Db21tYW5kLnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuX2luc3RhbmNl
OwogICAgICAgICB2YXIgcHJvbWlzZUFyZ3VtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNv
bHZlLCByZWplY3QpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRU
b1Byb21pc2VDYWxsYmFjayhlcnJvciwgcGF5bG9hZCkgewogICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKHBheWxvYWQpOwogICAgICAgICAgICAg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237317</attachid>
            <date>2014-08-28 10:25:19 -0700</date>
            <delta_ts>2014-08-28 12:13:32 -0700</delta_ts>
            <desc>Proposed fix (rebased)</desc>
            <filename>bug-135830-20140828102450.patch</filename>
            <type>text/plain</type>
            <size>65016</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAx
ZTAyY2YyOWQwMDkyMzQ1OGZmNDdlNTVmM2E5NmZlYjUxMmQ3MGIzLi4xODBjNDUwYjllNWE3NTU1
NmEzYjNkMzAzOGRmYTIwNDRlOWE1NDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxNC0wOC0yOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgUHJvbWlzZSByZWFjdGlvbnMgaW4gdGhlIEluc3BlY3RvciBwYWdl
IGRvIG5vdCBydW4gd2hlbiB0aGUgZGVidWdnZXIgaXMgcGF1c2VkIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
ODMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyB3aWxsIGhvcGVmdWxseSBiZSBmaXhlZCBieSBtdWx0aS1wcm9jZXNzIFdlYiBJbnNwZWN0b3Ig
aW4gdGhlIGZ1dHVyZSwgYnV0IHVudGlsIHRoYXQgbGFuZHMsIHdlCisgICAgICAgIGNhbiB1c2Ug
YSBwdXJlLUphdmFTY3JpcHQgcHJvbWlzZXMgaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHVz
ZSBjYWxsT25NYWluVGhyZWFkIHVuZGVyIHRoZSBob29kLgorCisgICAgICAgIFJlZmFjdG9yIGFs
bCBjYWxsc2l0ZXMgdG8gdXNlIFdlYkluc3BlY3Rvci5Qcm9taXNlIGFzIHRoZSBjb25zdHJ1Y3Rv
ciwgd2hpY2ggaXMgYXNzaWduZWQKKyAgICAgICAgdG8gdGhlIFJTVlAuUHJvbWlzZSBjb25zdHJ1
Y3RvciBub3cgKGJ1dCBjYW4gcmV2ZXJ0IHRvIHRoZSBuYXRpdmUgUHJvbWlzZSBjb25zdHJ1Y3Rv
ciBsYXRlcikuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvRE9NVXRpbGl0aWVzLmpz
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzOgorICAgICAgICAoSW5zcGVj
dG9yVGVzdC5yZWxvYWRQYWdlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0RlYnVnZ2VyTWFuYWdlci5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L1JlcGxheU1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5w
cm90b3R5cGUuZ2V0U2Vzc2lvbi5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBs
YXlNYW5hZ2VyLnByb3RvdHlwZS5nZXRTZWdtZW50LmdldCB2YXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLmNyZWF0ZVNlc3Npb24ucmV0dXJuKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9u
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5fc3VwcHJl
c3NCcmVha3BvaW50c0FuZFJlc3VtZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXBsYXlNYW5hZ2VyLnByb3RvdHlwZS5zdGFydENhcHR1cmluZy5yZXN1bHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnNlZ21lbnRVbmxv
YWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQL0xJ
Q0VOU0U6IEFkZGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvUlNWUC9yc3Zw
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL01vZGVscy9SZXBsYXlTZXNzaW9uLmpzOgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yQmFja2VuZC5qczoKKyAgICAgICAgKEluc3BlY3Rv
ckJhY2tlbmQuQ29tbWFuZC5wcm90b3R5cGUucHJvbWlzZSk6CisKIDIwMTQtMDgtMjcgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTGF5
b3V0IGlzc3VlcyBmb3IgcG9wb3ZlciBvbiBub3QgbGVnYWN5IE9TCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL0RPTVV0aWxpdGllcy5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvRE9NVXRpbGl0aWVzLmpzCmlu
ZGV4IDJkYmE2MTM0NzE1NDU0MTA3MTMxMmExMTg0NzQ3MjlhMWJmZGUyZDQuLmIwYzE1ZTQ2Mzcx
ZTIwMjY5MWFmNGJmNjBhN2E5Nzg1MTNhNzM2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvRE9NVXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvRE9NVXRpbGl0aWVzLmpzCkBAIC0yOSw2
ICsyOSw5IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKy8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
ciBwcm9ibGVtcyB3aXRoIHRoZSBkZWJ1Z2dlciBhbmQgbmF0aXZlIFByb21pc2VzLiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTM1ODMwPgorV2ViSW5zcGVjdG9yLlByb21pc2UgPSBSU1ZQLlByb21p
c2U7CisKIFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvck5vZGUgPSBmdW5jdGlvbihub2RlKQog
ewogICAgIHZhciB0aXRsZSA9IG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMKaW5kZXggYWI1
YWYxMDRhNDRjOTJhZWNhODFiZThiMGMxYjJlM2E4Yjc5ZWVmYS4uZTNiNTM3YWE4NDBmN2ZkYWE0
ZDMwZjY2NTU4NzIzNTgwOTRkMjA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvVGVzdC5qcwpAQCAtMjEzLDcgKzIxMyw3IEBAIEluc3BlY3RvclRl
c3QucmVsb2FkUGFnZSA9IGZ1bmN0aW9uKHNob3VsZElnbm9yZUNhY2hlKQogICAgICAgICAgICAg
dGhpcy5fc2hvdWxkUmVzZW5kUmVzdWx0cyA9IHRydWU7CiAgICAgICAgICAgICB0aGlzLl90ZXN0
UGFnZUlzUmVsb2FkaW5nID0gdHJ1ZTsKIAotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZShudWxsKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5yZXNv
bHZlKG51bGwpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5h
Z2VyLmpzCmluZGV4IDE3MzJkMzM3YzE1MjA4ZGJhOGI4ZWM5Njg1YjlhZDY1ZGYyZjhkZWQuLjAy
MTA0MmI4N2E5YTAwOWRkZWI4NWJiNmE5ZmJhYjVkMTIxMzc4OTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdl
ci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9EZWJ1Z2dlck1hbmFnZXIuanMKQEAgLTE0MywxMSArMTQzLDExIEBAIFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHBhdXNlOiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICBpZiAodGhpcy5fcGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpOworICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Qcm9taXNlLnJlc29s
dmUoKTsKIAogICAgICAgICB2YXIgbGlzdGVuZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXIodGhpcywgdHJ1ZSk7CiAKLSAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgdmFyIG1hbmFnZXJSZXN1
bHQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7
CiAgICAgICAgICAgICBsaXN0ZW5lci5jb25uZWN0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFn
ZXIsIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuUGF1c2VkLCByZXNvbHZlKTsK
ICAgICAgICAgfSk7CiAKQEAgLTE1OCwxNyArMTU4LDE3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAg
ICAgICAgICAgfSk7CiAKLSAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0
LCBwcm90b2NvbFJlc3VsdF0pOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2Uu
YWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwogICAgIH0sCiAKICAgICByZXN1
bWU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQotICAgICAg
ICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgICAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5Qcm9taXNlLnJlc29sdmUoKTsKIAogICAgICAgICB2YXIgbGlzdGVuZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIodGhpcywgdHJ1ZSk7CiAKLSAgICAgICAgdmFyIG1h
bmFnZXJSZXN1bHQgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAg
ICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVuY3Rp
b24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICBsaXN0ZW5lci5jb25uZWN0KFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIsIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZl
bnQuUmVzdW1lZCwgcmVzb2x2ZSk7CiAgICAgICAgIH0pOwogCkBAIC0xNzksMTcgKzE3OSwxNyBA
QCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
ICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHJldHVybiBQcm9t
aXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRdKTsKKyAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5Qcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRd
KTsKICAgICB9LAogCiAgICAgc3RlcE92ZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlm
ICghdGhpcy5fcGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBF
cnJvcigiQ2Fubm90IHN0ZXAgb3ZlciBiZWNhdXNlIGRlYnVnZ2VyIGlzIG5vdCBwYXVzZWQuIikp
OworICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Qcm9taXNlLnJlamVjdChuZXcgRXJy
b3IoIkNhbm5vdCBzdGVwIG92ZXIgYmVjYXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIpKTsK
IAogICAgICAgICB2YXIgbGlzdGVuZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIo
dGhpcywgdHJ1ZSk7CiAKLSAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgUHJvbWlzZShm
dW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBu
ZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAg
ICAgICAgICBsaXN0ZW5lci5jb25uZWN0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIsIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdl
LCByZXNvbHZlKTsKICAgICAgICAgfSk7CiAKQEAgLTIwMCwxNyArMjAwLDE3IEBAIFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRocm93
IGVycm9yOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtt
YW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOworICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLlByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwogICAgIH0s
CiAKICAgICBzdGVwSW50bzogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9w
YXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJDYW5u
b3Qgc3RlcCBpbnRvIGJlY2F1c2UgZGVidWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CisgICAgICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90
IHN0ZXAgaW50byBiZWNhdXNlIGRlYnVnZ2VyIGlzIG5vdCBwYXVzZWQuIikpOwogCiAgICAgICAg
IHZhciBsaXN0ZW5lciA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcih0aGlzLCB0cnVl
KTsKIAotICAgICAgICB2YXIgbWFuYWdlclJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgICB2YXIgbWFuYWdlclJlc3VsdCA9IG5ldyBXZWJJbnNw
ZWN0b3IuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgIGxp
c3RlbmVyLmNvbm5lY3QoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlciwgV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTWFuYWdlci5FdmVudC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHJlc29sdmUp
OwogICAgICAgICB9KTsKIApAQCAtMjIxLDE3ICsyMjEsMTcgQEAgV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAg
ICAgICAgICAgICB9KTsKIAotICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1
bHQsIHByb3RvY29sUmVzdWx0XSk7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlz
ZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7CiAgICAgfSwKIAogICAgIHN0
ZXBPdXQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQotICAg
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3V0
IGJlY2F1c2UgZGVidWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CisgICAgICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3V0IGJl
Y2F1c2UgZGVidWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CiAKICAgICAgICAgdmFyIGxpc3RlbmVy
ID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyKHRoaXMsIHRydWUpOwogCi0gICAgICAg
IHZhciBtYW5hZ2VyUmVzdWx0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7CisgICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9taXNl
KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICAgbGlzdGVuZXIuY29ubmVj
dChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5h
Z2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFtZURpZENoYW5nZSwgcmVzb2x2ZSk7CiAgICAgICAgIH0p
OwogCkBAIC0yNDIsNyArMjQyLDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsK
IAotICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVz
dWx0XSk7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5hbGwoW21hbmFnZXJS
ZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7CiAgICAgfSwKIAogICAgIGdldCBhbGxFeGNlcHRpb25z
QnJlYWtwb2ludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvUmVwbGF5TWFuYWdlci5qcwppbmRleCA0NmMwNTA1
MTM1ZGVlNDFmMzVmNTgxNmY4NDY2ZWU0NWNiMzZlYzM2Li5mMWQ5YTg3ODVjZWJiOTY5ZmU2MTQx
YWU3YTY2Y2JjMzU4NmUwN2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMKQEAg
LTE3Niw3ICsxNzYsNyBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgdmFyIG5ld1Byb21pc2UgPSBSZXBsYXlBZ2VudC5nZXRTZXNzaW9uRGF0YS5w
cm9taXNlKHNlc3Npb25JZCkKICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFdlYkluc3BlY3Rvci5SZXBs
YXlTZXNzaW9uLmZyb21QYXlsb2FkKHNlc3Npb25JZCwgcGF5bG9hZCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5yZXNvbHZlKFdlYkluc3BlY3Rvci5SZXBs
YXlTZXNzaW9uLmZyb21QYXlsb2FkKHNlc3Npb25JZCwgcGF5bG9hZCkpOwogICAgICAgICAgICAg
fSk7CiAKICAgICAgICAgdGhpcy5fc2Vzc2lvblByb21pc2VzLnNldChzZXNzaW9uSWQsIG5ld1By
b21pc2UpOwpAQCAtMTkxLDcgKzE5MSw3IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgbmV3UHJvbWlzZSA9IFJlcGxheUFnZW50LmdldFNl
Z21lbnREYXRhLnByb21pc2Uoc2VnbWVudElkKQogICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24o
cGF5bG9hZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFdl
Ykluc3BlY3Rvci5SZXBsYXlTZXNzaW9uU2VnbWVudChzZWdtZW50SWQsIHBheWxvYWQpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2UucmVzb2x2ZShuZXcgV2Vi
SW5zcGVjdG9yLlJlcGxheVNlc3Npb25TZWdtZW50KHNlZ21lbnRJZCwgcGF5bG9hZCkpOwogICAg
ICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fc2VnbWVudFByb21pc2VzLnNldChzZWdtZW50
SWQsIG5ld1Byb21pc2UpOwpAQCAtNTQ1LDcgKzU0NSw3IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gYmUgcmVtb3ZlZCBvbmNlIHRoZSBzZWdt
ZW50IGlzIGNvbXBsZXRlLCBhbmQgdGhlbiBpdHMgZGF0YSB3aWxsIGJlIGZldGNoZWQuCiAgICAg
ICAgIHZhciBpbmNvbXBsZXRlU2VnbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuSW5jb21wbGV0ZVNl
c3Npb25TZWdtZW50KHNlZ21lbnRJZCk7CiAgICAgICAgIHRoaXMuX3NlZ21lbnRzLnNldChzZWdt
ZW50SWQsIGluY29tcGxldGVTZWdtZW50KTsKLSAgICAgICAgdGhpcy5fc2VnbWVudFByb21pc2Vz
LnNldChzZWdtZW50SWQsIFByb21pc2UucmVzb2x2ZShpbmNvbXBsZXRlU2VnbWVudCkpOworICAg
ICAgICB0aGlzLl9zZWdtZW50UHJvbWlzZXMuc2V0KHNlZ21lbnRJZCwgV2ViSW5zcGVjdG9yLlBy
b21pc2UucmVzb2x2ZShpbmNvbXBsZXRlU2VnbWVudCkpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNlc3Np
b25TZWdtZW50QWRkZWQsIHtzZWdtZW50SWRlbnRpZmllcjogc2VnbWVudElkfSk7CiAgICAgfSwK
QEAgLTU4NCw3ICs1ODQsNyBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgIC8vIFdhaXQgZm9yIGFueSBvdXRzdGFuZGluZyBwcm9taXNlIHRvIHNldHRs
ZSBzbyBpdCBkb2Vzbid0IGdldCByZS1hZGRlZC4KICAgICAgICAgdGhpcy5nZXRTZWdtZW50KHNl
Z21lbnRJZCkKICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcikgewotICAgICAgICAg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlByb21pc2UucmVzb2x2ZSgpOwogICAgICAgICAgICAgfSkudGhlbihmdW5j
dGlvbigpIHsKICAgICAgICAgICAgICAgICBtYW5hZ2VyLl9zZWdtZW50UHJvbWlzZXMuZGVsZXRl
KHNlZ21lbnRJZCk7CiAgICAgICAgICAgICAgICAgdmFyIHJlbW92ZWRTZWdtZW50ID0gbWFuYWdl
ci5fc2VnbWVudHMudGFrZShzZWdtZW50SWQpOwpAQCAtNjcyLDcgKzY3Miw3IEBAIFdlYkluc3Bl
Y3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBtYW5h
Z2VyID0gdGhpczsKIAotICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVu
Y3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICBtYW5hZ2VyLl9icmVha3BvaW50
c1dlcmVTdXBwcmVzc2VkID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50
c0VuYWJsZWQ7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmJyZWFr
cG9pbnRzRW5hYmxlZCA9IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQL0xJQ0VOU0UgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU0
ZWM1OTkyZGY3NTA4NDk5YzQxZDBlOWQ3ZWQ3NGVmNWQ1MDMyYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL1JTVlAvTElDRU5T
RQpAQCAtMCwwICsxLDE5IEBACitDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBE
YWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMKKworUGVybWlzc2lvbiBpcyBoZXJl
YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29w
eSBvZgordGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0
aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0
aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29w
eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y
IHNlbGwgY29waWVzCitvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3
aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo
aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Ig
c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMg
UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP
UgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg
Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJ
R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX
SVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU
V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQ
L3JzdnAuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9S
U1ZQL3JzdnAuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQxZTQ1NjlhYzU4ZGYwZTA1N2JhMGNkNGIxZGUxYzk3
ODkyNDJjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0V4dGVybmFsL1JTVlAvcnN2cC5qcwpAQCAtMCwwICsxLDE2MTAgQEAKKy8qIQorICog
QG92ZXJ2aWV3IFJTVlAgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuCisg
KiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0
ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9ycworICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRl
ciBNSVQgbGljZW5zZQorICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNv
bnRlbnQuY29tL3RpbGRlaW8vcnN2cC5qcy9tYXN0ZXIvTElDRU5TRQorICogQHZlcnNpb24gICAz
LjAuMTMKKyAqLworCisoZnVuY3Rpb24oKSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVu
Y3Rpb24gJCRyc3ZwJGV2ZW50cyQkaW5kZXhPZihjYWxsYmFja3MsIGNhbGxiYWNrKSB7CisgICAg
ICBmb3IgKHZhciBpPTAsIGw9Y2FsbGJhY2tzLmxlbmd0aDsgaTxsOyBpKyspIHsKKyAgICAgICAg
aWYgKGNhbGxiYWNrc1tpXSA9PT0gY2FsbGJhY2spIHsgcmV0dXJuIGk7IH0KKyAgICAgIH0KKwor
ICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRldmVudHMkJGNh
bGxiYWNrc0ZvcihvYmplY3QpIHsKKyAgICAgIHZhciBjYWxsYmFja3MgPSBvYmplY3QuX3Byb21p
c2VDYWxsYmFja3M7CisKKyAgICAgIGlmICghY2FsbGJhY2tzKSB7CisgICAgICAgIGNhbGxiYWNr
cyA9IG9iamVjdC5fcHJvbWlzZUNhbGxiYWNrcyA9IHt9OworICAgICAgfQorCisgICAgICByZXR1
cm4gY2FsbGJhY2tzOworICAgIH0KKworICAgIHZhciAkJHJzdnAkZXZlbnRzJCRkZWZhdWx0ID0g
eworCisgICAgICAvKioKKyAgICAgICAgYFJTVlAuRXZlbnRUYXJnZXQubWl4aW5gIGV4dGVuZHMg
YW4gb2JqZWN0IHdpdGggRXZlbnRUYXJnZXQgbWV0aG9kcy4gRm9yCisgICAgICAgIEV4YW1wbGU6
CisKKyAgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgICB2YXIgb2JqZWN0ID0ge307CisKKyAg
ICAgICAgUlNWUC5FdmVudFRhcmdldC5taXhpbihvYmplY3QpOworCisgICAgICAgIG9iamVjdC5v
bignZmluaXNoZWQnLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgIC8vIGhhbmRsZSBldmVu
dAorICAgICAgICB9KTsKKworICAgICAgICBvYmplY3QudHJpZ2dlcignZmluaXNoZWQnLCB7IGRl
dGFpbDogdmFsdWUgfSk7CisgICAgICAgIGBgYAorCisgICAgICAgIGBFdmVudFRhcmdldC5taXhp
bmAgYWxzbyB3b3JrcyB3aXRoIHByb3RvdHlwZXM6CisKKyAgICAgICAgYGBgamF2YXNjcmlwdAor
ICAgICAgICB2YXIgUGVyc29uID0gZnVuY3Rpb24oKSB7fTsKKyAgICAgICAgUlNWUC5FdmVudFRh
cmdldC5taXhpbihQZXJzb24ucHJvdG90eXBlKTsKKworICAgICAgICB2YXIgeWVodWRhID0gbmV3
IFBlcnNvbigpOworICAgICAgICB2YXIgdG9tID0gbmV3IFBlcnNvbigpOworCisgICAgICAgIHll
aHVkYS5vbigncG9rZScsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgY29uc29sZS5sb2co
J1llaHVkYSBzYXlzIE9XJyk7CisgICAgICAgIH0pOworCisgICAgICAgIHRvbS5vbigncG9rZScs
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgY29uc29sZS5sb2coJ1RvbSBzYXlzIE9XJyk7
CisgICAgICAgIH0pOworCisgICAgICAgIHllaHVkYS50cmlnZ2VyKCdwb2tlJyk7CisgICAgICAg
IHRvbS50cmlnZ2VyKCdwb2tlJyk7CisgICAgICAgIGBgYAorCisgICAgICAgIEBtZXRob2QgbWl4
aW4KKyAgICAgICAgQGZvciBSU1ZQLkV2ZW50VGFyZ2V0CisgICAgICAgIEBwcml2YXRlCisgICAg
ICAgIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IHRvIGV4dGVuZCB3aXRoIEV2ZW50VGFy
Z2V0IG1ldGhvZHMKKyAgICAgICovCisgICAgICBtaXhpbjogZnVuY3Rpb24ob2JqZWN0KSB7Cisg
ICAgICAgIG9iamVjdC5vbiA9IHRoaXMub247CisgICAgICAgIG9iamVjdC5vZmYgPSB0aGlzLm9m
ZjsKKyAgICAgICAgb2JqZWN0LnRyaWdnZXIgPSB0aGlzLnRyaWdnZXI7CisgICAgICAgIG9iamVj
dC5fcHJvbWlzZUNhbGxiYWNrcyA9IHVuZGVmaW5lZDsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsK
KyAgICAgIH0sCisKKyAgICAgIC8qKgorICAgICAgICBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBi
ZSBleGVjdXRlZCB3aGVuIGBldmVudE5hbWVgIGlzIHRyaWdnZXJlZAorCisgICAgICAgIGBgYGph
dmFzY3JpcHQKKyAgICAgICAgb2JqZWN0Lm9uKCdldmVudCcsIGZ1bmN0aW9uKGV2ZW50SW5mbyl7
CisgICAgICAgICAgLy8gaGFuZGxlIHRoZSBldmVudAorICAgICAgICB9KTsKKworICAgICAgICBv
YmplY3QudHJpZ2dlcignZXZlbnQnKTsKKyAgICAgICAgYGBgCisKKyAgICAgICAgQG1ldGhvZCBv
bgorICAgICAgICBAZm9yIFJTVlAuRXZlbnRUYXJnZXQKKyAgICAgICAgQHByaXZhdGUKKyAgICAg
ICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4g
Zm9yCisgICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNh
bGxlZCB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuCisgICAgICAqLworICAgICAgb246IGZ1
bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGFsbENhbGxiYWNrcyA9
ICQkcnN2cCRldmVudHMkJGNhbGxiYWNrc0Zvcih0aGlzKSwgY2FsbGJhY2tzOworCisgICAgICAg
IGNhbGxiYWNrcyA9IGFsbENhbGxiYWNrc1tldmVudE5hbWVdOworCisgICAgICAgIGlmICghY2Fs
bGJhY2tzKSB7CisgICAgICAgICAgY2FsbGJhY2tzID0gYWxsQ2FsbGJhY2tzW2V2ZW50TmFtZV0g
PSBbXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkJHJzdnAkZXZlbnRzJCRpbmRleE9mKGNh
bGxiYWNrcywgY2FsbGJhY2spID09PSAtMSkgeworICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNh
bGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgIFlvdSBj
YW4gdXNlIGBvZmZgIHRvIHN0b3AgZmlyaW5nIGEgcGFydGljdWxhciBjYWxsYmFjayBmb3IgYW4g
ZXZlbnQ6CisKKyAgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgICBmdW5jdGlvbiBkb1N0dWZm
KCkgeyAvLyBkbyBzdHVmZiEgfQorICAgICAgICBvYmplY3Qub24oJ3N0dWZmJywgZG9TdHVmZik7
CisKKyAgICAgICAgb2JqZWN0LnRyaWdnZXIoJ3N0dWZmJyk7IC8vIGRvU3R1ZmYgd2lsbCBiZSBj
YWxsZWQKKworICAgICAgICAvLyBVbnJlZ2lzdGVyIE9OTFkgdGhlIGRvU3R1ZmYgY2FsbGJhY2sK
KyAgICAgICAgb2JqZWN0Lm9mZignc3R1ZmYnLCBkb1N0dWZmKTsKKyAgICAgICAgb2JqZWN0LnRy
aWdnZXIoJ3N0dWZmJyk7IC8vIGRvU3R1ZmYgd2lsbCBOT1QgYmUgY2FsbGVkCisgICAgICAgIGBg
YAorCisgICAgICAgIElmIHlvdSBkb24ndCBwYXNzIGEgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBg
b2ZmYCwgQUxMIGNhbGxiYWNrcyBmb3IgdGhlCisgICAgICAgIGV2ZW50IHdpbGwgbm90IGJlIGV4
ZWN1dGVkIHdoZW4gdGhlIGV2ZW50IGZpcmVzLiBGb3IgZXhhbXBsZToKKworICAgICAgICBgYGBq
YXZhc2NyaXB0CisgICAgICAgIHZhciBjYWxsYmFjazEgPSBmdW5jdGlvbigpe307CisgICAgICAg
IHZhciBjYWxsYmFjazIgPSBmdW5jdGlvbigpe307CisKKyAgICAgICAgb2JqZWN0Lm9uKCdzdHVm
ZicsIGNhbGxiYWNrMSk7CisgICAgICAgIG9iamVjdC5vbignc3R1ZmYnLCBjYWxsYmFjazIpOwor
CisgICAgICAgIG9iamVjdC50cmlnZ2VyKCdzdHVmZicpOyAvLyBjYWxsYmFjazEgYW5kIGNhbGxi
YWNrMiB3aWxsIGJlIGV4ZWN1dGVkLgorCisgICAgICAgIG9iamVjdC5vZmYoJ3N0dWZmJyk7Cisg
ICAgICAgIG9iamVjdC50cmlnZ2VyKCdzdHVmZicpOyAvLyBjYWxsYmFjazEgYW5kIGNhbGxiYWNr
MiB3aWxsIG5vdCBiZSBleGVjdXRlZCEKKyAgICAgICAgYGBgCisKKyAgICAgICAgQG1ldGhvZCBv
ZmYKKyAgICAgICAgQGZvciBSU1ZQLkV2ZW50VGFyZ2V0CisgICAgICAgIEBwcml2YXRlCisgICAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8K
KyAgICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgb3B0aW9uYWwgYXJndW1lbnQuIElm
IGdpdmVuLCBvbmx5IHRoZSBmdW5jdGlvbgorICAgICAgICBnaXZlbiB3aWxsIGJlIHJlbW92ZWQg
ZnJvbSB0aGUgZXZlbnQncyBjYWxsYmFjayBxdWV1ZS4gSWYgbm8gYGNhbGxiYWNrYAorICAgICAg
ICBhcmd1bWVudCBpcyBnaXZlbiwgYWxsIGNhbGxiYWNrcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0
aGUgZXZlbnQncyBjYWxsYmFjaworICAgICAgICBxdWV1ZS4KKyAgICAgICovCisgICAgICBvZmY6
IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGFsbENhbGxiYWNr
cyA9ICQkcnN2cCRldmVudHMkJGNhbGxiYWNrc0Zvcih0aGlzKSwgY2FsbGJhY2tzLCBpbmRleDsK
KworICAgICAgICBpZiAoIWNhbGxiYWNrKSB7CisgICAgICAgICAgYWxsQ2FsbGJhY2tzW2V2ZW50
TmFtZV0gPSBbXTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYWxs
YmFja3MgPSBhbGxDYWxsYmFja3NbZXZlbnROYW1lXTsKKworICAgICAgICBpbmRleCA9ICQkcnN2
cCRldmVudHMkJGluZGV4T2YoY2FsbGJhY2tzLCBjYWxsYmFjayk7CisKKyAgICAgICAgaWYgKGlu
ZGV4ICE9PSAtMSkgeyBjYWxsYmFja3Muc3BsaWNlKGluZGV4LCAxKTsgfQorICAgICAgfSwKKwor
ICAgICAgLyoqCisgICAgICAgIFVzZSBgdHJpZ2dlcmAgdG8gZmlyZSBjdXN0b20gZXZlbnRzLiBG
b3IgZXhhbXBsZToKKworICAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAgIG9iamVjdC5vbign
Zm9vJywgZnVuY3Rpb24oKXsKKyAgICAgICAgICBjb25zb2xlLmxvZygnZm9vIGV2ZW50IGhhcHBl
bmVkIScpOworICAgICAgICB9KTsKKyAgICAgICAgb2JqZWN0LnRyaWdnZXIoJ2ZvbycpOworICAg
ICAgICAvLyAnZm9vIGV2ZW50IGhhcHBlbmVkIScgbG9nZ2VkIHRvIHRoZSBjb25zb2xlCisgICAg
ICAgIGBgYAorCisgICAgICAgIFlvdSBjYW4gYWxzbyBwYXNzIGEgdmFsdWUgYXMgYSBzZWNvbmQg
YXJndW1lbnQgdG8gYHRyaWdnZXJgIHRoYXQgd2lsbCBiZQorICAgICAgICBwYXNzZWQgYXMgYW4g
YXJndW1lbnQgdG8gYWxsIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIGV2ZW50OgorCisgICAgICAg
IGBgYGphdmFzY3JpcHQKKyAgICAgICAgb2JqZWN0Lm9uKCdmb28nLCBmdW5jdGlvbih2YWx1ZSl7
CisgICAgICAgICAgY29uc29sZS5sb2codmFsdWUubmFtZSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIG9iamVjdC50cmlnZ2VyKCdmb28nLCB7IG5hbWU6ICdiYXInIH0pOworICAgICAgICAvLyAn
YmFyJyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUKKyAgICAgICAgYGBgCisKKyAgICAgICAgQG1ldGhv
ZCB0cmlnZ2VyCisgICAgICAgIEBmb3IgUlNWUC5FdmVudFRhcmdldAorICAgICAgICBAcHJpdmF0
ZQorICAgICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lIG5hbWUgb2YgdGhlIGV2ZW50IHRv
IGJlIHRyaWdnZXJlZAorICAgICAgICBAcGFyYW0ge0FueX0gb3B0aW9ucyBvcHRpb25hbCB2YWx1
ZSB0byBiZSBwYXNzZWQgdG8gYW55IGV2ZW50IGhhbmRsZXJzIGZvcgorICAgICAgICB0aGUgZ2l2
ZW4gYGV2ZW50TmFtZWAKKyAgICAgICovCisgICAgICB0cmlnZ2VyOiBmdW5jdGlvbihldmVudE5h
bWUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIGFsbENhbGxiYWNrcyA9ICQkcnN2cCRldmVudHMk
JGNhbGxiYWNrc0Zvcih0aGlzKSwgY2FsbGJhY2tzLCBjYWxsYmFjazsKKworICAgICAgICBpZiAo
Y2FsbGJhY2tzID0gYWxsQ2FsbGJhY2tzW2V2ZW50TmFtZV0pIHsKKyAgICAgICAgICAvLyBEb24n
dCBjYWNoZSB0aGUgY2FsbGJhY2tzLmxlbmd0aCBzaW5jZSBpdCBtYXkgZ3JvdworICAgICAgICAg
IGZvciAodmFyIGk9MDsgaTxjYWxsYmFja3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNh
bGxiYWNrID0gY2FsbGJhY2tzW2ldOworCisgICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OworCisgICAgdmFyICQkcnN2
cCRjb25maWckJGNvbmZpZyA9IHsKKyAgICAgIGluc3RydW1lbnQ6IGZhbHNlCisgICAgfTsKKwor
ICAgICQkcnN2cCRldmVudHMkJGRlZmF1bHQubWl4aW4oJCRyc3ZwJGNvbmZpZyQkY29uZmlnKTsK
KworICAgIGZ1bmN0aW9uICQkcnN2cCRjb25maWckJGNvbmZpZ3VyZShuYW1lLCB2YWx1ZSkgewor
ICAgICAgaWYgKG5hbWUgPT09ICdvbmVycm9yJykgeworICAgICAgICAvLyBoYW5kbGUgZm9yIGxl
Z2FjeSB1c2VycyB0aGF0IGV4cGVjdCB0aGUgYWN0dWFsCisgICAgICAgIC8vIGVycm9yIHRvIGJl
IHBhc3NlZCB0byB0aGVpciBmdW5jdGlvbiBhZGRlZCB2aWEKKyAgICAgICAgLy8gYFJTVlAuY29u
ZmlndXJlKCdvbmVycm9yJywgc29tZUZ1bmN0aW9uSGVyZSk7YAorICAgICAgICAkJHJzdnAkY29u
ZmlnJCRjb25maWcub24oJ2Vycm9yJywgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgICB9
CisKKyAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7CisgICAgICAgICQkcnN2cCRj
b25maWckJGNvbmZpZ1tuYW1lXSA9IHZhbHVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0
dXJuICQkcnN2cCRjb25maWckJGNvbmZpZ1tuYW1lXTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiAkJHV0aWxzJCRvYmplY3RPckZ1bmN0aW9uKHgpIHsKKyAgICAgIHJldHVybiB0eXBl
b2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51
bGwpOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkdXRpbHMkJGlzRnVuY3Rpb24oeCkgeworICAg
ICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nOworICAgIH0KKworICAgIGZ1bmN0aW9u
ICQkdXRpbHMkJGlzTWF5YmVUaGVuYWJsZSh4KSB7CisgICAgICByZXR1cm4gdHlwZW9mIHggPT09
ICdvYmplY3QnICYmIHggIT09IG51bGw7CisgICAgfQorCisgICAgdmFyICQkdXRpbHMkJF9pc0Fy
cmF5OworCisgICAgaWYgKCFBcnJheS5pc0FycmF5KSB7CisgICAgICAkJHV0aWxzJCRfaXNBcnJh
eSA9IGZ1bmN0aW9uICh4KSB7CisgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3Ry
aW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7CisgICAgICB9OworICAgIH0gZWxzZSB7
CisgICAgICAkJHV0aWxzJCRfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisgICAgfQorCisgICAg
dmFyICQkdXRpbHMkJGlzQXJyYXkgPSAkJHV0aWxzJCRfaXNBcnJheTsKKyAgICB2YXIgJCR1dGls
cyQkbm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRp
bWUoKTsgfTsKKyAgICBmdW5jdGlvbiAkJHV0aWxzJCRGKCkgeyB9CisKKyAgICB2YXIgJCR1dGls
cyQkb19jcmVhdGUgPSAoT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiAobykgeworICAgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignU2Vjb25k
IGFyZ3VtZW50IG5vdCBzdXBwb3J0ZWQnKTsKKyAgICAgIH0KKyAgICAgIGlmICh0eXBlb2YgbyAh
PT0gJ29iamVjdCcpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVz
dCBiZSBhbiBvYmplY3QnKTsKKyAgICAgIH0KKyAgICAgICQkdXRpbHMkJEYucHJvdG90eXBlID0g
bzsKKyAgICAgIHJldHVybiBuZXcgJCR1dGlscyQkRigpOworICAgIH0pOworCisgICAgdmFyICQk
aW5zdHJ1bWVudCQkcXVldWUgPSBbXTsKKworICAgIHZhciAkJGluc3RydW1lbnQkJGRlZmF1bHQg
PSBmdW5jdGlvbiBpbnN0cnVtZW50KGV2ZW50TmFtZSwgcHJvbWlzZSwgY2hpbGQpIHsKKyAgICAg
IGlmICgxID09PSAkJGluc3RydW1lbnQkJHF1ZXVlLnB1c2goeworICAgICAgICAgIG5hbWU6IGV2
ZW50TmFtZSwKKyAgICAgICAgICBwYXlsb2FkOiB7CisgICAgICAgICAgICBndWlkOiBwcm9taXNl
Ll9ndWlkS2V5ICsgcHJvbWlzZS5faWQsCisgICAgICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFt
ZSwKKyAgICAgICAgICAgIGRldGFpbDogcHJvbWlzZS5fcmVzdWx0LAorICAgICAgICAgICAgY2hp
bGRHdWlkOiBjaGlsZCAmJiBwcm9taXNlLl9ndWlkS2V5ICsgY2hpbGQuX2lkLAorICAgICAgICAg
ICAgbGFiZWw6IHByb21pc2UuX2xhYmVsLAorICAgICAgICAgICAgdGltZVN0YW1wOiAkJHV0aWxz
JCRub3coKSwKKyAgICAgICAgICAgIHN0YWNrOiBuZXcgRXJyb3IocHJvbWlzZS5fbGFiZWwpLnN0
YWNrCisgICAgICAgICAgfX0pKSB7CisKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgIHZhciBlbnRyeTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAkJGluc3RydW1lbnQkJHF1ZXVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgZW50cnkgPSAkJGluc3RydW1lbnQkJHF1ZXVlW2ldOworICAgICAgICAgICAgICAgICQkcnN2
cCRjb25maWckJGNvbmZpZy50cmlnZ2VyKGVudHJ5Lm5hbWUsIGVudHJ5LnBheWxvYWQpOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICQkaW5zdHJ1bWVudCQkcXVldWUubGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIH0sIDUwKTsKKyAgICAgICAgICB9CisgICAgICB9OworCisgICAgZnVu
Y3Rpb24gJCQkaW50ZXJuYWwkJG5vb3AoKSB7fQorICAgIHZhciAkJCRpbnRlcm5hbCQkUEVORElO
RyAgID0gdm9pZCAwOworICAgIHZhciAkJCRpbnRlcm5hbCQkRlVMRklMTEVEID0gMTsKKyAgICB2
YXIgJCQkaW50ZXJuYWwkJFJFSkVDVEVEICA9IDI7CisgICAgdmFyICQkJGludGVybmFsJCRHRVRf
VEhFTl9FUlJPUiA9IG5ldyAkJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTsKKworICAgIGZ1bmN0
aW9uICQkJGludGVybmFsJCRnZXRUaGVuKHByb21pc2UpIHsKKyAgICAgIHRyeSB7CisgICAgICAg
IHJldHVybiBwcm9taXNlLnRoZW47CisgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICQk
JGludGVybmFsJCRHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yOworICAgICAgICByZXR1cm4g
JCQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0
aW9uICQkJGludGVybmFsJCR0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIs
IHJlamVjdGlvbkhhbmRsZXIpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHRoZW4uY2FsbCh2YWx1
ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTsKKyAgICAgIH0gY2F0Y2go
ZSkgeworICAgICAgICByZXR1cm4gZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAk
JCRpbnRlcm5hbCQkaGFuZGxlRm9yZWlnblRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlLCB0aGVu
KSB7CisgICAgICAkJHJzdnAkY29uZmlnJCRjb25maWcuYXN5bmMoZnVuY3Rpb24ocHJvbWlzZSkg
eworICAgICAgICB2YXIgc2VhbGVkID0gZmFsc2U7CisgICAgICAgIHZhciBlcnJvciA9ICQkJGlu
dGVybmFsJCR0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
ICAgIGlmIChzZWFsZWQpIHsgcmV0dXJuOyB9CisgICAgICAgICAgc2VhbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICBpZiAodGhlbmFibGUgIT09IHZhbHVlKSB7CisgICAgICAgICAgICAkJCRpbnRlcm5h
bCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICQkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHZhbHVlKTsKKyAgICAgICAgICB9Cisg
ICAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICAgIGlmIChzZWFsZWQpIHsgcmV0
dXJuOyB9CisgICAgICAgICAgc2VhbGVkID0gdHJ1ZTsKKworICAgICAgICAgICQkJGludGVybmFs
JCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTsKKyAgICAgICAgfSwgJ1NldHRsZTogJyArIChwcm9t
aXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTsKKworICAgICAgICBpZiAoIXNlYWxl
ZCAmJiBlcnJvcikgeworICAgICAgICAgIHNlYWxlZCA9IHRydWU7CisgICAgICAgICAgJCQkaW50
ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlcnJvcik7CisgICAgICAgIH0KKyAgICAgIH0sIHByb21p
c2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRoYW5kbGVPd25UaGVuYWJs
ZShwcm9taXNlLCB0aGVuYWJsZSkgeworICAgICAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gJCQk
aW50ZXJuYWwkJEZVTEZJTExFRCkgeworICAgICAgICAkJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9t
aXNlLCB0aGVuYWJsZS5fcmVzdWx0KTsKKyAgICAgIH0gZWxzZSBpZiAocHJvbWlzZS5fc3RhdGUg
PT09ICQkJGludGVybmFsJCRSRUpFQ1RFRCkgeworICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0
KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJCQk
aW50ZXJuYWwkJHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbih2YWx1ZSkg
eworICAgICAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICQkJGlu
dGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKKyAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpOworICAgICAgICAg
IH0KKyAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwk
JHJlamVjdChwcm9taXNlLCByZWFzb24pOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBt
YXliZVRoZW5hYmxlKSB7CisgICAgICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0g
cHJvbWlzZS5jb25zdHJ1Y3RvcikgeworICAgICAgICAkJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhl
bmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB2
YXIgdGhlbiA9ICQkJGludGVybmFsJCRnZXRUaGVuKG1heWJlVGhlbmFibGUpOworCisgICAgICAg
IGlmICh0aGVuID09PSAkJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IpIHsKKyAgICAgICAgICAk
JCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsICQkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUi5l
cnJvcik7CisgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAg
ICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7CisgICAgICAg
IH0gZWxzZSBpZiAoJCR1dGlscyQkaXNGdW5jdGlvbih0aGVuKSkgeworICAgICAgICAgICQkJGlu
dGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhl
bik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJv
bWlzZSwgbWF5YmVUaGVuYWJsZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiAkJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkgeworICAgICAgaWYg
KHByb21pc2UgPT09IHZhbHVlKSB7CisgICAgICAgICQkJGludGVybmFsJCRmdWxmaWxsKHByb21p
c2UsIHZhbHVlKTsKKyAgICAgIH0gZWxzZSBpZiAoJCR1dGlscyQkb2JqZWN0T3JGdW5jdGlvbih2
YWx1ZSkpIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlz
ZSwgdmFsdWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwo
cHJvbWlzZSwgdmFsdWUpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVy
bmFsJCRwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHsKKyAgICAgIGlmIChwcm9taXNlLl9vbmVy
cm9yKSB7CisgICAgICAgIHByb21pc2UuX29uZXJyb3IocHJvbWlzZS5fcmVzdWx0KTsKKyAgICAg
IH0KKworICAgICAgJCQkaW50ZXJuYWwkJHB1Ymxpc2gocHJvbWlzZSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpIHsKKyAgICAgIGlm
IChwcm9taXNlLl9zdGF0ZSAhPT0gJCQkaW50ZXJuYWwkJFBFTkRJTkcpIHsgcmV0dXJuOyB9CisK
KyAgICAgIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlOworICAgICAgcHJvbWlzZS5fc3RhdGUgPSAk
JCRpbnRlcm5hbCQkRlVMRklMTEVEOworCisgICAgICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMu
bGVuZ3RoID09PSAwKSB7CisgICAgICAgIGlmICgkJHJzdnAkY29uZmlnJCRjb25maWcuaW5zdHJ1
bWVudCkgeworICAgICAgICAgICQkaW5zdHJ1bWVudCQkZGVmYXVsdCgnZnVsZmlsbGVkJywgcHJv
bWlzZSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICQkcnN2cCRjb25maWck
JGNvbmZpZy5hc3luYygkJCRpbnRlcm5hbCQkcHVibGlzaCwgcHJvbWlzZSk7CisgICAgICB9Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24p
IHsKKyAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gJCQkaW50ZXJuYWwkJFBFTkRJTkcpIHsg
cmV0dXJuOyB9CisgICAgICBwcm9taXNlLl9zdGF0ZSA9ICQkJGludGVybmFsJCRSRUpFQ1RFRDsK
KyAgICAgIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjsKKworICAgICAgJCRyc3ZwJGNvbmZpZyQk
Y29uZmlnLmFzeW5jKCQkJGludGVybmFsJCRwdWJsaXNoUmVqZWN0aW9uLCBwcm9taXNlKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQs
IG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7CisgICAgICB2YXIgc3Vic2NyaWJlcnMgPSBw
YXJlbnQuX3N1YnNjcmliZXJzOworICAgICAgdmFyIGxlbmd0aCA9IHN1YnNjcmliZXJzLmxlbmd0
aDsKKworICAgICAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDsKKworICAgICAgc3Vic2NyaWJlcnNb
bGVuZ3RoXSA9IGNoaWxkOworICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgJCQkaW50ZXJuYWwk
JEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50OworICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsg
JCQkaW50ZXJuYWwkJFJFSkVDVEVEXSAgPSBvblJlamVjdGlvbjsKKworICAgICAgaWYgKGxlbmd0
aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7CisgICAgICAgICQkcnN2cCRjb25maWckJGNvbmZp
Zy5hc3luYygkJCRpbnRlcm5hbCQkcHVibGlzaCwgcGFyZW50KTsKKyAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkcHVibGlzaChwcm9taXNlKSB7CisgICAgICB2YXIg
c3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVyczsKKyAgICAgIHZhciBzZXR0bGVkID0g
cHJvbWlzZS5fc3RhdGU7CisKKyAgICAgIGlmICgkJHJzdnAkY29uZmlnJCRjb25maWcuaW5zdHJ1
bWVudCkgeworICAgICAgICAkJGluc3RydW1lbnQkJGRlZmF1bHQoc2V0dGxlZCA9PT0gJCQkaW50
ZXJuYWwkJEZVTEZJTExFRCA/ICdmdWxmaWxsZWQnIDogJ3JlamVjdGVkJywgcHJvbWlzZSk7Cisg
ICAgICB9CisKKyAgICAgIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9
CisKKyAgICAgIHZhciBjaGlsZCwgY2FsbGJhY2ssIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDsK
KworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykg
eworICAgICAgICBjaGlsZCA9IHN1YnNjcmliZXJzW2ldOworICAgICAgICBjYWxsYmFjayA9IHN1
YnNjcmliZXJzW2kgKyBzZXR0bGVkXTsKKworICAgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAg
ICAkJCRpbnRlcm5hbCQkaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBk
ZXRhaWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNhbGxiYWNrKGRldGFpbCk7Cisg
ICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID0g
MDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKSB7Cisg
ICAgICB0aGlzLmVycm9yID0gbnVsbDsKKyAgICB9CisKKyAgICB2YXIgJCQkaW50ZXJuYWwkJFRS
WV9DQVRDSF9FUlJPUiA9IG5ldyAkJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTsKKworICAgIGZ1
bmN0aW9uICQkJGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7CisgICAgICB0
cnkgeworICAgICAgICByZXR1cm4gY2FsbGJhY2soZGV0YWlsKTsKKyAgICAgIH0gY2F0Y2goZSkg
eworICAgICAgICAkJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTsKKyAgICAg
ICAgcmV0dXJuICQkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1I7CisgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21p
c2UsIGNhbGxiYWNrLCBkZXRhaWwpIHsKKyAgICAgIHZhciBoYXNDYWxsYmFjayA9ICQkdXRpbHMk
JGlzRnVuY3Rpb24oY2FsbGJhY2spLAorICAgICAgICAgIHZhbHVlLCBlcnJvciwgc3VjY2VlZGVk
LCBmYWlsZWQ7CisKKyAgICAgIGlmIChoYXNDYWxsYmFjaykgeworICAgICAgICB2YWx1ZSA9ICQk
JGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTsKKworICAgICAgICBpZiAodmFs
dWUgPT09ICQkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IpIHsKKyAgICAgICAgICBmYWlsZWQg
PSB0cnVlOworICAgICAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7CisgICAgICAgICAgdmFsdWUg
PSBudWxsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAk
JCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2Fs
bGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKSk7CisgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlID0gZGV0YWls
OworICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOworICAgICAgfQorCisgICAgICBpZiAocHJvbWlz
ZS5fc3RhdGUgIT09ICQkJGludGVybmFsJCRQRU5ESU5HKSB7CisgICAgICAgIC8vIG5vb3AKKyAg
ICAgIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7CisgICAgICAgICQkJGlu
dGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKKyAgICAgIH0gZWxzZSBpZiAoZmFpbGVk
KSB7CisgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgZXJyb3IpOworICAgICAg
fSBlbHNlIGlmIChzZXR0bGVkID09PSAkJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7CisgICAgICAg
ICQkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHZhbHVlKTsKKyAgICAgIH0gZWxzZSBpZiAo
c2V0dGxlZCA9PT0gJCQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7CisgICAgICAgICQkJGludGVybmFs
JCRyZWplY3QocHJvbWlzZSwgdmFsdWUpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
ICQkJGludGVybmFsJCRpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikgeworICAg
ICAgdHJ5IHsKKyAgICAgICAgcmVzb2x2ZXIoZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UodmFsdWUp
eworICAgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKKyAgICAg
ICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHsKKyAgICAgICAgICAkJCRpbnRl
cm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7CisgICAgICAgIH0pOworICAgICAgfSBjYXRj
aChlKSB7CisgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgZSk7CisgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gJCRlbnVtZXJhdG9yJCRtYWtlU2V0dGxlZFJlc3VsdChz
dGF0ZSwgcG9zaXRpb24sIHZhbHVlKSB7CisgICAgICBpZiAoc3RhdGUgPT09ICQkJGludGVybmFs
JCRGVUxGSUxMRUQpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICBzdGF0ZTogJ2Z1bGZp
bGxlZCcsCisgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAgICB9IGVsc2Ug
eworICAgICAgICByZXR1cm4geworICAgICAgICAgIHN0YXRlOiAncmVqZWN0ZWQnLAorICAgICAg
ICAgIHJlYXNvbjogdmFsdWUKKyAgICAgICAgfTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5j
dGlvbiAkJGVudW1lcmF0b3IkJEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0LCBhYm9ydE9u
UmVqZWN0LCBsYWJlbCkgeworICAgICAgdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0
cnVjdG9yOworICAgICAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKCQkJGludGVybmFs
JCRub29wLCBsYWJlbCk7CisgICAgICB0aGlzLl9hYm9ydE9uUmVqZWN0ID0gYWJvcnRPblJlamVj
dDsKKworICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlSW5wdXQoaW5wdXQpKSB7CisgICAgICAgIHRo
aXMuX2lucHV0ICAgICA9IGlucHV0OworICAgICAgICB0aGlzLmxlbmd0aCAgICAgPSBpbnB1dC5s
ZW5ndGg7CisgICAgICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDsKKworICAgICAg
ICB0aGlzLl9pbml0KCk7CisKKyAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7CisgICAg
ICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwg
MDsKKyAgICAgICAgICB0aGlzLl9lbnVtZXJhdGUoKTsKKyAgICAgICAgICBpZiAodGhpcy5fcmVt
YWluaW5nID09PSAwKSB7CisgICAgICAgICAgICAkJCRpbnRlcm5hbCQkZnVsZmlsbCh0aGlzLnBy
b21pc2UsIHRoaXMuX3Jlc3VsdCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVs
c2UgeworICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHRoaXMucHJvbWlzZSwgdGhpcy5fdmFs
aWRhdGlvbkVycm9yKCkpOworICAgICAgfQorICAgIH0KKworICAgICQkZW51bWVyYXRvciQkRW51
bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXQgPSBmdW5jdGlvbihpbnB1dCkgeworICAg
ICAgcmV0dXJuICQkdXRpbHMkJGlzQXJyYXkoaW5wdXQpOworICAgIH07CisKKyAgICAkJGVudW1l
cmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbigp
IHsKKyAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRl
ZCBhbiBBcnJheScpOworICAgIH07CisKKyAgICAkJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJv
dG90eXBlLl9pbml0ID0gZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLl9yZXN1bHQgPSBuZXcgQXJy
YXkodGhpcy5sZW5ndGgpOworICAgIH07CisKKyAgICB2YXIgJCRlbnVtZXJhdG9yJCRkZWZhdWx0
ID0gJCRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yOworCisgICAgJCRlbnVtZXJhdG9yJCRFbnVtZXJh
dG9yLnByb3RvdHlwZS5fZW51bWVyYXRlID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbGVuZ3Ro
ICA9IHRoaXMubGVuZ3RoOworICAgICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7CisgICAg
ICB2YXIgaW5wdXQgICA9IHRoaXMuX2lucHV0OworCisgICAgICBmb3IgKHZhciBpID0gMDsgcHJv
bWlzZS5fc3RhdGUgPT09ICQkJGludGVybmFsJCRQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICB0aGlzLl9lYWNoRW50cnkoaW5wdXRbaV0sIGkpOworICAgICAgfQorICAgIH07
CisKKyAgICAkJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl9lYWNoRW50cnkgPSBm
dW5jdGlvbihlbnRyeSwgaSkgeworICAgICAgdmFyIGMgPSB0aGlzLl9pbnN0YW5jZUNvbnN0cnVj
dG9yOworICAgICAgaWYgKCQkdXRpbHMkJGlzTWF5YmVUaGVuYWJsZShlbnRyeSkpIHsKKyAgICAg
ICAgaWYgKGVudHJ5LmNvbnN0cnVjdG9yID09PSBjICYmIGVudHJ5Ll9zdGF0ZSAhPT0gJCQkaW50
ZXJuYWwkJFBFTkRJTkcpIHsKKyAgICAgICAgICBlbnRyeS5fb25lcnJvciA9IG51bGw7CisgICAg
ICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KGMucmVzb2x2ZShl
bnRyeSksIGkpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLl9yZW1h
aW5pbmctLTsKKyAgICAgICAgdGhpcy5fcmVzdWx0W2ldID0gdGhpcy5fbWFrZVJlc3VsdCgkJCRp
bnRlcm5hbCQkRlVMRklMTEVELCBpLCBlbnRyeSk7CisgICAgICB9CisgICAgfTsKKworICAgICQk
ZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uKHN0
YXRlLCBpLCB2YWx1ZSkgeworICAgICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7CisKKyAg
ICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJFBFTkRJTkcpIHsKKyAgICAg
ICAgdGhpcy5fcmVtYWluaW5nLS07CisKKyAgICAgICAgaWYgKHRoaXMuX2Fib3J0T25SZWplY3Qg
JiYgc3RhdGUgPT09ICQkJGludGVybmFsJCRSRUpFQ1RFRCkgeworICAgICAgICAgICQkJGludGVy
bmFsJCRyZWplY3QocHJvbWlzZSwgdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IHRoaXMuX3Jlc3VsdFtpXSA9IHRoaXMuX21ha2VSZXN1bHQoc3RhdGUsIGksIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7Cisg
ICAgICAgICQkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7CisgICAg
ICB9CisgICAgfTsKKworICAgICQkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX21h
a2VSZXN1bHQgPSBmdW5jdGlvbihzdGF0ZSwgaSwgdmFsdWUpIHsKKyAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9OworCisgICAgJCRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fd2ls
bFNldHRsZUF0ID0gZnVuY3Rpb24ocHJvbWlzZSwgaSkgeworICAgICAgdmFyIGVudW1lcmF0b3Ig
PSB0aGlzOworCisgICAgICAkJCRpbnRlcm5hbCQkc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5l
ZCwgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KCQkJGlu
dGVybmFsJCRGVUxGSUxMRUQsIGksIHZhbHVlKTsKKyAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikg
eworICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoJCQkaW50ZXJuYWwkJFJFSkVDVEVELCBp
LCByZWFzb24pOworICAgICAgfSk7CisgICAgfTsKKworICAgIHZhciAkJHByb21pc2UkYWxsJCRk
ZWZhdWx0ID0gZnVuY3Rpb24gYWxsKGVudHJpZXMsIGxhYmVsKSB7CisgICAgICByZXR1cm4gbmV3
ICQkZW51bWVyYXRvciQkZGVmYXVsdCh0aGlzLCBlbnRyaWVzLCB0cnVlIC8qIGFib3J0IG9uIHJl
amVjdCAqLywgbGFiZWwpLnByb21pc2U7CisgICAgfTsKKworICAgIHZhciAkJHByb21pc2UkcmFj
ZSQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJhY2UoZW50cmllcywgbGFiZWwpIHsKKyAgICAgIC8qanNo
aW50IHZhbGlkdGhpczp0cnVlICovCisgICAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzOworCisg
ICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcigkJCRpbnRlcm5hbCQkbm9vcCwgbGFi
ZWwpOworCisgICAgICBpZiAoISQkdXRpbHMkJGlzQXJyYXkoZW50cmllcykpIHsKKyAgICAgICAg
JCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNz
IGFuIGFycmF5IHRvIHJhY2UuJykpOworICAgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICAgIH0K
KworICAgICAgdmFyIGxlbmd0aCA9IGVudHJpZXMubGVuZ3RoOworCisgICAgICBmdW5jdGlvbiBv
bkZ1bGZpbGxtZW50KHZhbHVlKSB7CisgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21p
c2UsIHZhbHVlKTsKKyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29u
KSB7CisgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTsKKyAgICAg
IH0KKworICAgICAgZm9yICh2YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSAkJCRpbnRlcm5h
bCQkUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHN1
YnNjcmliZShDb25zdHJ1Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVs
ZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHByb21pc2U7
CisgICAgfTsKKworICAgIHZhciAkJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdCA9IGZ1bmN0aW9u
IHJlc29sdmUob2JqZWN0LCBsYWJlbCkgeworICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUg
Ki8KKyAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7CisKKyAgICAgIGlmIChvYmplY3QgJiYg
dHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25z
dHJ1Y3RvcikgeworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgfQorCisgICAgICB2YXIg
cHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcigkJCRpbnRlcm5hbCQkbm9vcCwgbGFiZWwpOworICAg
ICAgJCQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTsKKyAgICAgIHJldHVybiBw
cm9taXNlOworICAgIH07CisKKyAgICB2YXIgJCRwcm9taXNlJHJlamVjdCQkZGVmYXVsdCA9IGZ1
bmN0aW9uIHJlamVjdChyZWFzb24sIGxhYmVsKSB7CisgICAgICAvKmpzaGludCB2YWxpZHRoaXM6
dHJ1ZSAqLworICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpczsKKyAgICAgIHZhciBwcm9taXNl
ID0gbmV3IENvbnN0cnVjdG9yKCQkJGludGVybmFsJCRub29wLCBsYWJlbCk7CisgICAgICAkJCRp
bnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7CisgICAgICByZXR1cm4gcHJvbWlzZTsK
KyAgICB9OworCisgICAgdmFyICQkcnN2cCRwcm9taXNlJCRndWlkS2V5ID0gJ3JzdnBfJyArICQk
dXRpbHMkJG5vdygpICsgJy0nOworICAgIHZhciAkJHJzdnAkcHJvbWlzZSQkY291bnRlciA9IDA7
CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpIHsKKyAgICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBh
cyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3InKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkcHJvbWlzZSQkbmVlZHNOZXcoKSB7CisgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVz
ZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBj
YWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKKyAgICB9CisKKyAgICB2YXIgJCRyc3ZwJHByb21pc2Uk
JGRlZmF1bHQgPSAkJHJzdnAkcHJvbWlzZSQkUHJvbWlzZTsKKworICAgIC8qKgorICAgICAgUHJv
bWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJv
bm91cyBvcGVyYXRpb24uIFRoZQorICAgICAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0
aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2gKKyAgICAgIHJl
Z2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlw6LigqzihKJzIGV2
ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb24KKyAgICAgIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3Qg
YmUgZnVsZmlsbGVkLgorCisgICAgICBUZXJtaW5vbG9neQorICAgICAgLS0tLS0tLS0tLS0KKwor
ICAgICAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAg
bWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi4KKyAg
ICAgIC0gYHRoZW5hYmxlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEg
YHRoZW5gIG1ldGhvZC4KKyAgICAgIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2
YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS4KKyAg
ICAgIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhy
b3cgc3RhdGVtZW50LgorICAgICAgLSBgcmVhc29uYCBpcyBhIHZhbHVlIHRoYXQgaW5kaWNhdGVz
IHdoeSBhIHByb21pc2Ugd2FzIHJlamVjdGVkLgorICAgICAgLSBgc2V0dGxlZGAgdGhlIGZpbmFs
IHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuCisKKyAg
ICAgIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVs
ZmlsbGVkLCBvciByZWplY3RlZC4KKworICAgICAgUHJvbWlzZXMgdGhhdCBhcmUgZnVsZmlsbGVk
IGhhdmUgYSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgYXJlIGluIHRoZSBmdWxmaWxsZWQKKyAgICAg
IHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFz
b24gYW5kIGFyZSBpbiB0aGUKKyAgICAgIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2
YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLgorCisgICAgICBQcm9taXNlcyBjYW4gYWxzbyBiZSBz
YWlkIHRvICpyZXNvbHZlKiBhIHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBhbHNvIGEKKyAgICAg
IHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwg
bWF0Y2ggdGhlIHZhbHVlJ3MKKyAgICAgIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhh
dCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbAorICAgICAgaXRzZWxmIHJl
amVjdCwgYW5kIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgZnVsZmls
bHMgd2lsbAorICAgICAgaXRzZWxmIGZ1bGZpbGwuCisKKworICAgICAgQmFzaWMgVXNhZ2U6Cisg
ICAgICAtLS0tLS0tLS0tLS0KKworICAgICAgYGBganMKKyAgICAgIHZhciBwcm9taXNlID0gbmV3
IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIC8vIG9uIHN1Y2Nl
c3MKKyAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7CisKKyAgICAgICAgLy8gb24gZmFpbHVyZQorICAg
ICAgICByZWplY3QocmVhc29uKTsKKyAgICAgIH0pOworCisgICAgICBwcm9taXNlLnRoZW4oZnVu
Y3Rpb24odmFsdWUpIHsKKyAgICAgICAgLy8gb24gZnVsZmlsbG1lbnQKKyAgICAgIH0sIGZ1bmN0
aW9uKHJlYXNvbikgeworICAgICAgICAvLyBvbiByZWplY3Rpb24KKyAgICAgIH0pOworICAgICAg
YGBgCisKKyAgICAgIEFkdmFuY2VkIFVzYWdlOgorICAgICAgLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICAgIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50
ZXJhY3Rpb25zIHN1Y2ggYXMKKyAgICAgIGBYTUxIdHRwUmVxdWVzdGBzLgorCisgICAgICBgYGBq
cworICAgICAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9t
aXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7CisgICAgICAgICAgdmFyIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworCisgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7CisgICAg
ICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7CisgICAgICAgICAgeGhyLnJl
c3BvbnNlVHlwZSA9ICdqc29uJzsKKyAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNj
ZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTsKKyAgICAgICAgICB4aHIuc2VuZCgpOworCisgICAg
ICAgICAgZnVuY3Rpb24gaGFuZGxlcigpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3Rh
dGUgPT09IHRoaXMuRE9ORSkgeworICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIw
MCkgeworICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNwb25zZSk7CisgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjog
YCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScp
KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAg
IH0pOworICAgICAgfQorCisgICAgICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rp
b24oanNvbikgeworICAgICAgICAvLyBvbiBmdWxmaWxsbWVudAorICAgICAgfSwgZnVuY3Rpb24o
cmVhc29uKSB7CisgICAgICAgIC8vIG9uIHJlamVjdGlvbgorICAgICAgfSk7CisgICAgICBgYGAK
KworICAgICAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUg
cHJpbWl0aXZlcy4KKworICAgICAgYGBganMKKyAgICAgIFByb21pc2UuYWxsKFsKKyAgICAgICAg
Z2V0SlNPTignL3Bvc3RzJyksCisgICAgICAgIGdldEpTT04oJy9jb21tZW50cycpCisgICAgICBd
KS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7CisgICAgICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pT
T04KKyAgICAgICAgdmFsdWVzWzFdIC8vID0+IGNvbW1lbnRzSlNPTgorCisgICAgICAgIHJldHVy
biB2YWx1ZXM7CisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBAY2xhc3MgUlNWUC5Qcm9t
aXNlCisgICAgICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlcgorICAgICAgQHBhcmFtIHtTdHJp
bmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCisgICAg
ICBVc2VmdWwgZm9yIHRvb2xpbmcuCisgICAgICBAY29uc3RydWN0b3IKKyAgICAqLworICAgIGZ1
bmN0aW9uICQkcnN2cCRwcm9taXNlJCRQcm9taXNlKHJlc29sdmVyLCBsYWJlbCkgeworICAgICAg
dGhpcy5faWQgPSAkJHJzdnAkcHJvbWlzZSQkY291bnRlcisrOworICAgICAgdGhpcy5fbGFiZWwg
PSBsYWJlbDsKKyAgICAgIHRoaXMuX3N0YXRlID0gdW5kZWZpbmVkOworICAgICAgdGhpcy5fcmVz
dWx0ID0gdW5kZWZpbmVkOworICAgICAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTsKKworICAgICAg
aWYgKCQkcnN2cCRjb25maWckJGNvbmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAgICQkaW5zdHJ1
bWVudCQkZGVmYXVsdCgnY3JlYXRlZCcsIHRoaXMpOworICAgICAgfQorCisgICAgICBpZiAoJCQk
aW50ZXJuYWwkJG5vb3AgIT09IHJlc29sdmVyKSB7CisgICAgICAgIGlmICghJCR1dGlscyQkaXNG
dW5jdGlvbihyZXNvbHZlcikpIHsKKyAgICAgICAgICAkJHJzdnAkcHJvbWlzZSQkbmVlZHNSZXNv
bHZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mICQkcnN2
cCRwcm9taXNlJCRQcm9taXNlKSkgeworICAgICAgICAgICQkcnN2cCRwcm9taXNlJCRuZWVkc05l
dygpOworICAgICAgICB9CisKKyAgICAgICAgJCQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNl
KHRoaXMsIHJlc29sdmVyKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBkZXByZWNhdGVkCisg
ICAgJCRyc3ZwJHByb21pc2UkJFByb21pc2UuY2FzdCA9ICQkcHJvbWlzZSRyZXNvbHZlJCRkZWZh
dWx0OworCisgICAgJCRyc3ZwJHByb21pc2UkJFByb21pc2UuYWxsID0gJCRwcm9taXNlJGFsbCQk
ZGVmYXVsdDsKKyAgICAkJHJzdnAkcHJvbWlzZSQkUHJvbWlzZS5yYWNlID0gJCRwcm9taXNlJHJh
Y2UkJGRlZmF1bHQ7CisgICAgJCRyc3ZwJHByb21pc2UkJFByb21pc2UucmVzb2x2ZSA9ICQkcHJv
bWlzZSRyZXNvbHZlJCRkZWZhdWx0OworICAgICQkcnN2cCRwcm9taXNlJCRQcm9taXNlLnJlamVj
dCA9ICQkcHJvbWlzZSRyZWplY3QkJGRlZmF1bHQ7CisKKyAgICAkJHJzdnAkcHJvbWlzZSQkUHJv
bWlzZS5wcm90b3R5cGUgPSB7CisgICAgICBjb25zdHJ1Y3RvcjogJCRyc3ZwJHByb21pc2UkJFBy
b21pc2UsCisKKyAgICAgIF9ndWlkS2V5OiAkJHJzdnAkcHJvbWlzZSQkZ3VpZEtleSwKKworICAg
ICAgX29uZXJyb3I6IGZ1bmN0aW9uIChyZWFzb24pIHsKKyAgICAgICAgJCRyc3ZwJGNvbmZpZyQk
Y29uZmlnLnRyaWdnZXIoJ2Vycm9yJywgcmVhc29uKTsKKyAgICAgIH0sCisKKyAgICAvKioKKyAg
ICAgIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJv
dWdoIGl0cyBgdGhlbmAgbWV0aG9kLAorICAgICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0
byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUKKyAgICAg
IHJlYXNvbiB3aHkgdGhlIHByb21pc2UgY2Fubm90IGJlIGZ1bGZpbGxlZC4KKworICAgICAgYGBg
anMKKyAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbih1c2VyKXsKKyAgICAgICAgLy8gdXNl
ciBpcyBhdmFpbGFibGUKKyAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7CisgICAgICAgIC8vIHVz
ZXIgaXMgdW5hdmFpbGFibGUsIGFuZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5CisgICAg
ICB9KTsKKyAgICAgIGBgYAorCisgICAgICBDaGFpbmluZworICAgICAgLS0tLS0tLS0KKworICAg
ICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMg
c2Vjb25kLCAnZG93bnN0cmVhbScKKyAgICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUg
cmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnQKKyAgICAgIG9y
IHJlamVjdGlvbiBoYW5kbGVyLCBvciByZWplY3RlZCBpZiB0aGUgaGFuZGxlciB0aHJvd3MgYW4g
ZXhjZXB0aW9uLgorCisgICAgICBgYGBqcworICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9u
ICh1c2VyKSB7CisgICAgICAgIHJldHVybiB1c2VyLm5hbWU7CisgICAgICB9LCBmdW5jdGlvbiAo
cmVhc29uKSB7CisgICAgICAgIHJldHVybiAnZGVmYXVsdCBuYW1lJzsKKyAgICAgIH0pLnRoZW4o
ZnVuY3Rpb24gKHVzZXJOYW1lKSB7CisgICAgICAgIC8vIElmIGBmaW5kVXNlcmAgZnVsZmlsbGVk
LCBgdXNlck5hbWVgIHdpbGwgYmUgdGhlIHVzZXIncyBuYW1lLCBvdGhlcndpc2UgaXQKKyAgICAg
ICAgLy8gd2lsbCBiZSBgJ2RlZmF1bHQgbmFtZSdgCisgICAgICB9KTsKKworICAgICAgZmluZFVz
ZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91
bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknKTsKKyAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24p
IHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdy
ZSB1bmhhcHB5Jyk7CisgICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAv
LyBuZXZlciByZWFjaGVkCisgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIC8v
IGlmIGBmaW5kVXNlcmAgZnVsZmlsbGVkLCBgcmVhc29uYCB3aWxsIGJlICdGb3VuZCB1c2VyLCBi
dXQgc3RpbGwgdW5oYXBweScuCisgICAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGBy
ZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLgor
ICAgICAgfSk7CisgICAgICBgYGAKKyAgICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9l
cyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxs
IGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLgorCisgICAgICBgYGBqcworICAgICAg
ZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7CisgICAgICAgIHRocm93IG5ldyBQZWRh
Z29naWNhbEV4Y2VwdGlvbignVXBzdHJlYW0gZXJyb3InKTsKKyAgICAgIH0pLnRoZW4oZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgIC8vIG5ldmVyIHJlYWNoZWQKKyAgICAgIH0pLnRoZW4oZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgIC8vIG5ldmVyIHJlYWNoZWQKKyAgICAgIH0sIGZ1bmN0
aW9uIChyZWFzb24pIHsKKyAgICAgICAgLy8gVGhlIGBQZWRnYWdvY2lhbEV4Y2VwdGlvbmAgaXMg
cHJvcGFnYXRlZCBhbGwgdGhlIHdheSBkb3duIHRvIGhlcmUKKyAgICAgIH0pOworICAgICAgYGBg
CisKKyAgICAgIEFzc2ltaWxhdGlvbgorICAgICAgLS0tLS0tLS0tLS0tCisKKyAgICAgIFNvbWV0
aW1lcyB0aGUgdmFsdWUgeW91IHdhbnQgdG8gcHJvcGFnYXRlIHRvIGEgZG93bnN0cmVhbSBwcm9t
aXNlIGNhbiBvbmx5IGJlCisgICAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2Fu
IGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlCisgICAgICBmdWxmaWxs
bWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRo
ZW4gYmUgcGVuZGluZworICAgICAgdW50aWwgdGhlIHJldHVybmVkIHByb21pc2UgaXMgc2V0dGxl
ZC4gVGhpcyBpcyBjYWxsZWQgKmFzc2ltaWxhdGlvbiouCisKKyAgICAgIGBgYGpzCisgICAgICBm
aW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRDb21t
ZW50c0J5QXV0aG9yKHVzZXIpOworICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29tbWVudHMpIHsK
KyAgICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZQorICAgICAg
fSk7CisgICAgICBgYGAKKworICAgICAgSWYgdGhlIGFzc2ltbGlhdGVkIHByb21pc2UgcmVqZWN0
cywgdGhlbiB0aGUgZG93bnN0cmVhbSBwcm9taXNlIHdpbGwgYWxzbyByZWplY3QuCisKKyAgICAg
IGBgYGpzCisgICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKKyAgICAgICAg
cmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpOworICAgICAgfSkudGhlbihmdW5jdGlv
biAoY29tbWVudHMpIHsKKyAgICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxm
aWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZQorICAgICAgfSwgZnVuY3Rpb24gKHJlYXNv
bikgeworICAgICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIHJlamVjdHMsIHdlJ2xs
IGhhdmUgdGhlIHJlYXNvbiBoZXJlCisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBTaW1w
bGUgRXhhbXBsZQorICAgICAgLS0tLS0tLS0tLS0tLS0KKworICAgICAgU3luY2hyb25vdXMgRXhh
bXBsZQorCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICB2YXIgcmVzdWx0OworCisgICAgICB0
cnkgeworICAgICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7CisgICAgICAgIC8vIHN1Y2Nlc3MK
KyAgICAgIH0gY2F0Y2gocmVhc29uKSB7CisgICAgICAgIC8vIGZhaWx1cmUKKyAgICAgIH0KKyAg
ICAgIGBgYAorCisgICAgICBFcnJiYWNrIEV4YW1wbGUKKworICAgICAgYGBganMKKyAgICAgIGZp
bmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpeworICAgICAgICBpZiAoZXJyKSB7CisgICAg
ICAgICAgLy8gZmFpbHVyZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIHN1Y2Nlc3MK
KyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKworICAgICAgUHJvbWlzZSBFeGFtcGxl
OworCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlv
bihyZXN1bHQpeworICAgICAgICAvLyBzdWNjZXNzCisgICAgICB9LCBmdW5jdGlvbihyZWFzb24p
eworICAgICAgICAvLyBmYWlsdXJlCisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBBZHZh
bmNlZCBFeGFtcGxlCisgICAgICAtLS0tLS0tLS0tLS0tLQorCisgICAgICBTeW5jaHJvbm91cyBF
eGFtcGxlCisKKyAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgIHZhciBhdXRob3IsIGJvb2tzOwor
CisgICAgICB0cnkgeworICAgICAgICBhdXRob3IgPSBmaW5kQXV0aG9yKCk7CisgICAgICAgIGJv
b2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7CisgICAgICAgIC8vIHN1Y2Nlc3MKKyAg
ICAgIH0gY2F0Y2gocmVhc29uKSB7CisgICAgICAgIC8vIGZhaWx1cmUKKyAgICAgIH0KKyAgICAg
IGBgYAorCisgICAgICBFcnJiYWNrIEV4YW1wbGUKKworICAgICAgYGBganMKKworICAgICAgZnVu
Y3Rpb24gZm91bmRCb29rcyhib29rcykgeworCisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIGZh
aWx1cmUocmVhc29uKSB7CisKKyAgICAgIH0KKworICAgICAgZmluZEF1dGhvcihmdW5jdGlvbihh
dXRob3IsIGVycil7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICBmYWlsdXJlKGVycik7
CisgICAgICAgICAgLy8gZmFpbHVyZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICBmaW5kQm9vb2tzQnlBdXRob3IoYXV0aG9yLCBmdW5jdGlvbihib29rcywg
ZXJyKSB7CisgICAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICBmYWlsdXJl
KGVycik7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpOworICAgICAgICAgICAgICAgIH0gY2F0
Y2gocmVhc29uKSB7CisgICAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9
IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICBmYWlsdXJlKGVycik7CisgICAgICAgICAgfQor
ICAgICAgICAgIC8vIHN1Y2Nlc3MKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKwor
ICAgICAgUHJvbWlzZSBFeGFtcGxlOworCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBmaW5k
QXV0aG9yKCkuCisgICAgICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLgorICAgICAgICB0aGVu
KGZ1bmN0aW9uKGJvb2tzKXsKKyAgICAgICAgICAvLyBmb3VuZCBib29rcworICAgICAgfSkuY2F0
Y2goZnVuY3Rpb24ocmVhc29uKXsKKyAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAg
ICAgIH0pOworICAgICAgYGBgCisKKyAgICAgIEBtZXRob2QgdGhlbgorICAgICAgQHBhcmFtIHtG
dW5jdGlvbn0gb25GdWxmaWxsZWQKKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0ZWQK
KyAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5n
IHRoZSBwcm9taXNlLgorICAgICAgVXNlZnVsIGZvciB0b29saW5nLgorICAgICAgQHJldHVybiB7
UHJvbWlzZX0KKyAgICAqLworICAgICAgdGhlbjogZnVuY3Rpb24ob25GdWxmaWxsbWVudCwgb25S
ZWplY3Rpb24sIGxhYmVsKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzOworICAgICAgICB2
YXIgc3RhdGUgPSBwYXJlbnQuX3N0YXRlOworCisgICAgICAgIGlmIChzdGF0ZSA9PT0gJCQkaW50
ZXJuYWwkJEZVTEZJTExFRCAmJiAhb25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gJCQkaW50ZXJu
YWwkJFJFSkVDVEVEICYmICFvblJlamVjdGlvbikgeworICAgICAgICAgIGlmICgkJHJzdnAkY29u
ZmlnJCRjb25maWcuaW5zdHJ1bWVudCkgeworICAgICAgICAgICAgJCRpbnN0cnVtZW50JCRkZWZh
dWx0KCdjaGFpbmVkJywgdGhpcywgdGhpcyk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDsKKwor
ICAgICAgICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigkJCRpbnRlcm5hbCQkbm9v
cCwgbGFiZWwpOworICAgICAgICB2YXIgcmVzdWx0ID0gcGFyZW50Ll9yZXN1bHQ7CisKKyAgICAg
ICAgaWYgKCQkcnN2cCRjb25maWckJGNvbmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAgICAgJCRp
bnN0cnVtZW50JCRkZWZhdWx0KCdjaGFpbmVkJywgcGFyZW50LCBjaGlsZCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3RhdGUpIHsKKyAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVu
dHNbc3RhdGUgLSAxXTsKKyAgICAgICAgICAkJHJzdnAkY29uZmlnJCRjb25maWcuYXN5bmMoZnVu
Y3Rpb24oKXsKKyAgICAgICAgICAgICQkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzdGF0ZSwg
Y2hpbGQsIGNhbGxiYWNrLCByZXN1bHQpOworICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICQkJGludGVybmFsJCRzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxm
aWxsbWVudCwgb25SZWplY3Rpb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNoaWxk
OworICAgICAgfSwKKworICAgIC8qKgorICAgICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9y
IGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZQor
ICAgICAgYXMgdGhlIGNhdGNoIGJsb2NrIG9mIGEgdHJ5L2NhdGNoIHN0YXRlbWVudC4KKworICAg
ICAgYGBganMKKyAgICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXsKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7CisgICAgICB9CisKKyAgICAgIC8v
IHN5bmNocm9ub3VzCisgICAgICB0cnkgeworICAgICAgICBmaW5kQXV0aG9yKCk7CisgICAgICB9
IGNhdGNoKHJlYXNvbikgeworICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZworICAgICAg
fQorCisgICAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzCisgICAgICBmaW5kQXV0aG9yKCkuY2F0
Y2goZnVuY3Rpb24ocmVhc29uKXsKKyAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAg
ICAgIH0pOworICAgICAgYGBgCisKKyAgICAgIEBtZXRob2QgY2F0Y2gKKyAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IG9uUmVqZWN0aW9uCisgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9u
YWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4KKyAgICAgIFVzZWZ1bCBmb3IgdG9v
bGluZy4KKyAgICAgIEByZXR1cm4ge1Byb21pc2V9CisgICAgKi8KKyAgICAgICdjYXRjaCc6IGZ1
bmN0aW9uKG9uUmVqZWN0aW9uLCBsYWJlbCkgeworICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51
bGwsIG9uUmVqZWN0aW9uLCBsYWJlbCk7CisgICAgICB9LAorCisgICAgLyoqCisgICAgICBgZmlu
YWxseWAgd2lsbCBiZSBpbnZva2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb21pc2UncyBmYXRlIGp1
c3QgYXMgbmF0aXZlCisgICAgICB0cnkvY2F0Y2gvZmluYWxseSBiZWhhdmVzCisKKyAgICAgIFN5
bmNocm9ub3VzIGV4YW1wbGU6CisKKyAgICAgIGBgYGpzCisgICAgICBmaW5kQXV0aG9yKCkgewor
ICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA+IDAuNSkgeworICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgQXV0aG9yKCk7CisgICAgICB9
CisKKyAgICAgIHRyeSB7CisgICAgICAgIHJldHVybiBmaW5kQXV0aG9yKCk7IC8vIHN1Y2NlZWQg
b3IgZmFpbAorICAgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgICByZXR1cm4gZmluZE90aGVy
QXV0aGVyKCk7CisgICAgICB9IGZpbmFsbHkgeworICAgICAgICAvLyBhbHdheXMgcnVucworICAg
ICAgICAvLyBkb2Vzbid0IGFmZmVjdCB0aGUgcmV0dXJuIHZhbHVlCisgICAgICB9CisgICAgICBg
YGAKKworICAgICAgQXN5bmNocm9ub3VzIGV4YW1wbGU6CisKKyAgICAgIGBgYGpzCisgICAgICBm
aW5kQXV0aG9yKCkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXsKKyAgICAgICAgcmV0dXJuIGZpbmRP
dGhlckF1dGhlcigpOworICAgICAgfSkuZmluYWxseShmdW5jdGlvbigpeworICAgICAgICAvLyBh
dXRob3Igd2FzIGVpdGhlciBmb3VuZCwgb3Igbm90CisgICAgICB9KTsKKyAgICAgIGBgYAorCisg
ICAgICBAbWV0aG9kIGZpbmFsbHkKKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCisg
ICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0
aGUgcHJvbWlzZS4KKyAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KKyAgICAgIEByZXR1cm4ge1By
b21pc2V9CisgICAgKi8KKyAgICAgICdmaW5hbGx5JzogZnVuY3Rpb24oY2FsbGJhY2ssIGxhYmVs
KSB7CisgICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7CisKKyAgICAg
ICAgcmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgIHJldHVybiBj
b25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oZnVuY3Rpb24oKXsKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSwgZnVuY3Rpb24ocmVh
c29uKSB7CisgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSku
dGhlbihmdW5jdGlvbigpeworICAgICAgICAgICAgdGhyb3cgcmVhc29uOworICAgICAgICAgIH0p
OworICAgICAgICB9LCBsYWJlbCk7CisgICAgICB9CisgICAgfTsKKworICAgIGZ1bmN0aW9uICQk
cnN2cCRub2RlJCRSZXN1bHQoKSB7CisgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkOworICAg
IH0KKworICAgIHZhciAkJHJzdnAkbm9kZSQkRVJST1IgPSBuZXcgJCRyc3ZwJG5vZGUkJFJlc3Vs
dCgpOworICAgIHZhciAkJHJzdnAkbm9kZSQkR0VUX1RIRU5fRVJST1IgPSBuZXcgJCRyc3ZwJG5v
ZGUkJFJlc3VsdCgpOworCisgICAgZnVuY3Rpb24gJCRyc3ZwJG5vZGUkJGdldFRoZW4ob2JqKSB7
CisgICAgICB0cnkgeworICAgICAgIHJldHVybiBvYmoudGhlbjsKKyAgICAgIH0gY2F0Y2goZXJy
b3IpIHsKKyAgICAgICAgJCRyc3ZwJG5vZGUkJEVSUk9SLnZhbHVlPSBlcnJvcjsKKyAgICAgICAg
cmV0dXJuICQkcnN2cCRub2RlJCRFUlJPUjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biAkJHJzdnAkbm9kZSQkdHJ5QXBwbHkoZiwgcywgYSkgeworICAgICAgdHJ5IHsKKyAgICAgICAg
Zi5hcHBseShzLCBhKTsKKyAgICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgJCRyc3ZwJG5v
ZGUkJEVSUk9SLnZhbHVlID0gZXJyb3I7CisgICAgICAgIHJldHVybiAkJHJzdnAkbm9kZSQkRVJS
T1I7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gJCRyc3ZwJG5vZGUkJG1ha2VPYmpl
Y3QoXywgYXJndW1lbnROYW1lcykgeworICAgICAgdmFyIG9iaiA9IHt9OworICAgICAgdmFyIG5h
bWU7CisgICAgICB2YXIgaTsKKyAgICAgIHZhciBsZW5ndGggPSBfLmxlbmd0aDsKKyAgICAgIHZh
ciBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCk7CisKKyAgICAgIGZvciAodmFyIHggPSAwOyB4IDwg
bGVuZ3RoOyB4KyspIHsKKyAgICAgICAgYXJnc1t4XSA9IF9beF07CisgICAgICB9CisKKyAgICAg
IGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudE5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIG5h
bWUgPSBhcmd1bWVudE5hbWVzW2ldOworICAgICAgICBvYmpbbmFtZV0gPSBhcmdzW2kgKyAxXTsK
KyAgICAgIH0KKworICAgICAgcmV0dXJuIG9iajsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJz
dnAkbm9kZSQkYXJyYXlSZXN1bHQoXykgeworICAgICAgdmFyIGxlbmd0aCA9IF8ubGVuZ3RoOwor
ICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoIC0gMSk7CisKKyAgICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgYXJnc1tpIC0gMV0gPSBfW2ldOwor
ICAgICAgfQorCisgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJz
dnAkbm9kZSQkd3JhcFRoZW5hYmxlKHRoZW4sIHByb21pc2UpIHsKKyAgICAgIHJldHVybiB7Cisg
ICAgICAgIHRoZW46IGZ1bmN0aW9uKG9uRnVsRmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7CisgICAg
ICAgICAgcmV0dXJuIHRoZW4uY2FsbChwcm9taXNlLCBvbkZ1bEZpbGxtZW50LCBvblJlamVjdGlv
bik7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfQorCisgICAgdmFyICQkcnN2cCRub2RlJCRk
ZWZhdWx0ID0gZnVuY3Rpb24gZGVub2RlaWZ5KG5vZGVGdW5jLCBvcHRpb25zKSB7CisgICAgICB2
YXIgZm4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2
YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGwg
KyAxKTsKKyAgICAgICAgdmFyIGFyZzsKKyAgICAgICAgdmFyIHByb21pc2VJbnB1dCA9IGZhbHNl
OworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgYXJn
ID0gYXJndW1lbnRzW2ldOworCisgICAgICAgICAgaWYgKCFwcm9taXNlSW5wdXQpIHsKKyAgICAg
ICAgICAgIC8vIFRPRE86IGNsZWFuIHRoaXMgdXAKKyAgICAgICAgICAgIHByb21pc2VJbnB1dCA9
ICQkcnN2cCRub2RlJCRuZWVkc1Byb21pc2VJbnB1dChhcmcpOworICAgICAgICAgICAgaWYgKHBy
b21pc2VJbnB1dCA9PT0gJCRyc3ZwJG5vZGUkJEdFVF9USEVOX0VSUk9SKSB7CisgICAgICAgICAg
ICAgIHZhciBwID0gbmV3ICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0KCQkJGludGVybmFsJCRub29w
KTsKKyAgICAgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwLCAkJHJzdnAkbm9kZSQkR0VU
X1RIRU5fRVJST1IudmFsdWUpOworICAgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAocHJvbWlzZUlucHV0ICYmIHByb21pc2VJbnB1dCAhPT0gdHJ1ZSkgeworICAg
ICAgICAgICAgICBhcmcgPSAkJHJzdnAkbm9kZSQkd3JhcFRoZW5hYmxlKHByb21pc2VJbnB1dCwg
YXJnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYXJnc1tpXSA9IGFy
ZzsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBwcm9taXNlID0gbmV3ICQkcnN2cCRwcm9taXNl
JCRkZWZhdWx0KCQkJGludGVybmFsJCRub29wKTsKKworICAgICAgICBhcmdzW2xdID0gZnVuY3Rp
b24oZXJyLCB2YWwpIHsKKyAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgJCQkaW50ZXJu
YWwkJHJlamVjdChwcm9taXNlLCBlcnIpOworICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09
IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZh
bCk7CisgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucyA9PT0gdHJ1ZSkKKyAgICAgICAgICAgICQk
JGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsICQkcnN2cCRub2RlJCRhcnJheVJlc3VsdChhcmd1
bWVudHMpKTsKKyAgICAgICAgICBlbHNlIGlmICgkJHV0aWxzJCRpc0FycmF5KG9wdGlvbnMpKQor
ICAgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgJCRyc3ZwJG5vZGUkJG1h
a2VPYmplY3QoYXJndW1lbnRzLCBvcHRpb25zKSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgJCQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsKTsKKyAgICAgICAgfTsKKworICAg
ICAgICBpZiAocHJvbWlzZUlucHV0KSB7CisgICAgICAgICAgcmV0dXJuICQkcnN2cCRub2RlJCRo
YW5kbGVQcm9taXNlSW5wdXQocHJvbWlzZSwgYXJncywgbm9kZUZ1bmMsIHNlbGYpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiAkJHJzdnAkbm9kZSQkaGFuZGxlVmFsdWVJbnB1
dChwcm9taXNlLCBhcmdzLCBub2RlRnVuYywgc2VsZik7CisgICAgICAgIH0KKyAgICAgIH07CisK
KyAgICAgIGZuLl9fcHJvdG9fXyA9IG5vZGVGdW5jOworCisgICAgICByZXR1cm4gZm47CisgICAg
fTsKKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCRoYW5kbGVWYWx1ZUlucHV0KHByb21pc2Us
IGFyZ3MsIG5vZGVGdW5jLCBzZWxmKSB7CisgICAgICB2YXIgcmVzdWx0ID0gJCRyc3ZwJG5vZGUk
JHRyeUFwcGx5KG5vZGVGdW5jLCBzZWxmLCBhcmdzKTsKKyAgICAgIGlmIChyZXN1bHQgPT09ICQk
cnN2cCRub2RlJCRFUlJPUikgeworICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2Us
IHJlc3VsdC52YWx1ZSk7CisgICAgICB9CisgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiAkJHJzdnAkbm9kZSQkaGFuZGxlUHJvbWlzZUlucHV0KHByb21pc2UsIGFy
Z3MsIG5vZGVGdW5jLCBzZWxmKXsKKyAgICAgIHJldHVybiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVs
dC5hbGwoYXJncykudGhlbihmdW5jdGlvbihhcmdzKXsKKyAgICAgICAgdmFyIHJlc3VsdCA9ICQk
cnN2cCRub2RlJCR0cnlBcHBseShub2RlRnVuYywgc2VsZiwgYXJncyk7CisgICAgICAgIGlmIChy
ZXN1bHQgPT09ICQkcnN2cCRub2RlJCRFUlJPUikgeworICAgICAgICAgICQkJGludGVybmFsJCRy
ZWplY3QocHJvbWlzZSwgcmVzdWx0LnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cHJvbWlzZTsKKyAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCRu
ZWVkc1Byb21pc2VJbnB1dChhcmcpIHsKKyAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZyA9PT0g
J29iamVjdCcpIHsKKyAgICAgICAgaWYgKGFyZy5jb25zdHJ1Y3RvciA9PT0gJCRyc3ZwJHByb21p
c2UkJGRlZmF1bHQpIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICByZXR1cm4gJCRyc3ZwJG5vZGUkJGdldFRoZW4oYXJnKTsKKyAgICAgICAgfQor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKwor
ICAgIHZhciAkJHJzdnAkYWxsJCRkZWZhdWx0ID0gZnVuY3Rpb24gYWxsKGFycmF5LCBsYWJlbCkg
eworICAgICAgcmV0dXJuICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0LmFsbChhcnJheSwgbGFiZWwp
OworICAgIH07CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkYWxsJHNldHRsZWQkJEFsbFNldHRsZWQo
Q29uc3RydWN0b3IsIGVudHJpZXMsIGxhYmVsKSB7CisgICAgICB0aGlzLl9zdXBlckNvbnN0cnVj
dG9yKENvbnN0cnVjdG9yLCBlbnRyaWVzLCBmYWxzZSAvKiBkb24ndCBhYm9ydCBvbiByZWplY3Qg
Ki8sIGxhYmVsKTsKKyAgICB9CisKKyAgICAkJHJzdnAkYWxsJHNldHRsZWQkJEFsbFNldHRsZWQu
cHJvdG90eXBlID0gJCR1dGlscyQkb19jcmVhdGUoJCRlbnVtZXJhdG9yJCRkZWZhdWx0LnByb3Rv
dHlwZSk7CisgICAgJCRyc3ZwJGFsbCRzZXR0bGVkJCRBbGxTZXR0bGVkLnByb3RvdHlwZS5fc3Vw
ZXJDb25zdHJ1Y3RvciA9ICQkZW51bWVyYXRvciQkZGVmYXVsdDsKKyAgICAkJHJzdnAkYWxsJHNl
dHRsZWQkJEFsbFNldHRsZWQucHJvdG90eXBlLl9tYWtlUmVzdWx0ID0gJCRlbnVtZXJhdG9yJCRt
YWtlU2V0dGxlZFJlc3VsdDsKKworICAgICQkcnN2cCRhbGwkc2V0dGxlZCQkQWxsU2V0dGxlZC5w
cm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5l
dyBFcnJvcignYWxsU2V0dGxlZCBtdXN0IGJlIGNhbGxlZCB3aXRoIGFuIGFycmF5Jyk7CisgICAg
fTsKKworICAgIHZhciAkJHJzdnAkYWxsJHNldHRsZWQkJGRlZmF1bHQgPSBmdW5jdGlvbiBhbGxT
ZXR0bGVkKGVudHJpZXMsIGxhYmVsKSB7CisgICAgICByZXR1cm4gbmV3ICQkcnN2cCRhbGwkc2V0
dGxlZCQkQWxsU2V0dGxlZCgkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdCwgZW50cmllcywgbGFiZWwp
LnByb21pc2U7CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkcmFjZSQkZGVmYXVsdCA9IGZ1bmN0
aW9uIHJhY2UoYXJyYXksIGxhYmVsKSB7CisgICAgICByZXR1cm4gJCRyc3ZwJHByb21pc2UkJGRl
ZmF1bHQucmFjZShhcnJheSwgbGFiZWwpOworICAgIH07CisKKyAgICBmdW5jdGlvbiAkJHByb21p
c2UkaGFzaCQkUHJvbWlzZUhhc2goQ29uc3RydWN0b3IsIG9iamVjdCwgbGFiZWwpIHsKKyAgICAg
IHRoaXMuX3N1cGVyQ29uc3RydWN0b3IoQ29uc3RydWN0b3IsIG9iamVjdCwgdHJ1ZSwgbGFiZWwp
OworICAgIH0KKworICAgIHZhciAkJHByb21pc2UkaGFzaCQkZGVmYXVsdCA9ICQkcHJvbWlzZSRo
YXNoJCRQcm9taXNlSGFzaDsKKyAgICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2gucHJvdG90
eXBlID0gJCR1dGlscyQkb19jcmVhdGUoJCRlbnVtZXJhdG9yJCRkZWZhdWx0LnByb3RvdHlwZSk7
CisgICAgJCRwcm9taXNlJGhhc2gkJFByb21pc2VIYXNoLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1
Y3RvciA9ICQkZW51bWVyYXRvciQkZGVmYXVsdDsKKworICAgICQkcHJvbWlzZSRoYXNoJCRQcm9t
aXNlSGFzaC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuX3Jlc3Vs
dCA9IHt9OworICAgIH07CisKKyAgICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2gucHJvdG90
eXBlLl92YWxpZGF0ZUlucHV0ID0gZnVuY3Rpb24oaW5wdXQpIHsKKyAgICAgIHJldHVybiBpbnB1
dCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnOworICAgIH07CisKKyAgICAkJHByb21pc2Uk
aGFzaCQkUHJvbWlzZUhhc2gucHJvdG90eXBlLl92YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbigp
IHsKKyAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Byb21pc2UuaGFzaCBtdXN0IGJlIGNhbGxlZCB3
aXRoIGFuIG9iamVjdCcpOworICAgIH07CisKKyAgICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhh
c2gucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBwcm9taXNl
ID0gdGhpcy5wcm9taXNlOworICAgICAgdmFyIGlucHV0ICAgPSB0aGlzLl9pbnB1dDsKKyAgICAg
IHZhciByZXN1bHRzID0gW107CisKKyAgICAgIGZvciAodmFyIGtleSBpbiBpbnB1dCkgeworICAg
ICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09ICQkJGludGVybmFsJCRQRU5ESU5HICYmIGlucHV0
Lmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICByZXN1bHRzLnB1c2goeworICAgICAg
ICAgICAgcG9zaXRpb246IGtleSwKKyAgICAgICAgICAgIGVudHJ5OiBpbnB1dFtrZXldCisgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdmFyIGxlbmd0aCA9IHJlc3Vs
dHMubGVuZ3RoOworICAgICAgdGhpcy5fcmVtYWluaW5nID0gbGVuZ3RoOworICAgICAgdmFyIHJl
c3VsdDsKKworICAgICAgZm9yICh2YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSAkJCRpbnRl
cm5hbCQkUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcmVzdWx0ID0gcmVz
dWx0c1tpXTsKKyAgICAgICAgdGhpcy5fZWFjaEVudHJ5KHJlc3VsdC5lbnRyeSwgcmVzdWx0LnBv
c2l0aW9uKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgdmFyICQkcnN2cCRoYXNoJCRkZWZhdWx0
ID0gZnVuY3Rpb24gaGFzaChvYmplY3QsIGxhYmVsKSB7CisgICAgICByZXR1cm4gbmV3ICQkcHJv
bWlzZSRoYXNoJCRkZWZhdWx0KCQkcnN2cCRwcm9taXNlJCRkZWZhdWx0LCBvYmplY3QsIGxhYmVs
KS5wcm9taXNlOworICAgIH07CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkaGFzaCRzZXR0bGVkJCRI
YXNoU2V0dGxlZChDb25zdHJ1Y3Rvciwgb2JqZWN0LCBsYWJlbCkgeworICAgICAgdGhpcy5fc3Vw
ZXJDb25zdHJ1Y3RvcihDb25zdHJ1Y3Rvciwgb2JqZWN0LCBmYWxzZSwgbGFiZWwpOworICAgIH0K
KworICAgICQkcnN2cCRoYXNoJHNldHRsZWQkJEhhc2hTZXR0bGVkLnByb3RvdHlwZSA9ICQkdXRp
bHMkJG9fY3JlYXRlKCQkcHJvbWlzZSRoYXNoJCRkZWZhdWx0LnByb3RvdHlwZSk7CisgICAgJCRy
c3ZwJGhhc2gkc2V0dGxlZCQkSGFzaFNldHRsZWQucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9y
ID0gJCRlbnVtZXJhdG9yJCRkZWZhdWx0OworICAgICQkcnN2cCRoYXNoJHNldHRsZWQkJEhhc2hT
ZXR0bGVkLnByb3RvdHlwZS5fbWFrZVJlc3VsdCA9ICQkZW51bWVyYXRvciQkbWFrZVNldHRsZWRS
ZXN1bHQ7CisKKyAgICAkJHJzdnAkaGFzaCRzZXR0bGVkJCRIYXNoU2V0dGxlZC5wcm90b3R5cGUu
X3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5ldyBFcnJvcign
aGFzaFNldHRsZWQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QnKTsKKyAgICB9OworCisg
ICAgdmFyICQkcnN2cCRoYXNoJHNldHRsZWQkJGRlZmF1bHQgPSBmdW5jdGlvbiBoYXNoU2V0dGxl
ZChvYmplY3QsIGxhYmVsKSB7CisgICAgICByZXR1cm4gbmV3ICQkcnN2cCRoYXNoJHNldHRsZWQk
JEhhc2hTZXR0bGVkKCQkcnN2cCRwcm9taXNlJCRkZWZhdWx0LCBvYmplY3QsIGxhYmVsKS5wcm9t
aXNlOworICAgIH07CisKKyAgICB2YXIgJCRyc3ZwJHJldGhyb3ckJGRlZmF1bHQgPSBmdW5jdGlv
biByZXRocm93KHJlYXNvbikgeworICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhyb3cgcmVhc29uOworICAgICAgfSk7CisgICAgICB0aHJvdyByZWFzb247CisgICAgfTsK
KworICAgIHZhciAkJHJzdnAkZGVmZXIkJGRlZmF1bHQgPSBmdW5jdGlvbiBkZWZlcihsYWJlbCkg
eworICAgICAgdmFyIGRlZmVycmVkID0geyB9OworCisgICAgICBkZWZlcnJlZC5wcm9taXNlID0g
bmV3ICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICBkZWZlcnJlZC5yZXNvbHZlID0gcmVzb2x2ZTsKKyAgICAgICAgZGVmZXJyZWQucmVq
ZWN0ID0gcmVqZWN0OworICAgICAgfSwgbGFiZWwpOworCisgICAgICByZXR1cm4gZGVmZXJyZWQ7
CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkbWFwJCRkZWZhdWx0ID0gZnVuY3Rpb24gbWFwKHBy
b21pc2VzLCBtYXBGbiwgbGFiZWwpIHsKKyAgICAgIHJldHVybiAkJHJzdnAkcHJvbWlzZSQkZGVm
YXVsdC5hbGwocHJvbWlzZXMsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKHZhbHVlcykgeworICAgICAg
ICBpZiAoISQkdXRpbHMkJGlzRnVuY3Rpb24obWFwRm4pKSB7CisgICAgICAgICAgdGhyb3cgbmV3
IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIG1hcCdzIHNlY29uZCBhcmd1
bWVudC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBsZW5ndGggPSB2YWx1ZXMubGVuZ3Ro
OworICAgICAgICB2YXIgcmVzdWx0cyA9IG5ldyBBcnJheShsZW5ndGgpOworCisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICByZXN1bHRzW2ldID0g
bWFwRm4odmFsdWVzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAkJHJzdnAkcHJv
bWlzZSQkZGVmYXVsdC5hbGwocmVzdWx0cywgbGFiZWwpOworICAgICAgfSk7CisgICAgfTsKKwor
ICAgIHZhciAkJHJzdnAkcmVzb2x2ZSQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUs
IGxhYmVsKSB7CisgICAgICByZXR1cm4gJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQucmVzb2x2ZSh2
YWx1ZSwgbGFiZWwpOworICAgIH07CisKKyAgICB2YXIgJCRyc3ZwJHJlamVjdCQkZGVmYXVsdCA9
IGZ1bmN0aW9uIHJlamVjdChyZWFzb24sIGxhYmVsKSB7CisgICAgICByZXR1cm4gJCRyc3ZwJHBy
b21pc2UkJGRlZmF1bHQucmVqZWN0KHJlYXNvbiwgbGFiZWwpOworICAgIH07CisKKyAgICB2YXIg
JCRyc3ZwJGZpbHRlciQkZGVmYXVsdCA9IGZ1bmN0aW9uIGZpbHRlcihwcm9taXNlcywgZmlsdGVy
Rm4sIGxhYmVsKSB7CisgICAgICByZXR1cm4gJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQuYWxsKHBy
b21pc2VzLCBsYWJlbCkudGhlbihmdW5jdGlvbih2YWx1ZXMpIHsKKyAgICAgICAgaWYgKCEkJHV0
aWxzJCRpc0Z1bmN0aW9uKGZpbHRlckZuKSkgeworICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoIllvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBmaWx0ZXIncyBzZWNvbmQgYXJndW1lbnQu
Iik7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKKyAg
ICAgICAgdmFyIGZpbHRlcmVkID0gbmV3IEFycmF5KGxlbmd0aCk7CisKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgIGZpbHRlcmVkW2ldID0gZmls
dGVyRm4odmFsdWVzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAkJHJzdnAkcHJv
bWlzZSQkZGVmYXVsdC5hbGwoZmlsdGVyZWQsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKGZpbHRlcmVk
KSB7CisgICAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKyAgICAgICAg
ICB2YXIgbmV3TGVuZ3RoID0gMDsKKworICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJlZFtpXSkgeworICAgICAgICAgICAg
ICByZXN1bHRzW25ld0xlbmd0aF0gPSB2YWx1ZXNbaV07CisgICAgICAgICAgICAgIG5ld0xlbmd0
aCsrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHJlc3VsdHMubGVu
Z3RoID0gbmV3TGVuZ3RoOworCisgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIH0p
OworICAgICAgfSk7CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkYXNhcCQkbGVuID0gMDsKKwor
ICAgIHZhciAkJHJzdnAkYXNhcCQkZGVmYXVsdCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFy
ZykgeworICAgICAgJCRyc3ZwJGFzYXAkJHF1ZXVlWyQkcnN2cCRhc2FwJCRsZW5dID0gY2FsbGJh
Y2s7CisgICAgICAkJHJzdnAkYXNhcCQkcXVldWVbJCRyc3ZwJGFzYXAkJGxlbiArIDFdID0gYXJn
OworICAgICAgJCRyc3ZwJGFzYXAkJGxlbiArPSAyOworICAgICAgaWYgKCQkcnN2cCRhc2FwJCRs
ZW4gPT09IDIpIHsKKyAgICAgICAgLy8gSWYgbGVuIGlzIDEsIHRoYXQgbWVhbnMgdGhhdCB3ZSBu
ZWVkIHRvIHNjaGVkdWxlIGFuIGFzeW5jIGZsdXNoLgorICAgICAgICAvLyBJZiBhZGRpdGlvbmFs
IGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleQor
ICAgICAgICAvLyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGlzIGZsdXNoIHRoYXQgd2UgYXJlIHNj
aGVkdWxpbmcuCisgICAgICAgICQkcnN2cCRhc2FwJCRzY2hlZHVsZUZsdXNoKCk7CisgICAgICB9
CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkYXNhcCQkYnJvd3Nlckdsb2JhbCA9ICh0eXBlb2Yg
d2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cgOiB7fTsKKyAgICB2YXIgJCRyc3ZwJGFz
YXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gJCRyc3ZwJGFzYXAkJGJyb3dzZXJHbG9iYWwu
TXV0YXRpb25PYnNlcnZlciB8fCAkJHJzdnAkYXNhcCQkYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRh
dGlvbk9ic2VydmVyOworCisgICAgLy8gdGVzdCBmb3Igd2ViIHdvcmtlciBidXQgbm90IGluIElF
MTAKKyAgICB2YXIgJCRyc3ZwJGFzYXAkJGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFy
cmF5ICE9PSAndW5kZWZpbmVkJyAmJgorICAgICAgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1
bmRlZmluZWQnICYmCisgICAgICB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQn
OworCisgICAgLy8gbm9kZQorICAgIGZ1bmN0aW9uICQkcnN2cCRhc2FwJCR1c2VOZXh0VGljaygp
IHsKKyAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygk
JHJzdnAkYXNhcCQkZmx1c2gpOworICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJz
dnAkYXNhcCQkdXNlTXV0YXRpb25PYnNlcnZlcigpIHsKKyAgICAgIHZhciBpdGVyYXRpb25zID0g
MDsKKyAgICAgIHZhciBvYnNlcnZlciA9IG5ldyAkJHJzdnAkYXNhcCQkQnJvd3Nlck11dGF0aW9u
T2JzZXJ2ZXIoJCRyc3ZwJGFzYXAkJGZsdXNoKTsKKyAgICAgIHZhciBub2RlID0gZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoJycpOworICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJh
Y3RlckRhdGE6IHRydWUgfSk7CisKKyAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAg
bm9kZS5kYXRhID0gKGl0ZXJhdGlvbnMgPSArK2l0ZXJhdGlvbnMgJSAyKTsKKyAgICAgIH07Cisg
ICAgfQorCisgICAgLy8gd2ViIHdvcmtlcgorICAgIGZ1bmN0aW9uICQkcnN2cCRhc2FwJCR1c2VN
ZXNzYWdlQ2hhbm5lbCgpIHsKKyAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVs
KCk7CisgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9ICQkcnN2cCRhc2FwJCRmbHVzaDsK
KyAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1l
c3NhZ2UoMCk7CisgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRhc2FwJCR1
c2VTZXRUaW1lb3V0KCkgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRU
aW1lb3V0KCQkcnN2cCRhc2FwJCRmbHVzaCwgMSk7CisgICAgICB9OworICAgIH0KKworICAgIHZh
ciAkJHJzdnAkYXNhcCQkcXVldWUgPSBuZXcgQXJyYXkoMTAwMCk7CisKKyAgICBmdW5jdGlvbiAk
JHJzdnAkYXNhcCQkZmx1c2goKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8ICQkcnN2cCRh
c2FwJCRsZW47IGkrPTIpIHsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gJCRyc3ZwJGFzYXAkJHF1
ZXVlW2ldOworICAgICAgICB2YXIgYXJnID0gJCRyc3ZwJGFzYXAkJHF1ZXVlW2krMV07CisKKyAg
ICAgICAgY2FsbGJhY2soYXJnKTsKKworICAgICAgICAkJHJzdnAkYXNhcCQkcXVldWVbaV0gPSB1
bmRlZmluZWQ7CisgICAgICAgICQkcnN2cCRhc2FwJCRxdWV1ZVtpKzFdID0gdW5kZWZpbmVkOwor
ICAgICAgfQorCisgICAgICAkJHJzdnAkYXNhcCQkbGVuID0gMDsKKyAgICB9CisKKyAgICB2YXIg
JCRyc3ZwJGFzYXAkJHNjaGVkdWxlRmx1c2g7CisKKyAgICAvLyBEZWNpZGUgd2hhdCBhc3luYyBt
ZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tz
OgorICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYge30udG9TdHJpbmcu
Y2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7CisgICAgICAkJHJzdnAkYXNh
cCQkc2NoZWR1bGVGbHVzaCA9ICQkcnN2cCRhc2FwJCR1c2VOZXh0VGljaygpOworICAgIH0gZWxz
ZSBpZiAoJCRyc3ZwJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7CisgICAgICAkJHJz
dnAkYXNhcCQkc2NoZWR1bGVGbHVzaCA9ICQkcnN2cCRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVy
KCk7CisgICAgfSBlbHNlIGlmICgkJHJzdnAkYXNhcCQkaXNXb3JrZXIpIHsKKyAgICAgICQkcnN2
cCRhc2FwJCRzY2hlZHVsZUZsdXNoID0gJCRyc3ZwJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICQkcnN2cCRhc2FwJCRzY2hlZHVsZUZsdXNoID0gJCRyc3Zw
JGFzYXAkJHVzZVNldFRpbWVvdXQoKTsKKyAgICB9CisKKyAgICAvLyBkZWZhdWx0IGFzeW5jIGlz
IGFzYXA7CisgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLmFzeW5jID0gJCRyc3ZwJGFzYXAkJGRl
ZmF1bHQ7CisKKyAgICB2YXIgJCRyc3ZwJCRjYXN0ID0gJCRyc3ZwJHJlc29sdmUkJGRlZmF1bHQ7
CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkJGFzeW5jKGNhbGxiYWNrLCBhcmcpIHsKKyAgICAgICQk
cnN2cCRjb25maWckJGNvbmZpZy5hc3luYyhjYWxsYmFjaywgYXJnKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiAkJHJzdnAkJG9uKCkgeworICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLm9uLmFw
cGx5KCQkcnN2cCRjb25maWckJGNvbmZpZywgYXJndW1lbnRzKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiAkJHJzdnAkJG9mZigpIHsKKyAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy5vZmYuYXBw
bHkoJCRyc3ZwJGNvbmZpZyQkY29uZmlnLCBhcmd1bWVudHMpOworICAgIH0KKworICAgIC8vIFNl
dCB1cCBpbnN0cnVtZW50YXRpb24gdGhyb3VnaCBgd2luZG93Ll9fUFJPTUlTRV9JTlRSVU1FTlRB
VElPTl9fYAorICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Yg
d2luZG93WydfX1BST01JU0VfSU5TVFJVTUVOVEFUSU9OX18nXSA9PT0gJ29iamVjdCcpIHsKKyAg
ICAgIHZhciAkJHJzdnAkJGNhbGxiYWNrcyA9IHdpbmRvd1snX19QUk9NSVNFX0lOU1RSVU1FTlRB
VElPTl9fJ107CisgICAgICAkJHJzdnAkY29uZmlnJCRjb25maWd1cmUoJ2luc3RydW1lbnQnLCB0
cnVlKTsKKyAgICAgIGZvciAodmFyICQkcnN2cCQkZXZlbnROYW1lIGluICQkcnN2cCQkY2FsbGJh
Y2tzKSB7CisgICAgICAgIGlmICgkJHJzdnAkJGNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eSgkJHJz
dnAkJGV2ZW50TmFtZSkpIHsKKyAgICAgICAgICAkJHJzdnAkJG9uKCQkcnN2cCQkZXZlbnROYW1l
LCAkJHJzdnAkJGNhbGxiYWNrc1skJHJzdnAkJGV2ZW50TmFtZV0pOworICAgICAgICB9CisgICAg
ICB9CisgICAgfQorCisgICAgdmFyIHJzdnAkdW1kJCRSU1ZQID0geworICAgICAgJ3JhY2UnOiAk
JHJzdnAkcmFjZSQkZGVmYXVsdCwKKyAgICAgICdQcm9taXNlJzogJCRyc3ZwJHByb21pc2UkJGRl
ZmF1bHQsCisgICAgICAnYWxsU2V0dGxlZCc6ICQkcnN2cCRhbGwkc2V0dGxlZCQkZGVmYXVsdCwK
KyAgICAgICdoYXNoJzogJCRyc3ZwJGhhc2gkJGRlZmF1bHQsCisgICAgICAnaGFzaFNldHRsZWQn
OiAkJHJzdnAkaGFzaCRzZXR0bGVkJCRkZWZhdWx0LAorICAgICAgJ2Rlbm9kZWlmeSc6ICQkcnN2
cCRub2RlJCRkZWZhdWx0LAorICAgICAgJ29uJzogJCRyc3ZwJCRvbiwKKyAgICAgICdvZmYnOiAk
JHJzdnAkJG9mZiwKKyAgICAgICdtYXAnOiAkJHJzdnAkbWFwJCRkZWZhdWx0LAorICAgICAgJ2Zp
bHRlcic6ICQkcnN2cCRmaWx0ZXIkJGRlZmF1bHQsCisgICAgICAncmVzb2x2ZSc6ICQkcnN2cCRy
ZXNvbHZlJCRkZWZhdWx0LAorICAgICAgJ3JlamVjdCc6ICQkcnN2cCRyZWplY3QkJGRlZmF1bHQs
CisgICAgICAnYWxsJzogJCRyc3ZwJGFsbCQkZGVmYXVsdCwKKyAgICAgICdyZXRocm93JzogJCRy
c3ZwJHJldGhyb3ckJGRlZmF1bHQsCisgICAgICAnZGVmZXInOiAkJHJzdnAkZGVmZXIkJGRlZmF1
bHQsCisgICAgICAnRXZlbnRUYXJnZXQnOiAkJHJzdnAkZXZlbnRzJCRkZWZhdWx0LAorICAgICAg
J2NvbmZpZ3VyZSc6ICQkcnN2cCRjb25maWckJGNvbmZpZ3VyZSwKKyAgICAgICdhc3luYyc6ICQk
cnN2cCQkYXN5bmMKKyAgICB9OworCisgICAgLyogZ2xvYmFsIGRlZmluZTp0cnVlIG1vZHVsZTp0
cnVlIHdpbmRvdzogdHJ1ZSAqLworICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24n
ICYmIGRlZmluZS5hbWQpIHsKKyAgICAgIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIHJzdnAk
dW1kJCRSU1ZQOyB9KTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmlu
ZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7CisgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJzdnAkdW1k
JCRSU1ZQOworICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMgIT09ICd1bmRlZmluZWQnKSB7Cisg
ICAgICB0aGlzWydSU1ZQJ10gPSByc3ZwJHVtZCQkUlNWUDsKKyAgICB9Cit9KS5jYWxsKHRoaXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5o
dG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4
IDI4YmE0N2YyODNmZTU5YjFlZTdkOTI3YTQxNDUyOTk4NTdlNWVlOGYuLmMzODEwOWI5ZGYzOTAw
NzY3YmVhNzA5Y2M0MjczZDg3ZWFjMWUyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTE0Miw2ICsxNDIsOCBAQAogICAgIDxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckdyYWRpZW50RWRpdGlu
Z0NvbnRyb2xsZXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkNvbnRy
b2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5jc3MiPgogCisgICAgPHNj
cmlwdCBzcmM9IkV4dGVybmFsL1JTVlAvcnN2cC5qcyI+PC9zY3JpcHQ+CisKICAgICA8c2NyaXB0
IHNyYz0iRXh0ZXJuYWwvQ29kZU1pcnJvci9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KIAogICAg
IDxzY3JpcHQgc3JjPSJFeHRlcm5hbC9Db2RlTWlycm9yL2Nsb2p1cmUuanMiPjwvc2NyaXB0Pgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jl
cGxheVNlc3Npb24uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvUmVwbGF5U2Vzc2lvbi5qcwppbmRleCBjMTFhM2VkYTQxOTQxZTBkYzdjMWExNGZhODdhNzAx
ZjQ5NzQ5ZmEwLi4yNTYzNjAzMTFjMjgwM2I0MDA3NmVkODRmNjZmZGVlMDNkODRlOGI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVwbGF5
U2Vzc2lvbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvUmVwbGF5U2Vzc2lvbi5qcwpAQCAtNzMsNyArNzMsNyBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5
U2Vzc2lvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBwZW5kaW5nU2VnbWVudHMucHVzaChX
ZWJJbnNwZWN0b3IucmVwbGF5TWFuYWdlci5nZXRTZWdtZW50KHNlZ21lbnRJZCkpOwogCiAgICAg
ICAgIHZhciBzZXNzaW9uID0gdGhpczsKLSAgICAgICAgUHJvbWlzZS5hbGwocGVuZGluZ1NlZ21l
bnRzKS50aGVuKAorICAgICAgICBXZWJJbnNwZWN0b3IuUHJvbWlzZS5hbGwocGVuZGluZ1NlZ21l
bnRzKS50aGVuKAogICAgICAgICAgICAgZnVuY3Rpb24oc2VnbWVudHNBcnJheSkgewogICAgICAg
ICAgICAgICAgIHNlc3Npb24uX3NlZ21lbnRzID0gc2VnbWVudHNBcnJheTsKICAgICAgICAgICAg
ICAgICBzZXNzaW9uLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5
U2Vzc2lvbi5FdmVudC5TZWdtZW50c0NoYW5nZWQsIHtvbGRTZWdtZW50czogb2xkU2VnbWVudHN9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3Rv
Y29sL0luc3BlY3RvckJhY2tlbmQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kLmpzCmluZGV4IGZlNGU5M2UzZTRkMDRjN2Vl
NmM4MjFjYmI1MTMwNDI3ZTZmOGI4MTMuLjM0NzIwMWE3ZTFiMGVhZTI1NjllZWEyMDgzZmZhYTc0
MmEzOTlhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1Byb3RvY29sL0luc3BlY3RvckJhY2tlbmQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yQmFja2VuZC5qcwpAQCAtMzg4LDcgKzM4
OCw3IEBAIEluc3BlY3RvckJhY2tlbmQuQ29tbWFuZC5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLl9pbnN0YW5jZTsKICAgICAgICAgdmFyIHByb21pc2VB
cmd1bWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAg
ICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7CiAgICAgICAgICAgICBmdW5jdGlvbiBjb252ZXJ0VG9Qcm9taXNlQ2FsbGJhY2soZXJyb3Is
IHBheWxvYWQpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgPyByZWplY3QoZXJyb3Ip
IDogcmVzb2x2ZShwYXlsb2FkKTsKICAgICAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237321</attachid>
            <date>2014-08-28 12:13:35 -0700</date>
            <delta_ts>2015-09-14 10:48:10 -0700</delta_ts>
            <desc>Proposed fix (with minification)</desc>
            <filename>bug-135830-20140828121305.patch</filename>
            <type>text/plain</type>
            <size>70125</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAx
ZTAyY2YyOWQwMDkyMzQ1OGZmNDdlNTVmM2E5NmZlYjUxMmQ3MGIzLi40ZjVlYzJlNzhlZjYyNmZk
NmJlN2JkYjc2MWEzNTcwZmEyOGY4NzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAxNC0wOC0yOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgUHJvbWlzZSByZWFjdGlvbnMgaW4gdGhlIEluc3BlY3RvciBwYWdl
IGRvIG5vdCBydW4gd2hlbiB0aGUgZGVidWdnZXIgaXMgcGF1c2VkIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
ODMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyB3aWxsIGhvcGVmdWxseSBiZSBmaXhlZCBieSBtdWx0aS1wcm9jZXNzIFdlYiBJbnNwZWN0b3Ig
aW4gdGhlIGZ1dHVyZSwgYnV0IHVudGlsIHRoYXQgbGFuZHMsIHdlCisgICAgICAgIGNhbiB1c2Ug
YSBwdXJlLUphdmFTY3JpcHQgcHJvbWlzZXMgaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHVz
ZSBjYWxsT25NYWluVGhyZWFkIHVuZGVyIHRoZSBob29kLgorCisgICAgICAgIFJlZmFjdG9yIGFs
bCBjYWxsc2l0ZXMgdG8gdXNlIFdlYkluc3BlY3Rvci5Qcm9taXNlIGFzIHRoZSBjb25zdHJ1Y3Rv
ciwgd2hpY2ggaXMgYXNzaWduZWQKKyAgICAgICAgdG8gdGhlIFJTVlAuUHJvbWlzZSBjb25zdHJ1
Y3RvciBub3cgKGJ1dCBjYW4gcmV2ZXJ0IHRvIHRoZSBuYXRpdmUgUHJvbWlzZSBjb25zdHJ1Y3Rv
ciBsYXRlcikuCisKKyAgICAgICAgKiBTY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3Vy
Y2VzLnBsOiBNaW5pZnkgZm9yIHByb2R1Y3Rpb24gYnVpbGRzLiBGaXggc29tZSBlbWJhcnJhc3Np
bmcgdHlwb3MuCisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL0RPTVV0aWxpdGllcy5qczog
VXNlIFJTVlAgdG8gaW1wbGVtZW50IFdlYkluc3BlY3Rvci5Qcm9taXNlLgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzOgorICAgICAgICAoSW5zcGVjdG9yVGVzdC5yZWxvYWRQ
YWdlKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdl
ci5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUuZ2V0U2Vz
c2lvbi5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3Rv
dHlwZS5nZXRTZWdtZW50LmdldCB2YXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1h
bmFnZXIucHJvdG90eXBlLl9zdXBwcmVzc0JyZWFrcG9pbnRzQW5kUmVzdW1lSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlJlcGxheU1hbmFnZXIucHJvdG90eXBlLnN0YXJ0Q2FwdHVy
aW5nLnJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5
cGUuc2VnbWVudFVubG9hZGVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0V4dGVybmFsL1JT
VlAvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQ
L3JzdnAuanM6IEFkZGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1JlcGxheVNlc3Npb24uanM6CisgICAgICAgICog
VXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JCYWNrZW5kLmpzOgorICAgICAgICAoSW5z
cGVjdG9yQmFja2VuZC5Db21tYW5kLnByb3RvdHlwZS5wcm9taXNlKToKKwogMjAxNC0wOC0yNyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBMYXlvdXQgaXNzdWVzIGZvciBwb3BvdmVyIG9uIG5vdCBsZWdhY3kgT1MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9TY3JpcHRzL2NvcHktdXNlci1pbnRlcmZhY2UtcmVzb3Vy
Y2VzLnBsIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFj
ZS1yZXNvdXJjZXMucGwKaW5kZXggYTE3NGEwMjhjYmM4NGZhZDM5YmZmYTQ1YWYxMGI3NTdkMzEx
ODZiZi4uZTU4MjA2ZWNjMGZiYjkwZGNiZmNiMDRiYWE0NmZiMzhhN2NkZmM1YiAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWludGVyZmFjZS1yZXNv
dXJjZXMucGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1NjcmlwdHMvY29weS11c2VyLWlu
dGVyZmFjZS1yZXNvdXJjZXMucGwKQEAgLTEwMCw5ICsxMDAsMTEgQEAgbXkgJHRhcmdldFJlc291
cmNlUGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigkRU5WeydUQVJHRVRfQlVJTERfRElSJ30sICRF
TlZ7J1VOTE8KIG15ICRwcm90b2NvbERpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdGFyZ2V0UmVz
b3VyY2VQYXRoLCAnUHJvdG9jb2wnKTsKIG15ICRjb2RlTWlycm9yUGF0aCA9IEZpbGU6OlNwZWMt
PmNhdGRpcigkdWlSb290LCAnRXh0ZXJuYWwnLCAnQ29kZU1pcnJvcicpOwogbXkgJGVzcHJpbWFQ
YXRoID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCR1aVJvb3QsICdFeHRlcm5hbCcsICdFc3ByaW1hJyk7
CitteSAkcnN2cFBhdGggPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHVpUm9vdCwgJ0V4dGVybmFsJywg
J1JTVlAnKTsKIAogbXkgJGNvZGVNaXJyb3JMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6
OlNwZWMtPmNhdGZpbGUoJGNvZGVNaXJyb3JQYXRoLCAnTElDRU5TRScpKTsKLW15ICRlc3ByaW1h
TWlycm9yTGljZW5zZSA9IHJlYWRMaWNlbnNlRmlsZShGaWxlOjpTcGVjLT5jYXRmaWxlKCRlc3By
aW1hUGF0aCwgJ0xJQ0VOU0UnKSk7CitteSAkZXNwcmltYUxpY2Vuc2UgPSByZWFkTGljZW5zZUZp
bGUoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXNwcmltYVBhdGgsICdMSUNFTlNFJykpOworbXkgJHJz
dnBMaWNlbnNlID0gcmVhZExpY2Vuc2VGaWxlKEZpbGU6OlNwZWMtPmNhdGZpbGUoJHJzdnBQYXRo
LCAnTElDRU5TRScpKTsKIAogbWFrZV9wYXRoKCRwcm90b2NvbERpciwgJHRhcmdldFJlc291cmNl
UGF0aCk7CiAKQEAgLTEyMyw2ICsxMjUsOSBAQCBpZiAoZGVmaW5lZCAkRU5WeydDT01CSU5FX0lO
U1BFQ1RPUl9SRVNPVVJDRVMnfSAmJiAoJEVOVnsnQ09NQklORV9JTlNQRUNUT1JfUkVTTwogICAg
ICMgQ29tYmluZSB0aGUgRXNwcmltYSBKYXZhU2NyaXB0IGZpbGVzIGluIFByb2R1Y3Rpb24gYnVp
bGRzIGludG8gYSBzaW5nbGUgZmlsZSAoRXNwcmltYS5qcykuCiAgICAgc3lzdGVtKCRjb21iaW5l
UmVzb3VyY2VzQ21kLCAnLS1pbnB1dC1kaXInLCAnRXh0ZXJuYWwvRXNwcmltYScsICctLWlucHV0
LWh0bWwnLCAkZGVyaXZlZFNvdXJjZXNNYWluSFRNTCwgJy0taW5wdXQtaHRtbC1kaXInLCAkdWlS
b290LCAnLS1kZXJpdmVkLXNvdXJjZXMtZGlyJywgJGRlcml2ZWRTb3VyY2VzRGlyLCAnLS1vdXRw
dXQtZGlyJywgJGRlcml2ZWRTb3VyY2VzRGlyLCAnLS1vdXRwdXQtc2NyaXB0LW5hbWUnLCAnRXNw
cmltYS5qcycpOwogCisgICAgIyBDb21iaW5lIHRoZSBSU1ZQIEphdmFTY3JpcHQgZmlsZXMgaW4g
UHJvZHVjdGlvbiBidWlsZHMgaW50byBhIHNpbmdsZSBmaWxlIChSU1ZQLmpzKS4KKyAgICBzeXN0
ZW0oJGNvbWJpbmVSZXNvdXJjZXNDbWQsICctLWlucHV0LWRpcicsICdFeHRlcm5hbC9SU1ZQJywg
Jy0taW5wdXQtaHRtbCcsICRkZXJpdmVkU291cmNlc01haW5IVE1MLCAnLS1pbnB1dC1odG1sLWRp
cicsICR1aVJvb3QsICctLWRlcml2ZWQtc291cmNlcy1kaXInLCAkZGVyaXZlZFNvdXJjZXNEaXIs
ICctLW91dHB1dC1kaXInLCAkZGVyaXZlZFNvdXJjZXNEaXIsICctLW91dHB1dC1zY3JpcHQtbmFt
ZScsICdSU1ZQLmpzJyk7CisKICAgICAjIFJlbW92ZSBjb25zb2xlLmFzc2VydCBjYWxscyBmcm9t
IHRoZSBNYWluLmpzIGZpbGUuCiAgICAgbXkgJGRlcml2ZWRTb3VyY2VzTWFpbkpTID0gRmlsZTo6
U3BlYy0+Y2F0ZmlsZSgkZGVyaXZlZFNvdXJjZXNEaXIsICdNYWluLmpzJyk7CiAgICAgc3lzdGVt
KEZpbGU6OlNwZWMtPmNhdGZpbGUoJHNjcmlwdHNSb290LCAncmVtb3ZlLWNvbnNvbGUtYXNzZXJ0
cy5wbCcpLCAnLS1pbnB1dC1zY3JpcHQnLCAkZGVyaXZlZFNvdXJjZXNNYWluSlMsICctLW91dHB1
dC1zY3JpcHQnLCAkZGVyaXZlZFNvdXJjZXNNYWluSlMpOwpAQCAtMTU1LDcgKzE2MCwxMSBAQCBp
ZiAoZGVmaW5lZCAkRU5WeydDT01CSU5FX0lOU1BFQ1RPUl9SRVNPVVJDRVMnfSAmJiAoJEVOVnsn
Q09NQklORV9JTlNQRUNUT1JfUkVTTwogCiAgICAgIyBFeHBvcnQgdGhlIGxpY2Vuc2UgaW50byBF
c3ByaW1hLmpzLgogICAgIG15ICR0YXJnZXRFc3ByaW1hSlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxl
KCR0YXJnZXRSZXNvdXJjZVBhdGgsICdFc3ByaW1hLmpzJyk7Ci0gICAgc2VlZEZpbGUoJHRhcmdl
dEVzcHJpbWFKUywgJGVzcHJpbWFNaXJyb3JMaWNlbnNlKTsKKyAgICBzZWVkRmlsZSgkdGFyZ2V0
RXNwcmltYUpTLCAkZXNwcmltYUxpY2Vuc2UpOworCisgICAgIyBFeHBvcnQgdGhlIGxpY2Vuc2Ug
aW50byBSU1ZQLmpzLgorICAgIG15ICR0YXJnZXRSU1ZQSlMgPSBGaWxlOjpTcGVjLT5jYXRmaWxl
KCR0YXJnZXRSZXNvdXJjZVBhdGgsICdSU1ZQLmpzJyk7CisgICAgc2VlZEZpbGUoJHRhcmdldFJT
VlBKUywgJGVzcHJpbWFMaWNlbnNlKTsKIAogICAgICMgTWluaWZ5IHRoZSBNYWluLmpzIGFuZCBN
YWluLmNzcyBmaWxlcywgd2l0aCBNYWluLmpzIGFwcGVuZGluZyB0byB0aGUgbGljZW5zZSB0aGF0
IHdhcyBleHBvcnRlZCBhYm92ZS4KICAgICBteSAkanNNaW5TY3JpcHQgPSBGaWxlOjpTcGVjLT5j
YXRmaWxlKCRzY3JpcHRzUm9vdCwgJ2pzbWluLnB5Jyk7CkBAIC0xNjQsMTQgKzE3MywxOCBAQCBp
ZiAoZGVmaW5lZCAkRU5WeydDT01CSU5FX0lOU1BFQ1RPUl9SRVNPVVJDRVMnfSAmJiAoJEVOVnsn
Q09NQklORV9JTlNQRUNUT1JfUkVTTwogICAgIHN5c3RlbShxcSgiJHB5dGhvbiIgIiRjc3NNaW5T
Y3JpcHQiIDwgIiRkZXJpdmVkU291cmNlc01haW5DU1MiID4+ICIkdGFyZ2V0TWFpbkNTUyIpKSBh
bmQgZGllICJGYWlsZWQgdG8gbWluaWZ5ICRkZXJpdmVkU291cmNlc01haW5DU1M6ICQhIjsKIAog
ICAgICMgTWluaWZ5IHRoZSBDb2RlTWlycm9yLmpzIGFuZCBDb2RlTWlycm9yLmNzcyBmaWxlcywg
YXBwZW5kaW5nIHRvIHRoZSBsaWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgotICAgIG15
ICRkZXJpdmVkU291cmVzc0NvZGVNaXJyb3JKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2
ZWRTb3VyY2VzRGlyLCAnQ29kZU1pcnJvci5qcycpOworICAgIG15ICRkZXJpdmVkU291cmNlc0Nv
ZGVNaXJyb3JKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2VzRGlyLCAnQ29k
ZU1pcnJvci5qcycpOwogICAgIG15ICRkZXJpdmVkU291cmNlc0NvZGVNaXJyb3JDU1MgPSBGaWxl
OjpTcGVjLT5jYXRmaWxlKCRkZXJpdmVkU291cmNlc0RpciwgJ0NvZGVNaXJyb3IuY3NzJyk7Ci0g
ICAgc3lzdGVtKHFxKCIkcHl0aG9uIiAiJGpzTWluU2NyaXB0IiA8ICIkZGVyaXZlZFNvdXJlc3ND
b2RlTWlycm9ySlMiID4+ICIkdGFyZ2V0Q29kZU1pcnJvckpTIikpIGFuZCBkaWUgIkZhaWxlZCB0
byBtaW5pZnkgJGRlcml2ZWRTb3VyZXNzQ29kZU1pcnJvckpTOiAkISI7CisgICAgc3lzdGVtKHFx
KCIkcHl0aG9uIiAiJGpzTWluU2NyaXB0IiA8ICIkZGVyaXZlZFNvdXJjZXNDb2RlTWlycm9ySlMi
ID4+ICIkdGFyZ2V0Q29kZU1pcnJvckpTIikpIGFuZCBkaWUgIkZhaWxlZCB0byBtaW5pZnkgJGRl
cml2ZWRTb3VyY2VzQ29kZU1pcnJvckpTOiAkISI7CiAgICAgc3lzdGVtKHFxKCIkcHl0aG9uIiAi
JGNzc01pblNjcmlwdCIgPCAiJGRlcml2ZWRTb3VyY2VzQ29kZU1pcnJvckNTUyIgPj4gIiR0YXJn
ZXRDb2RlTWlycm9yQ1NTIikpIGFuZCBkaWUgIkZhaWxlZCB0byBtaW5pZnkgJGRlcml2ZWRTb3Vy
Y2VzQ29kZU1pcnJvckNTUzogJCEiOwogCiAgICAgIyBNaW5pZnkgdGhlIEVzcHJpbWEuanMgZmls
ZSwgYXBwZW5kaW5nIHRvIHRoZSBsaWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgotICAg
IG15ICRkZXJpdmVkU291cmVzc0VzcHJpbWFKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2
ZWRTb3VyY2VzRGlyLCAnRXNwcmltYS5qcycpOwotICAgIHN5c3RlbShxcSgiJHB5dGhvbiIgIiRq
c01pblNjcmlwdCIgPCAiJGRlcml2ZWRTb3VyZXNzRXNwcmltYUpTIiA+PiAiJHRhcmdldEVzcHJp
bWFKUyIpKSBhbmQgZGllICJGYWlsZWQgdG8gbWluaWZ5ICRkZXJpdmVkU291cmVzc0VzcHJpbWFK
UzogJCEiOworICAgIG15ICRkZXJpdmVkU291cmNlc0VzcHJpbWFKUyA9IEZpbGU6OlNwZWMtPmNh
dGZpbGUoJGRlcml2ZWRTb3VyY2VzRGlyLCAnRXNwcmltYS5qcycpOworICAgIHN5c3RlbShxcSgi
JHB5dGhvbiIgIiRqc01pblNjcmlwdCIgPCAiJGRlcml2ZWRTb3VyY2VzRXNwcmltYUpTIiA+PiAi
JHRhcmdldEVzcHJpbWFKUyIpKSBhbmQgZGllICJGYWlsZWQgdG8gbWluaWZ5ICRkZXJpdmVkU291
cmNlc0VzcHJpbWFKUzogJCEiOworCisgICAgIyBNaW5pZnkgdGhlIFJTVlAuanMgZmlsZSwgYXBw
ZW5kaW5nIHRvIHRoZSBsaWNlbnNlIHRoYXQgd2FzIGV4cG9ydGVkIGFib3ZlLgorICAgIG15ICRk
ZXJpdmVkU291cmNlc1JTVlBKUyA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGRlcml2ZWRTb3VyY2Vz
RGlyLCAnUlNWUC5qcycpOworICAgIHN5c3RlbShxcSgiJHB5dGhvbiIgIiRqc01pblNjcmlwdCIg
PCAiJGRlcml2ZWRTb3VyY2VzUlNWUEpTIiA+PiAiJHRhcmdldFJTVlBKUyIpKSBhbmQgZGllICJG
YWlsZWQgdG8gbWluaWZ5ICRkZXJpdmVkU291cmNlc1JTVlBKUzogJCEiOwogCiAgICAgIyBDb3B5
IG92ZXIgTWFpbi5odG1sIGFuZCB0aGUgSW1hZ2VzIGRpcmVjdG9yeS4KICAgICBjb3B5KCRkZXJp
dmVkU291cmNlc01haW5IVE1MLCBGaWxlOjpTcGVjLT5jYXRmaWxlKCR0YXJnZXRSZXNvdXJjZVBh
dGgsICdNYWluLmh0bWwnKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL0RPTVV0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvRE9NVXRpbGl0aWVzLmpzCmluZGV4IDJkYmE2MTM0NzE1NDU0MTA3
MTMxMmExMTg0NzQ3MjlhMWJmZGUyZDQuLmIwYzE1ZTQ2MzcxZTIwMjY5MWFmNGJmNjBhN2E5Nzg1
MTNhNzM2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0Jhc2UvRE9NVXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvRE9NVXRpbGl0aWVzLmpzCkBAIC0yOSw2ICsyOSw5IEBACiAgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKKy8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBwcm9ibGVtcyB3aXRoIHRoZSBk
ZWJ1Z2dlciBhbmQgbmF0aXZlIFByb21pc2VzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM1ODMw
PgorV2ViSW5zcGVjdG9yLlByb21pc2UgPSBSU1ZQLlByb21pc2U7CisKIFdlYkluc3BlY3Rvci5k
aXNwbGF5TmFtZUZvck5vZGUgPSBmdW5jdGlvbihub2RlKQogewogICAgIHZhciB0aXRsZSA9IG5v
ZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9CYXNlL1Rlc3QuanMKaW5kZXggYWI1YWYxMDRhNDRjOTJhZWNhODFiZThi
MGMxYjJlM2E4Yjc5ZWVmYS4uZTNiNTM3YWE4NDBmN2ZkYWE0ZDMwZjY2NTU4NzIzNTgwOTRkMjA1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9U
ZXN0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvVGVz
dC5qcwpAQCAtMjEzLDcgKzIxMyw3IEBAIEluc3BlY3RvclRlc3QucmVsb2FkUGFnZSA9IGZ1bmN0
aW9uKHNob3VsZElnbm9yZUNhY2hlKQogICAgICAgICAgICAgdGhpcy5fc2hvdWxkUmVzZW5kUmVz
dWx0cyA9IHRydWU7CiAgICAgICAgICAgICB0aGlzLl90ZXN0UGFnZUlzUmVsb2FkaW5nID0gdHJ1
ZTsKIAotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5yZXNvbHZlKG51bGwpOwogICAgICAgICB9
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpzCmluZGV4IDE3MzJkMzM3
YzE1MjA4ZGJhOGI4ZWM5Njg1YjlhZDY1ZGYyZjhkZWQuLjAyMTA0MmI4N2E5YTAwOWRkZWI4NWJi
NmE5ZmJhYjVkMTIxMzc4OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9EZWJ1Z2dlck1hbmFnZXIuanMK
QEAgLTE0MywxMSArMTQzLDExIEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90
eXBlID0gewogICAgIHBhdXNlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5f
cGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgICAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Qcm9taXNlLnJlc29sdmUoKTsKIAogICAgICAgICB2YXIg
bGlzdGVuZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIodGhpcywgdHJ1ZSk7CiAK
LSAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZl
LCByZWplY3QpIHsKKyAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgV2ViSW5zcGVjdG9y
LlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICBsaXN0ZW5l
ci5jb25uZWN0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIsIFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuUGF1c2VkLCByZXNvbHZlKTsKICAgICAgICAgfSk7CiAKQEAgLTE1
OCwxNyArMTU4LDE3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgICAgfSk7CiAKLSAgICAg
ICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwor
ICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBw
cm90b2NvbFJlc3VsdF0pOwogICAgIH0sCiAKICAgICByZXN1bWU6IGZ1bmN0aW9uKCkKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSgpOworICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Qcm9taXNlLnJlc29s
dmUoKTsKIAogICAgICAgICB2YXIgbGlzdGVuZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXIodGhpcywgdHJ1ZSk7CiAKLSAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgdmFyIG1hbmFnZXJSZXN1
bHQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7
CiAgICAgICAgICAgICBsaXN0ZW5lci5jb25uZWN0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFn
ZXIsIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuUmVzdW1lZCwgcmVzb2x2ZSk7
CiAgICAgICAgIH0pOwogCkBAIC0xNzksMTcgKzE3OSwxNyBAQCBXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAg
ICAgICAgICAgIH0pOwogCi0gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJlc3Vs
dCwgcHJvdG9jb2xSZXN1bHRdKTsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Qcm9taXNl
LmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xSZXN1bHRdKTsKICAgICB9LAogCiAgICAgc3Rl
cE92ZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQotICAg
ICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3Zl
ciBiZWNhdXNlIGRlYnVnZ2VyIGlzIG5vdCBwYXVzZWQuIikpOworICAgICAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNhbm5vdCBzdGVwIG92ZXIg
YmVjYXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIpKTsKIAogICAgICAgICB2YXIgbGlzdGVu
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIodGhpcywgdHJ1ZSk7CiAKLSAgICAg
ICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWpl
Y3QpIHsKKyAgICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgV2ViSW5zcGVjdG9yLlByb21p
c2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICBsaXN0ZW5lci5jb25u
ZWN0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIsIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1h
bmFnZXIuRXZlbnQuQWN0aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlLCByZXNvbHZlKTsKICAgICAgICAg
fSk7CiAKQEAgLTIwMCwxNyArMjAwLDE3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgICAg
fSk7CiAKLSAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90b2Nv
bFJlc3VsdF0pOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2UuYWxsKFttYW5h
Z2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwogICAgIH0sCiAKICAgICBzdGVwSW50bzogZnVu
Y3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQpCi0gICAgICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJDYW5ub3Qgc3RlcCBpbnRvIGJlY2F1c2Ug
ZGVidWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgaW50byBiZWNhdXNlIGRl
YnVnZ2VyIGlzIG5vdCBwYXVzZWQuIikpOwogCiAgICAgICAgIHZhciBsaXN0ZW5lciA9IG5ldyBX
ZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcih0aGlzLCB0cnVlKTsKIAotICAgICAgICB2YXIgbWFu
YWdlclJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAg
ICAgICB2YXIgbWFuYWdlclJlc3VsdCA9IG5ldyBXZWJJbnNwZWN0b3IuUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3QoV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTWFuYWdlciwgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5BY3RpdmVDYWxsRnJhbWVEaWRDaGFuZ2UsIHJlc29sdmUpOwogICAgICAgICB9KTsKIApAQCAt
MjIxLDE3ICsyMjEsMTcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsKIAotICAg
ICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7
CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQs
IHByb3RvY29sUmVzdWx0XSk7CiAgICAgfSwKIAogICAgIHN0ZXBPdXQ6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UucmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3V0IGJlY2F1c2UgZGVidWdnZXIgaXMg
bm90IHBhdXNlZC4iKSk7CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2Uu
cmVqZWN0KG5ldyBFcnJvcigiQ2Fubm90IHN0ZXAgb3V0IGJlY2F1c2UgZGVidWdnZXIgaXMgbm90
IHBhdXNlZC4iKSk7CiAKICAgICAgICAgdmFyIGxpc3RlbmVyID0gbmV3IFdlYkluc3BlY3Rvci5F
dmVudExpc3RlbmVyKHRoaXMsIHRydWUpOwogCi0gICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0g
bmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHZhciBtYW5h
Z2VyUmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCkgewogICAgICAgICAgICAgbGlzdGVuZXIuY29ubmVjdChXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNYW5hZ2VyLCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxG
cmFtZURpZENoYW5nZSwgcmVzb2x2ZSk7CiAgICAgICAgIH0pOwogCkBAIC0yNDIsNyArMjQyLDcg
QEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICByZXR1cm4gUHJv
bWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0XSk7CisgICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQsIHByb3RvY29sUmVzdWx0
XSk7CiAgICAgfSwKIAogICAgIGdldCBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBs
YXlNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvUmVwbGF5TWFuYWdlci5qcwppbmRleCA0NmMwNTA1MTM1ZGVlNDFmMzVmNTgxNmY4NDY2
ZWU0NWNiMzZlYzM2Li5mMWQ5YTg3ODVjZWJiOTY5ZmU2MTQxYWU3YTY2Y2JjMzU4NmUwN2ZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9SZXBsYXlNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMKQEAgLTE3Niw3ICsxNzYsNyBAQCBXZWJJ
bnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIG5ld1By
b21pc2UgPSBSZXBsYXlBZ2VudC5nZXRTZXNzaW9uRGF0YS5wcm9taXNlKHNlc3Npb25JZCkKICAg
ICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHBheWxvYWQpIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uLmZyb21QYXlsb2Fk
KHNlc3Npb25JZCwgcGF5bG9hZCkpOworICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuUHJvbWlzZS5yZXNvbHZlKFdlYkluc3BlY3Rvci5SZXBsYXlTZXNzaW9uLmZyb21QYXlsb2Fk
KHNlc3Npb25JZCwgcGF5bG9hZCkpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5f
c2Vzc2lvblByb21pc2VzLnNldChzZXNzaW9uSWQsIG5ld1Byb21pc2UpOwpAQCAtMTkxLDcgKzE5
MSw3IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICB2YXIgbmV3UHJvbWlzZSA9IFJlcGxheUFnZW50LmdldFNlZ21lbnREYXRhLnByb21pc2Uoc2Vn
bWVudElkKQogICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocGF5bG9hZCkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFdlYkluc3BlY3Rvci5SZXBsYXlTZXNz
aW9uU2VnbWVudChzZWdtZW50SWQsIHBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlByb21pc2UucmVzb2x2ZShuZXcgV2ViSW5zcGVjdG9yLlJlcGxheVNlc3Np
b25TZWdtZW50KHNlZ21lbnRJZCwgcGF5bG9hZCkpOwogICAgICAgICAgICAgfSk7CiAKICAgICAg
ICAgdGhpcy5fc2VnbWVudFByb21pc2VzLnNldChzZWdtZW50SWQsIG5ld1Byb21pc2UpOwpAQCAt
NTQ1LDcgKzU0NSw3IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgLy8gYmUgcmVtb3ZlZCBvbmNlIHRoZSBzZWdtZW50IGlzIGNvbXBsZXRlLCBhbmQg
dGhlbiBpdHMgZGF0YSB3aWxsIGJlIGZldGNoZWQuCiAgICAgICAgIHZhciBpbmNvbXBsZXRlU2Vn
bWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuSW5jb21wbGV0ZVNlc3Npb25TZWdtZW50KHNlZ21lbnRJ
ZCk7CiAgICAgICAgIHRoaXMuX3NlZ21lbnRzLnNldChzZWdtZW50SWQsIGluY29tcGxldGVTZWdt
ZW50KTsKLSAgICAgICAgdGhpcy5fc2VnbWVudFByb21pc2VzLnNldChzZWdtZW50SWQsIFByb21p
c2UucmVzb2x2ZShpbmNvbXBsZXRlU2VnbWVudCkpOworICAgICAgICB0aGlzLl9zZWdtZW50UHJv
bWlzZXMuc2V0KHNlZ21lbnRJZCwgV2ViSW5zcGVjdG9yLlByb21pc2UucmVzb2x2ZShpbmNvbXBs
ZXRlU2VnbWVudCkpOwogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLkV2ZW50LlNlc3Npb25TZWdtZW50QWRkZWQsIHtzZWdt
ZW50SWRlbnRpZmllcjogc2VnbWVudElkfSk7CiAgICAgfSwKQEAgLTU4NCw3ICs1ODQsNyBAQCBX
ZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFdhaXQg
Zm9yIGFueSBvdXRzdGFuZGluZyBwcm9taXNlIHRvIHNldHRsZSBzbyBpdCBkb2Vzbid0IGdldCBy
ZS1hZGRlZC4KICAgICAgICAgdGhpcy5nZXRTZWdtZW50KHNlZ21lbnRJZCkKICAgICAgICAgICAg
IC5jYXRjaChmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlByb21pc2Uu
cmVzb2x2ZSgpOwogICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAg
ICAgICBtYW5hZ2VyLl9zZWdtZW50UHJvbWlzZXMuZGVsZXRlKHNlZ21lbnRJZCk7CiAgICAgICAg
ICAgICAgICAgdmFyIHJlbW92ZWRTZWdtZW50ID0gbWFuYWdlci5fc2VnbWVudHMudGFrZShzZWdt
ZW50SWQpOwpAQCAtNjcyLDcgKzY3Miw3IEBAIFdlYkluc3BlY3Rvci5SZXBsYXlNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBtYW5hZ2VyID0gdGhpczsKIAotICAgICAg
ICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAg
IHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0
KSB7CiAgICAgICAgICAgICBtYW5hZ2VyLl9icmVha3BvaW50c1dlcmVTdXBwcmVzc2VkID0gV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50c0VuYWJsZWQ7CiAgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmJyZWFrcG9pbnRzRW5hYmxlZCA9IGZhbHNl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9SU1ZQL0xJQ0VOU0UgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9SU1ZQL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU0ZWM1OTkyZGY3NTA4NDk5YzQxZDBl
OWQ3ZWQ3NGVmNWQ1MDMyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL1JTVlAvTElDRU5TRQpAQCAtMCwwICsxLDE5IEBACitD
b3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFu
ZCBjb250cmlidXRvcnMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj
aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgordGhpcyBzb2Z0d2FyZSBh
bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRl
YWwgaW4KK3RoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91
dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KK3VzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi
bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCitvZiB0aGUg
U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBm
dXJuaXNoZWQgdG8gZG8KK3NvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK
KworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug
c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg
b2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU
SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5H
IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF
IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBB
TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitP
VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U
SEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQL3JzdnAuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9SU1ZQL3JzdnAuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMGQxZTQ1NjlhYzU4ZGYwZTA1N2JhMGNkNGIxZGUxYzk3ODkyNDJjNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL1JTVlAv
cnN2cC5qcwpAQCAtMCwwICsxLDE2MTAgQEAKKy8qIQorICogQG92ZXJ2aWV3IFJTVlAgLSBhIHRp
bnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuCisgKiBAY29weXJpZ2h0IENvcHlyaWdo
dCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRy
aWJ1dG9ycworICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZQorICogICAg
ICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3RpbGRlaW8vcnN2
cC5qcy9tYXN0ZXIvTElDRU5TRQorICogQHZlcnNpb24gICAzLjAuMTMKKyAqLworCisoZnVuY3Rp
b24oKSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gJCRyc3ZwJGV2ZW50cyQk
aW5kZXhPZihjYWxsYmFja3MsIGNhbGxiYWNrKSB7CisgICAgICBmb3IgKHZhciBpPTAsIGw9Y2Fs
bGJhY2tzLmxlbmd0aDsgaTxsOyBpKyspIHsKKyAgICAgICAgaWYgKGNhbGxiYWNrc1tpXSA9PT0g
Y2FsbGJhY2spIHsgcmV0dXJuIGk7IH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIC0xOworICAg
IH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRldmVudHMkJGNhbGxiYWNrc0ZvcihvYmplY3QpIHsK
KyAgICAgIHZhciBjYWxsYmFja3MgPSBvYmplY3QuX3Byb21pc2VDYWxsYmFja3M7CisKKyAgICAg
IGlmICghY2FsbGJhY2tzKSB7CisgICAgICAgIGNhbGxiYWNrcyA9IG9iamVjdC5fcHJvbWlzZUNh
bGxiYWNrcyA9IHt9OworICAgICAgfQorCisgICAgICByZXR1cm4gY2FsbGJhY2tzOworICAgIH0K
KworICAgIHZhciAkJHJzdnAkZXZlbnRzJCRkZWZhdWx0ID0geworCisgICAgICAvKioKKyAgICAg
ICAgYFJTVlAuRXZlbnRUYXJnZXQubWl4aW5gIGV4dGVuZHMgYW4gb2JqZWN0IHdpdGggRXZlbnRU
YXJnZXQgbWV0aG9kcy4gRm9yCisgICAgICAgIEV4YW1wbGU6CisKKyAgICAgICAgYGBgamF2YXNj
cmlwdAorICAgICAgICB2YXIgb2JqZWN0ID0ge307CisKKyAgICAgICAgUlNWUC5FdmVudFRhcmdl
dC5taXhpbihvYmplY3QpOworCisgICAgICAgIG9iamVjdC5vbignZmluaXNoZWQnLCBmdW5jdGlv
bihldmVudCkgeworICAgICAgICAgIC8vIGhhbmRsZSBldmVudAorICAgICAgICB9KTsKKworICAg
ICAgICBvYmplY3QudHJpZ2dlcignZmluaXNoZWQnLCB7IGRldGFpbDogdmFsdWUgfSk7CisgICAg
ICAgIGBgYAorCisgICAgICAgIGBFdmVudFRhcmdldC5taXhpbmAgYWxzbyB3b3JrcyB3aXRoIHBy
b3RvdHlwZXM6CisKKyAgICAgICAgYGBgamF2YXNjcmlwdAorICAgICAgICB2YXIgUGVyc29uID0g
ZnVuY3Rpb24oKSB7fTsKKyAgICAgICAgUlNWUC5FdmVudFRhcmdldC5taXhpbihQZXJzb24ucHJv
dG90eXBlKTsKKworICAgICAgICB2YXIgeWVodWRhID0gbmV3IFBlcnNvbigpOworICAgICAgICB2
YXIgdG9tID0gbmV3IFBlcnNvbigpOworCisgICAgICAgIHllaHVkYS5vbigncG9rZScsIGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgICAgY29uc29sZS5sb2coJ1llaHVkYSBzYXlzIE9XJyk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIHRvbS5vbigncG9rZScsIGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgICAgY29uc29sZS5sb2coJ1RvbSBzYXlzIE9XJyk7CisgICAgICAgIH0pOworCisgICAg
ICAgIHllaHVkYS50cmlnZ2VyKCdwb2tlJyk7CisgICAgICAgIHRvbS50cmlnZ2VyKCdwb2tlJyk7
CisgICAgICAgIGBgYAorCisgICAgICAgIEBtZXRob2QgbWl4aW4KKyAgICAgICAgQGZvciBSU1ZQ
LkV2ZW50VGFyZ2V0CisgICAgICAgIEBwcml2YXRlCisgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBv
YmplY3Qgb2JqZWN0IHRvIGV4dGVuZCB3aXRoIEV2ZW50VGFyZ2V0IG1ldGhvZHMKKyAgICAgICov
CisgICAgICBtaXhpbjogZnVuY3Rpb24ob2JqZWN0KSB7CisgICAgICAgIG9iamVjdC5vbiA9IHRo
aXMub247CisgICAgICAgIG9iamVjdC5vZmYgPSB0aGlzLm9mZjsKKyAgICAgICAgb2JqZWN0LnRy
aWdnZXIgPSB0aGlzLnRyaWdnZXI7CisgICAgICAgIG9iamVjdC5fcHJvbWlzZUNhbGxiYWNrcyA9
IHVuZGVmaW5lZDsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgIH0sCisKKyAgICAgIC8q
KgorICAgICAgICBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSBleGVjdXRlZCB3aGVuIGBldmVu
dE5hbWVgIGlzIHRyaWdnZXJlZAorCisgICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAgICAgb2Jq
ZWN0Lm9uKCdldmVudCcsIGZ1bmN0aW9uKGV2ZW50SW5mbyl7CisgICAgICAgICAgLy8gaGFuZGxl
IHRoZSBldmVudAorICAgICAgICB9KTsKKworICAgICAgICBvYmplY3QudHJpZ2dlcignZXZlbnQn
KTsKKyAgICAgICAgYGBgCisKKyAgICAgICAgQG1ldGhvZCBvbgorICAgICAgICBAZm9yIFJTVlAu
RXZlbnRUYXJnZXQKKyAgICAgICAgQHByaXZhdGUKKyAgICAgICAgQHBhcmFtIHtTdHJpbmd9IGV2
ZW50TmFtZSBuYW1lIG9mIHRoZSBldmVudCB0byBsaXN0ZW4gZm9yCisgICAgICAgIEBwYXJhbSB7
RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBp
cyB0cmlnZ2VyZWQuCisgICAgICAqLworICAgICAgb246IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2Fs
bGJhY2spIHsKKyAgICAgICAgdmFyIGFsbENhbGxiYWNrcyA9ICQkcnN2cCRldmVudHMkJGNhbGxi
YWNrc0Zvcih0aGlzKSwgY2FsbGJhY2tzOworCisgICAgICAgIGNhbGxiYWNrcyA9IGFsbENhbGxi
YWNrc1tldmVudE5hbWVdOworCisgICAgICAgIGlmICghY2FsbGJhY2tzKSB7CisgICAgICAgICAg
Y2FsbGJhY2tzID0gYWxsQ2FsbGJhY2tzW2V2ZW50TmFtZV0gPSBbXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICgkJHJzdnAkZXZlbnRzJCRpbmRleE9mKGNhbGxiYWNrcywgY2FsbGJhY2spID09
PSAtMSkgeworICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICAgICAgfQor
ICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgIFlvdSBjYW4gdXNlIGBvZmZgIHRvIHN0b3Ag
ZmlyaW5nIGEgcGFydGljdWxhciBjYWxsYmFjayBmb3IgYW4gZXZlbnQ6CisKKyAgICAgICAgYGBg
amF2YXNjcmlwdAorICAgICAgICBmdW5jdGlvbiBkb1N0dWZmKCkgeyAvLyBkbyBzdHVmZiEgfQor
ICAgICAgICBvYmplY3Qub24oJ3N0dWZmJywgZG9TdHVmZik7CisKKyAgICAgICAgb2JqZWN0LnRy
aWdnZXIoJ3N0dWZmJyk7IC8vIGRvU3R1ZmYgd2lsbCBiZSBjYWxsZWQKKworICAgICAgICAvLyBV
bnJlZ2lzdGVyIE9OTFkgdGhlIGRvU3R1ZmYgY2FsbGJhY2sKKyAgICAgICAgb2JqZWN0Lm9mZign
c3R1ZmYnLCBkb1N0dWZmKTsKKyAgICAgICAgb2JqZWN0LnRyaWdnZXIoJ3N0dWZmJyk7IC8vIGRv
U3R1ZmYgd2lsbCBOT1QgYmUgY2FsbGVkCisgICAgICAgIGBgYAorCisgICAgICAgIElmIHlvdSBk
b24ndCBwYXNzIGEgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBgb2ZmYCwgQUxMIGNhbGxiYWNrcyBm
b3IgdGhlCisgICAgICAgIGV2ZW50IHdpbGwgbm90IGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50
IGZpcmVzLiBGb3IgZXhhbXBsZToKKworICAgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICAgIHZh
ciBjYWxsYmFjazEgPSBmdW5jdGlvbigpe307CisgICAgICAgIHZhciBjYWxsYmFjazIgPSBmdW5j
dGlvbigpe307CisKKyAgICAgICAgb2JqZWN0Lm9uKCdzdHVmZicsIGNhbGxiYWNrMSk7CisgICAg
ICAgIG9iamVjdC5vbignc3R1ZmYnLCBjYWxsYmFjazIpOworCisgICAgICAgIG9iamVjdC50cmln
Z2VyKCdzdHVmZicpOyAvLyBjYWxsYmFjazEgYW5kIGNhbGxiYWNrMiB3aWxsIGJlIGV4ZWN1dGVk
LgorCisgICAgICAgIG9iamVjdC5vZmYoJ3N0dWZmJyk7CisgICAgICAgIG9iamVjdC50cmlnZ2Vy
KCdzdHVmZicpOyAvLyBjYWxsYmFjazEgYW5kIGNhbGxiYWNrMiB3aWxsIG5vdCBiZSBleGVjdXRl
ZCEKKyAgICAgICAgYGBgCisKKyAgICAgICAgQG1ldGhvZCBvZmYKKyAgICAgICAgQGZvciBSU1ZQ
LkV2ZW50VGFyZ2V0CisgICAgICAgIEBwcml2YXRlCisgICAgICAgIEBwYXJhbSB7U3RyaW5nfSBl
dmVudE5hbWUgZXZlbnQgdG8gc3RvcCBsaXN0ZW5pbmcgdG8KKyAgICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gY2FsbGJhY2sgb3B0aW9uYWwgYXJndW1lbnQuIElmIGdpdmVuLCBvbmx5IHRoZSBmdW5j
dGlvbgorICAgICAgICBnaXZlbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQncyBjYWxs
YmFjayBxdWV1ZS4gSWYgbm8gYGNhbGxiYWNrYAorICAgICAgICBhcmd1bWVudCBpcyBnaXZlbiwg
YWxsIGNhbGxiYWNrcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQncyBjYWxsYmFjawor
ICAgICAgICBxdWV1ZS4KKyAgICAgICovCisgICAgICBvZmY6IGZ1bmN0aW9uKGV2ZW50TmFtZSwg
Y2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGFsbENhbGxiYWNrcyA9ICQkcnN2cCRldmVudHMkJGNh
bGxiYWNrc0Zvcih0aGlzKSwgY2FsbGJhY2tzLCBpbmRleDsKKworICAgICAgICBpZiAoIWNhbGxi
YWNrKSB7CisgICAgICAgICAgYWxsQ2FsbGJhY2tzW2V2ZW50TmFtZV0gPSBbXTsKKyAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYWxsYmFja3MgPSBhbGxDYWxsYmFja3Nb
ZXZlbnROYW1lXTsKKworICAgICAgICBpbmRleCA9ICQkcnN2cCRldmVudHMkJGluZGV4T2YoY2Fs
bGJhY2tzLCBjYWxsYmFjayk7CisKKyAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeyBjYWxsYmFj
a3Muc3BsaWNlKGluZGV4LCAxKTsgfQorICAgICAgfSwKKworICAgICAgLyoqCisgICAgICAgIFVz
ZSBgdHJpZ2dlcmAgdG8gZmlyZSBjdXN0b20gZXZlbnRzLiBGb3IgZXhhbXBsZToKKworICAgICAg
ICBgYGBqYXZhc2NyaXB0CisgICAgICAgIG9iamVjdC5vbignZm9vJywgZnVuY3Rpb24oKXsKKyAg
ICAgICAgICBjb25zb2xlLmxvZygnZm9vIGV2ZW50IGhhcHBlbmVkIScpOworICAgICAgICB9KTsK
KyAgICAgICAgb2JqZWN0LnRyaWdnZXIoJ2ZvbycpOworICAgICAgICAvLyAnZm9vIGV2ZW50IGhh
cHBlbmVkIScgbG9nZ2VkIHRvIHRoZSBjb25zb2xlCisgICAgICAgIGBgYAorCisgICAgICAgIFlv
dSBjYW4gYWxzbyBwYXNzIGEgdmFsdWUgYXMgYSBzZWNvbmQgYXJndW1lbnQgdG8gYHRyaWdnZXJg
IHRoYXQgd2lsbCBiZQorICAgICAgICBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gYWxsIGV2ZW50
IGxpc3RlbmVycyBmb3IgdGhlIGV2ZW50OgorCisgICAgICAgIGBgYGphdmFzY3JpcHQKKyAgICAg
ICAgb2JqZWN0Lm9uKCdmb28nLCBmdW5jdGlvbih2YWx1ZSl7CisgICAgICAgICAgY29uc29sZS5s
b2codmFsdWUubmFtZSk7CisgICAgICAgIH0pOworCisgICAgICAgIG9iamVjdC50cmlnZ2VyKCdm
b28nLCB7IG5hbWU6ICdiYXInIH0pOworICAgICAgICAvLyAnYmFyJyBsb2dnZWQgdG8gdGhlIGNv
bnNvbGUKKyAgICAgICAgYGBgCisKKyAgICAgICAgQG1ldGhvZCB0cmlnZ2VyCisgICAgICAgIEBm
b3IgUlNWUC5FdmVudFRhcmdldAorICAgICAgICBAcHJpdmF0ZQorICAgICAgICBAcGFyYW0ge1N0
cmluZ30gZXZlbnROYW1lIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGJlIHRyaWdnZXJlZAorICAgICAg
ICBAcGFyYW0ge0FueX0gb3B0aW9ucyBvcHRpb25hbCB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gYW55
IGV2ZW50IGhhbmRsZXJzIGZvcgorICAgICAgICB0aGUgZ2l2ZW4gYGV2ZW50TmFtZWAKKyAgICAg
ICovCisgICAgICB0cmlnZ2VyOiBmdW5jdGlvbihldmVudE5hbWUsIG9wdGlvbnMpIHsKKyAgICAg
ICAgdmFyIGFsbENhbGxiYWNrcyA9ICQkcnN2cCRldmVudHMkJGNhbGxiYWNrc0Zvcih0aGlzKSwg
Y2FsbGJhY2tzLCBjYWxsYmFjazsKKworICAgICAgICBpZiAoY2FsbGJhY2tzID0gYWxsQ2FsbGJh
Y2tzW2V2ZW50TmFtZV0pIHsKKyAgICAgICAgICAvLyBEb24ndCBjYWNoZSB0aGUgY2FsbGJhY2tz
Lmxlbmd0aCBzaW5jZSBpdCBtYXkgZ3JvdworICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxjYWxs
YmFja3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2tzW2ld
OworCisgICAgICAgICAgICBjYWxsYmFjayhvcHRpb25zKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9OworCisgICAgdmFyICQkcnN2cCRjb25maWckJGNvbmZpZyA9IHsK
KyAgICAgIGluc3RydW1lbnQ6IGZhbHNlCisgICAgfTsKKworICAgICQkcnN2cCRldmVudHMkJGRl
ZmF1bHQubWl4aW4oJCRyc3ZwJGNvbmZpZyQkY29uZmlnKTsKKworICAgIGZ1bmN0aW9uICQkcnN2
cCRjb25maWckJGNvbmZpZ3VyZShuYW1lLCB2YWx1ZSkgeworICAgICAgaWYgKG5hbWUgPT09ICdv
bmVycm9yJykgeworICAgICAgICAvLyBoYW5kbGUgZm9yIGxlZ2FjeSB1c2VycyB0aGF0IGV4cGVj
dCB0aGUgYWN0dWFsCisgICAgICAgIC8vIGVycm9yIHRvIGJlIHBhc3NlZCB0byB0aGVpciBmdW5j
dGlvbiBhZGRlZCB2aWEKKyAgICAgICAgLy8gYFJTVlAuY29uZmlndXJlKCdvbmVycm9yJywgc29t
ZUZ1bmN0aW9uSGVyZSk7YAorICAgICAgICAkJHJzdnAkY29uZmlnJCRjb25maWcub24oJ2Vycm9y
JywgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAgIGlmIChhcmd1bWVu
dHMubGVuZ3RoID09PSAyKSB7CisgICAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZ1tuYW1lXSA9
IHZhbHVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICQkcnN2cCRjb25maWckJGNv
bmZpZ1tuYW1lXTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHV0aWxzJCRvYmpl
Y3RPckZ1bmN0aW9uKHgpIHsKKyAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8
fCAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpOworICAgIH0KKworICAgIGZ1
bmN0aW9uICQkdXRpbHMkJGlzRnVuY3Rpb24oeCkgeworICAgICAgcmV0dXJuIHR5cGVvZiB4ID09
PSAnZnVuY3Rpb24nOworICAgIH0KKworICAgIGZ1bmN0aW9uICQkdXRpbHMkJGlzTWF5YmVUaGVu
YWJsZSh4KSB7CisgICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51
bGw7CisgICAgfQorCisgICAgdmFyICQkdXRpbHMkJF9pc0FycmF5OworCisgICAgaWYgKCFBcnJh
eS5pc0FycmF5KSB7CisgICAgICAkJHV0aWxzJCRfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7Cisg
ICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2Jq
ZWN0IEFycmF5XSc7CisgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAkJHV0aWxzJCRfaXNB
cnJheSA9IEFycmF5LmlzQXJyYXk7CisgICAgfQorCisgICAgdmFyICQkdXRpbHMkJGlzQXJyYXkg
PSAkJHV0aWxzJCRfaXNBcnJheTsKKyAgICB2YXIgJCR1dGlscyQkbm93ID0gRGF0ZS5ub3cgfHwg
ZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfTsKKyAgICBmdW5jdGlv
biAkJHV0aWxzJCRGKCkgeyB9CisKKyAgICB2YXIgJCR1dGlscyQkb19jcmVhdGUgPSAoT2JqZWN0
LmNyZWF0ZSB8fCBmdW5jdGlvbiAobykgeworICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAx
KSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignU2Vjb25kIGFyZ3VtZW50IG5vdCBzdXBwb3J0
ZWQnKTsKKyAgICAgIH0KKyAgICAgIGlmICh0eXBlb2YgbyAhPT0gJ29iamVjdCcpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QnKTsKKyAg
ICAgIH0KKyAgICAgICQkdXRpbHMkJEYucHJvdG90eXBlID0gbzsKKyAgICAgIHJldHVybiBuZXcg
JCR1dGlscyQkRigpOworICAgIH0pOworCisgICAgdmFyICQkaW5zdHJ1bWVudCQkcXVldWUgPSBb
XTsKKworICAgIHZhciAkJGluc3RydW1lbnQkJGRlZmF1bHQgPSBmdW5jdGlvbiBpbnN0cnVtZW50
KGV2ZW50TmFtZSwgcHJvbWlzZSwgY2hpbGQpIHsKKyAgICAgIGlmICgxID09PSAkJGluc3RydW1l
bnQkJHF1ZXVlLnB1c2goeworICAgICAgICAgIG5hbWU6IGV2ZW50TmFtZSwKKyAgICAgICAgICBw
YXlsb2FkOiB7CisgICAgICAgICAgICBndWlkOiBwcm9taXNlLl9ndWlkS2V5ICsgcHJvbWlzZS5f
aWQsCisgICAgICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwKKyAgICAgICAgICAgIGRldGFp
bDogcHJvbWlzZS5fcmVzdWx0LAorICAgICAgICAgICAgY2hpbGRHdWlkOiBjaGlsZCAmJiBwcm9t
aXNlLl9ndWlkS2V5ICsgY2hpbGQuX2lkLAorICAgICAgICAgICAgbGFiZWw6IHByb21pc2UuX2xh
YmVsLAorICAgICAgICAgICAgdGltZVN0YW1wOiAkJHV0aWxzJCRub3coKSwKKyAgICAgICAgICAg
IHN0YWNrOiBuZXcgRXJyb3IocHJvbWlzZS5fbGFiZWwpLnN0YWNrCisgICAgICAgICAgfX0pKSB7
CisKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHZh
ciBlbnRyeTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAkJGluc3RydW1lbnQk
JHF1ZXVlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZW50cnkgPSAkJGluc3RydW1l
bnQkJHF1ZXVlW2ldOworICAgICAgICAgICAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy50cmln
Z2VyKGVudHJ5Lm5hbWUsIGVudHJ5LnBheWxvYWQpOworICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICQkaW5zdHJ1bWVudCQkcXVldWUubGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0sIDUw
KTsKKyAgICAgICAgICB9CisgICAgICB9OworCisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwkJG5v
b3AoKSB7fQorICAgIHZhciAkJCRpbnRlcm5hbCQkUEVORElORyAgID0gdm9pZCAwOworICAgIHZh
ciAkJCRpbnRlcm5hbCQkRlVMRklMTEVEID0gMTsKKyAgICB2YXIgJCQkaW50ZXJuYWwkJFJFSkVD
VEVEICA9IDI7CisgICAgdmFyICQkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUiA9IG5ldyAkJCRp
bnRlcm5hbCQkRXJyb3JPYmplY3QoKTsKKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRnZXRU
aGVuKHByb21pc2UpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW47
CisgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICQkJGludGVybmFsJCRHRVRfVEhFTl9F
UlJPUi5lcnJvciA9IGVycm9yOworICAgICAgICByZXR1cm4gJCQkaW50ZXJuYWwkJEdFVF9USEVO
X0VSUk9SOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCR0cnlU
aGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHsK
KyAgICAgIHRyeSB7CisgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVy
LCByZWplY3Rpb25IYW5kbGVyKTsKKyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICByZXR1cm4g
ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQkaGFuZGxlRm9y
ZWlnblRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlLCB0aGVuKSB7CisgICAgICAkJHJzdnAkY29u
ZmlnJCRjb25maWcuYXN5bmMoZnVuY3Rpb24ocHJvbWlzZSkgeworICAgICAgICB2YXIgc2VhbGVk
ID0gZmFsc2U7CisgICAgICAgIHZhciBlcnJvciA9ICQkJGludGVybmFsJCR0cnlUaGVuKHRoZW4s
IHRoZW5hYmxlLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgIGlmIChzZWFsZWQpIHsgcmV0
dXJuOyB9CisgICAgICAgICAgc2VhbGVkID0gdHJ1ZTsKKyAgICAgICAgICBpZiAodGhlbmFibGUg
IT09IHZhbHVlKSB7CisgICAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2
YWx1ZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQkJGludGVybmFsJCRmdWxm
aWxsKHByb21pc2UsIHZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIGZ1bmN0aW9uKHJl
YXNvbikgeworICAgICAgICAgIGlmIChzZWFsZWQpIHsgcmV0dXJuOyB9CisgICAgICAgICAgc2Vh
bGVkID0gdHJ1ZTsKKworICAgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVh
c29uKTsKKyAgICAgICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25v
d24gcHJvbWlzZScpKTsKKworICAgICAgICBpZiAoIXNlYWxlZCAmJiBlcnJvcikgeworICAgICAg
ICAgIHNlYWxlZCA9IHRydWU7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNl
LCBlcnJvcik7CisgICAgICAgIH0KKyAgICAgIH0sIHByb21pc2UpOworICAgIH0KKworICAgIGZ1
bmN0aW9uICQkJGludGVybmFsJCRoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkg
eworICAgICAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJEZVTEZJTExFRCkg
eworICAgICAgICAkJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0
KTsKKyAgICAgIH0gZWxzZSBpZiAocHJvbWlzZS5fc3RhdGUgPT09ICQkJGludGVybmFsJCRSRUpF
Q1RFRCkgeworICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9y
ZXN1bHQpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHN1YnNjcmliZSh0
aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgIGlmICh0aGVu
YWJsZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21p
c2UsIHZhbHVlKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQkaW50ZXJuYWwk
JGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgZnVuY3Rp
b24ocmVhc29uKSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFz
b24pOworICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRl
cm5hbCQkaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlKSB7CisgICAg
ICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3Rvcikg
eworICAgICAgICAkJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVU
aGVuYWJsZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgdGhlbiA9ICQkJGludGVybmFs
JCRnZXRUaGVuKG1heWJlVGhlbmFibGUpOworCisgICAgICAgIGlmICh0aGVuID09PSAkJCRpbnRl
cm5hbCQkR0VUX1RIRU5fRVJST1IpIHsKKyAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHBy
b21pc2UsICQkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUi5lcnJvcik7CisgICAgICAgIH0gZWxz
ZSBpZiAodGhlbiA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZp
bGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoJCR1dGlscyQk
aXNGdW5jdGlvbih0aGVuKSkgeworICAgICAgICAgICQkJGludGVybmFsJCRoYW5kbGVGb3JlaWdu
VGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRlcm5hbCQk
cmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkgeworICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7
CisgICAgICAgICQkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIHZhbHVlKTsKKyAgICAgIH0g
ZWxzZSBpZiAoJCR1dGlscyQkb2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHsKKyAgICAgICAgJCQk
aW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUpOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpOworICAg
ICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRwdWJsaXNoUmVqZWN0aW9u
KHByb21pc2UpIHsKKyAgICAgIGlmIChwcm9taXNlLl9vbmVycm9yKSB7CisgICAgICAgIHByb21p
c2UuX29uZXJyb3IocHJvbWlzZS5fcmVzdWx0KTsKKyAgICAgIH0KKworICAgICAgJCQkaW50ZXJu
YWwkJHB1Ymxpc2gocHJvbWlzZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gJCQkaW50ZXJuYWwk
JGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpIHsKKyAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0g
JCQkaW50ZXJuYWwkJFBFTkRJTkcpIHsgcmV0dXJuOyB9CisKKyAgICAgIHByb21pc2UuX3Jlc3Vs
dCA9IHZhbHVlOworICAgICAgcHJvbWlzZS5fc3RhdGUgPSAkJCRpbnRlcm5hbCQkRlVMRklMTEVE
OworCisgICAgICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7CisgICAg
ICAgIGlmICgkJHJzdnAkY29uZmlnJCRjb25maWcuaW5zdHJ1bWVudCkgeworICAgICAgICAgICQk
aW5zdHJ1bWVudCQkZGVmYXVsdCgnZnVsZmlsbGVkJywgcHJvbWlzZSk7CisgICAgICAgIH0KKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy5hc3luYygkJCRpbnRl
cm5hbCQkcHVibGlzaCwgcHJvbWlzZSk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
JCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pIHsKKyAgICAgIGlmIChwcm9taXNl
Ll9zdGF0ZSAhPT0gJCQkaW50ZXJuYWwkJFBFTkRJTkcpIHsgcmV0dXJuOyB9CisgICAgICBwcm9t
aXNlLl9zdGF0ZSA9ICQkJGludGVybmFsJCRSRUpFQ1RFRDsKKyAgICAgIHByb21pc2UuX3Jlc3Vs
dCA9IHJlYXNvbjsKKworICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLmFzeW5jKCQkJGludGVy
bmFsJCRwdWJsaXNoUmVqZWN0aW9uLCBwcm9taXNlKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAk
JCRpbnRlcm5hbCQkc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVq
ZWN0aW9uKSB7CisgICAgICB2YXIgc3Vic2NyaWJlcnMgPSBwYXJlbnQuX3N1YnNjcmliZXJzOwor
ICAgICAgdmFyIGxlbmd0aCA9IHN1YnNjcmliZXJzLmxlbmd0aDsKKworICAgICAgcGFyZW50Ll9v
bmVycm9yID0gbnVsbDsKKworICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkOworICAg
ICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgJCQkaW50ZXJuYWwkJEZVTEZJTExFRF0gPSBvbkZ1bGZp
bGxtZW50OworICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgJCQkaW50ZXJuYWwkJFJFSkVDVEVE
XSAgPSBvblJlamVjdGlvbjsKKworICAgICAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0
YXRlKSB7CisgICAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy5hc3luYygkJCRpbnRlcm5hbCQk
cHVibGlzaCwgcGFyZW50KTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJCRpbnRl
cm5hbCQkcHVibGlzaChwcm9taXNlKSB7CisgICAgICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNl
Ll9zdWJzY3JpYmVyczsKKyAgICAgIHZhciBzZXR0bGVkID0gcHJvbWlzZS5fc3RhdGU7CisKKyAg
ICAgIGlmICgkJHJzdnAkY29uZmlnJCRjb25maWcuaW5zdHJ1bWVudCkgeworICAgICAgICAkJGlu
c3RydW1lbnQkJGRlZmF1bHQoc2V0dGxlZCA9PT0gJCQkaW50ZXJuYWwkJEZVTEZJTExFRCA/ICdm
dWxmaWxsZWQnIDogJ3JlamVjdGVkJywgcHJvbWlzZSk7CisgICAgICB9CisKKyAgICAgIGlmIChz
dWJzY3JpYmVycy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9CisKKyAgICAgIHZhciBjaGlsZCwg
Y2FsbGJhY2ssIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDsKKworICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykgeworICAgICAgICBjaGlsZCA9IHN1
YnNjcmliZXJzW2ldOworICAgICAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVk
XTsKKworICAgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAkJCRpbnRlcm5hbCQkaW52b2tl
Q2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIGNhbGxiYWNrKGRldGFpbCk7CisgICAgICAgIH0KKyAgICAgIH0KKwor
ICAgICAgcHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiAkJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKSB7CisgICAgICB0aGlzLmVycm9yID0gbnVs
bDsKKyAgICB9CisKKyAgICB2YXIgJCQkaW50ZXJuYWwkJFRSWV9DQVRDSF9FUlJPUiA9IG5ldyAk
JCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTsKKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCR0
cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7CisgICAgICB0cnkgeworICAgICAgICByZXR1cm4g
Y2FsbGJhY2soZGV0YWlsKTsKKyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAkJCRpbnRlcm5h
bCQkVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTsKKyAgICAgICAgcmV0dXJuICQkJGludGVybmFs
JCRUUllfQ0FUQ0hfRVJST1I7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gJCQkaW50
ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwp
IHsKKyAgICAgIHZhciBoYXNDYWxsYmFjayA9ICQkdXRpbHMkJGlzRnVuY3Rpb24oY2FsbGJhY2sp
LAorICAgICAgICAgIHZhbHVlLCBlcnJvciwgc3VjY2VlZGVkLCBmYWlsZWQ7CisKKyAgICAgIGlm
IChoYXNDYWxsYmFjaykgeworICAgICAgICB2YWx1ZSA9ICQkJGludGVybmFsJCR0cnlDYXRjaChj
YWxsYmFjaywgZGV0YWlsKTsKKworICAgICAgICBpZiAodmFsdWUgPT09ICQkJGludGVybmFsJCRU
UllfQ0FUQ0hfRVJST1IpIHsKKyAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgIGVy
cm9yID0gdmFsdWUuZXJyb3I7CisgICAgICAgICAgdmFsdWUgPSBudWxsOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocHJvbWlzZSA9PT0gdmFsdWUpIHsKKyAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHBy
b21pc2UsIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0
aGF0IHNhbWUgcHJvbWlzZS4nKSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlID0gZGV0YWlsOworICAgICAgICBzdWNjZWVkZWQg
PSB0cnVlOworICAgICAgfQorCisgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgIT09ICQkJGludGVy
bmFsJCRQRU5ESU5HKSB7CisgICAgICAgIC8vIG5vb3AKKyAgICAgIH0gZWxzZSBpZiAoaGFzQ2Fs
bGJhY2sgJiYgc3VjY2VlZGVkKSB7CisgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21p
c2UsIHZhbHVlKTsKKyAgICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7CisgICAgICAgICQkJGludGVy
bmFsJCRyZWplY3QocHJvbWlzZSwgZXJyb3IpOworICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09
PSAkJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7CisgICAgICAgICQkJGludGVybmFsJCRmdWxmaWxs
KHByb21pc2UsIHZhbHVlKTsKKyAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gJCQkaW50ZXJu
YWwkJFJFSkVDVEVEKSB7CisgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdmFs
dWUpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uICQkJGludGVybmFsJCRpbml0aWFs
aXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikgeworICAgICAgdHJ5IHsKKyAgICAgICAgcmVz
b2x2ZXIoZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UodmFsdWUpeworICAgICAgICAgICQkJGludGVy
bmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKKyAgICAgICAgfSwgZnVuY3Rpb24gcmVqZWN0
UHJvbWlzZShyZWFzb24pIHsKKyAgICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2Us
IHJlYXNvbik7CisgICAgICAgIH0pOworICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICQkJGlu
dGVybmFsJCRyZWplY3QocHJvbWlzZSwgZSk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rp
b24gJCRlbnVtZXJhdG9yJCRtYWtlU2V0dGxlZFJlc3VsdChzdGF0ZSwgcG9zaXRpb24sIHZhbHVl
KSB7CisgICAgICBpZiAoc3RhdGUgPT09ICQkJGludGVybmFsJCRGVUxGSUxMRUQpIHsKKyAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICBzdGF0ZTogJ2Z1bGZpbGxlZCcsCisgICAgICAgICAgdmFs
dWU6IHZhbHVlCisgICAgICAgIH07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgIHN0YXRlOiAncmVqZWN0ZWQnLAorICAgICAgICAgIHJlYXNvbjogdmFsdWUKKyAg
ICAgICAgfTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJGVudW1lcmF0b3IkJEVu
dW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0LCBhYm9ydE9uUmVqZWN0LCBsYWJlbCkgeworICAg
ICAgdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yOworICAgICAgdGhpcy5w
cm9taXNlID0gbmV3IENvbnN0cnVjdG9yKCQkJGludGVybmFsJCRub29wLCBsYWJlbCk7CisgICAg
ICB0aGlzLl9hYm9ydE9uUmVqZWN0ID0gYWJvcnRPblJlamVjdDsKKworICAgICAgaWYgKHRoaXMu
X3ZhbGlkYXRlSW5wdXQoaW5wdXQpKSB7CisgICAgICAgIHRoaXMuX2lucHV0ICAgICA9IGlucHV0
OworICAgICAgICB0aGlzLmxlbmd0aCAgICAgPSBpbnB1dC5sZW5ndGg7CisgICAgICAgIHRoaXMu
X3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDsKKworICAgICAgICB0aGlzLl9pbml0KCk7CisKKyAg
ICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgJCQkaW50ZXJuYWwkJGZ1
bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDsKKyAgICAgICAgICB0aGlzLl9l
bnVtZXJhdGUoKTsKKyAgICAgICAgICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7CisgICAg
ICAgICAgICAkJCRpbnRlcm5hbCQkZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAkJCRpbnRl
cm5hbCQkcmVqZWN0KHRoaXMucHJvbWlzZSwgdGhpcy5fdmFsaWRhdGlvbkVycm9yKCkpOworICAg
ICAgfQorICAgIH0KKworICAgICQkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3Zh
bGlkYXRlSW5wdXQgPSBmdW5jdGlvbihpbnB1dCkgeworICAgICAgcmV0dXJuICQkdXRpbHMkJGlz
QXJyYXkoaW5wdXQpOworICAgIH07CisKKyAgICAkJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJv
dG90eXBlLl92YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBuZXcg
RXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpOworICAgIH07
CisKKyAgICAkJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rp
b24oKSB7CisgICAgICB0aGlzLl9yZXN1bHQgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpOworICAg
IH07CisKKyAgICB2YXIgJCRlbnVtZXJhdG9yJCRkZWZhdWx0ID0gJCRlbnVtZXJhdG9yJCRFbnVt
ZXJhdG9yOworCisgICAgJCRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fZW51bWVy
YXRlID0gZnVuY3Rpb24oKSB7CisgICAgICB2YXIgbGVuZ3RoICA9IHRoaXMubGVuZ3RoOworICAg
ICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7CisgICAgICB2YXIgaW5wdXQgICA9IHRoaXMu
X2lucHV0OworCisgICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09ICQkJGlu
dGVybmFsJCRQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICB0aGlzLl9lYWNo
RW50cnkoaW5wdXRbaV0sIGkpOworICAgICAgfQorICAgIH07CisKKyAgICAkJGVudW1lcmF0b3Ik
JEVudW1lcmF0b3IucHJvdG90eXBlLl9lYWNoRW50cnkgPSBmdW5jdGlvbihlbnRyeSwgaSkgewor
ICAgICAgdmFyIGMgPSB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yOworICAgICAgaWYgKCQkdXRp
bHMkJGlzTWF5YmVUaGVuYWJsZShlbnRyeSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LmNvbnN0cnVj
dG9yID09PSBjICYmIGVudHJ5Ll9zdGF0ZSAhPT0gJCQkaW50ZXJuYWwkJFBFTkRJTkcpIHsKKyAg
ICAgICAgICBlbnRyeS5fb25lcnJvciA9IG51bGw7CisgICAgICAgICAgdGhpcy5fc2V0dGxlZEF0
KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KGMucmVzb2x2ZShlbnRyeSksIGkpOworICAgICAgICB9
CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLl9yZW1haW5pbmctLTsKKyAgICAgICAgdGhp
cy5fcmVzdWx0W2ldID0gdGhpcy5fbWFrZVJlc3VsdCgkJCRpbnRlcm5hbCQkRlVMRklMTEVELCBp
LCBlbnRyeSk7CisgICAgICB9CisgICAgfTsKKworICAgICQkZW51bWVyYXRvciQkRW51bWVyYXRv
ci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uKHN0YXRlLCBpLCB2YWx1ZSkgeworICAg
ICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7CisKKyAgICAgIGlmIChwcm9taXNlLl9zdGF0
ZSA9PT0gJCQkaW50ZXJuYWwkJFBFTkRJTkcpIHsKKyAgICAgICAgdGhpcy5fcmVtYWluaW5nLS07
CisKKyAgICAgICAgaWYgKHRoaXMuX2Fib3J0T25SZWplY3QgJiYgc3RhdGUgPT09ICQkJGludGVy
bmFsJCRSRUpFQ1RFRCkgeworICAgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwg
dmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHRo
aXMuX21ha2VSZXN1bHQoc3RhdGUsIGksIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7CisgICAgICAgICQkJGludGVybmFsJCRm
dWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7CisgICAgICB9CisgICAgfTsKKworICAgICQk
ZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX21ha2VSZXN1bHQgPSBmdW5jdGlvbihz
dGF0ZSwgaSwgdmFsdWUpIHsKKyAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9OworCisgICAgJCRl
bnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24o
cHJvbWlzZSwgaSkgeworICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzOworCisgICAgICAkJCRp
bnRlcm5hbCQkc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24odmFsdWUpIHsK
KyAgICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KCQkJGludGVybmFsJCRGVUxGSUxMRUQsIGks
IHZhbHVlKTsKKyAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAgICBlbnVtZXJhdG9y
Ll9zZXR0bGVkQXQoJCQkaW50ZXJuYWwkJFJFSkVDVEVELCBpLCByZWFzb24pOworICAgICAgfSk7
CisgICAgfTsKKworICAgIHZhciAkJHByb21pc2UkYWxsJCRkZWZhdWx0ID0gZnVuY3Rpb24gYWxs
KGVudHJpZXMsIGxhYmVsKSB7CisgICAgICByZXR1cm4gbmV3ICQkZW51bWVyYXRvciQkZGVmYXVs
dCh0aGlzLCBlbnRyaWVzLCB0cnVlIC8qIGFib3J0IG9uIHJlamVjdCAqLywgbGFiZWwpLnByb21p
c2U7CisgICAgfTsKKworICAgIHZhciAkJHByb21pc2UkcmFjZSQkZGVmYXVsdCA9IGZ1bmN0aW9u
IHJhY2UoZW50cmllcywgbGFiZWwpIHsKKyAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICov
CisgICAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzOworCisgICAgICB2YXIgcHJvbWlzZSA9IG5l
dyBDb25zdHJ1Y3RvcigkJCRpbnRlcm5hbCQkbm9vcCwgbGFiZWwpOworCisgICAgICBpZiAoISQk
dXRpbHMkJGlzQXJyYXkoZW50cmllcykpIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChw
cm9taXNlLCBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuJykp
OworICAgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICAgIH0KKworICAgICAgdmFyIGxlbmd0aCA9
IGVudHJpZXMubGVuZ3RoOworCisgICAgICBmdW5jdGlvbiBvbkZ1bGZpbGxtZW50KHZhbHVlKSB7
CisgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKKyAgICAgIH0K
KworICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29uKSB7CisgICAgICAgICQkJGludGVy
bmFsJCRyZWplY3QocHJvbWlzZSwgcmVhc29uKTsKKyAgICAgIH0KKworICAgICAgZm9yICh2YXIg
aSA9IDA7IHByb21pc2UuX3N0YXRlID09PSAkJCRpbnRlcm5hbCQkUEVORElORyAmJiBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgJCQkaW50ZXJuYWwkJHN1YnNjcmliZShDb25zdHJ1Y3Rvci5y
ZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9u
KTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHByb21pc2U7CisgICAgfTsKKworICAgIHZhciAk
JHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJlc29sdmUob2JqZWN0LCBsYWJl
bCkgeworICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KKyAgICAgIHZhciBDb25zdHJ1
Y3RvciA9IHRoaXM7CisKKyAgICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29i
amVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3RvcikgeworICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgICAgfQorCisgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1
Y3RvcigkJCRpbnRlcm5hbCQkbm9vcCwgbGFiZWwpOworICAgICAgJCQkaW50ZXJuYWwkJHJlc29s
dmUocHJvbWlzZSwgb2JqZWN0KTsKKyAgICAgIHJldHVybiBwcm9taXNlOworICAgIH07CisKKyAg
ICB2YXIgJCRwcm9taXNlJHJlamVjdCQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJlamVjdChyZWFzb24s
IGxhYmVsKSB7CisgICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqLworICAgICAgdmFyIENv
bnN0cnVjdG9yID0gdGhpczsKKyAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKCQk
JGludGVybmFsJCRub29wLCBsYWJlbCk7CisgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21p
c2UsIHJlYXNvbik7CisgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICB9OworCisgICAgdmFyICQk
cnN2cCRwcm9taXNlJCRndWlkS2V5ID0gJ3JzdnBfJyArICQkdXRpbHMkJG5vdygpICsgJy0nOwor
ICAgIHZhciAkJHJzdnAkcHJvbWlzZSQkY291bnRlciA9IDA7CisKKyAgICBmdW5jdGlvbiAkJHJz
dnAkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpIHsKKyAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
J1lvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQg
dG8gdGhlIHByb21pc2UgY29uc3RydWN0b3InKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJz
dnAkcHJvbWlzZSQkbmVlZHNOZXcoKSB7CisgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWls
ZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3Is
IHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4i
KTsKKyAgICB9CisKKyAgICB2YXIgJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQgPSAkJHJzdnAkcHJv
bWlzZSQkUHJvbWlzZTsKKworICAgIC8qKgorICAgICAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2Vu
dCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZQor
ICAgICAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3Vn
aCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2gKKyAgICAgIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8g
cmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlw6LigqzihKJzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSBy
ZWFzb24KKyAgICAgIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLgorCisgICAg
ICBUZXJtaW5vbG9neQorICAgICAgLS0tLS0tLS0tLS0KKworICAgICAgLSBgcHJvbWlzZWAgaXMg
YW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9y
IGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi4KKyAgICAgIC0gYHRoZW5hYmxlYCBpcyBh
biBvYmplY3Qgb3IgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgYHRoZW5gIG1ldGhvZC4KKyAgICAg
IC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVm
aW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS4KKyAgICAgIC0gYGV4Y2VwdGlvbmAgaXMg
YSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LgorICAgICAg
LSBgcmVhc29uYCBpcyBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoeSBhIHByb21pc2Ugd2FzIHJl
amVjdGVkLgorICAgICAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBw
cm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuCisKKyAgICAgIEEgcHJvbWlzZSBjYW4gYmUg
aW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC4K
KworICAgICAgUHJvbWlzZXMgdGhhdCBhcmUgZnVsZmlsbGVkIGhhdmUgYSBmdWxmaWxsbWVudCB2
YWx1ZSBhbmQgYXJlIGluIHRoZSBmdWxmaWxsZWQKKyAgICAgIHN0YXRlLiAgUHJvbWlzZXMgdGhh
dCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGUKKyAg
ICAgIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5h
YmxlLgorCisgICAgICBQcm9taXNlcyBjYW4gYWxzbyBiZSBzYWlkIHRvICpyZXNvbHZlKiBhIHZh
bHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBhbHNvIGEKKyAgICAgIHByb21pc2UsIHRoZW4gdGhlIG9y
aWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3MKKyAg
ICAgIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlz
ZSB0aGF0IHJlamVjdHMgd2lsbAorICAgICAgaXRzZWxmIHJlamVjdCwgYW5kIGEgcHJvbWlzZSB0
aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2lsbAorICAgICAgaXRzZWxm
IGZ1bGZpbGwuCisKKworICAgICAgQmFzaWMgVXNhZ2U6CisgICAgICAtLS0tLS0tLS0tLS0KKwor
ICAgICAgYGBganMKKyAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIC8vIG9uIHN1Y2Nlc3MKKyAgICAgICAgcmVzb2x2ZSh2
YWx1ZSk7CisKKyAgICAgICAgLy8gb24gZmFpbHVyZQorICAgICAgICByZWplY3QocmVhc29uKTsK
KyAgICAgIH0pOworCisgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsKKyAgICAg
ICAgLy8gb24gZnVsZmlsbG1lbnQKKyAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgeworICAgICAg
ICAvLyBvbiByZWplY3Rpb24KKyAgICAgIH0pOworICAgICAgYGBgCisKKyAgICAgIEFkdmFuY2Vk
IFVzYWdlOgorICAgICAgLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgIFByb21pc2VzIHNoaW5lIHdo
ZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXMKKyAg
ICAgIGBYTUxIdHRwUmVxdWVzdGBzLgorCisgICAgICBgYGBqcworICAgICAgZnVuY3Rpb24gZ2V0
SlNPTih1cmwpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUs
IHJlamVjdCl7CisgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworCisg
ICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7CisgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IGhhbmRsZXI7CisgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdqc29uJzsK
KyAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pz
b24nKTsKKyAgICAgICAgICB4aHIuc2VuZCgpOworCisgICAgICAgICAgZnVuY3Rpb24gaGFuZGxl
cigpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkgewor
ICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkgeworICAgICAgICAgICAgICAg
IHJlc29sdmUodGhpcy5yZXNwb25zZSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQg
d2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgfQorCisgICAg
ICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikgeworICAgICAgICAv
LyBvbiBmdWxmaWxsbWVudAorICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICAgIC8v
IG9uIHJlamVjdGlvbgorICAgICAgfSk7CisgICAgICBgYGAKKworICAgICAgVW5saWtlIGNhbGxi
YWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy4KKworICAgICAg
YGBganMKKyAgICAgIFByb21pc2UuYWxsKFsKKyAgICAgICAgZ2V0SlNPTignL3Bvc3RzJyksCisg
ICAgICAgIGdldEpTT04oJy9jb21tZW50cycpCisgICAgICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVl
cyl7CisgICAgICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT04KKyAgICAgICAgdmFsdWVzWzFd
IC8vID0+IGNvbW1lbnRzSlNPTgorCisgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICB9KTsK
KyAgICAgIGBgYAorCisgICAgICBAY2xhc3MgUlNWUC5Qcm9taXNlCisgICAgICBAcGFyYW0ge2Z1
bmN0aW9ufSByZXNvbHZlcgorICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0
cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCisgICAgICBVc2VmdWwgZm9yIHRvb2xpbmcu
CisgICAgICBAY29uc3RydWN0b3IKKyAgICAqLworICAgIGZ1bmN0aW9uICQkcnN2cCRwcm9taXNl
JCRQcm9taXNlKHJlc29sdmVyLCBsYWJlbCkgeworICAgICAgdGhpcy5faWQgPSAkJHJzdnAkcHJv
bWlzZSQkY291bnRlcisrOworICAgICAgdGhpcy5fbGFiZWwgPSBsYWJlbDsKKyAgICAgIHRoaXMu
X3N0YXRlID0gdW5kZWZpbmVkOworICAgICAgdGhpcy5fcmVzdWx0ID0gdW5kZWZpbmVkOworICAg
ICAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTsKKworICAgICAgaWYgKCQkcnN2cCRjb25maWckJGNv
bmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAgICQkaW5zdHJ1bWVudCQkZGVmYXVsdCgnY3JlYXRl
ZCcsIHRoaXMpOworICAgICAgfQorCisgICAgICBpZiAoJCQkaW50ZXJuYWwkJG5vb3AgIT09IHJl
c29sdmVyKSB7CisgICAgICAgIGlmICghJCR1dGlscyQkaXNGdW5jdGlvbihyZXNvbHZlcikpIHsK
KyAgICAgICAgICAkJHJzdnAkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mICQkcnN2cCRwcm9taXNlJCRQcm9taXNlKSkg
eworICAgICAgICAgICQkcnN2cCRwcm9taXNlJCRuZWVkc05ldygpOworICAgICAgICB9CisKKyAg
ICAgICAgJCQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKTsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBkZXByZWNhdGVkCisgICAgJCRyc3ZwJHByb21pc2UkJFBy
b21pc2UuY2FzdCA9ICQkcHJvbWlzZSRyZXNvbHZlJCRkZWZhdWx0OworCisgICAgJCRyc3ZwJHBy
b21pc2UkJFByb21pc2UuYWxsID0gJCRwcm9taXNlJGFsbCQkZGVmYXVsdDsKKyAgICAkJHJzdnAk
cHJvbWlzZSQkUHJvbWlzZS5yYWNlID0gJCRwcm9taXNlJHJhY2UkJGRlZmF1bHQ7CisgICAgJCRy
c3ZwJHByb21pc2UkJFByb21pc2UucmVzb2x2ZSA9ICQkcHJvbWlzZSRyZXNvbHZlJCRkZWZhdWx0
OworICAgICQkcnN2cCRwcm9taXNlJCRQcm9taXNlLnJlamVjdCA9ICQkcHJvbWlzZSRyZWplY3Qk
JGRlZmF1bHQ7CisKKyAgICAkJHJzdnAkcHJvbWlzZSQkUHJvbWlzZS5wcm90b3R5cGUgPSB7Cisg
ICAgICBjb25zdHJ1Y3RvcjogJCRyc3ZwJHByb21pc2UkJFByb21pc2UsCisKKyAgICAgIF9ndWlk
S2V5OiAkJHJzdnAkcHJvbWlzZSQkZ3VpZEtleSwKKworICAgICAgX29uZXJyb3I6IGZ1bmN0aW9u
IChyZWFzb24pIHsKKyAgICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLnRyaWdnZXIoJ2Vycm9y
JywgcmVhc29uKTsKKyAgICAgIH0sCisKKyAgICAvKioKKyAgICAgIFRoZSBwcmltYXJ5IHdheSBv
ZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9k
LAorICAgICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHBy
b21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUKKyAgICAgIHJlYXNvbiB3aHkgdGhlIHByb21p
c2UgY2Fubm90IGJlIGZ1bGZpbGxlZC4KKworICAgICAgYGBganMKKyAgICAgIGZpbmRVc2VyKCku
dGhlbihmdW5jdGlvbih1c2VyKXsKKyAgICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGUKKyAgICAg
IH0sIGZ1bmN0aW9uKHJlYXNvbil7CisgICAgICAgIC8vIHVzZXIgaXMgdW5hdmFpbGFibGUsIGFu
ZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5CisgICAgICB9KTsKKyAgICAgIGBgYAorCisg
ICAgICBDaGFpbmluZworICAgICAgLS0tLS0tLS0KKworICAgICAgVGhlIHJldHVybiB2YWx1ZSBv
ZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbScK
KyAgICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBm
aXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnQKKyAgICAgIG9yIHJlamVjdGlvbiBoYW5kbGVyLCBv
ciByZWplY3RlZCBpZiB0aGUgaGFuZGxlciB0aHJvd3MgYW4gZXhjZXB0aW9uLgorCisgICAgICBg
YGBqcworICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7CisgICAgICAgIHJl
dHVybiB1c2VyLm5hbWU7CisgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIHJl
dHVybiAnZGVmYXVsdCBuYW1lJzsKKyAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7
CisgICAgICAgIC8vIElmIGBmaW5kVXNlcmAgZnVsZmlsbGVkLCBgdXNlck5hbWVgIHdpbGwgYmUg
dGhlIHVzZXIncyBuYW1lLCBvdGhlcndpc2UgaXQKKyAgICAgICAgLy8gd2lsbCBiZSBgJ2RlZmF1
bHQgbmFtZSdgCisgICAgICB9KTsKKworICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1
c2VyKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgdXNlciwgYnV0IHN0aWxsIHVu
aGFwcHknKTsKKyAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7CisgICAgICB9
KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAvLyBuZXZlciByZWFjaGVkCisgICAg
ICB9LCBmdW5jdGlvbiAocmVhc29uKSB7CisgICAgICAgIC8vIGlmIGBmaW5kVXNlcmAgZnVsZmls
bGVkLCBgcmVhc29uYCB3aWxsIGJlICdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScuCisg
ICAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5k
VXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLgorICAgICAgfSk7CisgICAgICBgYGAK
KyAgICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVj
dGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhl
ciBkb3duc3RyZWFtLgorCisgICAgICBgYGBqcworICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0
aW9uICh1c2VyKSB7CisgICAgICAgIHRocm93IG5ldyBQZWRhZ29naWNhbEV4Y2VwdGlvbignVXBz
dHJlYW0gZXJyb3InKTsKKyAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg
IC8vIG5ldmVyIHJlYWNoZWQKKyAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7CisgICAg
ICAgIC8vIG5ldmVyIHJlYWNoZWQKKyAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKKyAgICAg
ICAgLy8gVGhlIGBQZWRnYWdvY2lhbEV4Y2VwdGlvbmAgaXMgcHJvcGFnYXRlZCBhbGwgdGhlIHdh
eSBkb3duIHRvIGhlcmUKKyAgICAgIH0pOworICAgICAgYGBgCisKKyAgICAgIEFzc2ltaWxhdGlv
bgorICAgICAgLS0tLS0tLS0tLS0tCisKKyAgICAgIFNvbWV0aW1lcyB0aGUgdmFsdWUgeW91IHdh
bnQgdG8gcHJvcGFnYXRlIHRvIGEgZG93bnN0cmVhbSBwcm9taXNlIGNhbiBvbmx5IGJlCisgICAg
ICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVy
bmluZyBhIHByb21pc2UgaW4gdGhlCisgICAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFu
ZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZworICAgICAg
dW50aWwgdGhlIHJldHVybmVkIHByb21pc2UgaXMgc2V0dGxlZC4gVGhpcyBpcyBjYWxsZWQgKmFz
c2ltaWxhdGlvbiouCisKKyAgICAgIGBgYGpzCisgICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rp
b24gKHVzZXIpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpOwor
ICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29tbWVudHMpIHsKKyAgICAgICAgLy8gVGhlIHVzZXIn
cyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZQorICAgICAgfSk7CisgICAgICBgYGAKKworICAg
ICAgSWYgdGhlIGFzc2ltbGlhdGVkIHByb21pc2UgcmVqZWN0cywgdGhlbiB0aGUgZG93bnN0cmVh
bSBwcm9taXNlIHdpbGwgYWxzbyByZWplY3QuCisKKyAgICAgIGBgYGpzCisgICAgICBmaW5kVXNl
cigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5
QXV0aG9yKHVzZXIpOworICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29tbWVudHMpIHsKKyAgICAg
ICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUg
dmFsdWUgaGVyZQorICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgeworICAgICAgICAvLyBJZiBg
ZmluZENvbW1lbnRzQnlBdXRob3JgIHJlamVjdHMsIHdlJ2xsIGhhdmUgdGhlIHJlYXNvbiBoZXJl
CisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBTaW1wbGUgRXhhbXBsZQorICAgICAgLS0t
LS0tLS0tLS0tLS0KKworICAgICAgU3luY2hyb25vdXMgRXhhbXBsZQorCisgICAgICBgYGBqYXZh
c2NyaXB0CisgICAgICB2YXIgcmVzdWx0OworCisgICAgICB0cnkgeworICAgICAgICByZXN1bHQg
PSBmaW5kUmVzdWx0KCk7CisgICAgICAgIC8vIHN1Y2Nlc3MKKyAgICAgIH0gY2F0Y2gocmVhc29u
KSB7CisgICAgICAgIC8vIGZhaWx1cmUKKyAgICAgIH0KKyAgICAgIGBgYAorCisgICAgICBFcnJi
YWNrIEV4YW1wbGUKKworICAgICAgYGBganMKKyAgICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVz
dWx0LCBlcnIpeworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgLy8gZmFpbHVyZQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgIC8vIHN1Y2Nlc3MKKyAgICAgICAgfQorICAgICAgfSk7
CisgICAgICBgYGAKKworICAgICAgUHJvbWlzZSBFeGFtcGxlOworCisgICAgICBgYGBqYXZhc2Ny
aXB0CisgICAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpeworICAgICAgICAv
LyBzdWNjZXNzCisgICAgICB9LCBmdW5jdGlvbihyZWFzb24peworICAgICAgICAvLyBmYWlsdXJl
CisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBBZHZhbmNlZCBFeGFtcGxlCisgICAgICAt
LS0tLS0tLS0tLS0tLQorCisgICAgICBTeW5jaHJvbm91cyBFeGFtcGxlCisKKyAgICAgIGBgYGph
dmFzY3JpcHQKKyAgICAgIHZhciBhdXRob3IsIGJvb2tzOworCisgICAgICB0cnkgeworICAgICAg
ICBhdXRob3IgPSBmaW5kQXV0aG9yKCk7CisgICAgICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0
aG9yKGF1dGhvcik7CisgICAgICAgIC8vIHN1Y2Nlc3MKKyAgICAgIH0gY2F0Y2gocmVhc29uKSB7
CisgICAgICAgIC8vIGZhaWx1cmUKKyAgICAgIH0KKyAgICAgIGBgYAorCisgICAgICBFcnJiYWNr
IEV4YW1wbGUKKworICAgICAgYGBganMKKworICAgICAgZnVuY3Rpb24gZm91bmRCb29rcyhib29r
cykgeworCisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIGZhaWx1cmUocmVhc29uKSB7CisKKyAg
ICAgIH0KKworICAgICAgZmluZEF1dGhvcihmdW5jdGlvbihhdXRob3IsIGVycil7CisgICAgICAg
IGlmIChlcnIpIHsKKyAgICAgICAgICBmYWlsdXJlKGVycik7CisgICAgICAgICAgLy8gZmFpbHVy
ZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5kQm9v
b2tzQnlBdXRob3IoYXV0aG9yLCBmdW5jdGlvbihib29rcywgZXJyKSB7CisgICAgICAgICAgICAg
IGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICBmYWlsdXJlKGVycik7CisgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgIGZvdW5k
Qm9va3MoYm9va3MpOworICAgICAgICAgICAgICAgIH0gY2F0Y2gocmVhc29uKSB7CisgICAgICAg
ICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAg
ICAgICAgICBmYWlsdXJlKGVycik7CisgICAgICAgICAgfQorICAgICAgICAgIC8vIHN1Y2Nlc3MK
KyAgICAgICAgfQorICAgICAgfSk7CisgICAgICBgYGAKKworICAgICAgUHJvbWlzZSBFeGFtcGxl
OworCisgICAgICBgYGBqYXZhc2NyaXB0CisgICAgICBmaW5kQXV0aG9yKCkuCisgICAgICAgIHRo
ZW4oZmluZEJvb2tzQnlBdXRob3IpLgorICAgICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXsKKyAg
ICAgICAgICAvLyBmb3VuZCBib29rcworICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXsK
KyAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAgICAgIH0pOworICAgICAgYGBgCisK
KyAgICAgIEBtZXRob2QgdGhlbgorICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWQK
KyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0ZWQKKyAgICAgIEBwYXJhbSB7U3RyaW5n
fSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgorICAgICAg
VXNlZnVsIGZvciB0b29saW5nLgorICAgICAgQHJldHVybiB7UHJvbWlzZX0KKyAgICAqLworICAg
ICAgdGhlbjogZnVuY3Rpb24ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24sIGxhYmVsKSB7Cisg
ICAgICAgIHZhciBwYXJlbnQgPSB0aGlzOworICAgICAgICB2YXIgc3RhdGUgPSBwYXJlbnQuX3N0
YXRlOworCisgICAgICAgIGlmIChzdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJEZVTEZJTExFRCAmJiAh
b25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gJCQkaW50ZXJuYWwkJFJFSkVDVEVEICYmICFvblJl
amVjdGlvbikgeworICAgICAgICAgIGlmICgkJHJzdnAkY29uZmlnJCRjb25maWcuaW5zdHJ1bWVu
dCkgeworICAgICAgICAgICAgJCRpbnN0cnVtZW50JCRkZWZhdWx0KCdjaGFpbmVkJywgdGhpcywg
dGhpcyk7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisK
KyAgICAgICAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDsKKworICAgICAgICB2YXIgY2hpbGQgPSBu
ZXcgdGhpcy5jb25zdHJ1Y3RvcigkJCRpbnRlcm5hbCQkbm9vcCwgbGFiZWwpOworICAgICAgICB2
YXIgcmVzdWx0ID0gcGFyZW50Ll9yZXN1bHQ7CisKKyAgICAgICAgaWYgKCQkcnN2cCRjb25maWck
JGNvbmZpZy5pbnN0cnVtZW50KSB7CisgICAgICAgICAgJCRpbnN0cnVtZW50JCRkZWZhdWx0KCdj
aGFpbmVkJywgcGFyZW50LCBjaGlsZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhdGUp
IHsKKyAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbc3RhdGUgLSAxXTsKKyAgICAg
ICAgICAkJHJzdnAkY29uZmlnJCRjb25maWcuYXN5bmMoZnVuY3Rpb24oKXsKKyAgICAgICAgICAg
ICQkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCByZXN1
bHQpOworICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICQkJGludGVy
bmFsJCRzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24p
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgfSwKKworICAgIC8q
KgorICAgICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25S
ZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZQorICAgICAgYXMgdGhlIGNhdGNoIGJs
b2NrIG9mIGEgdHJ5L2NhdGNoIHN0YXRlbWVudC4KKworICAgICAgYGBganMKKyAgICAgIGZ1bmN0
aW9uIGZpbmRBdXRob3IoKXsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5k
IHRoYXQgYXV0aG9yJyk7CisgICAgICB9CisKKyAgICAgIC8vIHN5bmNocm9ub3VzCisgICAgICB0
cnkgeworICAgICAgICBmaW5kQXV0aG9yKCk7CisgICAgICB9IGNhdGNoKHJlYXNvbikgeworICAg
ICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZworICAgICAgfQorCisgICAgICAvLyBhc3luYyB3
aXRoIHByb21pc2VzCisgICAgICBmaW5kQXV0aG9yKCkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXsK
KyAgICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAgICAgIH0pOworICAgICAgYGBgCisK
KyAgICAgIEBtZXRob2QgY2F0Y2gKKyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9u
CisgICAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGlu
ZyB0aGUgcHJvbWlzZS4KKyAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KKyAgICAgIEByZXR1cm4g
e1Byb21pc2V9CisgICAgKi8KKyAgICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0aW9uLCBs
YWJlbCkgeworICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0aW9uLCBsYWJl
bCk7CisgICAgICB9LAorCisgICAgLyoqCisgICAgICBgZmluYWxseWAgd2lsbCBiZSBpbnZva2Vk
IHJlZ2FyZGxlc3Mgb2YgdGhlIHByb21pc2UncyBmYXRlIGp1c3QgYXMgbmF0aXZlCisgICAgICB0
cnkvY2F0Y2gvZmluYWxseSBiZWhhdmVzCisKKyAgICAgIFN5bmNocm9ub3VzIGV4YW1wbGU6CisK
KyAgICAgIGBgYGpzCisgICAgICBmaW5kQXV0aG9yKCkgeworICAgICAgICBpZiAoTWF0aC5yYW5k
b20oKSA+IDAuNSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBuZXcgQXV0aG9yKCk7CisgICAgICB9CisKKyAgICAgIHRyeSB7CisgICAg
ICAgIHJldHVybiBmaW5kQXV0aG9yKCk7IC8vIHN1Y2NlZWQgb3IgZmFpbAorICAgICAgfSBjYXRj
aChlcnJvcikgeworICAgICAgICByZXR1cm4gZmluZE90aGVyQXV0aGVyKCk7CisgICAgICB9IGZp
bmFsbHkgeworICAgICAgICAvLyBhbHdheXMgcnVucworICAgICAgICAvLyBkb2Vzbid0IGFmZmVj
dCB0aGUgcmV0dXJuIHZhbHVlCisgICAgICB9CisgICAgICBgYGAKKworICAgICAgQXN5bmNocm9u
b3VzIGV4YW1wbGU6CisKKyAgICAgIGBgYGpzCisgICAgICBmaW5kQXV0aG9yKCkuY2F0Y2goZnVu
Y3Rpb24ocmVhc29uKXsKKyAgICAgICAgcmV0dXJuIGZpbmRPdGhlckF1dGhlcigpOworICAgICAg
fSkuZmluYWxseShmdW5jdGlvbigpeworICAgICAgICAvLyBhdXRob3Igd2FzIGVpdGhlciBmb3Vu
ZCwgb3Igbm90CisgICAgICB9KTsKKyAgICAgIGBgYAorCisgICAgICBAbWV0aG9kIGZpbmFsbHkK
KyAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCisgICAgICBAcGFyYW0ge1N0cmluZ30g
bGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4KKyAgICAgIFVz
ZWZ1bCBmb3IgdG9vbGluZy4KKyAgICAgIEByZXR1cm4ge1Byb21pc2V9CisgICAgKi8KKyAgICAg
ICdmaW5hbGx5JzogZnVuY3Rpb24oY2FsbGJhY2ssIGxhYmVsKSB7CisgICAgICAgIHZhciBjb25z
dHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7CisKKyAgICAgICAgcmV0dXJuIHRoaXMudGhlbihm
dW5jdGlvbih2YWx1ZSkgeworICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNh
bGxiYWNrKCkpLnRoZW4oZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICAgICAgICB9KTsKKyAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7CisgICAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbigpeworICAg
ICAgICAgICAgdGhyb3cgcmVhc29uOworICAgICAgICAgIH0pOworICAgICAgICB9LCBsYWJlbCk7
CisgICAgICB9CisgICAgfTsKKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCRSZXN1bHQoKSB7
CisgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkOworICAgIH0KKworICAgIHZhciAkJHJzdnAk
bm9kZSQkRVJST1IgPSBuZXcgJCRyc3ZwJG5vZGUkJFJlc3VsdCgpOworICAgIHZhciAkJHJzdnAk
bm9kZSQkR0VUX1RIRU5fRVJST1IgPSBuZXcgJCRyc3ZwJG5vZGUkJFJlc3VsdCgpOworCisgICAg
ZnVuY3Rpb24gJCRyc3ZwJG5vZGUkJGdldFRoZW4ob2JqKSB7CisgICAgICB0cnkgeworICAgICAg
IHJldHVybiBvYmoudGhlbjsKKyAgICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgJCRyc3Zw
JG5vZGUkJEVSUk9SLnZhbHVlPSBlcnJvcjsKKyAgICAgICAgcmV0dXJuICQkcnN2cCRub2RlJCRF
UlJPUjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkbm9kZSQkdHJ5QXBw
bHkoZiwgcywgYSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgZi5hcHBseShzLCBhKTsKKyAgICAg
IH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAgJCRyc3ZwJG5vZGUkJEVSUk9SLnZhbHVlID0gZXJy
b3I7CisgICAgICAgIHJldHVybiAkJHJzdnAkbm9kZSQkRVJST1I7CisgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gJCRyc3ZwJG5vZGUkJG1ha2VPYmplY3QoXywgYXJndW1lbnROYW1lcykg
eworICAgICAgdmFyIG9iaiA9IHt9OworICAgICAgdmFyIG5hbWU7CisgICAgICB2YXIgaTsKKyAg
ICAgIHZhciBsZW5ndGggPSBfLmxlbmd0aDsKKyAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxl
bmd0aCk7CisKKyAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgbGVuZ3RoOyB4KyspIHsKKyAgICAg
ICAgYXJnc1t4XSA9IF9beF07CisgICAgICB9CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmd1
bWVudE5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIG5hbWUgPSBhcmd1bWVudE5hbWVzW2ld
OworICAgICAgICBvYmpbbmFtZV0gPSBhcmdzW2kgKyAxXTsKKyAgICAgIH0KKworICAgICAgcmV0
dXJuIG9iajsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkbm9kZSQkYXJyYXlSZXN1bHQo
XykgeworICAgICAgdmFyIGxlbmd0aCA9IF8ubGVuZ3RoOworICAgICAgdmFyIGFyZ3MgPSBuZXcg
QXJyYXkobGVuZ3RoIC0gMSk7CisKKyAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgYXJnc1tpIC0gMV0gPSBfW2ldOworICAgICAgfQorCisgICAgICByZXR1
cm4gYXJnczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkbm9kZSQkd3JhcFRoZW5hYmxl
KHRoZW4sIHByb21pc2UpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHRoZW46IGZ1bmN0aW9u
KG9uRnVsRmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7CisgICAgICAgICAgcmV0dXJuIHRoZW4uY2Fs
bChwcm9taXNlLCBvbkZ1bEZpbGxtZW50LCBvblJlamVjdGlvbik7CisgICAgICAgIH0KKyAgICAg
IH07CisgICAgfQorCisgICAgdmFyICQkcnN2cCRub2RlJCRkZWZhdWx0ID0gZnVuY3Rpb24gZGVu
b2RlaWZ5KG5vZGVGdW5jLCBvcHRpb25zKSB7CisgICAgICB2YXIgZm4gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5n
dGg7CisgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGwgKyAxKTsKKyAgICAgICAgdmFyIGFy
ZzsKKyAgICAgICAgdmFyIHByb21pc2VJbnB1dCA9IGZhbHNlOworCisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldOworCisg
ICAgICAgICAgaWYgKCFwcm9taXNlSW5wdXQpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IGNsZWFu
IHRoaXMgdXAKKyAgICAgICAgICAgIHByb21pc2VJbnB1dCA9ICQkcnN2cCRub2RlJCRuZWVkc1By
b21pc2VJbnB1dChhcmcpOworICAgICAgICAgICAgaWYgKHByb21pc2VJbnB1dCA9PT0gJCRyc3Zw
JG5vZGUkJEdFVF9USEVOX0VSUk9SKSB7CisgICAgICAgICAgICAgIHZhciBwID0gbmV3ICQkcnN2
cCRwcm9taXNlJCRkZWZhdWx0KCQkJGludGVybmFsJCRub29wKTsKKyAgICAgICAgICAgICAgJCQk
aW50ZXJuYWwkJHJlamVjdChwLCAkJHJzdnAkbm9kZSQkR0VUX1RIRU5fRVJST1IudmFsdWUpOwor
ICAgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvbWlzZUlu
cHV0ICYmIHByb21pc2VJbnB1dCAhPT0gdHJ1ZSkgeworICAgICAgICAgICAgICBhcmcgPSAkJHJz
dnAkbm9kZSQkd3JhcFRoZW5hYmxlKHByb21pc2VJbnB1dCwgYXJnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9CisgICAgICAgICAgYXJnc1tpXSA9IGFyZzsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciBwcm9taXNlID0gbmV3ICQkcnN2cCRwcm9taXNlJCRkZWZhdWx0KCQkJGludGVybmFs
JCRub29wKTsKKworICAgICAgICBhcmdzW2xdID0gZnVuY3Rpb24oZXJyLCB2YWwpIHsKKyAgICAg
ICAgICBpZiAoZXJyKQorICAgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBl
cnIpOworICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkKKyAgICAgICAg
ICAgICQkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbCk7CisgICAgICAgICAgZWxzZSBp
ZiAob3B0aW9ucyA9PT0gdHJ1ZSkKKyAgICAgICAgICAgICQkJGludGVybmFsJCRyZXNvbHZlKHBy
b21pc2UsICQkcnN2cCRub2RlJCRhcnJheVJlc3VsdChhcmd1bWVudHMpKTsKKyAgICAgICAgICBl
bHNlIGlmICgkJHV0aWxzJCRpc0FycmF5KG9wdGlvbnMpKQorICAgICAgICAgICAgJCQkaW50ZXJu
YWwkJHJlc29sdmUocHJvbWlzZSwgJCRyc3ZwJG5vZGUkJG1ha2VPYmplY3QoYXJndW1lbnRzLCBv
cHRpb25zKSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgJCQkaW50ZXJuYWwkJHJlc29s
dmUocHJvbWlzZSwgdmFsKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAocHJvbWlzZUlucHV0
KSB7CisgICAgICAgICAgcmV0dXJuICQkcnN2cCRub2RlJCRoYW5kbGVQcm9taXNlSW5wdXQocHJv
bWlzZSwgYXJncywgbm9kZUZ1bmMsIHNlbGYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IHJldHVybiAkJHJzdnAkbm9kZSQkaGFuZGxlVmFsdWVJbnB1dChwcm9taXNlLCBhcmdzLCBub2Rl
RnVuYywgc2VsZik7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIGZuLl9fcHJvdG9fXyA9
IG5vZGVGdW5jOworCisgICAgICByZXR1cm4gZm47CisgICAgfTsKKworICAgIGZ1bmN0aW9uICQk
cnN2cCRub2RlJCRoYW5kbGVWYWx1ZUlucHV0KHByb21pc2UsIGFyZ3MsIG5vZGVGdW5jLCBzZWxm
KSB7CisgICAgICB2YXIgcmVzdWx0ID0gJCRyc3ZwJG5vZGUkJHRyeUFwcGx5KG5vZGVGdW5jLCBz
ZWxmLCBhcmdzKTsKKyAgICAgIGlmIChyZXN1bHQgPT09ICQkcnN2cCRub2RlJCRFUlJPUikgewor
ICAgICAgICAkJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlc3VsdC52YWx1ZSk7CisgICAg
ICB9CisgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJzdnAk
bm9kZSQkaGFuZGxlUHJvbWlzZUlucHV0KHByb21pc2UsIGFyZ3MsIG5vZGVGdW5jLCBzZWxmKXsK
KyAgICAgIHJldHVybiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdC5hbGwoYXJncykudGhlbihmdW5j
dGlvbihhcmdzKXsKKyAgICAgICAgdmFyIHJlc3VsdCA9ICQkcnN2cCRub2RlJCR0cnlBcHBseShu
b2RlRnVuYywgc2VsZiwgYXJncyk7CisgICAgICAgIGlmIChyZXN1bHQgPT09ICQkcnN2cCRub2Rl
JCRFUlJPUikgeworICAgICAgICAgICQkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgcmVzdWx0
LnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvbWlzZTsKKyAgICAgIH0pOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRub2RlJCRuZWVkc1Byb21pc2VJbnB1dChhcmcp
IHsKKyAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAg
aWYgKGFyZy5jb25zdHJ1Y3RvciA9PT0gJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQpIHsKKyAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gJCRy
c3ZwJG5vZGUkJGdldFRoZW4oYXJnKTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIHZhciAkJHJzdnAkYWxsJCRk
ZWZhdWx0ID0gZnVuY3Rpb24gYWxsKGFycmF5LCBsYWJlbCkgeworICAgICAgcmV0dXJuICQkcnN2
cCRwcm9taXNlJCRkZWZhdWx0LmFsbChhcnJheSwgbGFiZWwpOworICAgIH07CisKKyAgICBmdW5j
dGlvbiAkJHJzdnAkYWxsJHNldHRsZWQkJEFsbFNldHRsZWQoQ29uc3RydWN0b3IsIGVudHJpZXMs
IGxhYmVsKSB7CisgICAgICB0aGlzLl9zdXBlckNvbnN0cnVjdG9yKENvbnN0cnVjdG9yLCBlbnRy
aWVzLCBmYWxzZSAvKiBkb24ndCBhYm9ydCBvbiByZWplY3QgKi8sIGxhYmVsKTsKKyAgICB9CisK
KyAgICAkJHJzdnAkYWxsJHNldHRsZWQkJEFsbFNldHRsZWQucHJvdG90eXBlID0gJCR1dGlscyQk
b19jcmVhdGUoJCRlbnVtZXJhdG9yJCRkZWZhdWx0LnByb3RvdHlwZSk7CisgICAgJCRyc3ZwJGFs
bCRzZXR0bGVkJCRBbGxTZXR0bGVkLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1Y3RvciA9ICQkZW51
bWVyYXRvciQkZGVmYXVsdDsKKyAgICAkJHJzdnAkYWxsJHNldHRsZWQkJEFsbFNldHRsZWQucHJv
dG90eXBlLl9tYWtlUmVzdWx0ID0gJCRlbnVtZXJhdG9yJCRtYWtlU2V0dGxlZFJlc3VsdDsKKwor
ICAgICQkcnN2cCRhbGwkc2V0dGxlZCQkQWxsU2V0dGxlZC5wcm90b3R5cGUuX3ZhbGlkYXRpb25F
cnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5ldyBFcnJvcignYWxsU2V0dGxlZCBt
dXN0IGJlIGNhbGxlZCB3aXRoIGFuIGFycmF5Jyk7CisgICAgfTsKKworICAgIHZhciAkJHJzdnAk
YWxsJHNldHRsZWQkJGRlZmF1bHQgPSBmdW5jdGlvbiBhbGxTZXR0bGVkKGVudHJpZXMsIGxhYmVs
KSB7CisgICAgICByZXR1cm4gbmV3ICQkcnN2cCRhbGwkc2V0dGxlZCQkQWxsU2V0dGxlZCgkJHJz
dnAkcHJvbWlzZSQkZGVmYXVsdCwgZW50cmllcywgbGFiZWwpLnByb21pc2U7CisgICAgfTsKKwor
ICAgIHZhciAkJHJzdnAkcmFjZSQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJhY2UoYXJyYXksIGxhYmVs
KSB7CisgICAgICByZXR1cm4gJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQucmFjZShhcnJheSwgbGFi
ZWwpOworICAgIH07CisKKyAgICBmdW5jdGlvbiAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2go
Q29uc3RydWN0b3IsIG9iamVjdCwgbGFiZWwpIHsKKyAgICAgIHRoaXMuX3N1cGVyQ29uc3RydWN0
b3IoQ29uc3RydWN0b3IsIG9iamVjdCwgdHJ1ZSwgbGFiZWwpOworICAgIH0KKworICAgIHZhciAk
JHByb21pc2UkaGFzaCQkZGVmYXVsdCA9ICQkcHJvbWlzZSRoYXNoJCRQcm9taXNlSGFzaDsKKyAg
ICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2gucHJvdG90eXBlID0gJCR1dGlscyQkb19jcmVh
dGUoJCRlbnVtZXJhdG9yJCRkZWZhdWx0LnByb3RvdHlwZSk7CisgICAgJCRwcm9taXNlJGhhc2gk
JFByb21pc2VIYXNoLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1Y3RvciA9ICQkZW51bWVyYXRvciQk
ZGVmYXVsdDsKKworICAgICQkcHJvbWlzZSRoYXNoJCRQcm9taXNlSGFzaC5wcm90b3R5cGUuX2lu
aXQgPSBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuX3Jlc3VsdCA9IHt9OworICAgIH07CisKKyAg
ICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2gucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0ID0g
ZnVuY3Rpb24oaW5wdXQpIHsKKyAgICAgIHJldHVybiBpbnB1dCAmJiB0eXBlb2YgaW5wdXQgPT09
ICdvYmplY3QnOworICAgIH07CisKKyAgICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2gucHJv
dG90eXBlLl92YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiBuZXcg
RXJyb3IoJ1Byb21pc2UuaGFzaCBtdXN0IGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCcpOworICAg
IH07CisKKyAgICAkJHByb21pc2UkaGFzaCQkUHJvbWlzZUhhc2gucHJvdG90eXBlLl9lbnVtZXJh
dGUgPSBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlOworICAg
ICAgdmFyIGlucHV0ICAgPSB0aGlzLl9pbnB1dDsKKyAgICAgIHZhciByZXN1bHRzID0gW107CisK
KyAgICAgIGZvciAodmFyIGtleSBpbiBpbnB1dCkgeworICAgICAgICBpZiAocHJvbWlzZS5fc3Rh
dGUgPT09ICQkJGludGVybmFsJCRQRU5ESU5HICYmIGlucHV0Lmhhc093blByb3BlcnR5KGtleSkp
IHsKKyAgICAgICAgICByZXN1bHRzLnB1c2goeworICAgICAgICAgICAgcG9zaXRpb246IGtleSwK
KyAgICAgICAgICAgIGVudHJ5OiBpbnB1dFtrZXldCisgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICAgIH0KKworICAgICAgdmFyIGxlbmd0aCA9IHJlc3VsdHMubGVuZ3RoOworICAgICAgdGhp
cy5fcmVtYWluaW5nID0gbGVuZ3RoOworICAgICAgdmFyIHJlc3VsdDsKKworICAgICAgZm9yICh2
YXIgaSA9IDA7IHByb21pc2UuX3N0YXRlID09PSAkJCRpbnRlcm5hbCQkUEVORElORyAmJiBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTsKKyAgICAgICAgdGhp
cy5fZWFjaEVudHJ5KHJlc3VsdC5lbnRyeSwgcmVzdWx0LnBvc2l0aW9uKTsKKyAgICAgIH0KKyAg
ICB9OworCisgICAgdmFyICQkcnN2cCRoYXNoJCRkZWZhdWx0ID0gZnVuY3Rpb24gaGFzaChvYmpl
Y3QsIGxhYmVsKSB7CisgICAgICByZXR1cm4gbmV3ICQkcHJvbWlzZSRoYXNoJCRkZWZhdWx0KCQk
cnN2cCRwcm9taXNlJCRkZWZhdWx0LCBvYmplY3QsIGxhYmVsKS5wcm9taXNlOworICAgIH07CisK
KyAgICBmdW5jdGlvbiAkJHJzdnAkaGFzaCRzZXR0bGVkJCRIYXNoU2V0dGxlZChDb25zdHJ1Y3Rv
ciwgb2JqZWN0LCBsYWJlbCkgeworICAgICAgdGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihDb25zdHJ1
Y3Rvciwgb2JqZWN0LCBmYWxzZSwgbGFiZWwpOworICAgIH0KKworICAgICQkcnN2cCRoYXNoJHNl
dHRsZWQkJEhhc2hTZXR0bGVkLnByb3RvdHlwZSA9ICQkdXRpbHMkJG9fY3JlYXRlKCQkcHJvbWlz
ZSRoYXNoJCRkZWZhdWx0LnByb3RvdHlwZSk7CisgICAgJCRyc3ZwJGhhc2gkc2V0dGxlZCQkSGFz
aFNldHRsZWQucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yID0gJCRlbnVtZXJhdG9yJCRkZWZh
dWx0OworICAgICQkcnN2cCRoYXNoJHNldHRsZWQkJEhhc2hTZXR0bGVkLnByb3RvdHlwZS5fbWFr
ZVJlc3VsdCA9ICQkZW51bWVyYXRvciQkbWFrZVNldHRsZWRSZXN1bHQ7CisKKyAgICAkJHJzdnAk
aGFzaCRzZXR0bGVkJCRIYXNoU2V0dGxlZC5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1
bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5ldyBFcnJvcignaGFzaFNldHRsZWQgbXVzdCBiZSBj
YWxsZWQgd2l0aCBhbiBvYmplY3QnKTsKKyAgICB9OworCisgICAgdmFyICQkcnN2cCRoYXNoJHNl
dHRsZWQkJGRlZmF1bHQgPSBmdW5jdGlvbiBoYXNoU2V0dGxlZChvYmplY3QsIGxhYmVsKSB7Cisg
ICAgICByZXR1cm4gbmV3ICQkcnN2cCRoYXNoJHNldHRsZWQkJEhhc2hTZXR0bGVkKCQkcnN2cCRw
cm9taXNlJCRkZWZhdWx0LCBvYmplY3QsIGxhYmVsKS5wcm9taXNlOworICAgIH07CisKKyAgICB2
YXIgJCRyc3ZwJHJldGhyb3ckJGRlZmF1bHQgPSBmdW5jdGlvbiByZXRocm93KHJlYXNvbikgewor
ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgdGhyb3cgcmVhc29uOworICAg
ICAgfSk7CisgICAgICB0aHJvdyByZWFzb247CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkZGVm
ZXIkJGRlZmF1bHQgPSBmdW5jdGlvbiBkZWZlcihsYWJlbCkgeworICAgICAgdmFyIGRlZmVycmVk
ID0geyB9OworCisgICAgICBkZWZlcnJlZC5wcm9taXNlID0gbmV3ICQkcnN2cCRwcm9taXNlJCRk
ZWZhdWx0KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICBkZWZlcnJlZC5yZXNv
bHZlID0gcmVzb2x2ZTsKKyAgICAgICAgZGVmZXJyZWQucmVqZWN0ID0gcmVqZWN0OworICAgICAg
fSwgbGFiZWwpOworCisgICAgICByZXR1cm4gZGVmZXJyZWQ7CisgICAgfTsKKworICAgIHZhciAk
JHJzdnAkbWFwJCRkZWZhdWx0ID0gZnVuY3Rpb24gbWFwKHByb21pc2VzLCBtYXBGbiwgbGFiZWwp
IHsKKyAgICAgIHJldHVybiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdC5hbGwocHJvbWlzZXMsIGxh
YmVsKS50aGVuKGZ1bmN0aW9uKHZhbHVlcykgeworICAgICAgICBpZiAoISQkdXRpbHMkJGlzRnVu
Y3Rpb24obWFwRm4pKSB7CisgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3Qg
cGFzcyBhIGZ1bmN0aW9uIGFzIG1hcCdzIHNlY29uZCBhcmd1bWVudC4iKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2YXIgcmVzdWx0
cyA9IG5ldyBBcnJheShsZW5ndGgpOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICByZXN1bHRzW2ldID0gbWFwRm4odmFsdWVzW2ldKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdC5hbGwocmVz
dWx0cywgbGFiZWwpOworICAgICAgfSk7CisgICAgfTsKKworICAgIHZhciAkJHJzdnAkcmVzb2x2
ZSQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJlc29sdmUodmFsdWUsIGxhYmVsKSB7CisgICAgICByZXR1
cm4gJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQucmVzb2x2ZSh2YWx1ZSwgbGFiZWwpOworICAgIH07
CisKKyAgICB2YXIgJCRyc3ZwJHJlamVjdCQkZGVmYXVsdCA9IGZ1bmN0aW9uIHJlamVjdChyZWFz
b24sIGxhYmVsKSB7CisgICAgICByZXR1cm4gJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQucmVqZWN0
KHJlYXNvbiwgbGFiZWwpOworICAgIH07CisKKyAgICB2YXIgJCRyc3ZwJGZpbHRlciQkZGVmYXVs
dCA9IGZ1bmN0aW9uIGZpbHRlcihwcm9taXNlcywgZmlsdGVyRm4sIGxhYmVsKSB7CisgICAgICBy
ZXR1cm4gJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQuYWxsKHByb21pc2VzLCBsYWJlbCkudGhlbihm
dW5jdGlvbih2YWx1ZXMpIHsKKyAgICAgICAgaWYgKCEkJHV0aWxzJCRpc0Z1bmN0aW9uKGZpbHRl
ckZuKSkgeworICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSBm
dW5jdGlvbiBhcyBmaWx0ZXIncyBzZWNvbmQgYXJndW1lbnQuIik7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgdmFyIGZpbHRlcmVkID0g
bmV3IEFycmF5KGxlbmd0aCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgIGZpbHRlcmVkW2ldID0gZmlsdGVyRm4odmFsdWVzW2ldKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiAkJHJzdnAkcHJvbWlzZSQkZGVmYXVsdC5hbGwoZmls
dGVyZWQsIGxhYmVsKS50aGVuKGZ1bmN0aW9uKGZpbHRlcmVkKSB7CisgICAgICAgICAgdmFyIHJl
c3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICB2YXIgbmV3TGVuZ3RoID0gMDsK
KworICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIGlmIChmaWx0ZXJlZFtpXSkgeworICAgICAgICAgICAgICByZXN1bHRzW25ld0xlbmd0aF0g
PSB2YWx1ZXNbaV07CisgICAgICAgICAgICAgIG5ld0xlbmd0aCsrOworICAgICAgICAgICAgfQor
ICAgICAgICAgIH0KKworICAgICAgICAgIHJlc3VsdHMubGVuZ3RoID0gbmV3TGVuZ3RoOworCisg
ICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfTsK
KworICAgIHZhciAkJHJzdnAkYXNhcCQkbGVuID0gMDsKKworICAgIHZhciAkJHJzdnAkYXNhcCQk
ZGVmYXVsdCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykgeworICAgICAgJCRyc3ZwJGFz
YXAkJHF1ZXVlWyQkcnN2cCRhc2FwJCRsZW5dID0gY2FsbGJhY2s7CisgICAgICAkJHJzdnAkYXNh
cCQkcXVldWVbJCRyc3ZwJGFzYXAkJGxlbiArIDFdID0gYXJnOworICAgICAgJCRyc3ZwJGFzYXAk
JGxlbiArPSAyOworICAgICAgaWYgKCQkcnN2cCRhc2FwJCRsZW4gPT09IDIpIHsKKyAgICAgICAg
Ly8gSWYgbGVuIGlzIDEsIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGFz
eW5jIGZsdXNoLgorICAgICAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVk
IGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleQorICAgICAgICAvLyB3aWxsIGJlIHBy
b2Nlc3NlZCBieSB0aGlzIGZsdXNoIHRoYXQgd2UgYXJlIHNjaGVkdWxpbmcuCisgICAgICAgICQk
cnN2cCRhc2FwJCRzY2hlZHVsZUZsdXNoKCk7CisgICAgICB9CisgICAgfTsKKworICAgIHZhciAk
JHJzdnAkYXNhcCQkYnJvd3Nlckdsb2JhbCA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVk
JykgPyB3aW5kb3cgOiB7fTsKKyAgICB2YXIgJCRyc3ZwJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9i
c2VydmVyID0gJCRyc3ZwJGFzYXAkJGJyb3dzZXJHbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCAk
JHJzdnAkYXNhcCQkYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyOworCisgICAg
Ly8gdGVzdCBmb3Igd2ViIHdvcmtlciBidXQgbm90IGluIElFMTAKKyAgICB2YXIgJCRyc3ZwJGFz
YXAkJGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAm
JgorICAgICAgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnICYmCisgICAgICB0
eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnOworCisgICAgLy8gbm9kZQorICAg
IGZ1bmN0aW9uICQkcnN2cCRhc2FwJCR1c2VOZXh0VGljaygpIHsKKyAgICAgIHJldHVybiBmdW5j
dGlvbigpIHsKKyAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygkJHJzdnAkYXNhcCQkZmx1c2gpOwor
ICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkYXNhcCQkdXNlTXV0YXRpb25P
YnNlcnZlcigpIHsKKyAgICAgIHZhciBpdGVyYXRpb25zID0gMDsKKyAgICAgIHZhciBvYnNlcnZl
ciA9IG5ldyAkJHJzdnAkYXNhcCQkQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoJCRyc3ZwJGFzYXAk
JGZsdXNoKTsKKyAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpOwor
ICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7CisK
KyAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgbm9kZS5kYXRhID0gKGl0ZXJhdGlv
bnMgPSArK2l0ZXJhdGlvbnMgJSAyKTsKKyAgICAgIH07CisgICAgfQorCisgICAgLy8gd2ViIHdv
cmtlcgorICAgIGZ1bmN0aW9uICQkcnN2cCRhc2FwJCR1c2VNZXNzYWdlQ2hhbm5lbCgpIHsKKyAg
ICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgICBjaGFubmVsLnBv
cnQxLm9ubWVzc2FnZSA9ICQkcnN2cCRhc2FwJCRmbHVzaDsKKyAgICAgIHJldHVybiBmdW5jdGlv
biAoKSB7CisgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7CisgICAgICB9Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uICQkcnN2cCRhc2FwJCR1c2VTZXRUaW1lb3V0KCkgeworICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KCQkcnN2cCRhc2FwJCRm
bHVzaCwgMSk7CisgICAgICB9OworICAgIH0KKworICAgIHZhciAkJHJzdnAkYXNhcCQkcXVldWUg
PSBuZXcgQXJyYXkoMTAwMCk7CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkYXNhcCQkZmx1c2goKSB7
CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8ICQkcnN2cCRhc2FwJCRsZW47IGkrPTIpIHsKKyAg
ICAgICAgdmFyIGNhbGxiYWNrID0gJCRyc3ZwJGFzYXAkJHF1ZXVlW2ldOworICAgICAgICB2YXIg
YXJnID0gJCRyc3ZwJGFzYXAkJHF1ZXVlW2krMV07CisKKyAgICAgICAgY2FsbGJhY2soYXJnKTsK
KworICAgICAgICAkJHJzdnAkYXNhcCQkcXVldWVbaV0gPSB1bmRlZmluZWQ7CisgICAgICAgICQk
cnN2cCRhc2FwJCRxdWV1ZVtpKzFdID0gdW5kZWZpbmVkOworICAgICAgfQorCisgICAgICAkJHJz
dnAkYXNhcCQkbGVuID0gMDsKKyAgICB9CisKKyAgICB2YXIgJCRyc3ZwJGFzYXAkJHNjaGVkdWxl
Rmx1c2g7CisKKyAgICAvLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdn
ZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOgorICAgIGlmICh0eXBlb2YgcHJv
Y2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYge30udG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tv
YmplY3QgcHJvY2Vzc10nKSB7CisgICAgICAkJHJzdnAkYXNhcCQkc2NoZWR1bGVGbHVzaCA9ICQk
cnN2cCRhc2FwJCR1c2VOZXh0VGljaygpOworICAgIH0gZWxzZSBpZiAoJCRyc3ZwJGFzYXAkJEJy
b3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7CisgICAgICAkJHJzdnAkYXNhcCQkc2NoZWR1bGVGbHVz
aCA9ICQkcnN2cCRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCk7CisgICAgfSBlbHNlIGlmICgk
JHJzdnAkYXNhcCQkaXNXb3JrZXIpIHsKKyAgICAgICQkcnN2cCRhc2FwJCRzY2hlZHVsZUZsdXNo
ID0gJCRyc3ZwJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICQkcnN2cCRhc2FwJCRzY2hlZHVsZUZsdXNoID0gJCRyc3ZwJGFzYXAkJHVzZVNldFRpbWVvdXQo
KTsKKyAgICB9CisKKyAgICAvLyBkZWZhdWx0IGFzeW5jIGlzIGFzYXA7CisgICAgJCRyc3ZwJGNv
bmZpZyQkY29uZmlnLmFzeW5jID0gJCRyc3ZwJGFzYXAkJGRlZmF1bHQ7CisKKyAgICB2YXIgJCRy
c3ZwJCRjYXN0ID0gJCRyc3ZwJHJlc29sdmUkJGRlZmF1bHQ7CisKKyAgICBmdW5jdGlvbiAkJHJz
dnAkJGFzeW5jKGNhbGxiYWNrLCBhcmcpIHsKKyAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy5h
c3luYyhjYWxsYmFjaywgYXJnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkJG9uKCkg
eworICAgICAgJCRyc3ZwJGNvbmZpZyQkY29uZmlnLm9uLmFwcGx5KCQkcnN2cCRjb25maWckJGNv
bmZpZywgYXJndW1lbnRzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiAkJHJzdnAkJG9mZigpIHsK
KyAgICAgICQkcnN2cCRjb25maWckJGNvbmZpZy5vZmYuYXBwbHkoJCRyc3ZwJGNvbmZpZyQkY29u
ZmlnLCBhcmd1bWVudHMpOworICAgIH0KKworICAgIC8vIFNldCB1cCBpbnN0cnVtZW50YXRpb24g
dGhyb3VnaCBgd2luZG93Ll9fUFJPTUlTRV9JTlRSVU1FTlRBVElPTl9fYAorICAgIGlmICh0eXBl
b2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93WydfX1BST01JU0VfSU5T
VFJVTUVOVEFUSU9OX18nXSA9PT0gJ29iamVjdCcpIHsKKyAgICAgIHZhciAkJHJzdnAkJGNhbGxi
YWNrcyA9IHdpbmRvd1snX19QUk9NSVNFX0lOU1RSVU1FTlRBVElPTl9fJ107CisgICAgICAkJHJz
dnAkY29uZmlnJCRjb25maWd1cmUoJ2luc3RydW1lbnQnLCB0cnVlKTsKKyAgICAgIGZvciAodmFy
ICQkcnN2cCQkZXZlbnROYW1lIGluICQkcnN2cCQkY2FsbGJhY2tzKSB7CisgICAgICAgIGlmICgk
JHJzdnAkJGNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eSgkJHJzdnAkJGV2ZW50TmFtZSkpIHsKKyAg
ICAgICAgICAkJHJzdnAkJG9uKCQkcnN2cCQkZXZlbnROYW1lLCAkJHJzdnAkJGNhbGxiYWNrc1sk
JHJzdnAkJGV2ZW50TmFtZV0pOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgdmFy
IHJzdnAkdW1kJCRSU1ZQID0geworICAgICAgJ3JhY2UnOiAkJHJzdnAkcmFjZSQkZGVmYXVsdCwK
KyAgICAgICdQcm9taXNlJzogJCRyc3ZwJHByb21pc2UkJGRlZmF1bHQsCisgICAgICAnYWxsU2V0
dGxlZCc6ICQkcnN2cCRhbGwkc2V0dGxlZCQkZGVmYXVsdCwKKyAgICAgICdoYXNoJzogJCRyc3Zw
JGhhc2gkJGRlZmF1bHQsCisgICAgICAnaGFzaFNldHRsZWQnOiAkJHJzdnAkaGFzaCRzZXR0bGVk
JCRkZWZhdWx0LAorICAgICAgJ2Rlbm9kZWlmeSc6ICQkcnN2cCRub2RlJCRkZWZhdWx0LAorICAg
ICAgJ29uJzogJCRyc3ZwJCRvbiwKKyAgICAgICdvZmYnOiAkJHJzdnAkJG9mZiwKKyAgICAgICdt
YXAnOiAkJHJzdnAkbWFwJCRkZWZhdWx0LAorICAgICAgJ2ZpbHRlcic6ICQkcnN2cCRmaWx0ZXIk
JGRlZmF1bHQsCisgICAgICAncmVzb2x2ZSc6ICQkcnN2cCRyZXNvbHZlJCRkZWZhdWx0LAorICAg
ICAgJ3JlamVjdCc6ICQkcnN2cCRyZWplY3QkJGRlZmF1bHQsCisgICAgICAnYWxsJzogJCRyc3Zw
JGFsbCQkZGVmYXVsdCwKKyAgICAgICdyZXRocm93JzogJCRyc3ZwJHJldGhyb3ckJGRlZmF1bHQs
CisgICAgICAnZGVmZXInOiAkJHJzdnAkZGVmZXIkJGRlZmF1bHQsCisgICAgICAnRXZlbnRUYXJn
ZXQnOiAkJHJzdnAkZXZlbnRzJCRkZWZhdWx0LAorICAgICAgJ2NvbmZpZ3VyZSc6ICQkcnN2cCRj
b25maWckJGNvbmZpZ3VyZSwKKyAgICAgICdhc3luYyc6ICQkcnN2cCQkYXN5bmMKKyAgICB9Owor
CisgICAgLyogZ2xvYmFsIGRlZmluZTp0cnVlIG1vZHVsZTp0cnVlIHdpbmRvdzogdHJ1ZSAqLwor
ICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKyAg
ICAgIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIHJzdnAkdW1kJCRSU1ZQOyB9KTsKKyAgICB9
IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRz
KSB7CisgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJzdnAkdW1kJCRSU1ZQOworICAgIH0gZWxzZSBp
ZiAodHlwZW9mIHRoaXMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICB0aGlzWydSU1ZQJ10gPSBy
c3ZwJHVtZCQkUlNWUDsKKyAgICB9Cit9KS5jYWxsKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDI4YmE0N2YyODNmZTU5YjFlZTdk
OTI3YTQxNDUyOTk4NTdlNWVlOGYuLmMzODEwOWI5ZGYzOTAwNzY3YmVhNzA5Y2M0MjczZDg3ZWFj
MWUyMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01h
aW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0
bWwKQEAgLTE0Miw2ICsxNDIsOCBAQAogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Q29udHJvbGxlcnMvQ29kZU1pcnJvckdyYWRpZW50RWRpdGluZ0NvbnRyb2xsZXIuY3NzIj4KICAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5jc3MiPgogCisgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL1JT
VlAvcnN2cC5qcyI+PC9zY3JpcHQ+CisKICAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvQ29kZU1p
cnJvci9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5h
bC9Db2RlTWlycm9yL2Nsb2p1cmUuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1JlcGxheVNlc3Npb24uanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVwbGF5U2Vzc2lvbi5qcwpp
bmRleCBjMTFhM2VkYTQxOTQxZTBkYzdjMWExNGZhODdhNzAxZjQ5NzQ5ZmEwLi4yNTYzNjAzMTFj
MjgwM2I0MDA3NmVkODRmNjZmZGVlMDNkODRlOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVwbGF5U2Vzc2lvbi5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVwbGF5U2Vzc2lvbi5qcwpA
QCAtNzMsNyArNzMsNyBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lvbi5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICBwZW5kaW5nU2VnbWVudHMucHVzaChXZWJJbnNwZWN0b3IucmVwbGF5TWFu
YWdlci5nZXRTZWdtZW50KHNlZ21lbnRJZCkpOwogCiAgICAgICAgIHZhciBzZXNzaW9uID0gdGhp
czsKLSAgICAgICAgUHJvbWlzZS5hbGwocGVuZGluZ1NlZ21lbnRzKS50aGVuKAorICAgICAgICBX
ZWJJbnNwZWN0b3IuUHJvbWlzZS5hbGwocGVuZGluZ1NlZ21lbnRzKS50aGVuKAogICAgICAgICAg
ICAgZnVuY3Rpb24oc2VnbWVudHNBcnJheSkgewogICAgICAgICAgICAgICAgIHNlc3Npb24uX3Nl
Z21lbnRzID0gc2VnbWVudHNBcnJheTsKICAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVwbGF5U2Vzc2lvbi5FdmVudC5TZWdtZW50
c0NoYW5nZWQsIHtvbGRTZWdtZW50czogb2xkU2VnbWVudHN9KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckJhY2tlbmQu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0
b3JCYWNrZW5kLmpzCmluZGV4IGZlNGU5M2UzZTRkMDRjN2VlNmM4MjFjYmI1MTMwNDI3ZTZmOGI4
MTMuLjM0NzIwMWE3ZTFiMGVhZTI1NjllZWEyMDgzZmZhYTc0MmEzOTlhOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckJh
Y2tlbmQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9j
b2wvSW5zcGVjdG9yQmFja2VuZC5qcwpAQCAtMzg4LDcgKzM4OCw3IEBAIEluc3BlY3RvckJhY2tl
bmQuQ29tbWFuZC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgaW5zdGFuY2UgPSB0
aGlzLl9pbnN0YW5jZTsKICAgICAgICAgdmFyIHByb21pc2VBcmd1bWVudHMgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICBmdW5j
dGlvbiBjb252ZXJ0VG9Qcm9taXNlQ2FsbGJhY2soZXJyb3IsIHBheWxvYWQpIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZShwYXlsb2FkKTsK
ICAgICAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>