<?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>27490</bug_id>
          
          <creation_ts>2009-07-21 01:34:25 -0700</creation_ts>
          <short_desc>Web Sockets Test Infrastructure Part 1/3: Server</short_desc>
          <delta_ts>2009-10-15 23:42:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yuzo Fujishima">yuzo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jorlow</cc>
    
    <cc>levin</cc>
    
    <cc>mike</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133400</commentid>
    <comment_count>0</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-07-21 01:34:25 -0700</bug_when>
    <thetext>Add test infrastructure for Web Sockets (http://www.w3.org/TR/websockets/).

This bug is Part 1/3: Server.

Other parts are:
Part 2/3: Patch to run-webkit-tests
Part 3/3: Example test
Parts must be submitted in the order Part1, Part2, then Part3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133404</commentid>
    <comment_count>1</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-07-21 01:38:19 -0700</bug_when>
    <thetext>Links:

Part 1/3: Server: https://bugs.webkit.org/show_bug.cgi?id=27490
Part 2/3: Patch to run-webkit-tests: https://bugs.webkit.org/show_bug.cgi?id=27491
Part 3/3: Example test: https://bugs.webkit.org/show_bug.cgi?id=27492</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133408</commentid>
    <comment_count>2</comment_count>
      <attachid>33157</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-07-21 01:46:56 -0700</bug_when>
    <thetext>Created attachment 33157
Web Socket Server for LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133800</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-22 10:19:39 -0700</bug_when>
    <thetext>What would it take to run WebSockets server from within Apache, to test how Upgrade works? I think this setup should be closer to what real sites will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134040</commentid>
    <comment_count>4</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-07-22 23:31:34 -0700</bug_when>
    <thetext>Hi, Alexey,

Thank you for the review.

Honestly, I&apos;m not familiar with Apache. But I guess that adding non-HTTP
handler to it should be non-trivial.

I believe writing a simple standalone server like the one in the patch has better
reward/cost ratio, at least until popular web servers, e.g., Apache, support
Web Sockets. (The cost would include that for learning how to extend Apache as such.)

I do agree that we should switch to Apache (or other popular web server)-based
testing when Apache supports Web Sockets.

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136959</commentid>
    <comment_count>5</comment_count>
      <attachid>34053</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-08-04 03:21:00 -0700</bug_when>
    <thetext>Created attachment 34053
Web Socket Server for LayoutTests, derived from Python&apos;s SimpleHTTPServer

To enable both same-origin (http://) and cross-origin (file://) testing,
and also to make testing a little bit more realistic, I&apos;ve rewritten the
test Web Socket server to derive from Python&apos;s SimpleHTTPServer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137101</commentid>
    <comment_count>6</comment_count>
      <attachid>34053</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-08-04 13:07:14 -0700</bug_when>
    <thetext>Comment on attachment 34053
Web Socket Server for LayoutTests, derived from Python&apos;s SimpleHTTPServer

Two big issues jump out at me:
1) Coding style.  Python code in WebKit typically follows the standard Python style guidelines as documented in PEP 8 at http://www.python.org/dev/peps/pep-0008/.  This includes using four spaces for indentation, lower_case_and_underscores for function and method names, and so forth.  I think we&apos;re more than happy to ignore the 80 character line length limit as we do elsewhere in WebKit source.
2) The script have a hardcoded #! line that refers to Python 2.4.  Tiger only ships with Python 2.3, so a test harness will need to be compatible with that version.  I&apos;ve not studied the code closely enough to determine whether there are 2.4 features used in the code or if it&apos;s just the shebang line that is the problem.

The &quot;websocket_&quot; prefix on the file names also seems redundant given that this all lives inside a websocket directory.

I&apos;ll try and take a closer look at the substance of the patch soon, but it&apos;s clear at this point that it needs revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137104</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-08-04 13:15:43 -0700</bug_when>
    <thetext>+DEFAULT_WS_PORT = 81

This doesn&apos;t look like a great default, given that the server would need root privileges to take this port.

+  WebSocketHTTPRequestHandler.protocol_version = &apos;HTTP/1.0&apos;

Why 1.0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137278</commentid>
    <comment_count>8</comment_count>
      <attachid>34124</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-08-05 01:52:13 -0700</bug_when>
    <thetext>Created attachment 34124
Web Socket Server, in desired coding style, with shorter file names.

Thank you for your reviews.

- I&apos;ve changed the coding style to conform with PEP 8.

- I&apos;ve changed the #! line and other parts of the code
  such that the scripts will run with Python 2.3 and later.
  (I&apos;ve tested with Python 2.3, 2.4, and 2.5)

- I&apos;ve removed &apos;websocket_&apos; from the file names except for
  websocket_http_server.py, for which the prefix is meaningful, IMHO.

- I&apos;ve changed the protocol_version to HTTP/1.1.

- I&apos;ve defined two kinds of &quot;default port&quot;. One is as defined by the spec.
  The other is for testing.

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138060</commentid>
    <comment_count>9</comment_count>
      <attachid>34124</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 12:52:26 -0700</bug_when>
    <thetext>Comment on attachment 34124
Web Socket Server, in desired coding style, with shorter file names.

This is too large for me to review.  Unless you&apos;re just looking for a rubber stamp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140188</commentid>
    <comment_count>10</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-08-14 02:27:45 -0700</bug_when>
    <thetext>Hi, reviewers,

Thank you for your comments.

I&apos;ve written a Web Socket server for Apache HTTP server using mod_python.
This is expected to be merged into LayoutTests/http.

Because of its size, I&apos;ve uploaded it to http://codereview.appspot.com,
after splitting it into 8 parts (part 0 through 7), in dependency order.
(The most depended on comes first.)

Please let me know if you like it uploaded to this bug instead.

Web Socket Server for Apache HTTP Server with mod_python: 
http://codereview.appspot.com/105107 Part 0: mp_websock module 
http://codereview.appspot.com/105108 Part 1: script to run all tests
http://codereview.appspot.com/105109 Part 2: testing helpers
http://codereview.appspot.com/105110 Part 3: utilities 
http://codereview.appspot.com/104108 Part 4: message utilities
http://codereview.appspot.com/105111 Part 5: handshake
http://codereview.appspot.com/105112 Part 6: dispatch
http://codereview.appspot.com/104109 Part 7: PythonConnectionHandler

I haven&apos;t created ChangeLog yet.

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140695</commentid>
    <comment_count>11</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-08-17 03:09:22 -0700</bug_when>
    <thetext>Hi, reviewers,

Sorry, but on second thought it seems to me that directly adding a Web Socket server
to the WebKit repository may not be a good idea, because
- it is not part of WebKit per se. It is only for testing.
- it is not small enough to ignore its review/maintenance cost.

Accordingly, I&apos;d like to at least temporarily withdraw the patches.
(codereview.appspot.com links should be now inaccessible.)

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144076</commentid>
    <comment_count>12</comment_count>
      <attachid>34124</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-01 17:54:51 -0700</bug_when>
    <thetext>Comment on attachment 34124
Web Socket Server, in desired coding style, with shorter file names.

Clearing review flag per comment above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144232</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-02 09:33:33 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Sorry, but on second thought it seems to me that directly adding a Web Socket
&gt; server to the WebKit repository may not be a good idea

Is there any other (existing or future) way to test Web Socket functionality? It can&apos;t go untested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145073</commentid>
    <comment_count>14</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-09-06 17:39:35 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; Sorry, but on second thought it seems to me that directly adding a Web Socket
&gt; &gt; server to the WebKit repository may not be a good idea
&gt; 
&gt; Is there any other (existing or future) way to test Web Socket functionality?
&gt; It can&apos;t go untested.

Hi,

I&apos;m preparing an open source project for an experimental Web Socket server
extension for Apache. The plan is I&apos;ll make it public this week.

Then I&apos;ll propose using it for testing WebKit.

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145101</commentid>
    <comment_count>15</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-09-06 23:58:12 -0700</bug_when>
    <thetext>I&apos;d propose using mod_pywebsocket http://code.google.com/p/pywebsocket/
to test Web Socket implementation of WebKit.

I probably need help from some WebKit experts in adding mod_python and
mod_pywebsocket to the WebKit development environment. Whom should I
talk to?

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145186</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-09-07 09:48:04 -0700</bug_when>
    <thetext>&gt; Whom should I talk to?

Please e-mail webkit-dev.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151198</commentid>
    <comment_count>17</comment_count>
      <attachid>40351</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-09-30 02:36:49 -0700</bug_when>
    <thetext>Created attachment 40351
add pywebsocket to test Web Socket

 WebKitTools/ChangeLog                              |   38 +++
 WebKitTools/pywebsocket/COPYING                    |  202 +++++++++++++
 WebKitTools/pywebsocket/MANIFEST.in                |    6 +
 WebKitTools/pywebsocket/README                     |    6 +
 WebKitTools/pywebsocket/example/echo_client.py     |  168 +++++++++++
 WebKitTools/pywebsocket/example/echo_wsh.py        |   31 ++
 .../pywebsocket/mod_pywebsocket/__init__.py        |   79 +++++
 .../pywebsocket/mod_pywebsocket/dispatch.py        |  160 +++++++++++
 .../pywebsocket/mod_pywebsocket/handshake.py       |  162 +++++++++++
 .../mod_pywebsocket/headerparserhandler.py         |   77 +++++
 WebKitTools/pywebsocket/mod_pywebsocket/msgutil.py |  184 ++++++++++++
 .../pywebsocket/mod_pywebsocket/standalone.py      |  156 ++++++++++
 WebKitTools/pywebsocket/mod_pywebsocket/util.py    |   37 +++
 WebKitTools/pywebsocket/setup.py                   |   48 +++
 WebKitTools/pywebsocket/test/config.py             |   30 ++
 WebKitTools/pywebsocket/test/mock.py               |  188 ++++++++++++
 WebKitTools/pywebsocket/test/run_all.py            |   49 ++++
 WebKitTools/pywebsocket/test/test_dispatch.py      |  156 ++++++++++
 WebKitTools/pywebsocket/test/test_handshake.py     |  301 ++++++++++++++++++++
 WebKitTools/pywebsocket/test/test_mock.py          |  111 +++++++
 WebKitTools/pywebsocket/test/test_msgutil.py       |  134 +++++++++
 WebKitTools/pywebsocket/test/test_util.py          |   42 +++
 .../pywebsocket/test/testdata/handlers/a_wsh.py    |   27 ++
 .../pywebsocket/test/testdata/handlers/b_wsh.py    |   16 +
 .../test/testdata/handlers/sub/c_wsh.py            |   24 ++
 .../pywebsocket/test/testdata/handlers/sub/d.py    |   29 ++
 .../test/testdata/handlers/sub/e_wsh.py            |   25 ++
 .../test/testdata/handlers/sub/f_wsh.py            |   29 ++
 .../test/testdata/handlers/sub/g_wsh.py            |   29 ++
 .../test/testdata/handlers/sub/h_wsh.py            |   29 ++
 30 files changed, 2573 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151201</commentid>
    <comment_count>18</comment_count>
      <attachid>40353</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-09-30 02:41:59 -0700</bug_when>
    <thetext>Created attachment 40353
add pywebsocket to test Web Socket</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151327</commentid>
    <comment_count>19</comment_count>
      <attachid>40353</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-09-30 12:47:11 -0700</bug_when>
    <thetext>Comment on attachment 40353
add pywebsocket to test Web Socket

We do not allow code under the Apache license at this time. r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151337</commentid>
    <comment_count>20</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-30 13:06:46 -0700</bug_when>
    <thetext>Interesting.  This is even true when the code is not linked with anything else?

Note that most if not all of what&apos;s in  http://trac.webkit.org/browser/trunk/LayoutTests/svg/batik is under the Apache 2 license.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151340</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-09-30 13:10:56 -0700</bug_when>
    <thetext>When attaching a patch to Bugzilla, you click through text on the &quot;Add an attachment&quot; page that mentions:

By clicking below you agree that your file is licensed under either the BSD license or LGPL 2.1, as indicated in your file.

That&apos;s clearly not the case here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151344</commentid>
    <comment_count>22</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-30 13:22:40 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; When attaching a patch to Bugzilla, you click through text on the &quot;Add an
&gt; attachment&quot; page that mentions:
&gt; 
&gt; By clicking below you agree that your file is licensed under either the BSD
&gt; license or LGPL 2.1, as indicated in your file.
&gt; 
&gt; That&apos;s clearly not the case here.

(In reply to comment #21)
&gt; When attaching a patch to Bugzilla, you click through text on the &quot;Add an
&gt; attachment&quot; page that mentions:
&gt; 
&gt; By clicking below you agree that your file is licensed under either the BSD
&gt; license or LGPL 2.1, as indicated in your file.
&gt; 
&gt; That&apos;s clearly not the case here.

Talked to bdash on IRC.  Realized the example I posted was put in a long time ago.  (Presumably before all code had to be LGPL or BSD.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151345</commentid>
    <comment_count>23</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2009-09-30 13:26:38 -0700</bug_when>
    <thetext>According to bdash, dual licensing would be an acceptable solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151755</commentid>
    <comment_count>24</comment_count>
      <attachid>40493</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-10-01 19:38:04 -0700</bug_when>
    <thetext>Created attachment 40493
add mod_pywebsocket to test Web Sockets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151757</commentid>
    <comment_count>25</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-10-01 20:23:14 -0700</bug_when>
    <thetext>Now mod_pywebsocket is licensed under BSD.
Can you take another look?

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152631</commentid>
    <comment_count>26</comment_count>
      <attachid>40705</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-10-06 02:50:55 -0700</bug_when>
    <thetext>Created attachment 40705
add mod_pywebsocket to test Web Sockets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152868</commentid>
    <comment_count>27</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-06 14:50:51 -0700</bug_when>
    <thetext>I&apos;ll try to look at this tonight. (Feel free to ping me to remind me if you see no action.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154245</commentid>
    <comment_count>28</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-10-12 20:46:21 -0700</bug_when>
    <thetext>Hi, David,

Can you take a look?

The files are being imported from 
http://code.google.com/p/pywebsocket/

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154417</commentid>
    <comment_count>29</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-13 13:36:31 -0700</bug_when>
    <thetext>I&apos;m looking. This is complicated by the fact that the patch is huge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154717</commentid>
    <comment_count>30</comment_count>
      <attachid>40705</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-14 22:47:53 -0700</bug_when>
    <thetext>Comment on attachment 40705
add mod_pywebsocket to test Web Sockets

General notes:

Ideally the copyright would be of this format:
    Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
    Copyright (C) 2009 Somebody &lt;email&gt;

Also make sure that variable name and ideally file names too use full words (not abbreviations).

I think web_socket_shake_hands is misnamed. It isn&apos;t a handler that is suppose to do any handshaking. It seems it is only there to allow handlers to perform custom checks before the handshake is sent from the server.  I haven&apos;t thought a lot about a better name... Here&apos;s some brief name brainstorming: web_socket_handshake_check, web_socket_allow_handshake, etc.

Here&apos;s a quote from the websocket spec:
   The first field consists of three tokens separated by space
   characters (byte 0x20).  The middle token is the path being opened.
   If the server supports multiple paths, then the server should echo
   the value of this field in the initial handshake, as part of the URL
   given on the |WebSocket-Location| line (after the appropriate scheme
   and host).

   If the first field does not have three tokens, the server should
   abort the connection as it probably represents an errorneous client.

Where is this done?


&gt; diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
&gt; +2009-10-01  Yuzo Fujishima  &lt;yuzo@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Add mod_pywebsocket to test Web Sockets.
&gt; +        http://code.google.com/p/pywebsocket/
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=27490
&gt; +
&gt; +        * pywebsocket/COPYING: Added.

Usually you&apos;d say something about the files where they are listed.  This changelog is a bit sparse.


It would be nice if it referenced the protocol spec since that is what is being implemented: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol


&gt; diff --git a/WebKitTools/pywebsocket/COPYING b/WebKitTools/pywebsocket/COPYING
&gt; +++ b/WebKitTools/pywebsocket/COPYING

Is it really needed to check in this file?


&gt; diff --git a/WebKitTools/pywebsocket/README b/WebKitTools/pywebsocket/README
&gt; new file mode 100644
&gt; index 0000000..1f9f05f
&gt; --- /dev/null
&gt; +++ b/WebKitTools/pywebsocket/README
&gt; @@ -0,0 +1,6 @@
&gt; +Install this package by:
&gt; +$ python setup.py build
&gt; +$ sudo python setup.py install
&gt; +
&gt; +Then read document by:
&gt; +$ pydoc mod_pywebsocket

Does this need to be installed by every webkit developer before running layout tests?
There needs to be another way to handle this (and then delete this file :) ).



&gt; diff --git a/WebKitTools/pywebsocket/example/echo_client.py b/WebKitTools/pywebsocket/example/echo_client.py
&gt; +class EchoClient(object):

&gt; +    def _handshake(self):
...
&gt; +        for expected_char in (
&gt; +                &apos;HTTP/1.1 101 Web Socket Protocol Handshake\r\n&apos;
&gt; +                &apos;Upgrade: WebSocket\r\n&apos;
&gt; +                &apos;Connection: Upgrade\r\n&apos;):

Why not put this in a string constant?

Also you repeat several strings here and in the &quot;self._socket.send&quot; above. If these will always be the same, it may be better to have only one instance of them for maintainence reasons.


&gt; +    def _skip_headers(self):
&gt; +        terminator = &apos;\r\n\r\n&apos;
&gt; +        pos = 0
&gt; +        while pos &lt; len(terminator):
&gt; +            received = self._socket.recv(1)[0]
&gt; +            if received == terminator[pos]:
&gt; +                pos += 1
&gt; +            else:
&gt; +                pos = 0

This isn&apos;t correct. It should be 

           if received == terminator[pos]:
               pos += 1
           elif received == terminator[0]:
               pos = 1
           else:
               pos = 0

&gt; +    def _format_host_header(self):
&gt; +        host = &apos;Host: &apos; + self._options.server_host
&gt; +        if ((not self._options.use_tls and
&gt; +             self._options.server_port != _DEFAULT_PORT) or
&gt; +            (self._options.use_tls and
&gt; +             self._options.server_port != _DEFAULT_SECURE_PORT)):

Please put the &quot;and&quot; &quot;or&quot; at the beginning of lines instead of the end following the WebKit style guide of putting &amp;&amp;/|| at the beginning of lines when there are continuations.
Also, this would be easier to read if there weren&apos;t as many wrapped lines. I would suggest not warping after the &quot;and&quot;s. WebKit doesn&apos;t have an 80 column limit.


&gt; +    (options, _) = parser.parse_args()

&quot;_&quot; is a valid variable name but non-descript and looks like a magic variable from perl ($_).

Why not just put &quot;arguments&quot; or &quot;unused&quot;?

&gt; +    # Default port number depends on whether TLS is used.
&gt; +    if options.server_port == _UNDEFINED_PORT:
&gt; +        if options.use_tls:
&gt; +            options.server_port = _DEFAULT_SECURE_PORT
&gt; +        else:
&gt; +            options.server_port = _DEFAULT_PORT

It would be nice to make this a function &quot;def get_default_port(use_tls):&quot; which would be used here and in the &quot;if&quot; in _format_host_header.

&gt; +# vi:sts=4 sw=4 et

No other files in WebKit have this &quot;vi&quot; formatting note. Please get rid of it everywhere.


&gt; diff --git a/WebKitTools/pywebsocket/example/echo_wsh.py b/WebKitTools/pywebsocket/example/echo_wsh.py

&gt; +from mod_pywebsocket import msgutil
&gt; +
&gt; +
&gt; +def web_socket_shake_hands(request):
&gt; +    pass  # always accept

Since python leaves it unspecified, follow the typical WebKit style and only put one space before end of line comments.
Also, whole sentences that start with a capital and end with a period are preferred.

&gt; diff --git a/WebKitTools/pywebsocket/mod_pywebsocket/dispatch.py b/WebKitTools/pywebsocket/mod_pywebsocket/dispatch.py

&gt; +import os
&gt; +import re
&gt; +

Why is there a blank line here?

&gt; +_SHAKE_HANDS_HANDLER_NAME = &apos;web_socket_shake_hands&apos;
I can&apos;t find any references to &quot;shaking hands&quot; when talking about a &quot;handshake&quot; in a protocol

I&apos;d just call it &apos;web_socket_do_handshake&apos; or &apos;web_socket_perform_handshake&apos;

&gt; +_TRANSFER_DATA_HANDLER_NAME = &apos;web_socket_transfer_data&apos;


&gt; +def _source(source_str):
&gt; +    &quot;&quot;&quot;Source a handler definition string.&quot;&quot;&quot;
&gt; +
&gt; +    global_dic = {}

Use full words &quot;global_dic&quot;

&gt; +    try:
&gt; +        exec source_str in global_dic
&gt; +    except Exception:
&gt; +        raise DispatchError(&apos;Error in sourcing handler:&apos; +
&gt; +                            util.get_stack_trace())

No need to line wrap this.

&gt; +def _extract_handler(dic, name):

Use full words &quot;dic&quot;

&gt; +class Dispatcher(object):
&gt; +    def shake_hands(self, request):
&gt; +        &quot;&quot;&quot;Hook into Web Socket handshake.
&gt; +
&gt; +        Select a handler based on request.uri and call its
&gt; +        web_socket_shake_hands function.
&gt; +
&gt; +        Args:
&gt; +            request: mod_python request.
&gt; +        &quot;&quot;&quot;
&gt; +
&gt; +        shake_hands_, _ = self._handler(request)

&quot;_&quot; unfortunate variable name.

&gt; +        try:
&gt; +            shake_hands_(request)
&gt; +        except Exception:
&gt; +            raise DispatchError(&apos;shake_hands() raised exception: &apos; +

&quot;shake_hands&quot; isn&apos;t the current api name. Why not just use _SHAKE_HANDS_HANDLER_NAME here?


&gt; +    def transfer_data(self, request):
...
&gt; +        _, transfer_data_ = self._handler(request)

&quot;_&quot; unfortunate variable name.

&gt; +        except Exception:
&gt; +            raise DispatchError(&apos;transfer_data() raised exception: &apos; +

Why not use _TRANSFER_DATA_HANDLER_NAME for the function name?

&gt; +                                util.get_stack_trace())


&gt; diff --git a/WebKitTools/pywebsocket/mod_pywebsocket/handshake.py b/WebKitTools/pywebsocket/mod_pywebsocket/handshake.py


&gt; +class Handshaker(object):
&gt; +    def _set_resource(self):
&gt; +        self._request.ws_resource = self._request.uri

Avoid abbreviations &quot;ws_resource&quot;

&gt; +    def _set_location(self):
&gt; +        location_parts = []
&gt; +        if self._request.is_https():
&gt; +            location_parts.append(_WEB_SOCKET_SECURE_SCHEME)
&gt; +        else:
&gt; +            location_parts.append(_WEB_SOCKET_SCHEME)
&gt; +        location_parts.append(&apos;://&apos;)
&gt; +        host, port = self._parse_host_header()
&gt; +        conn_port = self._request.connection.local_addr[1]

Avoid abbreviations &quot;conn_port&quot;

&gt; +        if port != conn_port:
&gt; +            raise HandshakeError(&apos;Header/connection port mismatch: %d/%d&apos; %
&gt; +                                 (port, conn_port))
&gt; +        location_parts.append(host)
&gt; +        if ((not self._request.is_https() and
&gt; +             port != _DEFAULT_WEB_SOCKET_PORT) or
&gt; +            (self._request.is_https() and
&gt; +             port != _DEFAULT_WEB_SOCKET_SECURE_PORT)):

Ideally there would be a method to return the default port based on is_https (perhaps re-use &quot;def get_default_port(use_tls):&quot;).

&gt; +    def _parse_host_header(self):
&gt; +        fields = self._request.headers_in[&apos;Host&apos;].split(&apos;:&apos;, 1)
&gt; +        if len(fields) == 1:
&gt; +            port = _DEFAULT_WEB_SOCKET_PORT
&gt; +            if self._request.is_https():
&gt; +                port = _DEFAULT_WEB_SOCKET_SECURE_PORT

Use function to return the port (as above).

&gt; +    def _check_header_lines(self):
...
&gt; +                raise HandshakeError(&apos;Header %s not defined&apos; % key)

How about
                raise HandshakeError(&apos;Header %s is not defined.&apos; % key)
?


&gt; diff --git a/WebKitTools/pywebsocket/mod_pywebsocket/headerparserhandler.py b/WebKitTools/pywebsocket/mod_pywebsocket/headerparserhandler.py

&gt; +def headerparserhandler(request):
...
&gt; +        request.log_error(&apos;mod_pywebsocket: resource:%r&apos; % request.ws_resource,

Did you want a space before the %r?

&gt; diff --git a/WebKitTools/pywebsocket/mod_pywebsocket/msgutil.py b/WebKitTools/pywebsocket/mod_pywebsocket/msgutil.py

&gt; +import Queue
&gt; +import StringIO
&gt; +import traceback
&gt; +import threading

out of order (threading before traceback).


&gt; +
&gt; +def _receive_bytes(request, length):
&gt; +    bytes = &apos;&apos;
&gt; +    while length &gt; 0:
&gt; +        new_bytes = request.connection.read(length)
&gt; +        bytes += new_bytes
&gt; +        length -= len(new_bytes)
&gt; +    return bytes

Why not use array concatenation followed by a &apos;&apos;.join() like you&apos;ve done elsewhere (to avoid slow string concatenation)?

&gt; +def _read_until(request, delim_char):
&gt; +    bytes = &apos;&apos;
&gt; +    while True:
&gt; +        ch = request.connection.read(1)
&gt; +        if ch == delim_char:
&gt; +            break
&gt; +        bytes += ch
&gt; +    return bytes

Why not use array concatenation followed by a &apos;&apos;.join() like you&apos;ve done elsewhere (to avoid slow string concatenation)?


&gt; +class MessageReceiver(threading.Thread):
&gt; +    def __init__(self, request, onmessage=None):
&gt; +        &quot;&quot;&quot;Construct an instance.
&gt; +
&gt; +        Args:
&gt; +            request: mod_python request.
&gt; +            onmessage: a function to be called when a message is received.
&gt; +                       Can be None.

s/Can/May/

It may be valuable to mention two things:
1. The onmessage will be called on another thread.
2. If you provide an on message handler, then the received functions are not useful.

I find #2 strange. It seems like it would be better if there were another class that used this one to provive receive/receive_nowait, and then this class would require onmessageto be set.


&gt; +    def run(self):
&gt; +        while True:
&gt; +            message = receive_message(self._request)
&gt; +            if self._onmessage:
&gt; +                self._onmessage(message)
&gt; +            else:
&gt; +                self._queue.put(message)

How does this exit?  (Does receive_message throw an exception and then the thread exits?)

&gt; +class MessageSender(threading.Thread):
&gt; +    def send(self, message):
&gt; +        &quot;&quot;&quot;Send a message, blocking.&quot;&quot;&quot;
&gt; +
&gt; +        send_message(self._request, message)

So the ordering of this with respect to other messages in the queue is undefined?

If seems like it should come after all messages that are already in the queue. I guess this could be explained with some comment in the code about why this functionality is the way it is.


&gt; diff --git a/WebKitTools/pywebsocket/mod_pywebsocket/standalone.py b/WebKitTools/pywebsocket/mod_pywebsocket/standalone.py
&gt; +&quot;&quot;&quot;Standalone Web Socket server.
&gt; +
&gt; +Use this server to run mod_pywebsocket without Apache HTTP Server.
&gt; +&quot;&quot;&quot;

Is this going to be used? It would be nice to have only one way to run these in apache or not in apache.



&gt; diff --git a/WebKitTools/pywebsocket/setup.py b/WebKitTools/pywebsocket/setup.py

We need to get rid of set-up. There needs to be a checked in solution that runs without it.

&gt; diff --git a/WebKitTools/pywebsocket/test/mock.py b/WebKitTools/pywebsocket/test/mock.py

&gt; +class MockConn(_MockConnBase):
...
&gt; +
&gt; +    def readline(self):
&gt; +        &quot;&quot;&quot;Override mod_python.apache.mp_conn.readline.&quot;&quot;&quot;
&gt; +
&gt; +        if self._read_pos &gt;= len(self._read_data):
&gt; +            return &apos;&apos;
&gt; +        end_index = self._read_data.find(&apos;\n&apos;, self._read_pos) + 1
&gt; +        if end_index == 0:

avoid comparisons to 0.
   if not end_index:

&gt; +            end_index = len(self._read_data)
&gt; +        return self._read_up_to(end_index)

&gt; +class MockBlockingConn(_MockConnBase):
...
&gt; +    def readline(self):
...
&gt; +        while True:
&gt; +            ch = self._queue.get()

If you believe that this variable is worth more than one character, use whole words. &apos;c&apos; may be sufficient here.


&gt; +    def read(self, length):
&gt; +        &quot;&quot;&quot;Override mod_python.apache.mp_conn.read.&quot;&quot;&quot;
&gt; +
&gt; +        data = &apos;&apos;
&gt; +        for _ in range(length):

&quot;_&quot; looks like perl. Why not just use i?


&gt; +class MockTable(dict):
&gt; +    &quot;&quot;&quot;Mock table.
&gt; +
&gt; +    This mimicks mod_python mp_table. Note that only the methods used by

s/mimicks/mimics/

&gt; +class MockRequest(object):

&gt; +    def __init__(self, uri=None, headers_in={}, connection=None,
&gt; +                 is_https=False):
&gt; +        self.uri = uri
&gt; +        self.connection = connection
&gt; +        self.headers_in = MockTable(headers_in)
&gt; +        self.is_https_ = is_https

Why does is_https_ have a trailing underscore? Did you mean to use a leading underscore?



&gt; diff --git a/WebKitTools/pywebsocket/test/test_dispatch.py b/WebKitTools/pywebsocket/test/test_dispatch.py

&gt; +class DispatcherTest(unittest.TestCase):
&gt; +    def test_shake_hand(self):
&gt; +        dispatcher = dispatch.Dispatcher(_TEST_HANDLERS_DIR)
&gt; +        request = mock.MockRequest()
&gt; +        request.ws_resource = &apos;/a&apos;
&gt; +        request.ws_origin = &apos;http://example.com&apos;
&gt; +        dispatcher.shake_hands(request)  # Must not raise exception.
&gt; +
&gt; +        request.ws_origin = &apos;http://bad.example.com&apos;
&gt; +        self.assertRaises(dispatch.DispatchError,
&gt; +                          dispatcher.shake_hands, request)
&gt; +
&gt; +    def test_transfer_data(self):
&gt; +        dispatcher = dispatch.Dispatcher(_TEST_HANDLERS_DIR)
&gt; +        request = mock.MockRequest(connection=mock.MockConn(&apos;&apos;))
&gt; +        request.ws_resource = &apos;/a&apos;
&gt; +        request.ws_protocol = &apos;p1&apos;
&gt; +
&gt; +        dispatcher.transfer_data(request)
&gt; +        self.assertEqual(&apos;a_wsh.py is called for /a, p1&apos;,
&gt; +                         request.connection.written_data())
&gt; +
&gt; +        request = mock.MockRequest(connection=mock.MockConn(&apos;&apos;))
&gt; +        request.ws_resource = &apos;/sub/e&apos;
&gt; +        request.ws_protocol = None
&gt; +        dispatcher.transfer_data(request)
&gt; +        self.assertEqual(&apos;sub/e_wsh.py is called for /sub/e, None&apos;,
&gt; +                         request.connection.written_data())
&gt; +
&gt; +    def test_transfer_data_no_handler(self):
&gt; +        dispatcher = dispatch.Dispatcher(_TEST_HANDLERS_DIR)
&gt; +        for resource in [&apos;/b&apos;, &apos;/sub/c&apos;, &apos;/sub/d&apos;, &apos;/does/not/exist&apos;]:
&gt; +            request = mock.MockRequest(connection=mock.MockConn(&apos;&apos;))
&gt; +            request.ws_resource = resource
&gt; +            request.ws_protocol = &apos;p2&apos;
&gt; +            try:
&gt; +                dispatcher.transfer_data(request)
&gt; +                self.fail()
&gt; +            except dispatch.DispatchError, e:
&gt; +                self.failUnless(str(e).find(&apos;No handler&apos;) != -1)
&gt; +            except Exception:
&gt; +                self.fail()
&gt; +
&gt; +    def test_transfer_data_handler_exception(self):
&gt; +        dispatcher = dispatch.Dispatcher(_TEST_HANDLERS_DIR)
&gt; +        request = mock.MockRequest(connection=mock.MockConn(&apos;&apos;))
&gt; +        request.ws_resource = &apos;/sub/f&apos;
&gt; +        request.ws_protocol = &apos;p3&apos;
&gt; +        try:
&gt; +            dispatcher.transfer_data(request)
&gt; +            self.fail()
&gt; +        except dispatch.DispatchError, e:
&gt; +            self.failUnless(str(e).find(&apos;Intentional&apos;) != -1)
&gt; +        except Exception:
&gt; +            self.fail()


&gt; diff --git a/WebKitTools/pywebsocket/test/test_handshake.py b/WebKitTools/pywebsocket/test/test_handshake.py
&gt; +_GOOD_REQUEST = (
&gt; +    80,
&gt; +    &apos;/demo&apos;,
&gt; +    {
&gt; +        &apos;Upgrade&apos;:&apos;WebSocket&apos;,
&gt; +        &apos;Connection&apos;:&apos;Upgrade&apos;,
&gt; +        &apos;Host&apos;:&apos;example.com&apos;,
&gt; +        &apos;Origin&apos;:&apos;http://example.com&apos;,
&gt; +        &apos;WebSocket-Protocol&apos;:&apos;sample&apos;,
&gt; +    }
&gt; +)

&gt; +_GOOD_RESPONSE_SECURE_NONDEF = (

Avoid abbreviations &quot;_GOOD_RESPONSE_SECURE_NONDEF&quot;

&gt; +def _create_request(request_def):
&gt; +    conn = mock.MockConn(&apos;&apos;)

Use whole words &quot;conn&quot;

&gt; diff --git a/WebKitTools/pywebsocket/test/test_util.py b/WebKitTools/pywebsocket/test/test_util.py
&gt; +class UtilTest(unittest.TestCase):
&gt; +    def test_get_stack_trace(self):
&gt; +        self.assertEqual(&apos;None\n&apos;, util.get_stack_trace())
&gt; +        try:
&gt; +            a = 1 / 0  # Intentionally raise exception

Single space before # and make the comment end with a period.

&gt; diff --git a/WebKitTools/pywebsocket/test/testdata/handlers/a_wsh.py b/WebKitTools/pywebsocket/test/testdata/handlers/a_wsh.py

Something more descriptive than &quot;a&quot; (ditto for &quot;b_wsh.py&quot; .. &quot;g_wsh.py) would be nice. Name them according to what they do.

Also &quot;wsh&quot; is an abbreviation. (I think it stands for web socket handler...) It would be nice to make that more descriptive as well.


&gt; diff --git a/WebKitTools/pywebsocket/test/testdata/handlers/sub/c_wsh.py b/WebKitTools/pywebsocket/test/testdata/handlers/sub/c_wsh.py

Why is this in a &quot;sub&quot; but a and b aren&apos;t?


&gt; diff --git a/WebKitTools/pywebsocket/test/testdata/handlers/sub/d.py b/WebKitTools/pywebsocket/test/testdata/handlers/sub/d.py

Why doesn&apos;t d.py have the _wsh.py postfix like the others? I guess this is about testing the handler.


&gt; diff --git a/WebKitTools/pywebsocket/test/testdata/handlers/sub/e_wsh.py b/WebKitTools/pywebsocket/test/testdata/handlers/sub/e_wsh.py
&gt; +def web_socket_shake_hands(request):
&gt; +    return True

Why return True here? In other places this just does &quot;pass&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155012</commentid>
    <comment_count>31</comment_count>
      <attachid>41268</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-10-15 22:14:54 -0700</bug_when>
    <thetext>Created attachment 41268
add mod_pywebsocket to test Web Sockets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155018</commentid>
    <comment_count>32</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-10-15 22:28:28 -0700</bug_when>
    <thetext>Hi, can anyone review the patch?

This patch tries to import code from http://code.google.com/p/pywebsocket/ .
The review decision should be either accept it or decline it as a whole.

- pywebsocket is licensed under BSD. It should be compatible with WebKit.

- pywebsocket is used also by Chromium project. It should be maintained
  reasonably well. (Actually, I&apos;m one of the owners of the project.)

I&apos;ve addressed David&apos;s review comments to the previous patch except
stylistic ones.

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155023</commentid>
    <comment_count>33</comment_count>
      <attachid>41268</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-15 23:12:50 -0700</bug_when>
    <thetext>Comment on attachment 41268
add mod_pywebsocket to test Web Sockets

Thanks for addressing my comments even though you are basically importing a 3rd party project into WebKit.

I think there are only a few things relevant to this review:
1. Is the license compatible with WebKit?
Yes, it is BSD.

2. Does this module implement something useful to WebKit?
After reviewing it, it appears to correctly implement the server side of Web Sockets which is useful for testing. (And there have been other reviews in the external project.)

3. Is it possible to integrate this into the layout test run without having every developer/machine install something?
Yes. It will use standalone.py for this.

Given the affirmative answers on these items. It seems like this should go in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155034</commentid>
    <comment_count>34</comment_count>
      <attachid>41268</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-15 23:42:44 -0700</bug_when>
    <thetext>Comment on attachment 41268
add mod_pywebsocket to test Web Sockets

Clearing flags on attachment: 41268

Committed r49672: &lt;http://trac.webkit.org/changeset/49672&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155035</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-15 23:42:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33157</attachid>
            <date>2009-07-21 01:46:56 -0700</date>
            <delta_ts>2009-08-04 03:21:00 -0700</delta_ts>
            <desc>Web Socket Server for LayoutTests.</desc>
            <filename>ws-server-patch.txt</filename>
            <type>text/plain</type>
            <size>51044</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MWUwM2JkLi41ODMyMDJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDct
MjEgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNzQ5MAorICAgICAgICBXZWIgU29ja2V0cyBUZXN0IEluZnJhc3RydWN0
dXJlIFBhcnQgMS8zOiBTZXJ2ZXIKKworICAgICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tl
dC5weToKKyAgICAgICAgKiB3ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfY2xpZW50LnB5OgorICAg
ICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyLnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5LnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5X3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tldF9sb2dnaW5nLnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9sb2dnaW5nX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9zZXJ2ZXIucHk6CisKIDIwMDktMDctMjAgIEFkYW0gTGFu
Z2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0LnB5IGIv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLjJiZGNjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXQucHkKQEAgLTAsMCArMSwyMjggQEAKKyMhL3Vzci9i
aW4vcHl0aG9uMi40CisjCisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJXZWIgU29ja2V0cyBsaWJy
YXJ5LgorCitDb2RlIGZvciBmcmFtaW5nIGFuZCBiYXNpYyBvcGVyYXRpb24gZm9yIGhhbmRsaW5n
IGhlYWRlciB2YWx1ZXMuCisiIiIKKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNvY2tldAor
aW1wb3J0IHRpbWUKKworV0VCU09DS0VUX1BPUlQgPSA4MQorCitXRUJTT0NLRVRfUkVBRFlfU1RB
VEVfQ09OTkVDVElORyA9IDAKK1dFQlNPQ0tFVF9SRUFEWV9TVEFURV9PUEVOID0gMQorV0VCU09D
S0VUX1JFQURZX1NUQVRFX0NMT1NFRCA9IDIKKworCitjbGFzcyBXZWJTb2NrZXRFcnJvcihFeGNl
cHRpb24pOgorICAiIiJBIGJhc2UgZXhjZXB0aW9uIGZvciBXZWJTb2NrZXRFcnJvciBjbGFzcy4i
IiIKKworCitjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VFcnJvcihXZWJTb2NrZXRFcnJvcik6Cisg
ICIiIkFuIGV4Y2VwdGlvbiByYWlzZWQgb24gZXJyb3JzIGluIGhhbmRzaGFraW5nLiIiIgorCisK
K2NsYXNzIFdlYlNvY2tldChvYmplY3QpOgorICAiIiJXZWJTb2NrZXQgY2xhc3MuIiIiCisKKyAg
ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKyAgICBzZWxmLl9y
YXdfc29ja2V0ID0gTm9uZQorICAgIHNlbGYuX3NlbmRfZnJhbWVfdHlwZSA9IDB4MDAKKworICBk
ZWYgX0xvZ0luZm8oc2VsZiwgbXNnKToKKyAgICBsb2dnaW5nLmluZm8oJ1t3c10gJXMnLCBtc2cp
CisKKyAgZGVmIF9Mb2dFcnJvcihzZWxmLCBtc2cpOgorICAgIGxvZ2dpbmcuZXJyb3IoJ1t3c10g
JXMnLCBtc2cpCisKKyAgZGVmIFJlY3ZNc2coc2VsZik6CisgICAgIiIiUmVjZWl2ZXMgYSBXZWIg
U29ja2V0IGZyYW1lIGFuZCByZXR1cm5zIHRoZSBwYXlsb2FkIGluIGl0LiIiIgorICAgIGlmIG5v
dCBzZWxmLl9zb2NrZXQ6CisgICAgICBzZWxmLl9Mb2dJbmZvKCdSZWN2TXNnIHdhcyBjYWxsZWQg
YnV0IHNvY2tldCBpcyBub3QgcmVhZHknKQorICAgICAgcmV0dXJuIE5vbmUKKworICAgIHdoaWxl
IFRydWU6CisgICAgICBzZWxmLl9Mb2dJbmZvKCdXYWl0aW5nIGZyYW1lLi4uJykKKyAgICAgIGZi
eXRlID0gTm9uZQorICAgICAgdHJ5OgorICAgICAgICBmYnl0ZSA9IHNlbGYuX3NvY2tldC5yZWN2
KDEpCisgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgIHJldHVybiBOb25lCisg
ICAgICBleGNlcHQgRXhjZXB0aW9uLCBleDoKKyAgICAgICAgIyBzZWxmLl9Mb2dFcnJvcignJXMn
ICUgZXgpCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgICBpZiBub3QgZmJ5dGU6CisgICAgICAgIHNlbGYuX0xvZ0luZm8oJ1BlZXIgc29ja2V0IHNo
dXRkb3duJykKKyAgICAgICAgc2VsZi5DbG9zZSgpCisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICAgIGZyYW1lX3R5cGUgPSBvcmQoZmJ5dGUpCisgICAgICBpZiAoZnJhbWVfdHlwZSAmIDB4ODAp
ID09IDB4ODA6CisgICAgICAgIGxlbmd0aCA9IHNlbGYuX1JlY3ZMZW5ndGgoKQorICAgICAgICBp
ZiBsZW5ndGggaXMgTm9uZToKKyAgICAgICAgICBzZWxmLl9Mb2dJbmZvKCdQZWVyIHNvY2tldCBz
aHV0ZG93bj8nKQorICAgICAgICAgIHNlbGYuQ2xvc2UoKQorICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIG1zZyA9IHNlbGYuX1JlYWRCeXRlcyhsZW5ndGgpCisgICAgICAgIHNlbGYuX0xv
Z0luZm8oJ0Rpc2NhcmQgYSBmcmFtZSB3aXRoIHR5cGUgJXggbGVuICVkJyAlICgKKyAgICAgICAg
ICAgIGZyYW1lX3R5cGUsIGxlbmd0aCkpCisgICAgICBlbHNlOgorICAgICAgICAjIExvb2sgZm9y
IGZyYW1lIGJvdW5kYXJ5LgorICAgICAgICBtc2cgPSBzZWxmLl9SZWFkVW50aWwoJ1x4ZmYnKQor
CisgICAgICAgIGlmIGZyYW1lX3R5cGUgPT0gMHgwMDoKKyAgICAgICAgICBkYXRhID0gbXNnLmRl
Y29kZSgndXRmLTgnKQorICAgICAgICAgIHNlbGYuX0xvZ0luZm8oJ1JlY3ZNc2c8JXI+JyAlIGRh
dGEpCisgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxm
Ll9Mb2dJbmZvKCdEaXNjYXJkIGEgZnJhbWUgd2l0aCB1bmtub3duIHR5cGUgJXggZGF0YSAlcicg
JSAoCisgICAgICAgICAgICAgIGZyYW1lX3R5cGUsIG1zZykpCisgICAgICAgICAgcmV0dXJuIE5v
bmUKKworICBkZWYgU2VuZE1zZyhzZWxmLCBtc2cpOgorICAgIGlmIG5vdCBzZWxmLl9zb2NrZXQ6
CisgICAgICByYWlzZSBXZWJTb2NrZXRFcnJvcignU29ja2V0IG5vdCByZWFkeScpCisKKyAgICBz
ZWxmLl9Mb2dJbmZvKCdTZW5kTXNnPCVyPicgJSBtc2cpCisgICAgaWYgbXNnIGlzIE5vbmU6Cisg
ICAgICByZXR1cm4KKworICAgIGVuY29kZWRfbXNnID0gbXNnLmVuY29kZSgndXRmLTgnKQorICAg
IGlmIChzZWxmLl9zZW5kX2ZyYW1lX3R5cGUgJiAweDgwKSA9PSAweDgwOgorICAgICAgbGVuZ3Ro
ID0gbGVuKGVuY29kZWRfbXNnKQorICAgICAgIyBDb25zdHJ1Y3QgYSBsZW5ndGggaGVhZGVyIGlu
IHJldmVyc2Ugb3JkZXIuCisgICAgICBsZW5faGVhZGVyID0gY2hyKGxlbmd0aCAlIDEyOCkKKyAg
ICAgIGxlbmd0aCAvPSAxMjgKKyAgICAgIHdoaWxlIGxlbmd0aDoKKyAgICAgICAgbGVuX2hlYWRl
ciArPSBjaHIoKGxlbmd0aCAlIDEyOCkgfCAweDgwKQorICAgICAgICBsZW5ndGggLz0gMTI4Cisg
ICAgICBzZWxmLl9zb2NrZXQuc2VuZChjaHIoc2VsZi5fc2VuZF9mcmFtZV90eXBlKSArIGxlbl9o
ZWFkZXJbOjotMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZF9tc2cpCisgICAg
ZWxzZToKKyAgICAgICNzZWxmLl9zb2NrZXQuc2VuZGFsbChjaHIoc2VsZi5fc2VuZF9mcmFtZV90
eXBlKSArIGVuY29kZWRfbXNnICsgJ1x4ZmYnKQorICAgICAgc2VsZi5fc29ja2V0LnNlbmQoY2hy
KHNlbGYuX3NlbmRfZnJhbWVfdHlwZSkgKyBlbmNvZGVkX21zZyArICdceGZmJykKKworICBkZWYg
SXNDb25uZWN0ZWQoc2VsZik6CisgICAgcmV0dXJuIHNlbGYuX3NvY2tldCBpcyBub3QgTm9uZQor
CisgIGRlZiBDbG9zZShzZWxmKToKKyAgICBpZiBzZWxmLl9yYXdfc29ja2V0OgorICAgICAgc2Vs
Zi5fc29ja2V0LnNodXRkb3duKCkKKyAgICAgIHNlbGYuX3NvY2tldCA9IHNlbGYuX3Jhd19zb2Nr
ZXQKKyAgICAgIHNlbGYuX3Jhd19zb2NrZXQgPSBOb25lCisgICAgaWYgc2VsZi5fc29ja2V0Ogor
ICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKKyAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKyAg
ICAgIHNlbGYuX0xvZ0luZm8oJ0Nsb3NlZCBzb2NrZXQuJykKKyAgICBlbHNlOgorICAgICAgc2Vs
Zi5fTG9nSW5mbygnQWxyZWFkeSBkaXNjb25uZWN0ZWQuJykKKworICBkZWYgX0NoZWNrU29ja2V0
KHNlbGYpOgorICAgIGlmIG5vdCBzZWxmLl9zb2NrZXQ6CisgICAgICByYWlzZSBXZWJTb2NrZXRF
cnJvcignU29ja2V0IG5vdCByZWFkeScpCisKKyAgZGVmIF9FeHBlY3Qoc2VsZiwgbXNnKToKKyAg
ICBsb2dnaW5nLmRlYnVnKCdFeHBlY3Q8JXI+JywgbXNnKQorICAgIHNlbGYuX0NoZWNrU29ja2V0
KCkKKworICAgIHJlc3VsdCA9IHNlbGYuX3NvY2tldC5yZWN2KGxlbihtc2cpKQorICAgIGlmIHJl
c3VsdCAhPSBtc2c6CisgICAgICByYWlzZSBXZWJTb2NrZXRIYW5kc2hha2VFcnJvcignZXhwZWN0
ZWQ6ICcgKyBtc2cgKyAnIHZzLiBhY3R1YWw6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQpCisKKyAgZGVmIF9SZWFkVW50aWwoc2VsZiwgdGVybSwgaW5jbHVk
ZV90ZXJtPUZhbHNlKToKKyAgICBzZWxmLl9DaGVja1NvY2tldCgpCisKKyAgICBtc2cgPSAnJwor
ICAgIHdoaWxlIFRydWU6CisgICAgICBjaCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpCisgICAgICBp
ZiBjaCA9PSB0ZXJtOgorICAgICAgICBicmVhaworICAgICAgbXNnICs9IGNoCisgICAgaWYgaW5j
bHVkZV90ZXJtOgorICAgICAgbXNnICs9IHRlcm0KKyAgICBsb2dnaW5nLmRlYnVnKCdSZWFkVW50
aWw8JXI+ID0+ICVyJywgdGVybSwgbXNnKQorICAgIHJldHVybiBtc2cKKworICBkZWYgX1JlYWRI
ZWFkZXIoc2VsZik6CisgICAgaGVhZGVyID0gW10KKyAgICB3aGlsZSBUcnVlOgorICAgICAgaCA9
IHNlbGYuX1JlYWRVbnRpbCgnXHInKQorICAgICAgc2VsZi5fRXhwZWN0KCdcbicpCisgICAgICBp
ZiBub3QgaDoKKyAgICAgICAgcmV0dXJuIGhlYWRlcgorICAgICAgaGVhZGVyLmFwcGVuZChoKQor
CisgIGRlZiBfU2VuZChzZWxmLCBtc2cpOgorICAgIGxvZ2dpbmcuZGVidWcoJ1NlbmQ8JXI+Jywg
bXNnKQorICAgIHNlbGYuX0NoZWNrU29ja2V0KCkKKyAgICAjIHNlbGYuX3NvY2tldC5zZW5kYWxs
KG1zZykKKyAgICBzZWxmLl9zb2NrZXQuc2VuZChtc2cpCisKKyAgZGVmIF9SZWN2TGVuZ3RoKHNl
bGYpOgorICAgIGxlbmd0aCA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgYiA9IE5vbmUKKyAg
ICAgIHRyeToKKyAgICAgICAgYiA9IHNlbGYuX3NvY2tldC5yZWN2KDEpCisgICAgICBleGNlcHQg
c29ja2V0LnRpbWVvdXQ6CisgICAgICAgIGlmIG5vdCBzZWxmLklzQ29ubmVjdGVkKCk6CisgICAg
ICAgICAgc2VsZi5fTG9nRXJyb3IoJ3NvY2tldCBkaXNjb25uZWN0IHdoaWxlIHJlY3YgbGVuZ3Ro
JykKKyAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBjb250aW51ZQorICAgICAgYl92ID0g
b3JkKGIpICYgMHg3ZgorICAgICAgbGVuZ3RoID0gbGVuZ3RoICogMTI3ICsgYl92CisgICAgICBp
ZiAob3JkKGIpICYgMHg4MCkgPT0gMHg4MDoKKyAgICAgICAgY29udGludWUKKyAgICAgIHJldHVy
biBsZW5ndGgKKworICBkZWYgX1JlYWRCeXRlcyhzZWxmLCBsZW5ndGgpOgorICAgIHNlbGYuX0No
ZWNrU29ja2V0KCkKKyAgICBtc2cgPSAnJworICAgIHdoaWxlIGxlbmd0aCA+IDA6CisgICAgICBk
YXRhID0gTm9uZQorICAgICAgdHJ5OgorICAgICAgICBkYXRhID0gc2VsZi5fc29ja2V0LnJlY3Yo
bGVuZ3RoKQorICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBpZiBub3Qgc2Vs
Zi5Jc0Nvbm5lY3RlZCgpOgorICAgICAgICAgIHNlbGYuX0xvZ0Vycm9yKCdzb2NrZXQgZGlzY29u
bmVjdCB3aGlsZSByZWFkICVkIGJ5dGVzJyAlIGxlbmd0aCkKKyAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICBjb250aW51ZQorICAgICAgbXNnICs9IGRhdGEKKyAgICAgIGxlbmd0aCAtPSBs
ZW4oZGF0YSkKKyAgICByZXR1cm4gbXNnCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvY29uZi93ZWJzb2NrZXRfY2xpZW50LnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYv
d2Vic29ja2V0X2NsaWVudC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4w
MGE5MDdjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vi
c29ja2V0X2NsaWVudC5weQpAQCAtMCwwICsxLDMyMiBAQAorIyEvdXNyL2Jpbi9weXRob24yLjQK
KyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlNpbXBsZSBXZWIgU29ja2V0IGNsaWVudCBpbXBs
ZW1lbnRhdGlvbi4KKyIiIgorCitpbXBvcnQgbG9nZ2luZworZnJvbSBvcHRwYXJzZSBpbXBvcnQg
T3B0aW9uUGFyc2VyCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAoraW1wb3J0
IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHVybGxpYgoraW1wb3J0IHdlYnNvY2tldAor
aW1wb3J0IHdlYnNvY2tldF9sb2dnaW5nCit0cnk6CisgIGZyb20gbmNyeXB0IGltcG9ydCBzc2ws
IHg1MDksIHJzYQorZXhjZXB0OgorICBwYXNzCisKKworY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToK
KyAgIiIiQSBiYXNlIGV4Y2VwdGlvbiBmb3IgdGhpcyBtb2R1bGUuIiIiCisKKworY2xhc3MgV2Vi
U29ja2V0Q2xpZW50RXJyb3IoRXhjZXB0aW9uKToKKyAgIiIiQSBiYXNlIGV4Y2VwdGlvbiBmb3Ig
V2ViU29ja2V0Q2xpZW50IGNsYXNzLiIiIgorCisKK2NsYXNzIFdlYlNvY2tldENsaWVudCh0aHJl
YWRpbmcuVGhyZWFkLCB3ZWJzb2NrZXQuV2ViU29ja2V0KToKKyAgIiIiQmFzaWMgV2ViIFNvY2tl
dCBjbGllbnQgaW1wbGVtZW50YXRpb24uIiIiCisKKyAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAg
ICAgICAgICAgICBob3N0PU5vbmUsCisgICAgICAgICAgICAgICBwb3J0PU5vbmUsCisgICAgICAg
ICAgICAgICByZXNvdXJjZT1Ob25lLAorICAgICAgICAgICAgICAgb3JpZ2luPU5vbmUsCisgICAg
ICAgICAgICAgICBwcm90b2NvbD1Ob25lLAorICAgICAgICAgICAgICAgcHJveHk9Tm9uZSwKKyAg
ICAgICAgICAgICAgIHNzbF9jdHg9Tm9uZSwKKyAgICAgICAgICAgICAgIHNlbmRfZnJhbWVfdHlw
ZT0weDAwKToKKyAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgd2Vic29j
a2V0LldlYlNvY2tldC5fX2luaXRfXyhzZWxmKQorCisgICAgaWYgaG9zdCBpcyBOb25lOgorICAg
ICAgcmFpc2UgV2ViU29ja2V0Q2xpZW50RXJyb3IoJ2hvc3Qgbm90IHNldCcpCisgICAgaWYgcG9y
dCBpcyBOb25lOgorICAgICAgcmFpc2UgV2ViU29ja2V0Q2xpZW50RXJyb3IoJ3BvcnQgbm90IHNl
dC4nKQorICAgIGlmIHJlc291cmNlIGlzIE5vbmU6CisgICAgICByYWlzZSBXZWJTb2NrZXRDbGll
bnRFcnJvcigncmVzb3VyY2Ugbm90IHNldC4nKQorICAgIGlmIG9yaWdpbiBpcyBOb25lOgorICAg
ICAgcmFpc2UgV2ViU29ja2V0Q2xpZW50RXJyb3IoJ29yaWdpbiBub3Qgc2V0LicpCisKKyAgICBz
ZWxmLmhvc3QgPSBob3N0CisgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgIHNlbGYucmVzb3VyY2Ug
PSByZXNvdXJjZQorICAgIHNlbGYub3JpZ2luID0gb3JpZ2luCisgICAgc2VsZi5wcm90b2NvbCA9
IHByb3RvY29sCisgICAgc2VsZi5wcm94aWVzID0gdXJsbGliLmdldHByb3hpZXMoKQorICAgIHNl
bGYuc3NsX2N0eCA9IHNzbF9jdHgKKyAgICBzZWxmLmV4dHJhX2hlYWRlcnMgPSBbXQorICAgIHNl
bGYuX2Nsb3NlX3JlcXVlc3RlZCA9IEZhbHNlCisgICAgc2VsZi5fc29ja2V0ID0gTm9uZQorICAg
IHNlbGYuX3Jhd19zb2NrZXQgPSBOb25lCisgICAgc2VsZi5fc2VuZF9mcmFtZV90eXBlID0gc2Vu
ZF9mcmFtZV90eXBlCisKKyAgICBzZWxmLnJlYWR5X3N0YXRlID0gd2Vic29ja2V0LldFQlNPQ0tF
VF9SRUFEWV9TVEFURV9DT05ORUNUSU5HCisKKyAgICBzZWxmLl9fT3BlblNvY2tldCgpCisgICAg
aWYgc2VsZi5zc2xfY3R4OgorICAgICAgc2VsZi5fX1RMU0hhbmRzaGFrZSgpCisgICAgc2VsZi5f
X0RvSGFuZHNoYWtlKCkKKyAgICBzZWxmLnN0YXJ0KCkKKworICBAcHJvcGVydHkKKyAgZGVmIGxv
Y2F0aW9uKHNlbGYpOgorICAgIGhvc3Rwb3J0ID0gc2VsZi5ob3N0CisgICAgaWYgc2VsZi5wb3J0
ICE9IHdlYnNvY2tldC5XRUJTT0NLRVRfUE9SVDoKKyAgICAgIGhvc3Rwb3J0ICs9ICc6JWQnICUg
c2VsZi5wb3J0CisgICAgcmV0dXJuICd3czovLyVzJXMnICUgKGhvc3Rwb3J0LCBzZWxmLnJlc291
cmNlKQorCisgIGRlZiBfX09wZW5Tb2NrZXQoc2VsZik6CisgICAgc2VsZi5fc29ja2V0ID0gc29j
a2V0LnNvY2tldCgpCisgICAgcHJveHkgPSBzZWxmLl9fR2V0UHJveHkoKQorICAgIGlmIHByb3h5
IGlzIE5vbmU6CisgICAgICBzZWxmLl9zb2NrZXQuY29ubmVjdCgoc2VsZi5ob3N0LCBzZWxmLnBv
cnQpKQorICAgICAgcmV0dXJuCisgICAgc2VsZi5fc29ja2V0LmNvbm5lY3QocHJveHkpCisgICAg
c2VsZi5fU2VuZCgnQ09OTkVDVCAlczolZCBIVFRQLzEuMVxyXG4nICUgKHNlbGYuaG9zdCwgc2Vs
Zi5wb3J0KSk7CisgICAgc2VsZi5fU2VuZCgnSG9zdDogJXNcclxuJyAlIHNlbGYuaG9zdCkKKyAg
ICAjIFRPRE8odWthaSk6IFByb3h5LWF1dGhvcml6YXRpb24KKyAgICBzZWxmLl9TZW5kKCdcclxu
JykKKyAgICBwcm94eV9oZWFkZXJzID0gc2VsZi5fUmVhZEhlYWRlcigpCisgICAgbG9nZ2luZy5p
bmZvKCdwcm94eSBoZWFkZXJzOiAlcicsIHByb3h5X2hlYWRlcnMpCisgICAgbSA9IHJlLm1hdGNo
KCdIVFRQLzEuWzAxXSAyMDAgLionLCBwcm94eV9oZWFkZXJzWzBdKQorICAgIGlmIG5vdCBtOgor
ICAgICAgcmFpc2Ugd2Vic29ja2V0LldlYlNvY2tldEhhbmRzaGFrZUVycm9yKCdwcm94eSBjb25u
ZWN0aW9uIGZhaWxlZCcpCisKKyAgZGVmIF9fVExTSGFuZHNoYWtlKHNlbGYpOgorICAgIGxvZ2dp
bmcuaW5mbygnVExTIGhhbmRzaGFrZScpCisgICAgaWYgbm90IHNlbGYuc3NsX2N0eDoKKyAgICAg
IHJhaXNlIHdlYnNvY2tldC5XZWJTb2NrZXRIYW5kc2hha2VFcnJvcignbm8gc3NsX2N0eCcpCisg
ICAgc2VsZi5fcmF3X3NvY2tldCA9IHNlbGYuX3NvY2tldAorICAgIHNlbGYuX3NvY2tldCA9IHNz
bC5TU0xDb25uZWN0aW9uKHNlbGYuc3NsX2N0eCwgc2VsZi5fcmF3X3NvY2tldCkKKyAgICBzZWxm
Ll9zb2NrZXQuY29ubmVjdCgpCisKKyAgZGVmIF9fRG9IYW5kc2hha2Uoc2VsZik6CisgICAgbG9n
Z2luZy5pbmZvKCdTdGFydCBXZWIgU29ja2V0IGhhbmRzaGFraW5nLi4uIChhY3RpdmUpICcKKyAg
ICAgICAgICAgICAgICAgJyhyZXNvdXJjZT0iJXMiLCBob3N0PSIlcyIsIG9yaWdpbj0iJXMiKScs
CisgICAgICAgICAgICAgICAgIHNlbGYucmVzb3VyY2UsCisgICAgICAgICAgICAgICAgIHNlbGYu
aG9zdCwKKyAgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW4pCisKKyAgICBzZWxmLl9TZW5kKCdH
RVQgJXMgSFRUUC8xLjFcclxuJyAlIHNlbGYucmVzb3VyY2UuZW5jb2RlKCd1dGYtOCcpKQorICAg
IHNlbGYuX1NlbmQoJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nKQorICAgIHNlbGYuX1NlbmQoJ0Nv
bm5lY3Rpb246IFVwZ3JhZGVcclxuJykKKyAgICBzZWxmLl9TZW5kKCdIb3N0OiAlc1xyXG4nICUg
c2VsZi5ob3N0LmVuY29kZSgndXRmLTgnKSkKKyAgICBzZWxmLl9TZW5kKCdPcmlnaW46ICVzXHJc
bicgJSBzZWxmLm9yaWdpbi5lbmNvZGUoJ3V0Zi04JykpCisgICAgaWYgc2VsZi5wcm90b2NvbDoK
KyAgICAgIHNlbGYuX1NlbmQoJ1dlYlNvY2tldC1Qcm90b2NvbDogJXNcclxuJyAlIHNlbGYucHJv
dG9jb2wuZW5jb2RlKCd1dGYtOCcpKQorICAgICMgVE9ETyh1a2FpKTogYXV0aG9yaXphdGlvbi9j
b29raWUgaGVhZGVyIGlmIGFueQorICAgIHNlbGYuX1NlbmQoJ1xyXG4nKQorCisgICAgc2VsZi5f
RXhwZWN0KCdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJykK
KyAgICBzZWxmLl9FeHBlY3QoJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nKQorICAgIHNlbGYuX0V4
cGVjdCgnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nKQorICAgIHNlbGYuZXh0cmFfaGVhZGVycyA9
IHNlbGYuX1JlYWRIZWFkZXIoKQorICAgIHdlYnNvY2tldF9vcmlnaW4gPSBzZWxmLl9HZXRIZWFk
ZXIoJ1dlYlNvY2tldC1PcmlnaW4nKQorICAgIGlmIG5vdCB3ZWJzb2NrZXRfb3JpZ2luOgorICAg
ICAgcmFpc2Ugd2Vic29ja2V0LldlYlNvY2tldEhhbmRzaGFrZUVycm9yKCdubyB3ZWJzb2NrZXQt
b3JpZ2luJykKKyAgICBpZiBzZWxmLm9yaWdpbiAhPSB3ZWJzb2NrZXRfb3JpZ2luOgorICAgICAg
cmFpc2Ugd2Vic29ja2V0LldlYlNvY2tldEhhbmRzaGFrZUVycm9yKCdvcmlnaW4gbWlzbWF0Y2g6
ICVyIHZzICVyJyAlICgKKyAgICAgICAgICBzZWxmLm9yaWdpbiwgd2Vic29ja2V0X29yaWdpbikp
CisgICAgd2Vic29ja2V0X2xvY2F0aW9uID0gc2VsZi5fR2V0SGVhZGVyKCdXZWJTb2NrZXQtTG9j
YXRpb24nKQorICAgIGlmIG5vdCB3ZWJzb2NrZXRfbG9jYXRpb246CisgICAgICByYWlzZSB3ZWJz
b2NrZXQuV2ViU29ja2V0SGFuZHNoYWtlRXJyb3IoJ25vIHdlYnNvY2tldC1sb2NhdGlvbicpCisg
ICAgaWYgc2VsZi5sb2NhdGlvbiAhPSB3ZWJzb2NrZXRfbG9jYXRpb246CisgICAgICByYWlzZSB3
ZWJzb2NrZXQuV2ViU29ja2V0SGFuZHNoYWtlRXJyb3IoJ2xvY2F0aW9uIG1pc21hdGNoOiAlciB2
cyAlcicgJSAoCisgICAgICAgICAgc2VsZi5sb2NhdGlvbiwgd2Vic29ja2V0X2xvY2F0aW9uKSkK
KyAgICBpZiBzZWxmLnByb3RvY29sOgorICAgICAgd2Vic29ja2V0X3Byb3RvY29sID0gc2VsZi5f
R2V0SGVhZGVyKCdXZWJTb2NrZXQtUHJvdG9jb2wnKQorICAgICAgaWYgbm90IHdlYnNvY2tldF9w
cm90b2NvbDoKKyAgICAgICAgcmFpc2Ugd2Vic29ja2V0LldlYlNvY2tldEhhbmRzaGFrZUVycm9y
KCdubyB3ZWJzb2NrZXQtcHJvdG9jb2wnKQorICAgICAgaWYgc2VsZi5wcm90b2NvbCAhPSB3ZWJz
b2NrZXRfcHJvdG9jb2w6CisgICAgICAgIHJhaXNlIHdlYnNvY2tldC5XZWJTb2NrZXRIYW5kc2hh
a2VFcnJvcigKKyAgICAgICAgICAgICdwcm90b2NvbCBtaXNtYXRjaDogJXIgdnMgJXInICUgKAor
ICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsIHdlYnNvY2tldF9wcm90b2NvbCkpCisgICAg
IyBUT0RPKHVrYWkpOiBoZWFkZXIKKyAgICAjICBzZXQtY29va2llCisgICAgIyAgc2V0LWNvb2tp
ZTIKKworICAgIGxvZ2dpbmcuaW5mbygnV2ViIFNvY2tldCBDb25uZWN0aW9uIGVzdGFibGlzaGVk
IChleHRyYV9oZWFkZXJzPSVyKS4nLAorICAgICAgICAgICAgICAgICBzZWxmLmV4dHJhX2hlYWRl
cnMpCisKKyAgICBzZWxmLnJlYWR5X3N0YXRlID0gd2Vic29ja2V0LldFQlNPQ0tFVF9SRUFEWV9T
VEFURV9PUEVOCisKKyAgICBzZWxmLk9uT3BlbigpCisKKyAgZGVmIHJ1bihzZWxmKToKKyAgICAi
IiJUaHJlYWQucnVuIGltcGxlbWVudGF0aW9uLiIiIgorICAgIHRyeToKKyAgICAgIGlmIHNlbGYu
X3Jhd19zb2NrZXQ6CisgICAgICAgIHNlbGYuX3Jhd19zb2NrZXQuc2V0dGltZW91dCgxLjApCisg
ICAgICBlbHNlOgorICAgICAgICBzZWxmLl9zb2NrZXQuc2V0dGltZW91dCgxLjApCisgICAgICB3
aGlsZSBzZWxmLklzQ29ubmVjdGVkKCkgYW5kIG5vdCBzZWxmLl9jbG9zZV9yZXF1ZXN0ZWQ6Cisg
ICAgICAgIG1zZyA9IHNlbGYuUmVjdk1zZygpCisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgVE9ETyh1a2FpKTogdXNlIHF1ZXVlPworICAgICAg
ICBzZWxmLk9uTWVzc2FnZShtc2cpCisgICAgZmluYWxseToKKyAgICAgIHNlbGYuX0Nsb3NlSW50
ZXJuYWwoKQorCisgIGRlZiBTZW5kKHNlbGYsIG1zZyk6CisgICAgbG9nZ2luZy5pbmZvKCdNZXRo
b2Qgc2VuZCglciknICUgbXNnKQorCisgICAgc2VsZi5TZW5kTXNnKG1zZykKKworICBkZWYgQ2xv
c2Uoc2VsZik6CisgICAgc2VsZi5fY2xvc2VfcmVxdWVzdGVkID0gVHJ1ZQorCisgIGRlZiBPbk9w
ZW4oc2VsZik6CisgICAgbG9nZ2luZy5pbmZvKCdFdmVudCBoYW5kbGVyIG9ub3BlbigpJykKKwor
ICBkZWYgT25NZXNzYWdlKHNlbGYsIG1zZyk6CisgICAgbG9nZ2luZy5pbmZvKCdFdmVudCBoYW5k
bGVyIG9ubWVzc2FnZSglciknICUgbXNnKQorCisgIGRlZiBPbkNsb3NlKHNlbGYpOgorICAgIGxv
Z2dpbmcuaW5mbygnRXZlbnQgaGFuZGxlciBvbmNsb3NlKCknKQorCisgIGRlZiBfQ2xvc2VJbnRl
cm5hbChzZWxmKToKKyAgICBsb2dnaW5nLmluZm8oJ01ldGhvZCBfQ2xvc2VJbnRlcm5hbCgpJykK
KworICAgIGlmIHdlYnNvY2tldC5XZWJTb2NrZXQuSXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAj
IFdoZW4gYWxyZWFkeSBjbG9zZWQsIE9uQ2xvc2Ugd2lsbCBiZSBjYWxsZWQgYWdhaW4gb3Igbm90
PworICAgICAgd2Vic29ja2V0LldlYlNvY2tldC5DbG9zZShzZWxmKQorICAgICAgc2VsZi5yZWFk
eV9zdGF0ZSA9IHdlYnNvY2tldC5XRUJTT0NLRVRfUkVBRFlfU1RBVEVfQ0xPU0VECisgICAgICBz
ZWxmLk9uQ2xvc2UoKQorCisgIGRlZiBfR2V0SGVhZGVyKHNlbGYsIG5hbWUpOgorICAgIGZvciBo
ZWFkZXIgaW4gc2VsZi5leHRyYV9oZWFkZXJzOgorICAgICAgbSA9IHJlLm1hdGNoKCclczogKC4q
KScgJSBuYW1lLCBoZWFkZXIsIGZsYWdzPXJlLkkpCisgICAgICBpZiBtOgorICAgICAgICByZXR1
cm4gbS5ncm91cCgxKQorICAgIHJldHVybiBOb25lCisKKyAgZGVmIF9fR2V0UHJveHkoc2VsZik6
CisgICAgaWYgc2VsZi5wcm94aWVzIGlzIE5vbmU6CisgICAgICByZXR1cm4gTm9uZQorICAgIHBy
b3h5ID0gTm9uZQorICAgIGlmICdodHRwJyBpbiBzZWxmLnByb3hpZXM6CisgICAgICBwcm94eSA9
IHNlbGYucHJveGllc1snaHR0cCddCisgICAgaWYgJ3dzJyBpbiBzZWxmLnByb3hpZXM6CisgICAg
ICBwcm94eSA9IHNlbGYucHJveGllc1snd3MnXQorICAgIGlmIHByb3h5IGlzIE5vbmU6CisgICAg
ICByZXR1cm4gTm9uZQorICAgIHVybHR5cGUsIHByb3h5aG9zdCA9IHVybGxpYi5zcGxpdHR5cGUo
cHJveHkpCisgICAgaG9zdCwgcGF0aCA9IHVybGxpYi5zcGxpdGhvc3QocHJveHlob3N0KQorICAg
IGhvc3QsIHBvcnQgPSB1cmxsaWIuc3BsaXRwb3J0KGhvc3QpCisgICAgaWYgbm90IHBvcnQ6Cisg
ICAgICBwb3J0ID0gODAgICMgWFhYCisgICAgZWxzZToKKyAgICAgIHBvcnQgPSBpbnQocG9ydCkK
KyAgICByZXR1cm4gKGhvc3QsIHBvcnQpCisKKyAgIyBUT0RPKHR5b3NoaW5vKTogRG9lcyBXZWIg
U29ja2V0IHN1cHBvcnQgcmVvcGVuPworCisKK2RlZiBtYWluKCk6CisgIHBhcnNlciA9IE9wdGlv
blBhcnNlcigpCisgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNlcnZlcl9ob3N0JywgZGVz
dD0nc2VydmVyX2hvc3QnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICBoZWxw
PSdzZXJ2ZXIgaG9zdG5hbWUnKQorICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0Jywg
ZGVzdD0ncG9ydCcsIHR5cGU9J2ludCcsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9d2Vi
c29ja2V0LldFQlNPQ0tFVF9QT1JULAorICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXJ2ZXIg
cG9ydCcpCisgIHBhcnNlci5hZGRfb3B0aW9uKCctLXNlY3VyZScsIGRlc3Q9J3NlY3VyZScsCisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisg
ICAgICAgICAgICAgICAgICAgIGhlbHA9J3NlY3VyZSBjb25lY3Rpb24nKQorICBwYXJzZXIuYWRk
X29wdGlvbignLXInLCAnLS1yZXNvdXJjZScsIGRlc3Q9J3Jlc291cmNlJywgdHlwZT0nc3RyaW5n
JywKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nLycsCisgICAgICAgICAgICAgICAgICAg
IGhlbHA9J3Jlc291cmNlIG5hbWUnKQorICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vcmln
aW4nLCBkZXN0PSdvcmlnaW4nLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PSdodHRwOi8vbG9jYWxob3N0LycsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9J29y
aWdpbicpCisgIHBhcnNlci5hZGRfb3B0aW9uKCctUCcsICctLXByb3RvY29sJywgZGVzdD0ncHJv
dG9jb2wnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICBoZWxwPSd3ZWJzb2Nr
ZXQgcHJvdG9jb2wnKQorICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS1zZW5kX2ZyYW1lX3R5
cGUnLCBkZXN0PSdzZW5kX2ZyYW1lX3R5cGUnLAorICAgICAgICAgICAgICAgICAgICB0eXBlPSdp
bnQnLCBkZWZhdWx0PTB4MDAsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZyYW1lIHR5cGUn
KQorICBwYXJzZXIuYWRkX29wdGlvbignLWwnLCAnLS1saXZlbmVzc190ZXN0JywgZGVzdD0nbGl2
ZW5lc3NfdGVzdCcsCisgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
ZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9J3doZXRoZXIgdG8gcGVyZm9y
bSBsaXZlbmVzcyB0ZXN0LicpCisgIHdlYnNvY2tldF9sb2dnaW5nLkFkZExvZ2dpbmdPcHRpb25z
KHBhcnNlcikKKyAgKG9wdGlvbnMsIF8pID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgIHdlYnNv
Y2tldF9sb2dnaW5nLkNvbmZpZ3VyZUxvZ2dpbmcob3B0aW9ucykKKworICBpZiBvcHRpb25zLmxp
dmVuZXNzX3Rlc3Q6CisgICAgb3B0aW9ucy5yZXNvdXJjZSA9ICcvTGl2ZW5lc3NUZXN0JworCisg
IGlmIG9wdGlvbnMuc2VydmVyX2hvc3QgaXMgTm9uZToKKyAgICByYWlzZSBFcnJvcignUGxlYXNl
IHNldCAtLXNlcnZlcl9ob3N0IG9wdGlvbi4nKQorCisgIHNzbF9jdHggPSBOb25lCisgIGlmIG9w
dGlvbnMuc2VjdXJlOgorICAgICMgc3NsX2N0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5TU0xfTUVU
SE9EX1NTTHYyMykKKyAgICBzc2xfY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlNTTF9NRVRIT0Rf
VExTdjEpCisgICAgc3NsX2N0eC5zZXRWZXJpZnlNb2RlKHNzbC5TU0xfVkVSSUZZX01PREVfU0VM
Rl9TSUdORUQpCisKKyAgY2xpZW50ID0gV2ViU29ja2V0Q2xpZW50KGhvc3Q9b3B0aW9ucy5zZXJ2
ZXJfaG9zdCwgcG9ydD1vcHRpb25zLnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNvdXJjZT1vcHRpb25zLnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Jp
Z2luPW9wdGlvbnMub3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w9
b3B0aW9ucy5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jdHg9c3Ns
X2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfZnJhbWVfdHlwZT1vcHRpb25z
LnNlbmRfZnJhbWVfdHlwZSkKKyAgdHJ5OgorICAgIGlmIG5vdCBvcHRpb25zLmxpdmVuZXNzX3Rl
c3Q6CisgICAgICB3aGlsZSBjbGllbnQuSXNDb25uZWN0ZWQoKToKKyAgICAgICAgbGluZSA9IHN5
cy5zdGRpbi5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgIGJyZWFr
ICAjIEVPRgorICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJ1xuJykuZGVjb2RlKCd1dGYtOCcp
CisgICAgICAgIGNsaWVudC5TZW5kKGxpbmUpCisgIGZpbmFsbHk6CisgICAgY2xpZW50LkNsb3Nl
KCkKKyAgY2xpZW50LmpvaW4oKQorICBsb2dnaW5nLmluZm8oJ0ZpbmlzaC4nKQorICBzeXMuZXhp
dCgwKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIG1haW4oKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2hhbmRsZXIucHkgYi9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfaGFuZGxlci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNDM2ZTc3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2hhbmRsZXIucHkKQEAgLTAsMCArMSw1OCBA
QAorIyEvdXNyL2Jpbi9weXRob24yLjQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKworIiIiV2Vi
IFNvY2tldCBIYW5kbGVyLgorCitXZWIgU29ja2V0IFNlcnZlciBjYWxscyBXZWIgU29ja2V0IEhh
bmRsZXIgdG8gcHJvY2VzcyByZXF1ZXN0cyByZWNlaXZlZC4KKyIiIgorCisKK2NsYXNzIFdlYlNv
Y2tldEhhbmRsZXIob2JqZWN0KToKKyAgIiIiQWJzdHJhY3QgY2xhc3MgZm9yIFdlYlNvY2tldCBo
YW5kbGVyLiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCB3c2NoYW4pOgorICAgIHNlbGYud3Nj
aGFuID0gd3NjaGFuCisKKyAgQHByb3BlcnR5CisgIGRlZiBvcmlnaW4oc2VsZik6CisgICAgcmV0
dXJuIHNlbGYud3NjaGFuLm9yaWdpbgorCisgIEBwcm9wZXJ0eQorICBkZWYgbG9jYXRpb24oc2Vs
Zik6CisgICAgcmV0dXJuIHNlbGYud3NjaGFuLmxvY2F0aW9uCisKKyAgQHByb3BlcnR5CisgIGRl
ZiBwcm90b2NvbChzZWxmKToKKyAgICByZXR1cm4gc2VsZi53c2NoYW4ucHJvdG9jb2wKKworICBk
ZWYgUnVuKHNlbGYpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tl
dC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5LnB5IGIvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L2NvbmYvd2Vic29ja2V0X2hhbmRsZXJfcmVnaXN0cnkucHkKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMC4uMDdiZDZlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5LnB5CkBAIC0wLDAgKzEs
MTgzIEBACisjIS91c3IvYmluL3B5dGhvbjIuNAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworCisi
IiJSZWdpc3RyeSBvZiBXZWJTb2NrZXRIYW5kbGVyLgorCitUaGlzIGlzIGEgcmVnaXN0cnkgb2Yg
V2ViU29ja2V0SGFuZGxlciBkZWZpbml0aW9ucy4gRGVmaW5pdGlvbnMgY2FuIGJlIHBhc3NlZAor
YXMgc3RyaW5ncyBvciBhcyBmaWxlcyBuYW1lZCAuKl93c2gucHkuCisKK0EgZGVyaXZlZCBjbGFz
cyBvZiBXZWJTb2NrZXRIYW5kbGVyIG11c3QgYmUgZGVmaW5lZCBpbiBhIHN0cmluZyBvciBhIGZp
bGUuCitJZiBtb3JlIHRoYW4gb25lIGRlcml2ZWQgY2xhc3NlcyBhcmUgZGVmaW5lZCwgZm9sbG93
aW5nIHNlbGVjdGlvbiBydWxlIGlzCithcHBsaWVkOgorCisxLiBJZiBhIGhhbmRsZXIgaXMgYXNz
aWduZWQgdG8gV0VCU09DS0VUX0hBTkRMRVIgdmFyaWFibGUsIHVzZSBpdC4KKzIuIE90aGVyd2lz
ZSwgdXNlIHRoZSBtb3N0LWRlcml2ZWQgaGFuZGxlci4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBv
bmUKKyAgIG1vc3QtZGVyaXZlZCBoYW5kbGVycywgdXNlIHRoZSBvbmUgZm91bmQgZmlyc3QuCisK
KyAgIEZvciBleGFtcGxlLCBpZiBIYW5kbGVyQiBkZXJpdmVzIGZyb20gSGFuZGxlckEsIHdoaWNo
IGluIHR1cm4gZGVyaXZlcyBmcm9tCisgICBXZWJTb2NrZXRIYW5kbGVyLCB1c2UgSGFuZGxlckIu
CisKK1Jlc291cmNlIHBhdHRlcm4gd2hpY2ggYSBoYW5kbGVyIGlzIGFzc29jaWF0ZWQgd2l0aCBz
aG91bGQgYmUgZXhwbGljaXRseQorc3BlY2lmaWVkIGZvciBhIGhhbmRsZXIgZGVmaW5lZCBpbiBh
IHN0cmluZy4gRm9yIGEgaGFuZGxlciBpbiBhIGZpbGUsIHRoZSBwYXRoCitvZiB0aGUgZmlsZSBy
ZWxhdGl2ZSB0byB0aGUgaGFuZGxlciBiYXNlIGRpcmVjdG9yeSwgZXhjbHVkaW5nIF93c2gucHks
IGlzIHVzZWQKK2FzIHRoZSByZXNvdXJjZSBwYXR0ZXJuLgorCitSZXNvdXJjZSBwYXR0ZXJuIGNh
biBiZSBzcGVjaWZpZWQgaW4gYSBmaWxlIG9yIGEgc3RyaW5nIGJ5IGFzc2lnbmluZyB0aGF0IHRv
CitSRVNPVVJDRV9QQVRURVJOLiBJZiBzcGVjaWZpZWQsIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIG9u
ZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZQorZmlsZSBwYXRoLgorCitCeSByZXBlYXRpbmcgc291
cmNpbmcsIGRlZmluaXRpb25zIGluIG11bHRpcGxlIHNvdXJjZSBmaWxlcyBjYW4gYmUgdXNlZC4K
KworVHdvIGhhbmRsZXJzIG9mIHRoZSBzYW1lIG5hbWUgZGVmaW5lZCBpbiBkaWZmZXJlbnQgc291
cmNlIGZpbGVzIHdvbid0IGNvbmZsaWN0LgorVGhhdCBpcywgYm90aCBoYW5kbGVycyByZW1haW4g
ZWZmZWN0aXZlIChhcyBmYXIgYXMgdGhlIHJlc291cmNlIHBhdHRlcm4gZG9lc24ndAorY29uZmxp
Y3QpLiBJbiBjYXNlIG9mIHJlc291cmNlIHBhdHRlcm4gY29uZmxpY3QsIGhhbmRsZXJzIHJlZ2lz
dGVyZWQgZWFybGllciBhcmUKK2dpdmVuIGhpZ2hlciBwcmVjZWRlbmNlLgorCitFeGFtcGxlOgor
CitUbyByZWdpc3RlciBNeUhhbmRsZXIgZm9yIC9oZWxsby9lY2hvOgorCis8YmFzZV9kaXI+L2hl
bGxvL2VjaG9fd3NoLnB5CistLS0tLS0tLQorZnJvbSB3ZWJzb2NrZXRfaGFuZGxlciBpbXBvcnQg
V2ViU29ja2V0SGFuZGxlcgorCitjbGFzcyBNeUhhbmRsZXIoV2ViU29ja2V0SGFuZGxlcik6Cisg
IGRlZiBfX2luaXRfXyhzZWxmLCB3c2NoYW4pOgorICAgIFdlYlNvY2tldEhhbmRsZXIuX19pbml0
X18oc2VsZiwgd3NjaGFuKQorLS0tLS0tLS0KKworIiIiCisKKworaW1wb3J0IGluc3BlY3QKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitmcm9tIHdlYnNvY2tldF9oYW5k
bGVyIGltcG9ydCBXZWJTb2NrZXRIYW5kbGVyCisKK19TT1VSQ0VfUEFUSF9QQVRURVJOID0gcmUu
Y29tcGlsZShyJyg/aSlfd3NoXC5weSQnKQorCitfUkVTT1VSQ0VfUEFUVEVSTiA9ICdSRVNPVVJD
RV9QQVRURVJOJworCitfV0VCU09DS0VUX0hBTkRMRVIgPSAnV0VCU09DS0VUX0hBTkRMRVInCisK
KworZGVmIF9Db21wYXJlQ2xhc3MoY2xhc3NfYSwgY2xhc3NfYik6CisgICIiIkNvbXBhcmUgY2xh
c3Nlcy4KKworICBXZSBjb25zaWRlciBjbGFzcyBBIGlzIHNtYWxsZXIgdGhhbiBjbGFzcyBCIGlm
IEEgZGVyaXZlcyBmcm9tIEIsIGVpdGhlcgorICBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBXZSBj
b25zaWRlciBBIGVxdWFscyBCIGlmIHRoZXJlIGlzIG5vCisgIHN1cGVyY2xhc3Mvc3ViY2xhc3Mg
cmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4KKyAgIiIiCisgIGlmIGlzc3ViY2xhc3MoY2xh
c3NfYSwgY2xhc3NfYik6CisgICAgaWYgaXNzdWJjbGFzcyhjbGFzc19iLCBjbGFzc19hKToKKyAg
ICAgIHJldHVybiAwCisgICAgcmV0dXJuIC0xCisgIGlmIGlzc3ViY2xhc3MoY2xhc3NfYiwgY2xh
c3NfYSk6CisgICAgcmV0dXJuIDEKKyAgcmV0dXJuIDAKKworCitkZWYgX0dldFJlc291cmNlUGF0
aENvbnZlcnRlcihiYXNlX2RpcmVjdG9yeSk6CisgIGJhc2VfbGVuID0gbGVuKGJhc2VfZGlyZWN0
b3J5KQorICBleHRfbGVuID0gbGVuKCdfd3NoLnB5JykKKyAgZGVmIF9Db252ZXJ0VG9SZXNvdXJj
ZVBhdGgoZmlsZV9wYXRoKToKKyAgICByZXNvdXJjZV9wYXR0ZXJuID0gZmlsZV9wYXRoW2Jhc2Vf
bGVuOl0ucmVwbGFjZSgnXFwnLCAnLycpCisgICAgaWYgbm90IHJlc291cmNlX3BhdHRlcm4uc3Rh
cnRzd2l0aCgnLycpOgorICAgICAgcmVzb3VyY2VfcGF0dGVybiA9ICcvJyArIHJlc291cmNlX3Bh
dHRlcm4KKyAgICByZXR1cm4gcmVzb3VyY2VfcGF0dGVybls6LWV4dF9sZW5dCisgIHJldHVybiBf
Q29udmVydFRvUmVzb3VyY2VQYXRoCisKKworZGVmIF9Tb3VyY2VGaWxlTmFtZXMoZGlyZWN0b3J5
KToKKyAgIiIiWWllbGQgV2ViIFNvY2tldCBIYW5kbGVyIHNvdXJjZSBmaWxlIG5hbWVzIGluIHRo
ZSBnaXZlbiBkaXJlY3RvcnkuIiIiCisKKyAgZm9yIHJvb3QsIHVudXNlZF9kaXJzLCBmaWxlcyBp
biBvcy53YWxrKGRpcmVjdG9yeSk6CisgICAgZm9yIGJhc2UgaW4gZmlsZXM6CisgICAgICBwYXRo
ID0gb3MucGF0aC5qb2luKHJvb3QsIGJhc2UpCisgICAgICBpZiBfU09VUkNFX1BBVEhfUEFUVEVS
Ti5zZWFyY2gocGF0aCk6CisgICAgICAgIGxvZ2dpbmcuaW5mbygnV2ViU29ja2V0SGFuZGxlciBz
b3VyY2UgZmlsZTonICsgcGF0aCkKKyAgICAgICAgeWllbGQgcGF0aAorCisKK2NsYXNzIFdlYlNv
Y2tldEhhbmRsZXJSZWdpc3RyeShvYmplY3QpOgorICAiIiJXZWIgU29ja2V0IEhhbmRsZXIgcmVn
aXN0cnkuCisKKyAgU2VlIHRoZSBtb2R1bGUgZG9jdW1lbnQgZm9yIGRldGFpbHMuIiIiCisKKyAg
ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHNlbGYuX2VudHJpZXMgPSBbXQorCisgIGRlZiBfX2dl
dGl0ZW1fXyhzZWxmLCB1cmwpOgorICAgIGZvciBlbnRyeSBpbiBzZWxmLl9lbnRyaWVzOgorICAg
ICAgaWYgZW50cnlbMF0uc2VhcmNoKHVybCk6CisgICAgICAgIHJldHVybiBlbnRyeVsxXQorICAg
IHJldHVybiBOb25lCisKKyAgZGVmIFJlZ2lzdGVyKHNlbGYsIHVybF9wYXR0ZXJuX3N0cmluZywg
aGFuZGxlcik6CisgICAgIiIiUmVnaXN0ZXIgYSBoYW5kbGVyIGZvciBhIHBhdHRlcm4uIiIiCisK
KyAgICBzZWxmLl9lbnRyaWVzLmFwcGVuZCgocmUuY29tcGlsZSh1cmxfcGF0dGVybl9zdHJpbmcp
LCBoYW5kbGVyKSkKKworICBkZWYgU291cmNlKHNlbGYsIHNvdXJjZV9zdHIsIHJlc291cmNlX3Bh
dHRlcm4pOgorICAgICIiIlNvdXJjZSBhIGhhbmRsZXIgZGVmaW5pdGlvbiBzdHJpbmcuIiIiCisK
KyAgICBnbG9iYWxfZGljID0ge30KKyAgICBleGVjIHNvdXJjZV9zdHIgaW4gZ2xvYmFsX2RpYwor
ICAgIGlmIF9SRVNPVVJDRV9QQVRURVJOIGluIGdsb2JhbF9kaWM6CisgICAgICAjIFVzZSB0aGUg
cmVzb3VyY2UgcGF0dGVybiBpbiB0aGUgc291cmNlLCBpZiBzcGVjaWZpZWQuCisgICAgICByZXNv
dXJjZV9wYXR0ZXJuID0gZ2xvYmFsX2RpY1tfUkVTT1VSQ0VfUEFUVEVSTl0KKyAgICBoYW5kbGVy
cyA9IFtdCisgICAgZm9yIG5hbWUgaW4gZ2xvYmFsX2RpYzoKKyAgICAgIGhhbmRsZXIgPSBnbG9i
YWxfZGljW25hbWVdCisgICAgICBpZiBpbnNwZWN0LmlzY2xhc3MoaGFuZGxlcikgYW5kIGlzc3Vi
Y2xhc3MoaGFuZGxlciwgV2ViU29ja2V0SGFuZGxlcik6CisgICAgICAgIGhhbmRsZXJzLmFwcGVu
ZChoYW5kbGVyKQorICAgICAgICBpZiBuYW1lID09IF9XRUJTT0NLRVRfSEFORExFUjoKKyAgICAg
ICAgICAjIElmIGEgaGFuZGxlciBpcyBhc3NpZ25lZCB0byBXRUJTT0NLRVRfSEFORExFUiB2YXJp
YWJsZSwgdXNlIGl0LgorICAgICAgICAgIGhhbmRsZXJzID0gaGFuZGxlcnNbLTE6XQorICAgICAg
ICAgIGJyZWFrCisgICAgaWYgbm90IGhhbmRsZXJzOgorICAgICAgbG9nZ2luZy53YXJuaW5nKCdO
byBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yICVyLicgJSByZXNvdXJjZV9wYXR0ZXJuKQorICAgICAg
cmV0dXJuCisgICAgaGFuZGxlcnMuc29ydChfQ29tcGFyZUNsYXNzKQorICAgIGhhbmRsZXIgPSBo
YW5kbGVyc1swXQorICAgIHNlbGYuUmVnaXN0ZXIocmVzb3VyY2VfcGF0dGVybiwgaGFuZGxlcikK
KyAgICBsb2dnaW5nLmluZm8oJ1JlZ2lzdGVyZWQgaGFuZGxlciAlciBmb3IgJXIuJyAlIChoYW5k
bGVyLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc291cmNlX3BhdHRlcm4pKQorCisgIGRlZiBTb3VyY2VGaWxlc0luRGlyKHNl
bGYsIGRpcmVjdG9yeSk6CisgICAgIiIiU291cmNlIGFsbCB0aGUgaGFuZGxlciBzb3VyY2UgZmls
ZXMgaW4gdGhlIGRpcmVjdG9yeS4iIiIKKworICAgIHRvX3Jlc291cmNlX3BhdGggPSBfR2V0UmVz
b3VyY2VQYXRoQ29udmVydGVyKGRpcmVjdG9yeSkKKyAgICBmb3Igc291cmNlIGluIF9Tb3VyY2VG
aWxlTmFtZXMoZGlyZWN0b3J5KToKKyAgICAgIHNlbGYuU291cmNlKCcnLmpvaW4ob3Blbihzb3Vy
Y2UpKSwgdG9fcmVzb3VyY2VfcGF0aChzb3VyY2UpKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2hhbmRsZXJfcmVnaXN0cnlfdW5pdHRlc3QucHkgYi9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfaGFuZGxlcl9yZWdpc3RyeV91bml0
dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYzU3YzliCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2hhbmRs
ZXJfcmVnaXN0cnlfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxODcgQEAKKyMhL3Vzci9iaW4vcHl0
aG9uMi40CisjCisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3IgV2ViU29ja2V0SGFu
ZGxlclJlZ2lzdHJ5LiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYnNvY2tldF9o
YW5kbGVyIGltcG9ydCBXZWJTb2NrZXRIYW5kbGVyCitmcm9tIHdlYnNvY2tldF9oYW5kbGVyX3Jl
Z2lzdHJ5IGltcG9ydCBXZWJTb2NrZXRIYW5kbGVyUmVnaXN0cnkKK2Zyb20gd2Vic29ja2V0X2hh
bmRsZXJfcmVnaXN0cnkgaW1wb3J0IF9Db21wYXJlQ2xhc3MKK2Zyb20gd2Vic29ja2V0X2hhbmRs
ZXJfcmVnaXN0cnkgaW1wb3J0IF9HZXRSZXNvdXJjZVBhdGhDb252ZXJ0ZXIKKworCitfVEVTVF9T
T1VSQ0VfMSA9ICIiIgorZnJvbSB3ZWJzb2NrZXRfaGFuZGxlciBpbXBvcnQgV2ViU29ja2V0SGFu
ZGxlcgorCitjbGFzcyBNeUhhbmRsZXIxKFdlYlNvY2tldEhhbmRsZXIpOgorICBkZWYgX19pbml0
X18oc2VsZiwgd3NjaGFuKToKKyAgICBXZWJTb2NrZXRIYW5kbGVyLl9faW5pdF9fKHNlbGYsIHdz
Y2hhbikKKyIiIgorCitfVEVTVF9TT1VSQ0VfMiA9ICIiIgorZnJvbSB3ZWJzb2NrZXRfaGFuZGxl
ciBpbXBvcnQgV2ViU29ja2V0SGFuZGxlcgorCitjbGFzcyBNeUhhbmRsZXIyKFdlYlNvY2tldEhh
bmRsZXIpOgorICBkZWYgX19pbml0X18oc2VsZiwgd3NjaGFuKToKKyAgICBXZWJTb2NrZXRIYW5k
bGVyLl9faW5pdF9fKHNlbGYsIHdzY2hhbikKKworUkVTT1VSQ0VfUEFUVEVSTiA9IHInL3dlYmtp
dCcKKyIiIgorCitfVEVTVF9TT1VSQ0VfMyA9ICIiIgorZnJvbSB3ZWJzb2NrZXRfaGFuZGxlciBp
bXBvcnQgV2ViU29ja2V0SGFuZGxlcgorCitjbGFzcyBNeUhhbmRsZXIzMShXZWJTb2NrZXRIYW5k
bGVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6CisgICAgV2ViU29ja2V0SGFuZGxl
ci5fX2luaXRfXyhzZWxmLCB3c2NoYW4pCisKK2NsYXNzIE15SGFuZGxlcjMyKE15SGFuZGxlcjMx
KToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6CisgICAgV2ViU29ja2V0SGFuZGxlci5f
X2luaXRfXyhzZWxmLCB3c2NoYW4pCisKK2NsYXNzIE15SGFuZGxlcjMzKE15SGFuZGxlcjMyKToK
KyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6CisgICAgV2ViU29ja2V0SGFuZGxlci5fX2lu
aXRfXyhzZWxmLCB3c2NoYW4pCisKK2NsYXNzIFNvbWVIZWxwZXIob2JqZWN0KToKKyAgcGFzcwor
IiIiCisKK19URVNUX1NPVVJDRV80ID0gIiIiCitmcm9tIHdlYnNvY2tldF9oYW5kbGVyIGltcG9y
dCBXZWJTb2NrZXRIYW5kbGVyCisKK2NsYXNzIE15SGFuZGxlcjQxKFdlYlNvY2tldEhhbmRsZXIp
OgorICBkZWYgX19pbml0X18oc2VsZiwgd3NjaGFuKToKKyAgICBXZWJTb2NrZXRIYW5kbGVyLl9f
aW5pdF9fKHNlbGYsIHdzY2hhbikKKworY2xhc3MgTXlIYW5kbGVyNDIoTXlIYW5kbGVyNDEpOgor
ICBkZWYgX19pbml0X18oc2VsZiwgd3NjaGFuKToKKyAgICBXZWJTb2NrZXRIYW5kbGVyLl9faW5p
dF9fKHNlbGYsIHdzY2hhbikKKworY2xhc3MgTXlIYW5kbGVyNDMoTXlIYW5kbGVyNDIpOgorICBk
ZWYgX19pbml0X18oc2VsZiwgd3NjaGFuKToKKyAgICBXZWJTb2NrZXRIYW5kbGVyLl9faW5pdF9f
KHNlbGYsIHdzY2hhbikKKworY2xhc3MgU29tZUhlbHBlcihvYmplY3QpOgorICBwYXNzCisKK1dF
QlNPQ0tFVF9IQU5ETEVSID0gTXlIYW5kbGVyNDEKKyIiIgorCisKK2RlZiBfQ3JlYXRlRHVtbXlI
YW5kbGVyKCk6CisgIGNsYXNzIER1bW15SGFuZGxlcihXZWJTb2NrZXRIYW5kbGVyKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgd3NjaGFuKToKKyAgICAgIFdlYlNvY2tldEhhbmRsZXIuX19pbml0
X18oc2VsZiwgd3NjaGFuKQorICByZXR1cm4gRHVtbXlIYW5kbGVyCisKKworY2xhc3MgV2Vic29j
a2V0SGFuZGxlclJlZ2lzdHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgIGRlZiBzZXRVcChz
ZWxmKToKKyAgICBzZWxmLl9yZWdpc3RyeSA9IFdlYlNvY2tldEhhbmRsZXJSZWdpc3RyeSgpCisK
KyAgZGVmIHRlc3RDb21wYXJlQ2xhc3Moc2VsZik6CisgICAgY2xhc3MgQShvYmplY3QpOgorICAg
ICAgcGFzcworCisgICAgY2xhc3MgQihBKToKKyAgICAgIHBhc3MKKworICAgIGNsYXNzIEMxKEIp
OgorICAgICAgcGFzcworCisgICAgY2xhc3MgQzIoQik6CisgICAgICBwYXNzCisKKyAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIF9Db21wYXJlQ2xhc3MoQSwgQSkpCisgICAgc2VsZi5hc3NlcnRFcXVh
bCgwLCBfQ29tcGFyZUNsYXNzKEMxLCBDMikpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBfQ29t
cGFyZUNsYXNzKEEsIEIpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgX0NvbXBhcmVDbGFzcyhB
LCBDMSkpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgX0NvbXBhcmVDbGFzcyhCLCBBKSkKKyAg
ICBzZWxmLmFzc2VydEVxdWFsKC0xLCBfQ29tcGFyZUNsYXNzKEMxLCBBKSkKKworICBkZWYgdGVz
dEdldFJlc291cmNlUGF0aENvbnZlcnRlcihzZWxmKToKKyAgICBjb252ZXJ0ZXIxID0gX0dldFJl
c291cmNlUGF0aENvbnZlcnRlcignL3NvbWUvcGF0aCcpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgn
L2hhbmRsZXInLCBjb252ZXJ0ZXIxKCcvc29tZS9wYXRoL2hhbmRsZXJfd3NoLnB5JykpCisgICAg
c2VsZi5hc3NlcnRFcXVhbCgnL3N1Yi9oYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnRlcjEoJy9zb21lL3BhdGgvc3ViL2hhbmRsZXJfd3NoLnB5JykpCisKKyAgICBjb252ZXJ0
ZXIyID0gX0dldFJlc291cmNlUGF0aENvbnZlcnRlcignL3NvbWUvcGF0aC8nKQorICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJy9oYW5kbGVyJywgY29udmVydGVyMignL3NvbWUvcGF0aC9oYW5kbGVyX3dz
aC5weScpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9zdWIvaGFuZGxlcicsCisgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0ZXIyKCcvc29tZS9wYXRoL3N1Yi9oYW5kbGVyX3dzaC5weScpKQor
CisgIGRlZiB0ZXN0UmVnaXN0ZXJJbnZhbGlkUGF0dGVybihzZWxmKToKKyAgICBkZWYgcmVnaXN0
ZXJJbnZhbGlkUGF0dGVybigpOgorICAgICAgc2VsZi5fcmVnaXN0cnkuUmVnaXN0ZXIocicqJywg
X0NyZWF0ZUR1bW15SGFuZGxlcigpKQorICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwg
cmVnaXN0ZXJJbnZhbGlkUGF0dGVybikKKworICBkZWYgdGVzdEdldEl0ZW0oc2VsZik6CisgICAg
aGFuZGxlcl8xID0gX0NyZWF0ZUR1bW15SGFuZGxlcigpCisgICAgc2VsZi5fcmVnaXN0cnkuUmVn
aXN0ZXIocideL2FiYycsIGhhbmRsZXJfMSkKKyAgICBoYW5kbGVyXzIgPSBfQ3JlYXRlRHVtbXlI
YW5kbGVyKCkKKyAgICBzZWxmLl9yZWdpc3RyeS5SZWdpc3RlcihyJ2FiYycsIGhhbmRsZXJfMikK
KyAgICBoYW5kbGVyXzMgPSBfQ3JlYXRlRHVtbXlIYW5kbGVyKCkKKyAgICBzZWxmLl9yZWdpc3Ry
eS5SZWdpc3RlcihyJ1swLTldKycsIGhhbmRsZXJfMykKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwo
aGFuZGxlcl8xLCBzZWxmLl9yZWdpc3RyeVsnL2FiYyddKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwo
aGFuZGxlcl8yLCBzZWxmLl9yZWdpc3RyeVsneHl6L2FiYyddKQorICAgIHNlbGYuYXNzZXJ0RXF1
YWwoaGFuZGxlcl8zLCBzZWxmLl9yZWdpc3RyeVsnLzAnXSkKKyAgICBzZWxmLmFzc2VydEVxdWFs
KE5vbmUsIHNlbGYuX3JlZ2lzdHJ5WycvJ10pCisKKyAgZGVmIHRlc3RTb3VyY2Uoc2VsZik6Cisg
ICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLl9yZWdpc3RyeVsnL2V4YW1wbGUnXSkKKyAg
ICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuX3JlZ2lzdHJ5Wycvd2Via2l0J10pCisgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLl9yZWdpc3RyeVsnL211bHRpcGxlJ10pCisgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLl9yZWdpc3RyeVsnL2Fzc2lnbiddKQorCisgICAg
c2VsZi5fcmVnaXN0cnkuU291cmNlKF9URVNUX1NPVVJDRV8xLCAnL2V4YW1wbGUnKQorICAgIHNl
bGYuX3JlZ2lzdHJ5LlNvdXJjZShfVEVTVF9TT1VSQ0VfMiwgJy93aWxsL2JlL292ZXJyaWRkZW4n
KQorICAgIHNlbGYuX3JlZ2lzdHJ5LlNvdXJjZShfVEVTVF9TT1VSQ0VfMywgJy9tdWx0aXBsZScp
CisgICAgc2VsZi5fcmVnaXN0cnkuU291cmNlKF9URVNUX1NPVVJDRV80LCAnL2Fzc2lnbicpCisg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnTXlIYW5kbGVyMScsCisgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9yZWdpc3RyeVsnL2V4YW1wbGUnXS5fX25hbWVfXykKKyAgICAjIFRoZSByZXNvdXJjZSBw
YXRoIHNwZWNpZmllZCBieSBSRVNPVVJDRV9QQVRURVJOIGluIHRoZSBzb3VyY2Ugc2hvdWxkIGJl
CisgICAgIyB1c2VkLgorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ015SGFuZGxlcjInLAorICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fcmVnaXN0cnlbJy93ZWJraXQnXS5fX25hbWVfXykKKyAgICAj
IFRoZSBtb3N0LWRlcml2ZWQgaGFuZGxlciBpbiB0aGUgc291cmNlIHNob3VsZCBiZSB1c2VkLgor
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ015SGFuZGxlcjMzJywKKyAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3JlZ2lzdHJ5WycvbXVsdGlwbGUnXS5fX25hbWVfXykKKyAgICAjIFRoZSBoYW5kbGVy
IGFzc2lnbmVkIHRvIFdFQlNPQ0tFVF9IQU5ETEVSIHNob3VsZCBiZSB1c2VkLgorICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ015SGFuZGxlcjQxJywKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jl
Z2lzdHJ5WycvYXNzaWduJ10uX19uYW1lX18pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
Y29uZi93ZWJzb2NrZXRfbG9nZ2luZy5weSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dl
YnNvY2tldF9sb2dnaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBj
YTI2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi93ZWJz
b2NrZXRfbG9nZ2luZy5weQpAQCAtMCwwICsxLDY2IEBACisjIS91c3IvYmluL3B5dGhvbjIuNAor
IworIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworCisiIiJMb2dnaW5nIGNvbmZpZ3VyYXRpb24gZm9yIFdl
YiBTb2NrZXQuCisKK1RoaXMgbW9kdWxlIGhhbmRsZXMgbG9nZ2luZyBzZXR0aW5nIGZvciBXZWIg
U29ja2V0IFNlcnZlciBhbmQgQ2xpZW50LgorIiIiCisKKworaW1wb3J0IGxvZ2dpbmcKKworCitf
TE9HX0xFVkVMUyA9IHsKKyAgICAnZGVidWcnOiBsb2dnaW5nLkRFQlVHLAorICAgICdpbmZvJzog
bG9nZ2luZy5JTkZPLAorICAgICd3YXJuaW5nJzogbG9nZ2luZy5XQVJOSU5HLAorICAgICdlcnJv
cic6IGxvZ2dpbmcuRVJST1IsCisgICAgJ2NyaXRpY2FsJzogbG9nZ2luZy5DUklUSUNBTH0KKwor
CitkZWYgX0dldExvZ0xldmVsKG9wdGlvbnMpOgorICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAg
cmV0dXJuIGxvZ2dpbmcuREVCVUcKKyAgcmV0dXJuIF9MT0dfTEVWRUxTLmdldChvcHRpb25zLmxv
Z19sZXZlbCwgbG9nZ2luZy5JTkZPKQorCisKK2RlZiBBZGRMb2dnaW5nT3B0aW9ucyhwYXJzZXIp
OgorICBwYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zZScs
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScs
CisgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ZlcmJvc2UnKQorICBwYXJzZXIuYWRkX29wdGlv
bignLS1sb2dfbGV2ZWwnLCBkZXN0PSdsb2dfbGV2ZWwnLCB0eXBlPSdzdHInLAorICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0PSdpbmZvJywgaGVscD0nZGVidWcvaW5mby93YXJuaW5nL2Vycm9y
L2NyaXRpY2FsJykKKworCitkZWYgQ29uZmlndXJlTG9nZ2luZyhvcHRpb25zKToKKyAgbG9nZ2lu
Zy5iYXNpY0NvbmZpZyhsZXZlbD1fR2V0TG9nTGV2ZWwob3B0aW9ucyksCisgICAgICAgICAgICAg
ICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzICUobWVzc2FnZSlzJykK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9sb2dnaW5n
X3VuaXR0ZXN0LnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2xvZ2dp
bmdfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDkwM2E5
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tl
dF9sb2dnaW5nX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNjkgQEAKKyMhL3Vzci9iaW4vcHl0aG9u
Mi40CisjCisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3Igd2ViIHNvY2tldCBsb2dn
aW5nLiIiIgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHdl
YnNvY2tldF9sb2dnaW5nCisKKworY2xhc3MgV2Vic29ja2V0SGFuZGxlclJlZ2lzdHJ5VGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CisgIGRlZiB0ZXN0R2V0TG9nTGV2ZWwoc2VsZik6CisgICAgY2xh
c3MgTW9ja09wdGlvbnMob2JqZWN0KToKKyAgICAgIHBhc3MKKworICAgIGNhc2VzID0gWworICAg
ICAgICAjIGxvZ19sZXZlbCBvcHRpb24sIHZlcmJvc2Ugb3B0aW9uLCBleHBlY3RlZCBsb2cgbGV2
ZWwKKyAgICAgICAgKCcnLCBGYWxzZSwgbG9nZ2luZy5JTkZPKSwKKyAgICAgICAgKCdkZWJ1Zycs
IEZhbHNlLCBsb2dnaW5nLkRFQlVHKSwKKyAgICAgICAgKCdpbmZvJywgRmFsc2UsIGxvZ2dpbmcu
SU5GTyksCisgICAgICAgICgnd2FybmluZycsIEZhbHNlLCBsb2dnaW5nLldBUk5JTkcpLAorICAg
ICAgICAoJ2Vycm9yJywgRmFsc2UsIGxvZ2dpbmcuRVJST1IpLAorICAgICAgICAoJ2NyaXRpY2Fs
JywgRmFsc2UsIGxvZ2dpbmcuQ1JJVElDQUwpLAorICAgICAgICAoJycsIFRydWUsIGxvZ2dpbmcu
REVCVUcpLAorICAgICAgICAoJ2RlYnVnJywgVHJ1ZSwgbG9nZ2luZy5ERUJVRyksCisgICAgICAg
ICgnaW5mbycsIFRydWUsIGxvZ2dpbmcuREVCVUcpLAorICAgICAgICAoJ3dhcm5pbmcnLCBUcnVl
LCBsb2dnaW5nLkRFQlVHKSwKKyAgICAgICAgKCdlcnJvcicsIFRydWUsIGxvZ2dpbmcuREVCVUcp
LAorICAgICAgICAoJ2NyaXRpY2FsJywgVHJ1ZSwgbG9nZ2luZy5ERUJVRyksCisgICAgICAgIF0K
KyAgICBmb3IgY2FzZSBpbiBjYXNlczoKKyAgICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9ucygpCisg
ICAgICBvcHRpb25zLmxvZ19sZXZlbCA9IGNhc2VbMF0KKyAgICAgIG9wdGlvbnMudmVyYm9zZSA9
IGNhc2VbMV0KKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzZVsyXSwgd2Vic29ja2V0X2xvZ2dp
bmcuX0dldExvZ0xldmVsKG9wdGlvbnMpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CisgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2Nv
bmYvd2Vic29ja2V0X3NlcnZlci5weSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNv
Y2tldF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWE2MzU5
NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tl
dF9zZXJ2ZXIucHkKQEAgLTAsMCArMSwyOTMgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMi40CisjCisj
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCisiIiJTaW1wbGUgV2ViIFNvY2tldCBzZXJ2ZXIgaW1wbGVtZW50
YXRpb24uCisiIiIKKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0
aW9uUGFyc2VyCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aHJlYWRpbmcKK2lt
cG9ydCB0aW1lCitpbXBvcnQgd2Vic29ja2V0Citmcm9tIHdlYnNvY2tldF9oYW5kbGVyIGltcG9y
dCBXZWJTb2NrZXRIYW5kbGVyCitmcm9tIHdlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5IGltcG9y
dCBXZWJTb2NrZXRIYW5kbGVyUmVnaXN0cnkKK2ltcG9ydCB3ZWJzb2NrZXRfbG9nZ2luZworCit0
cnk6CisgIGZyb20gbmNyeXB0IGltcG9ydCB4NTA5LCByc2EsIGRoLCBzc2wsIGRpZ2VzdAorZXhj
ZXB0OgorICBwYXNzCisKKworY2xhc3MgU2VydmVyQ2VydEluZm8ob2JqZWN0KToKKyAgZGVmIF9f
aW5pdF9fKHNlbGYpOgorICAgIHNlbGYucmsgPSBOb25lCisgICAgc2VsZi5jZXJ0ID0gTm9uZQor
ICAgIHNlbGYuZGhQYXJhbXMgPSBOb25lCisgICAgc2VsZi5jdHggPSBOb25lCisKKyAgZGVmIElu
aXQoc2VsZiwgY29tbW9uX25hbWUpOgorICAgIHNlbGYuR2VuZXJhdGVSU0FLZXkoKQorICAgIHNl
bGYuQ3JlYXRlQ2VydChjb21tb25fbmFtZSkKKyAgICBzZWxmLkdlbmVyYXRlREhQYXJhbXMoKQor
ICAgIHNlbGYuSW5pdEN0eCgpCisKKyAgZGVmIEdlbmVyYXRlUlNBS2V5KHNlbGYpOgorICAgIGxv
Z2dpbmcuaW5mbygnZ2VuZXJhdGluZyBSU0Ega2V5IC4uLicpCisgICAgc2VsZi5yayA9IHJzYS5S
U0FLZXkoKQorICAgIHNlbGYucmsuZ2VuZXJhdGUoKQorCisgIGRlZiBDcmVhdGVDZXJ0KHNlbGYs
IGNvbW1vbl9uYW1lKToKKyAgICBsb2dnaW5nLmluZm8oJ2J1aWxkaW5nIGNlcnRpZmljYXRlJykK
KyAgICBzZWxmLmNlcnQgPSB4NTA5Llg1MDlDZXJ0aWZpY2F0ZSgpCisgICAgeG4gPSB4NTA5Llg1
MDlOYW1lKCkKKyAgICB4bi5hZGRFbnRyeSgnY29tbW9uTmFtZScsIGNvbW1vbl9uYW1lKQorICAg
IHNlbGYuY2VydC5zZXRWZXJzaW9uKDMpCisgICAgc2VsZi5jZXJ0LnNldFNlcmlhbE51bWJlcigx
KQorICAgIHNlbGYuY2VydC5zZXRTdWJqZWN0KHhuKQorICAgIHNlbGYuY2VydC5zZXRJc3N1ZXIo
eG4pCisgICAgc2VsZi5jZXJ0LnNldFB1YmxpY0tleShzZWxmLnJrKQorICAgIHNlbGYuY2VydC5z
ZXROb3RCZWZvcmUoMCkKKyAgICBzZWxmLmNlcnQuc2V0Tm90QWZ0ZXIoaW50KHRpbWUudGltZSgp
KSArIDM2NSoyNCo2MCo2MCkKKyAgICBzZWxmLmNlcnQuc2lnbihzZWxmLnJrLCBkaWdlc3QuRGln
ZXN0VHlwZSgnc2hhMScpKQorCisgIGRlZiBHZW5lcmF0ZURIUGFyYW1zKHNlbGYpOgorICAgIGxv
Z2dpbmcuaW5mbygnZ2VuZXJhdGluZyBkaCBwYXJhbWV0ZXJzLi4uJykKKyAgICBzZWxmLmRoUGFy
YW1zID0gZGguREgoKQorICAgIHNlbGYuZGhQYXJhbXMuZ2VuZXJhdGVQYXJhbWV0ZXJzKDUxMiwg
MikKKworICBkZWYgSW5pdEN0eChzZWxmKToKKyAgICBsb2dnaW5nLmluZm8oJ3NldHRpbmcgY2Vy
dGlmaWNhdGUnKQorICAgIHNlbGYuY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlNTTF9NRVRIT0Rf
U1NMdjIzKQorICAgIHNlbGYuY3R4LnNldENlcnRpZmljYXRlKHNlbGYuY2VydCkKKyAgICBzZWxm
LmN0eC5zZXRQcml2YXRlS2V5KHNlbGYucmspCisgICAgc2VsZi5jdHguZW5hYmxlREgoc2VsZi5k
aFBhcmFtcykKKworCitjbGFzcyBXZWJTb2NrZXRDaGFubmVsKHRocmVhZGluZy5UaHJlYWQsIHdl
YnNvY2tldC5XZWJTb2NrZXQpOgorICAiIiJUaGlzIGNsYXNzIGhhbmRsZXMgZWFjaCBXZWIgU29j
a2V0IGNsaWVudC4iIiIKKworICBkZWYgX19pbml0X18oc2VsZiwgc29jaywgYWRkciwgaGFuZGxl
cl9yZWdpc3RyeSk6CisgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgIHdl
YnNvY2tldC5XZWJTb2NrZXQuX19pbml0X18oc2VsZikKKworICAgIHNlbGYuX3NvY2tldCA9IHNv
Y2sKKworICAgIHNlbGYuYWRkciA9IGFkZHIKKyAgICBzZWxmLnJlc291cmNlX25hbWUgPSBOb25l
CisgICAgc2VsZi5ob3N0ID0gTm9uZQorICAgIHNlbGYub3JpZ2luID0gTm9uZQorICAgIHNlbGYu
cHJvdG9jb2wgPSBOb25lCisgICAgc2VsZi5leHRyYV9oZWFkZXJzID0gW10KKyAgICBzZWxmLmhh
bmRsZXJfcmVnaXN0cnkgPSBoYW5kbGVyX3JlZ2lzdHJ5CisgICAgc2VsZi5mYWtlX3Byb3h5ID0g
RmFsc2UKKyAgICBzZWxmLnNlcnZlcl9jZXJ0X2luZm8gPSBOb25lCisgICAgc2VsZi5wcm94eV9o
ZWFkZXJzID0gW10KKworICBkZWYgR2V0U29ja05hbWUoc2VsZik6CisgICAgaWYgc2VsZi5fcmF3
X3NvY2tldDoKKyAgICAgIHJldHVybiBzZWxmLl9yYXdfc29ja2V0LmdldHNvY2tuYW1lKCkKKyAg
ICByZXR1cm4gc2VsZi5fc29ja2V0LmdldHNvY2tuYW1lKCkKKworICBAcHJvcGVydHkKKyAgZGVm
IGxvY2F0aW9uKHNlbGYpOgorICAgICMgVE9ETyh1a2FpKTogd3NzIHN1cHBvcnQKKyAgICBfLCBw
b3J0ID0gc2VsZi5HZXRTb2NrTmFtZSgpCisgICAgaG9zdHBvcnQgPSBzZWxmLmhvc3QKKyAgICBp
ZiBwb3J0ICE9IHdlYnNvY2tldC5XRUJTT0NLRVRfUE9SVDoKKyAgICAgIGhvc3Rwb3J0ICs9ICc6
JWQnICUgcG9ydAorICAgIHJldHVybiAnd3M6Ly8lcyVzJyAlIChob3N0cG9ydCwgc2VsZi5yZXNv
dXJjZV9uYW1lKQorCisgIGRlZiBydW4oc2VsZik6CisgICAgdHJ5OgorICAgICAgaGFuZGxlciA9
IHNlbGYuX19Eb0hhbmRzaGFrZSgpCisgICAgICBoYW5kbGVyLlJ1bigpCisgICAgZmluYWxseToK
KyAgICAgIHNlbGYuQ2xvc2UoKQorCisgIGRlZiBfX0RvSGFuZHNoYWtlKHNlbGYpOgorICAgIGxv
Z2dpbmcuaW5mbygnU3RhcnQgV2ViIFNvY2tldCBoYW5kc2hha2luZy4uLiAocGFzc2l2ZSknKQor
ICAgIGlmIHNlbGYuZmFrZV9wcm94eToKKyAgICAgIHNlbGYucHJveHlfaGVhZGVycyA9IHNlbGYu
X1JlYWRIZWFkZXIoKQorICAgICAgbSA9IHJlLm1hdGNoKCdDT05ORUNUIChcXHcrKTooXFxkKykg
SFRUUC8xLjEnLCBzZWxmLnByb3h5X2hlYWRlcnNbMF0pCisgICAgICBpZiBtIGlzIE5vbmU6Cisg
ICAgICAgIHJhaXNlIHdlYnNvY2tldC5XZWJTb2NrZXRIYW5kc2hha2VFcnJvcignbm8gcHJveHkg
cmVxdWVzdCcpCisgICAgICBsb2dnaW5nLmluZm8oJ3Byb3h5IHJlcXVlc3Q6ICVyJyAlIHNlbGYu
cHJveHlfaGVhZGVycykKKyAgICAgIHNlbGYuX1NlbmQoJ0hUVFAvMS4xIDIwMCBDb25uZWN0aW9u
IEVzdGFibGlzaGVkXHJcbicpCisgICAgICBzZWxmLl9TZW5kKCdQcm94eS1hZ2VudDogQXBhY2hl
LzIuMi44IChVYnVudHUpXHJcbicpCisgICAgICBzZWxmLl9TZW5kKCdcclxuJykKKyAgICBpZiBz
ZWxmLnNlcnZlcl9jZXJ0X2luZm86CisgICAgICBzZWxmLl9fVExTSGFuZHNoYWtlKCkKKyAgICBz
ZWxmLl9FeHBlY3QoJ0dFVCAnKQorICAgIHNlbGYucmVzb3VyY2VfbmFtZSA9IHNlbGYuX1JlYWRV
bnRpbCgnICcpCisgICAgc2VsZi5fRXhwZWN0KCdIVFRQLzEuMVxyXG4nKQorICAgIHNlbGYuX0V4
cGVjdCgnVXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgc2VsZi5fRXhwZWN0KCdDb25uZWN0
aW9uOiBVcGdyYWRlXHJcbicpCisgICAgc2VsZi5fRXhwZWN0KCdIb3N0OiAnKQorICAgIHNlbGYu
aG9zdCA9IHNlbGYuX1JlYWRVbnRpbCgnXHInKQorICAgIHNlbGYuX0V4cGVjdCgnXG4nKQorICAg
IHNlbGYuX0V4cGVjdCgnT3JpZ2luOiAnKQorICAgIHNlbGYub3JpZ2luID0gc2VsZi5fUmVhZFVu
dGlsKCdccicpCisgICAgc2VsZi5fRXhwZWN0KCdcbicpCisgICAgc2VsZi5leHRyYV9oZWFkZXJz
ID0gc2VsZi5fUmVhZEhlYWRlcigpCisgICAgaWYgc2VsZi5leHRyYV9oZWFkZXJzOgorICAgICAg
bSA9IHJlLm1hdGNoKCdXZWJTb2NrZXQtUHJvdG9jb2w6ICguKiknLCBzZWxmLmV4dHJhX2hlYWRl
cnNbMF0sCisgICAgICAgICAgICAgICAgICAgZmxhZ3M9cmUuSSkKKyAgICAgIGlmIG06CisgICAg
ICAgIHNlbGYucHJvdG9jb2wgPSBtLmdyb3VwKDEpCisgICAgICAjIFRPRE8odWthaSk6IHBhcnNl
IGF1dGhlbnRpY2F0aW9uL2Nvb2tpZSBoZWFkZXIKKworICAgIHVybF9wYXRoID0gc2VsZi5yZXNv
dXJjZV9uYW1lCisgICAgaWYgdXJsX3BhdGguZmluZCgnPycpID49IDA6CisgICAgICB1cmxfcGF0
aCA9IHVybF9wYXRoWzA6dXJsX3BhdGguZmluZCgnPycpXQorICAgIGhhbmRsZXJfZmFjdG9yeSA9
IHNlbGYuaGFuZGxlcl9yZWdpc3RyeVt1cmxfcGF0aF0KKyAgICBpZiBub3QgaGFuZGxlcl9mYWN0
b3J5OgorICAgICAgcmFpc2Ugd2Vic29ja2V0LldlYlNvY2tldEhhbmRzaGFrZUVycm9yKAorICAg
ICAgICAgICdubyBoYW5kbGVyIGZvciAlcycgJSBzZWxmLnJlc291cmNlX25hbWUpCisgICAgaGFu
ZGxlciA9IGhhbmRsZXJfZmFjdG9yeShzZWxmKQorICAgIGlmIG5vdCBoYW5kbGVyOgorICAgICAg
cmFpc2Ugd2Vic29ja2V0LldlYlNvY2tldEhhbmRzaGFrZUVycm9yKCdubyBoYW5kbGVyJykKKwor
ICAgIHNlbGYuX1NlbmQoJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFr
ZVxyXG4nKQorICAgIHNlbGYuX1NlbmQoJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nKQorICAgIHNl
bGYuX1NlbmQoJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJykKKyAgICBzZWxmLl9TZW5kKCdXZWJT
b2NrZXQtT3JpZ2luOiAnKQorICAgIHNlbGYuX1NlbmQoaGFuZGxlci5vcmlnaW4uZW5jb2RlKCd1
dGYtOCcpKQorICAgIHNlbGYuX1NlbmQoJ1xyXG4nKQorICAgIHNlbGYuX1NlbmQoJ1dlYlNvY2tl
dC1Mb2NhdGlvbjogJykKKyAgICBzZWxmLl9TZW5kKGhhbmRsZXIubG9jYXRpb24uZW5jb2RlKCd1
dGYtOCcpKQorICAgIHNlbGYuX1NlbmQoJ1xyXG4nKQorICAgIGlmIGhhbmRsZXIucHJvdG9jb2w6
CisgICAgICBzZWxmLl9TZW5kKCdXZWJTb2NrZXQtUHJvdG9jb2w6ICcpCisgICAgICBzZWxmLl9T
ZW5kKGhhbmRsZXIucHJvdG9jb2wuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgc2VsZi5fU2VuZCgn
XHJcbicpCisgICAgIyBUT0RPKHVrYWkpOiBoZWFkZXIKKyAgICAjICBzZXQtY29va2llCisgICAg
IyAgc2V0LWNvb2tpZTIKKyAgICBzZWxmLl9TZW5kKCdcclxuJykKKworICAgIGxvZ2dpbmcuaW5m
bygnV2ViIFNvY2tldCBjb25uZWN0aW9uIGVzdGFibGlzaGVkICcKKyAgICAgICAgICAgICAgICAg
JyhyZXNvdXJjZV9uYW1lPSIlcyIsIGhvc3Q9IiVzIiwgb3JpZ2luPSIlcyIsICcKKyAgICAgICAg
ICAgICAgICAgJyBwcm90b2NvbD0iJXMiLCAnCisgICAgICAgICAgICAgICAgICdleHRyYV9oZWFk
ZXJzPSVyKS4nLAorICAgICAgICAgICAgICAgICBzZWxmLnJlc291cmNlX25hbWUsCisgICAgICAg
ICAgICAgICAgIHNlbGYuaG9zdCwKKyAgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW4sCisgICAg
ICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFf
aGVhZGVycykKKyAgICByZXR1cm4gaGFuZGxlcgorCisgIGRlZiBfX1RMU0hhbmRzaGFrZShzZWxm
KToKKyAgICBsb2dnaW5nLmluZm8oJ1RMUyBoYW5kc2hha2UnKQorICAgIGlmIHNlbGYuc2VydmVy
X2NlcnRfaW5mbyBpcyBOb25lOgorICAgICAgcmFpc2Ugd2Vic29ja2V0LldlYlNvY2tldEhhbmRz
aGFrZUVycm9yKCdubyBzZWN1cmUgY29ubmVjdGlvbicpCisgICAgdHJ5OgorICAgICAgc2VsZi5f
cmF3X3NvY2tldCA9IHNlbGYuX3NvY2tldAorICAgICAgc2VsZi5fc29ja2V0ID0gc3NsLlNTTENv
bm5lY3Rpb24oc2VsZi5zZXJ2ZXJfY2VydF9pbmZvLmN0eCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jhd19zb2NrZXQpCisgICAgICBzZWxmLl9zb2NrZXQu
YWNjZXB0KCkKKyAgICBleGNlcHQgc3NsLlNTTExpYnJhcnlFcnJvciwgZXg6CisgICAgICBsb2dn
aW5nLmVycm9yKGV4KQorICAgICAgbG9nZ2luZy5lcnJvcihleC5nZXRFcnJvcigpKQorICAgICAg
bG9nZ2luZy5lcnJvcihleC5nZXROZXN0ZWRFcnJvcnMoKSkKKyAgICAgIHJhaXNlIHdlYnNvY2tl
dC5XZWJTb2NrZXRIYW5kc2hha2VFcnJvcihleCkKKyAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBl
eDoKKyAgICAgIGxvZ2dpbmcuZXJyb3IoZXgpCisgICAgICByYWlzZSB3ZWJzb2NrZXQuV2ViU29j
a2V0SGFuZHNoYWtlRXJyb3IoZXgpCisKKworY2xhc3MgV2ViU29ja2V0U2VydmVyKG9iamVjdCk6
CisgICIiIkJhc2ljIFdlYlNvY2tldFNlcnZlciBpbXBsZW1lbnRhdGlvbi4iIiIKKworICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydD13ZWJzb2NrZXQuV0VCU09DS0VUX1BPUlQsIGhhbmRsZXJfcmVn
aXN0cnk9Tm9uZSk6CisgICAgc2VsZi5faGFuZGxlcl9yZWdpc3RyeSA9IGhhbmRsZXJfcmVnaXN0
cnkKKyAgICBzZWxmLl9fc29ja2V0ID0gc29ja2V0LnNvY2tldCgpICAjIEFGX0lORVQsIFNPQ0tf
U1RSRUFNCisgICAgIyBFbmFibGUgU09fUkVVU0VBRERSIHRvIGF2b2lkICJBZGRyZXNzIGFscmVh
ZHkgaW4gdXNlIiBlcnJvciB3aGVuIHRoZQorICAgICMgc2VydmVyIGlzIHJ1biBpbiBhIHNob3J0
IGludGVydmFsLgorICAgIHNlbGYuX19zb2NrZXQuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tF
VCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICBzZWxmLl9fc29ja2V0LmJpbmQoKCcwLjAu
MC4wJywgcG9ydCkpCisgICAgc2VsZi5mYWtlX3Byb3h5ID0gRmFsc2UKKyAgICBzZWxmLnNlcnZl
cl9jZXJ0X2luZm8gPSBOb25lCisgICAgbG9nZ2luZy5pbmZvKCdCb3VuZCBwb3J0ICVkLicsIHBv
cnQpCisKKyAgZGVmIFJ1bihzZWxmKToKKyAgICBzZWxmLl9fc29ja2V0Lmxpc3Rlbig1KQorICAg
IHdoaWxlIHNlbGYuX19zb2NrZXQ6CisgICAgICBsb2dnaW5nLmluZm8oJ0xpc3RlbmluZy4uLicp
CisKKyAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLl9fc29ja2V0LmFjY2VwdCgpCisgICAgICB3c2No
YW4gPSBXZWJTb2NrZXRDaGFubmVsKHNvY2ssIGFkZHIsIHNlbGYuX2hhbmRsZXJfcmVnaXN0cnkp
CisgICAgICB3c2NoYW4uZmFrZV9wcm94eSA9IHNlbGYuZmFrZV9wcm94eQorICAgICAgd3NjaGFu
LnNlcnZlcl9jZXJ0X2luZm8gPSBzZWxmLnNlcnZlcl9jZXJ0X2luZm8KKyAgICAgIHdzY2hhbi5z
dGFydCgpCisKKworZGVmIG1haW4oKToKKyAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgcGFy
c2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLCB0eXBlPSdpbnQnLAor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PXdlYnNvY2tldC5XRUJTT0NLRVRfUE9SVCwKKyAg
ICAgICAgICAgICAgICAgICAgaGVscD0ncG9ydCB0byBsaXN0ZW4nKQorICBwYXJzZXIuYWRkX29w
dGlvbignLS1zZWN1cmUnLCBkZXN0PSdzZWN1cmUnLAorICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICBoZWxw
PSdzZWN1cmUgY29ubmVjdGlvbicpCisgIHBhcnNlci5hZGRfb3B0aW9uKCctLWNvbW1vbi1uYW1l
JywgZGVzdD0nY29tbW9uX25hbWUnLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdsb2Nh
bGhvc3QnLAorICAgICAgICAgICAgICAgICAgICBoZWxwPSdjb21tb24gbmFtZScpCisgIHBhcnNl
ci5hZGRfb3B0aW9uKCctLWZha2UtcHJveHknLCBkZXN0PSdmYWtlX3Byb3h5JywKKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAg
ICAgICAgICAgICAgaGVscD0naWdub3JlIHByb3h5IHJlcXVlc3QnKQorICBwYXJzZXIuYWRkX29w
dGlvbignLWInLCAnLS1oYW5kbGVyLWJhc2UnLCBkZXN0PSdoYW5kbGVyX2Jhc2UnLAorICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PScuJywKKyAgICAgICAgICAgICAgICAgICAgaGVscD0nYmFz
ZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0byBzY2FuIFdlYiBTb2NrZXQgSGFuZGxlcicKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAnc291cmNlIGZpbGVzLicpCisgIHdlYnNvY2tldF9sb2dnaW5n
LkFkZExvZ2dpbmdPcHRpb25zKHBhcnNlcikKKyAgKG9wdGlvbnMsIF8pID0gcGFyc2VyLnBhcnNl
X2FyZ3MoKQorCisgIHdlYnNvY2tldF9sb2dnaW5nLkNvbmZpZ3VyZUxvZ2dpbmcob3B0aW9ucykK
KworICByZWdpc3RyeSA9IFdlYlNvY2tldEhhbmRsZXJSZWdpc3RyeSgpCisgIHJlZ2lzdHJ5LlNv
dXJjZUZpbGVzSW5EaXIob3B0aW9ucy5oYW5kbGVyX2Jhc2UpCisgIHJlZ2lzdHJ5LlJlZ2lzdGVy
KCcvTGl2ZW5lc3NUZXN0JywgV2ViU29ja2V0SGFuZGxlcikKKworICBzZXJ2ZXIgPSBXZWJTb2Nr
ZXRTZXJ2ZXIocG9ydD1vcHRpb25zLnBvcnQsIGhhbmRsZXJfcmVnaXN0cnk9cmVnaXN0cnkpCisg
IHNlcnZlci5mYWtlX3Byb3h5ID0gb3B0aW9ucy5mYWtlX3Byb3h5CisgIGlmIG9wdGlvbnMuc2Vj
dXJlOgorICAgIHNlcnZlcl9jZXJ0X2luZm8gPSBTZXJ2ZXJDZXJ0SW5mbygpCisgICAgc2VydmVy
X2NlcnRfaW5mby5Jbml0KG9wdGlvbnMuY29tbW9uX25hbWUpCisgICAgc2VydmVyLnNlcnZlcl9j
ZXJ0X2luZm8gPSBzZXJ2ZXJfY2VydF9pbmZvCisgIHNlcnZlci5SdW4oKQorCisKK2lmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CisgIG1haW4oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34053</attachid>
            <date>2009-08-04 03:21:00 -0700</date>
            <delta_ts>2009-08-05 01:52:13 -0700</delta_ts>
            <desc>Web Socket Server for LayoutTests, derived from Python&apos;s SimpleHTTPServer</desc>
            <filename>ws-server-patch.txt</filename>
            <type>text/plain</type>
            <size>44305</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MWUwM2JkLi41ODMyMDJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDct
MjEgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNzQ5MAorICAgICAgICBXZWIgU29ja2V0cyBUZXN0IEluZnJhc3RydWN0
dXJlIFBhcnQgMS8zOiBTZXJ2ZXIKKworICAgICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tl
dC5weToKKyAgICAgICAgKiB3ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfY2xpZW50LnB5OgorICAg
ICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyLnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5LnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5X3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tldF9sb2dnaW5nLnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9sb2dnaW5nX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9zZXJ2ZXIucHk6CisKIDIwMDktMDctMjAgIEFkYW0gTGFu
Z2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvbGl2ZW5lc3NfY2hlY2tf
Y2xpZW50LnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvbGl2ZW5lc3NfY2hlY2tfY2xp
ZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmMjJkNjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi9saXZlbmVzc19jaGVja19j
bGllbnQucHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMi40CisjCisjIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCisiIiJTaW1wbGUgV2ViIFNvY2tldCBjbGllbnQgaW1wbGVtZW50YXRp
b24uCisiIiIKKworCitpbXBvcnQgd2Vic29ja2V0X2NoYW5uZWwKK2ltcG9ydCB3ZWJzb2NrZXRf
Y29tbW9uCitpbXBvcnQgd2Vic29ja2V0X2xvZ2dpbmcKKworaW1wb3J0IGxvZ2dpbmcKK2Zyb20g
b3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0Citp
bXBvcnQgc3lzCisKKworY2xhc3MgTGl2ZW5lc3NDaGVja0NsaWVudChvYmplY3QpOgorICAiIiJX
ZWIgU29ja2V0IGNsaWVudCB0byBjaGVjayB0aGUgbGl2ZW5lc3Mgb2YgdGhlIHNlcnZlci4iIiIK
KworICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgc2VsZi5fb3B0aW9ucyA9IG9w
dGlvbnMKKworICBkZWYgQ2hlY2tMaXZlbmVzcyhzZWxmKToKKyAgICBzb2NrID0gc29ja2V0LnNv
Y2tldCgpCisgICAgdHJ5OgorICAgICAgc29jay5jb25uZWN0KChzZWxmLl9vcHRpb25zLmhvc3Qs
IHNlbGYuX29wdGlvbnMucG9ydCkpCisgICAgICBzZWxmLl93ZWJzb2NrZXRfY2hhbm5lbCA9IHdl
YnNvY2tldF9jaGFubmVsLldlYlNvY2tldENoYW5uZWwoc29jaykKKyAgICAgIHJldHVybiBzZWxm
Ll9IYW5kc2hha2UoKQorICAgIGZpbmFsbHk6CisgICAgICBzb2NrLmNsb3NlKCkKKworICBkZWYg
X0hhbmRzaGFrZShzZWxmKToKKyAgICBsb2dnaW5nLmluZm8oJ1N0YXJ0IFdlYiBTb2NrZXQgaGFu
ZHNoYWtpbmcuLi4gKGFjdGl2ZSkgJworICAgICAgICAgICAgICAgICAnKHJlc291cmNlPSIlcyIs
IGhvc3Q9IiVzIiwgb3JpZ2luPSIlcyIpJywKKyAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5yZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5ob3N0LAorICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLm9yaWdpbikKKworICAgIHNlbGYuX3dlYnNvY2tldF9j
aGFubmVsLlNlbmRCeXRlcygKKyAgICAgICAgJ0dFVCAlcyBIVFRQLzEuMVxyXG4nICUgc2VsZi5f
b3B0aW9ucy5yZXNvdXJjZS5lbmNvZGUoJ3V0Zi04JykpCisgICAgc2VsZi5fd2Vic29ja2V0X2No
YW5uZWwuU2VuZEJ5dGVzKCdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJykKKyAgICBzZWxmLl93ZWJz
b2NrZXRfY2hhbm5lbC5TZW5kQnl0ZXMoJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJykKKyAgICBz
ZWxmLl93ZWJzb2NrZXRfY2hhbm5lbC5TZW5kQnl0ZXMoCisgICAgICAgICdIb3N0OiAlc1xyXG4n
ICUgc2VsZi5fb3B0aW9ucy5ob3N0LmVuY29kZSgndXRmLTgnKSkKKyAgICBzZWxmLl93ZWJzb2Nr
ZXRfY2hhbm5lbC5TZW5kQnl0ZXMoCisgICAgICAgICdPcmlnaW46ICVzXHJcbicgJSBzZWxmLl9v
cHRpb25zLm9yaWdpbi5lbmNvZGUoJ3V0Zi04JykpCisgICAgc2VsZi5fd2Vic29ja2V0X2NoYW5u
ZWwuU2VuZEJ5dGVzKCdcclxuJykKKworICAgIGlmIG5vdCBzZWxmLl93ZWJzb2NrZXRfY2hhbm5l
bC5FeHBlY3QoCisgICAgICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5k
c2hha2VcclxuJworICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAgICAgJ0Nv
bm5lY3Rpb246IFVwZ3JhZGVcclxuJyk6CisgICAgICByZXR1cm4gRmFsc2UKKyAgICBzZWxmLl93
ZWJzb2NrZXRfY2hhbm5lbC5SZWFkSGVhZGVycygpCisgICAgcmV0dXJuIFRydWUKKworZGVmIG1h
aW4oKToKKyAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgcGFyc2VyLmFkZF9vcHRpb24oJy1z
JywgJy0taG9zdCcsIGRlc3Q9J2hvc3QnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PSdsb2NhbGhvc3QnLCBoZWxwPSdzZXJ2ZXIgaG9zdCcpCisgIHBhcnNlci5h
ZGRfb3B0aW9uKCctcCcsICctLXBvcnQnLCBkZXN0PSdwb3J0JywgdHlwZT0naW50JywKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD13ZWJzb2NrZXRfY29tbW9uLkRFRkFVTFRfV1NfUE9SVCwK
KyAgICAgICAgICAgICAgICAgICAgaGVscD0nc2VydmVyIHBvcnQnKQorICBwYXJzZXIuYWRkX29w
dGlvbignLW8nLCAnLS1vcmlnaW4nLCBkZXN0PSdvcmlnaW4nLCB0eXBlPSdzdHJpbmcnLAorICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PSdodHRwOi8vbG9jYWxob3N0LycsCisgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J29yaWdpbicpCisgIHdlYnNvY2tldF9sb2dnaW5nLkFkZExvZ2dpbmdP
cHRpb25zKHBhcnNlcikKKyAgKG9wdGlvbnMsIF8pID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisg
IHdlYnNvY2tldF9sb2dnaW5nLkNvbmZpZ3VyZUxvZ2dpbmcob3B0aW9ucykKKworICBvcHRpb25z
LnJlc291cmNlID0gJy9MaXZlbmVzc1Rlc3QnCisKKyAgY2xpZW50ID0gTGl2ZW5lc3NDaGVja0Ns
aWVudChvcHRpb25zKQorICByZXN1bHQgPSBjbGllbnQuQ2hlY2tMaXZlbmVzcygpCisgIGV4aXRf
Y29kZSA9IDAKKyAgaWYgbm90IHJlc3VsdDoKKyAgICBleGl0X2NvZGUgPSAxCisgIHN5cy5leGl0
KGV4aXRfY29kZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBtYWluKCkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9jaGFubmVsLnB5
IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2NoYW5uZWwucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjMwNDRkMgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9jaGFubmVsLnB5CkBAIC0wLDAg
KzEsMTI2IEBACisjIS91c3IvYmluL3B5dGhvbjIuNAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
IiIiV2ViIFNvY2tldCBjaGFubmVsIGltcGxlbWVudGF0aW9uLgorCitXZWIgU29ja2V0IGNoYW5u
ZWwgaXMgYW4gYWJzdHJhY3Rpb24gb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0IGFmdGVyIGhhbmRz
aGFrZS4KKyIiIgorCisKK2ltcG9ydCBsb2dnaW5nCisKKworY2xhc3MgV2ViU29ja2V0Q2hhbm5l
bChvYmplY3QpOgorICAiIiJBYnN0cmFjdGlvbiBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgYWZ0
ZXIgaGFuZHNoYWtlLiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrKToKKyAgICBzZWxm
Ll9zb2NrZXQgPSBzb2NrCisKKyAgZGVmIFJlY2VpdmVNZXNzYWdlKHNlbGYpOgorICAgICIiIlJl
Y2VpdmVzIGEgV2ViIFNvY2tldCBmcmFtZSBhbmQgcmV0dXJucyBpdHMgcGF5bG9hZCBpbiB1dGYt
OC4iIiIKKyAgICB3aGlsZSBUcnVlOgorICAgICAgZnJhbWVfdHlwZV9zdHIgPSBzZWxmLl9zb2Nr
ZXQucmVjdigxKQorICAgICAgaWYgbm90IGZyYW1lX3R5cGVfc3RyOgorICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgZnJhbWVfdHlwZSA9IG9yZChmcmFtZV90eXBlX3N0clswXSkKKyAgICAgIGlm
IChmcmFtZV90eXBlICYgMHg4MCkgPT0gMHg4MDoKKyAgICAgICAgbGVuZ3RoID0gc2VsZi5fUGF5
bG9hZExlbmd0aCgpCisgICAgICAgIGlmIGxlbmd0aCBpcyBOb25lOgorICAgICAgICAgIHJldHVy
biBOb25lCisgICAgICAgIG1zZyA9IHNlbGYuUmVjZWl2ZUJ5dGVzKGxlbmd0aCkKKyAgICAgICAg
bG9nZ2luZy5pbmZvKCdEaXNjYXJkIGEgZnJhbWUgd2l0aCB0eXBlICV4IGxlbiAlZCcgJSAoCisg
ICAgICAgICAgICBmcmFtZV90eXBlLCBsZW5ndGgpKQorICAgICAgZWxzZToKKyAgICAgICAgIyBS
ZWFkIHVudGlsIHRoZSB0ZXJtaW5hdG9yLgorICAgICAgICBtc2cgPSBzZWxmLlJlYWRVbnRpbCgn
XHhmZicpCisKKyAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAgICAgICAgIGRhdGEg
PSBtc2cuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgbG9nZ2luZy5pbmZvKCdSZWNlaXZlTWVz
c2FnZTogJXInICUgZGF0YSkKKyAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBlbHNlOgor
ICAgICAgICAgIGxvZ2dpbmcuaW5mbygnRGlzY2FyZCBhIGZyYW1lIG9mIHVua25vd24gdHlwZTog
JXggOiAlcicgJSAoCisgICAgICAgICAgICAgIGZyYW1lX3R5cGUsIG1zZykpCisgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICBkZWYgU2VuZE1lc3NhZ2Uoc2VsZiwgbXNnKToKKyAgICBsb2dnaW5n
LmluZm8oJ1NlbmRNZXNzYWdlOiAlcicgJSBtc2cpCisgICAgZW5jb2RlZF9tc2cgPSBtc2cuZW5j
b2RlKCd1dGYtOCcpCisgICAgc2VsZi5TZW5kQnl0ZXMoJ1x4MDAnICsgZW5jb2RlZF9tc2cgKyAn
XHhmZicpCisKKyAgZGVmIFNlbmRCeXRlcyhzZWxmLCBieXRlcyk6CisgICAgc2VsZi5fc29ja2V0
LnNlbmQoYnl0ZXMpCisKKyAgZGVmIFJlYWRVbnRpbChzZWxmLCB0ZXJtLCBpbmNsdWRlX3Rlcm09
RmFsc2UpOgorICAgIG1zZyA9IFtdCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgIGNoID0gc2VsZi5f
c29ja2V0LnJlY3YoMSkKKyAgICAgIGlmIGNoID09IHRlcm06CisgICAgICAgIGJyZWFrCisgICAg
ICBtc2cuYXBwZW5kKGNoKQorICAgIGlmIGluY2x1ZGVfdGVybToKKyAgICAgIG1zZy5hcHBlbmQo
dGVybSkKKyAgICByZXR1cm4gJycuam9pbihtc2cpCisKKyAgZGVmIFJlY2VpdmVCeXRlcyhzZWxm
LCBsZW5ndGgpOgorICAgIG1zZyA9IFtdCisgICAgd2hpbGUgbGVuZ3RoID4gMDoKKyAgICAgIGRh
dGEgPSBOb25lCisgICAgICBkYXRhID0gc2VsZi5fc29ja2V0LnJlY3YobGVuZ3RoKQorICAgICAg
bXNnLmFwcGVuZChkYXRhKQorICAgICAgbGVuZ3RoIC09IGxlbihkYXRhKQorICAgIHJldHVybiAn
Jy5qb2luKG1zZykKKworICBkZWYgRXhwZWN0KHNlbGYsIGV4cGVjdGVkX2J5dGVzKToKKyAgICBh
Y3R1YWxfYnl0ZXMgPSBzZWxmLlJlY2VpdmVCeXRlcyhsZW4oZXhwZWN0ZWRfYnl0ZXMpKQorICAg
IHJldHVybiBhY3R1YWxfYnl0ZXMgPT0gZXhwZWN0ZWRfYnl0ZXMKKworICBkZWYgUmVhZEhlYWRl
cnMoc2VsZik6CisgICAgaGVhZGVycyA9IFtdCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgIGhlYWRl
ciA9IHNlbGYuUmVhZFVudGlsKCdccicpCisgICAgICBzZWxmLkV4cGVjdCgnXG4nKQorICAgICAg
aWYgbm90IGhlYWRlcjoKKyAgICAgICAgcmV0dXJuIGhlYWRlcnMKKyAgICAgIGhlYWRlcnMuYXBw
ZW5kKGhlYWRlcikKKworICBkZWYgX1BheWxvYWRMZW5ndGgoc2VsZik6CisgICAgbGVuZ3RoID0g
MAorICAgIHdoaWxlIFRydWU6CisgICAgICBiX3N0ciA9IHNlbGYuX3NvY2tldC5yZWN2KDEpCisg
ICAgICBpZiBub3QgYl9zdHI6CisgICAgICAgIGxvZ2dpbmcuaW5mbygnRnJhbWUgbGVuZ3RoIGJ5
dGUocykgZW5kZWQgcHJlbWF0dXJlbHkuJykKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgIGIg
PSBvcmQoYl9zdHJbMF0pCisgICAgICBsZW5ndGggPSBsZW5ndGggKiAxMjggKyAoYiAmIDB4N2Yp
CisgICAgICBpZiAoYiAmIDB4ODApID09IDA6CisgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIGxl
bmd0aApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2Nv
bW1vbi5weSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9jb21tb24ucHkK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWFmM2Y3YwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9jb21tb24ucHkKQEAg
LTAsMCArMSwyMjIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMi40CisjCisjIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCisiIiJXZWIgU29ja2V0cyBjb21tb24gY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMuCisiIiIK
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNvY2tldAoraW1wb3J0IHRpbWUKKworREVGQVVM
VF9XU19QT1JUID0gODEKKworCitjbGFzcyBXZWJTb2NrZXRFcnJvcihFeGNlcHRpb24pOgorICAi
IiJBIGJhc2UgZXhjZXB0aW9uIGZvciBXZWJTb2NrZXRFcnJvciBjbGFzcy4iIiIKKworCitjbGFz
cyBXZWJTb2NrZXRIYW5kc2hha2VFcnJvcihXZWJTb2NrZXRFcnJvcik6CisgICIiIkFuIGV4Y2Vw
dGlvbiByYWlzZWQgb24gZXJyb3JzIGluIGhhbmRzaGFraW5nLiIiIgorCisKK2NsYXNzIFdlYlNv
Y2tldChvYmplY3QpOgorICAiIiJXZWJTb2NrZXQgY2xhc3MuIiIiCisKKyAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKyAgICBzZWxmLl9yYXdfc29ja2V0ID0g
Tm9uZQorICAgIHNlbGYuX3NlbmRfZnJhbWVfdHlwZSA9IDB4MDAKKworICBkZWYgX0xvZ0luZm8o
c2VsZiwgbXNnKToKKyAgICBsb2dnaW5nLmluZm8oJ1t3c10gJXMnLCBtc2cpCisKKyAgZGVmIF9M
b2dFcnJvcihzZWxmLCBtc2cpOgorICAgIGxvZ2dpbmcuZXJyb3IoJ1t3c10gJXMnLCBtc2cpCisK
KyAgZGVmIFJlY3ZNc2coc2VsZik6CisgICAgIiIiUmVjZWl2ZXMgYSBXZWIgU29ja2V0IGZyYW1l
IGFuZCByZXR1cm5zIHRoZSBwYXlsb2FkIGluIGl0LiIiIgorICAgIGlmIG5vdCBzZWxmLl9zb2Nr
ZXQ6CisgICAgICBzZWxmLl9Mb2dJbmZvKCdSZWN2TXNnIHdhcyBjYWxsZWQgYnV0IHNvY2tldCBp
cyBub3QgcmVhZHknKQorICAgICAgcmV0dXJuIE5vbmUKKworICAgIHdoaWxlIFRydWU6CisgICAg
ICBzZWxmLl9Mb2dJbmZvKCdXYWl0aW5nIGZyYW1lLi4uJykKKyAgICAgIGZieXRlID0gTm9uZQor
ICAgICAgdHJ5OgorICAgICAgICBmYnl0ZSA9IHNlbGYuX3NvY2tldC5yZWN2KDEpCisgICAgICBl
eGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgIHJldHVybiBOb25lCisgICAgICBleGNlcHQg
RXhjZXB0aW9uLCBleDoKKyAgICAgICAgIyBzZWxmLl9Mb2dFcnJvcignJXMnICUgZXgpCisgICAg
ICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICBpZiBub3Qg
ZmJ5dGU6CisgICAgICAgIHNlbGYuX0xvZ0luZm8oJ1BlZXIgc29ja2V0IHNodXRkb3duJykKKyAg
ICAgICAgc2VsZi5DbG9zZSgpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgIGZyYW1lX3R5
cGUgPSBvcmQoZmJ5dGUpCisgICAgICBpZiAoZnJhbWVfdHlwZSAmIDB4ODApID09IDB4ODA6Cisg
ICAgICAgIGxlbmd0aCA9IHNlbGYuX1JlY3ZMZW5ndGgoKQorICAgICAgICBpZiBsZW5ndGggaXMg
Tm9uZToKKyAgICAgICAgICBzZWxmLl9Mb2dJbmZvKCdQZWVyIHNvY2tldCBzaHV0ZG93bj8nKQor
ICAgICAgICAgIHNlbGYuQ2xvc2UoKQorICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIG1z
ZyA9IHNlbGYuX1JlYWRCeXRlcyhsZW5ndGgpCisgICAgICAgIHNlbGYuX0xvZ0luZm8oJ0Rpc2Nh
cmQgYSBmcmFtZSB3aXRoIHR5cGUgJXggbGVuICVkJyAlICgKKyAgICAgICAgICAgIGZyYW1lX3R5
cGUsIGxlbmd0aCkpCisgICAgICBlbHNlOgorICAgICAgICAjIExvb2sgZm9yIGZyYW1lIGJvdW5k
YXJ5LgorICAgICAgICBtc2cgPSBzZWxmLl9SZWFkVW50aWwoJ1x4ZmYnKQorCisgICAgICAgIGlm
IGZyYW1lX3R5cGUgPT0gMHgwMDoKKyAgICAgICAgICBkYXRhID0gbXNnLmRlY29kZSgndXRmLTgn
KQorICAgICAgICAgIHNlbGYuX0xvZ0luZm8oJ1JlY3ZNc2c8JXI+JyAlIGRhdGEpCisgICAgICAg
ICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICBzZWxmLl9Mb2dJbmZvKCdE
aXNjYXJkIGEgZnJhbWUgd2l0aCB1bmtub3duIHR5cGUgJXggZGF0YSAlcicgJSAoCisgICAgICAg
ICAgICAgIGZyYW1lX3R5cGUsIG1zZykpCisgICAgICAgICAgcmV0dXJuIE5vbmUKKworICBkZWYg
U2VuZE1zZyhzZWxmLCBtc2cpOgorICAgIGlmIG5vdCBzZWxmLl9zb2NrZXQ6CisgICAgICByYWlz
ZSBXZWJTb2NrZXRFcnJvcignU29ja2V0IG5vdCByZWFkeScpCisKKyAgICBzZWxmLl9Mb2dJbmZv
KCdTZW5kTXNnPCVyPicgJSBtc2cpCisgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICByZXR1cm4K
KworICAgIGVuY29kZWRfbXNnID0gbXNnLmVuY29kZSgndXRmLTgnKQorICAgIGlmIChzZWxmLl9z
ZW5kX2ZyYW1lX3R5cGUgJiAweDgwKSA9PSAweDgwOgorICAgICAgbGVuZ3RoID0gbGVuKGVuY29k
ZWRfbXNnKQorICAgICAgIyBDb25zdHJ1Y3QgYSBsZW5ndGggaGVhZGVyIGluIHJldmVyc2Ugb3Jk
ZXIuCisgICAgICBsZW5faGVhZGVyID0gY2hyKGxlbmd0aCAlIDEyOCkKKyAgICAgIGxlbmd0aCAv
PSAxMjgKKyAgICAgIHdoaWxlIGxlbmd0aDoKKyAgICAgICAgbGVuX2hlYWRlciArPSBjaHIoKGxl
bmd0aCAlIDEyOCkgfCAweDgwKQorICAgICAgICBsZW5ndGggLz0gMTI4CisgICAgICBzZWxmLl9z
b2NrZXQuc2VuZChjaHIoc2VsZi5fc2VuZF9mcmFtZV90eXBlKSArIGxlbl9oZWFkZXJbOjotMV0g
KworICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZF9tc2cpCisgICAgZWxzZToKKyAgICAg
ICNzZWxmLl9zb2NrZXQuc2VuZGFsbChjaHIoc2VsZi5fc2VuZF9mcmFtZV90eXBlKSArIGVuY29k
ZWRfbXNnICsgJ1x4ZmYnKQorICAgICAgc2VsZi5fc29ja2V0LnNlbmQoY2hyKHNlbGYuX3NlbmRf
ZnJhbWVfdHlwZSkgKyBlbmNvZGVkX21zZyArICdceGZmJykKKworICBkZWYgSXNDb25uZWN0ZWQo
c2VsZik6CisgICAgcmV0dXJuIHNlbGYuX3NvY2tldCBpcyBub3QgTm9uZQorCisgIGRlZiBDbG9z
ZShzZWxmKToKKyAgICBpZiBzZWxmLl9yYXdfc29ja2V0OgorICAgICAgc2VsZi5fc29ja2V0LnNo
dXRkb3duKCkKKyAgICAgIHNlbGYuX3NvY2tldCA9IHNlbGYuX3Jhd19zb2NrZXQKKyAgICAgIHNl
bGYuX3Jhd19zb2NrZXQgPSBOb25lCisgICAgaWYgc2VsZi5fc29ja2V0OgorICAgICAgc2VsZi5f
c29ja2V0LmNsb3NlKCkKKyAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKyAgICAgIHNlbGYuX0xv
Z0luZm8oJ0Nsb3NlZCBzb2NrZXQuJykKKyAgICBlbHNlOgorICAgICAgc2VsZi5fTG9nSW5mbygn
QWxyZWFkeSBkaXNjb25uZWN0ZWQuJykKKworICBkZWYgX0NoZWNrU29ja2V0KHNlbGYpOgorICAg
IGlmIG5vdCBzZWxmLl9zb2NrZXQ6CisgICAgICByYWlzZSBXZWJTb2NrZXRFcnJvcignU29ja2V0
IG5vdCByZWFkeScpCisKKyAgZGVmIF9FeHBlY3Qoc2VsZiwgbXNnKToKKyAgICBsb2dnaW5nLmRl
YnVnKCdFeHBlY3Q8JXI+JywgbXNnKQorICAgIHNlbGYuX0NoZWNrU29ja2V0KCkKKworICAgIHJl
c3VsdCA9IHNlbGYuX3NvY2tldC5yZWN2KGxlbihtc2cpKQorICAgIGlmIHJlc3VsdCAhPSBtc2c6
CisgICAgICByYWlzZSBXZWJTb2NrZXRIYW5kc2hha2VFcnJvcignZXhwZWN0ZWQ6ICcgKyBtc2cg
KyAnIHZzLiBhY3R1YWw6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQpCisKKyAgZGVmIF9SZWFkVW50aWwoc2VsZiwgdGVybSwgaW5jbHVkZV90ZXJtPUZhbHNl
KToKKyAgICBzZWxmLl9DaGVja1NvY2tldCgpCisKKyAgICBtc2cgPSAnJworICAgIHdoaWxlIFRy
dWU6CisgICAgICBjaCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpCisgICAgICBpZiBjaCA9PSB0ZXJt
OgorICAgICAgICBicmVhaworICAgICAgbXNnICs9IGNoCisgICAgaWYgaW5jbHVkZV90ZXJtOgor
ICAgICAgbXNnICs9IHRlcm0KKyAgICBsb2dnaW5nLmRlYnVnKCdSZWFkVW50aWw8JXI+ID0+ICVy
JywgdGVybSwgbXNnKQorICAgIHJldHVybiBtc2cKKworICBkZWYgX1JlYWRIZWFkZXIoc2VsZik6
CisgICAgaGVhZGVyID0gW10KKyAgICB3aGlsZSBUcnVlOgorICAgICAgaCA9IHNlbGYuX1JlYWRV
bnRpbCgnXHInKQorICAgICAgc2VsZi5fRXhwZWN0KCdcbicpCisgICAgICBpZiBub3QgaDoKKyAg
ICAgICAgcmV0dXJuIGhlYWRlcgorICAgICAgaGVhZGVyLmFwcGVuZChoKQorCisgIGRlZiBfU2Vu
ZChzZWxmLCBtc2cpOgorICAgIGxvZ2dpbmcuZGVidWcoJ1NlbmQ8JXI+JywgbXNnKQorICAgIHNl
bGYuX0NoZWNrU29ja2V0KCkKKyAgICAjIHNlbGYuX3NvY2tldC5zZW5kYWxsKG1zZykKKyAgICBz
ZWxmLl9zb2NrZXQuc2VuZChtc2cpCisKKyAgZGVmIF9SZWN2TGVuZ3RoKHNlbGYpOgorICAgIGxl
bmd0aCA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgYiA9IE5vbmUKKyAgICAgIHRyeToKKyAg
ICAgICAgYiA9IHNlbGYuX3NvY2tldC5yZWN2KDEpCisgICAgICBleGNlcHQgc29ja2V0LnRpbWVv
dXQ6CisgICAgICAgIGlmIG5vdCBzZWxmLklzQ29ubmVjdGVkKCk6CisgICAgICAgICAgc2VsZi5f
TG9nRXJyb3IoJ3NvY2tldCBkaXNjb25uZWN0IHdoaWxlIHJlY3YgbGVuZ3RoJykKKyAgICAgICAg
ICByZXR1cm4gTm9uZQorICAgICAgICBjb250aW51ZQorICAgICAgYl92ID0gb3JkKGIpICYgMHg3
ZgorICAgICAgbGVuZ3RoID0gbGVuZ3RoICogMTI3ICsgYl92CisgICAgICBpZiAob3JkKGIpICYg
MHg4MCkgPT0gMHg4MDoKKyAgICAgICAgY29udGludWUKKyAgICAgIHJldHVybiBsZW5ndGgKKwor
ICBkZWYgX1JlYWRCeXRlcyhzZWxmLCBsZW5ndGgpOgorICAgIHNlbGYuX0NoZWNrU29ja2V0KCkK
KyAgICBtc2cgPSAnJworICAgIHdoaWxlIGxlbmd0aCA+IDA6CisgICAgICBkYXRhID0gTm9uZQor
ICAgICAgdHJ5OgorICAgICAgICBkYXRhID0gc2VsZi5fc29ja2V0LnJlY3YobGVuZ3RoKQorICAg
ICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBpZiBub3Qgc2VsZi5Jc0Nvbm5lY3Rl
ZCgpOgorICAgICAgICAgIHNlbGYuX0xvZ0Vycm9yKCdzb2NrZXQgZGlzY29ubmVjdCB3aGlsZSBy
ZWFkICVkIGJ5dGVzJyAlIGxlbmd0aCkKKyAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBj
b250aW51ZQorICAgICAgbXNnICs9IGRhdGEKKyAgICAgIGxlbmd0aCAtPSBsZW4oZGF0YSkKKyAg
ICByZXR1cm4gbXNnCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi93ZWJz
b2NrZXRfaGFuZGxlci5weSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9o
YW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVkMzQ5ZGQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfaGFu
ZGxlci5weQpAQCAtMCwwICsxLDQ2IEBACisjIS91c3IvYmluL3B5dGhvbjIuNAorIworIyBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworCisiIiJXZWIgU29ja2V0IEhhbmRsZXIuCisKK1dlYlNvY2tldEhUVFBS
ZXF1ZXN0SGFuZGxlciBjYWxscyBXZWJTb2NrZXRIYW5kbGVyIGFmdGVyIGhhbmRzaGFrZS4KKyIi
IgorCisKK2NsYXNzIFdlYlNvY2tldEhhbmRsZXIob2JqZWN0KToKKyAgIiIiQmFzZSBjbGFzcyBm
b3IgV2ViU29ja2V0IGhhbmRsZXIuIiIiCisKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdlYnNvY2tl
dF9jaGFubmVsKToKKyAgICBzZWxmLndlYnNvY2tldF9jaGFubmVsID0gd2Vic29ja2V0X2NoYW5u
ZWwKKworICBkZWYgSGFuZGxlKHNlbGYpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5LnB5IGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2hhbmRsZXJfcmVnaXN0cnkucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWNjZGJlZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5LnB5
CkBAIC0wLDAgKzEsMTg1IEBACisjIS91c3IvYmluL3B5dGhvbjIuNAorIworIyBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKworCisiIiJSZWdpc3RyeSBvZiBXZWJTb2NrZXRIYW5kbGVyLgorCitUaGlzIGlzIGEg
cmVnaXN0cnkgb2YgV2ViU29ja2V0SGFuZGxlciBkZWZpbml0aW9ucy4gRGVmaW5pdGlvbnMgY2Fu
IGJlIHBhc3NlZAorYXMgc3RyaW5ncyBvciBhcyBmaWxlcyBuYW1lZCAuKl93c2gucHkuCisKK0Eg
ZGVyaXZlZCBjbGFzcyBvZiBXZWJTb2NrZXRIYW5kbGVyIG11c3QgYmUgZGVmaW5lZCBpbiBhIHN0
cmluZyBvciBhIGZpbGUuCitJZiBtb3JlIHRoYW4gb25lIGRlcml2ZWQgY2xhc3NlcyBhcmUgZGVm
aW5lZCwgZm9sbG93aW5nIHNlbGVjdGlvbiBydWxlIGlzCithcHBsaWVkOgorCisxLiBJZiBhIGhh
bmRsZXIgaXMgYXNzaWduZWQgdG8gV0VCU09DS0VUX0hBTkRMRVIgdmFyaWFibGUsIHVzZSBpdC4K
KzIuIE90aGVyd2lzZSwgdXNlIHRoZSBtb3N0LWRlcml2ZWQgaGFuZGxlci4gSWYgdGhlcmUgYXJl
IG1vcmUgdGhhbiBvbmUKKyAgIG1vc3QtZGVyaXZlZCBoYW5kbGVycywgdXNlIHRoZSBvbmUgZm91
bmQgZmlyc3QuCisKKyAgIEZvciBleGFtcGxlLCBpZiBIYW5kbGVyQiBkZXJpdmVzIGZyb20gSGFu
ZGxlckEsIHdoaWNoIGluIHR1cm4gZGVyaXZlcyBmcm9tCisgICBXZWJTb2NrZXRIYW5kbGVyLCB1
c2UgSGFuZGxlckIuCisKK1Jlc291cmNlIHBhdHRlcm4gd2hpY2ggYSBoYW5kbGVyIGlzIGFzc29j
aWF0ZWQgd2l0aCBzaG91bGQgYmUgZXhwbGljaXRseQorc3BlY2lmaWVkIGZvciBhIGhhbmRsZXIg
ZGVmaW5lZCBpbiBhIHN0cmluZy4gRm9yIGEgaGFuZGxlciBpbiBhIGZpbGUsIHRoZSBwYXRoCitv
ZiB0aGUgZmlsZSByZWxhdGl2ZSB0byB0aGUgaGFuZGxlciBiYXNlIGRpcmVjdG9yeSwgZXhjbHVk
aW5nIF93c2gucHksIGlzIHVzZWQKK2FzIHRoZSByZXNvdXJjZSBwYXR0ZXJuLgorCitSZXNvdXJj
ZSBwYXR0ZXJuIGNhbiBiZSBzcGVjaWZpZWQgaW4gYSBmaWxlIG9yIGEgc3RyaW5nIGJ5IGFzc2ln
bmluZyB0aGF0IHRvCitSRVNPVVJDRV9QQVRURVJOLiBJZiBzcGVjaWZpZWQsIGl0IHdpbGwgb3Zl
cnJpZGUgdGhlIG9uZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZQorZmlsZSBwYXRoLgorCitCeSBy
ZXBlYXRpbmcgc291cmNpbmcsIGRlZmluaXRpb25zIGluIG11bHRpcGxlIHNvdXJjZSBmaWxlcyBj
YW4gYmUgdXNlZC4KKworVHdvIGhhbmRsZXJzIG9mIHRoZSBzYW1lIG5hbWUgZGVmaW5lZCBpbiBk
aWZmZXJlbnQgc291cmNlIGZpbGVzIHdvbid0IGNvbmZsaWN0LgorVGhhdCBpcywgYm90aCBoYW5k
bGVycyByZW1haW4gZWZmZWN0aXZlIChhcyBmYXIgYXMgdGhlIHJlc291cmNlIHBhdHRlcm4gZG9l
c24ndAorY29uZmxpY3QpLiBJbiBjYXNlIG9mIHJlc291cmNlIHBhdHRlcm4gY29uZmxpY3QsIGhh
bmRsZXJzIHJlZ2lzdGVyZWQgZWFybGllciBhcmUKK2dpdmVuIGhpZ2hlciBwcmVjZWRlbmNlLgor
CitFeGFtcGxlOgorCitUbyByZWdpc3RlciBNeUhhbmRsZXIgZm9yIC9oZWxsby9lY2hvOgorCis8
YmFzZV9kaXI+L2hlbGxvL2VjaG9fd3NoLnB5CistLS0tLS0tLQorZnJvbSB3ZWJzb2NrZXRfaGFu
ZGxlciBpbXBvcnQgV2ViU29ja2V0SGFuZGxlcgorCitjbGFzcyBXZWJTb2NrZXRFY2hvSGFuZGxl
cihXZWJTb2NrZXRIYW5kbGVyKToKKyAgZGVmIEhhbmRsZShzZWxmKToKKyAgICBtc2cgPSBzZWxm
LndlYnNvY2tldF9jaGFubmVsLlJlY2VpdmVNZXNzYWdlKCkKKyAgICBpZiBtc2c6CisgICAgICBz
ZWxmLndlYnNvY2tldF9jaGFubmVsLlNlbmRNZXNzYWdlKG1zZykKKy0tLS0tLS0tCisKKyIiIgor
CisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUK
KworZnJvbSB3ZWJzb2NrZXRfaGFuZGxlciBpbXBvcnQgV2ViU29ja2V0SGFuZGxlcgorCitfU09V
UkNFX1BBVEhfUEFUVEVSTiA9IHJlLmNvbXBpbGUocicoP2kpX3dzaFwucHkkJykKKworX1JFU09V
UkNFX1BBVFRFUk4gPSAnUkVTT1VSQ0VfUEFUVEVSTicKKworX1dFQlNPQ0tFVF9IQU5ETEVSID0g
J1dFQlNPQ0tFVF9IQU5ETEVSJworCisKK2RlZiBfQ29tcGFyZUNsYXNzKGNsYXNzX2EsIGNsYXNz
X2IpOgorICAiIiJDb21wYXJlIGNsYXNzZXMuCisKKyAgV2UgY29uc2lkZXIgY2xhc3MgQSBpcyBz
bWFsbGVyIHRoYW4gY2xhc3MgQiBpZiBBIGRlcml2ZXMgZnJvbSBCLCBlaXRoZXIKKyAgZGlyZWN0
bHkgb3IgaW5kaXJlY3RseS4gV2UgY29uc2lkZXIgQSBlcXVhbHMgQiBpZiB0aGVyZSBpcyBubwor
ICBzdXBlcmNsYXNzL3N1YmNsYXNzIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCisgICIi
IgorICBpZiBpc3N1YmNsYXNzKGNsYXNzX2EsIGNsYXNzX2IpOgorICAgIGlmIGlzc3ViY2xhc3Mo
Y2xhc3NfYiwgY2xhc3NfYSk6CisgICAgICByZXR1cm4gMAorICAgIHJldHVybiAtMQorICBpZiBp
c3N1YmNsYXNzKGNsYXNzX2IsIGNsYXNzX2EpOgorICAgIHJldHVybiAxCisgIHJldHVybiAwCisK
KworZGVmIF9HZXRSZXNvdXJjZVBhdGhDb252ZXJ0ZXIoYmFzZV9kaXJlY3RvcnkpOgorICBiYXNl
X2xlbiA9IGxlbihiYXNlX2RpcmVjdG9yeSkKKyAgZXh0X2xlbiA9IGxlbignX3dzaC5weScpCisg
IGRlZiBfQ29udmVydFRvUmVzb3VyY2VQYXRoKGZpbGVfcGF0aCk6CisgICAgcmVzb3VyY2VfcGF0
dGVybiA9IGZpbGVfcGF0aFtiYXNlX2xlbjpdLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgIGlmIG5v
dCByZXNvdXJjZV9wYXR0ZXJuLnN0YXJ0c3dpdGgoJy8nKToKKyAgICAgIHJlc291cmNlX3BhdHRl
cm4gPSAnLycgKyByZXNvdXJjZV9wYXR0ZXJuCisgICAgcmV0dXJuIHJlc291cmNlX3BhdHRlcm5b
Oi1leHRfbGVuXQorICByZXR1cm4gX0NvbnZlcnRUb1Jlc291cmNlUGF0aAorCisKK2RlZiBfU291
cmNlRmlsZU5hbWVzKGRpcmVjdG9yeSk6CisgICIiIllpZWxkIFdlYiBTb2NrZXQgSGFuZGxlciBz
b3VyY2UgZmlsZSBuYW1lcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgorCisgIGZvciByb290
LCB1bnVzZWRfZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXJlY3RvcnkpOgorICAgIGZvciBiYXNl
IGluIGZpbGVzOgorICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBiYXNlKQorICAgICAg
aWYgX1NPVVJDRV9QQVRIX1BBVFRFUk4uc2VhcmNoKHBhdGgpOgorICAgICAgICBsb2dnaW5nLmlu
Zm8oJ1dlYlNvY2tldEhhbmRsZXIgc291cmNlIGZpbGU6JyArIHBhdGgpCisgICAgICAgIHlpZWxk
IHBhdGgKKworCitjbGFzcyBXZWJTb2NrZXRIYW5kbGVyUmVnaXN0cnkob2JqZWN0KToKKyAgIiIi
V2ViIFNvY2tldCBIYW5kbGVyIHJlZ2lzdHJ5LgorCisgIFNlZSB0aGUgbW9kdWxlIGRvY3VtZW50
IGZvciBkZXRhaWxzLiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBzZWxmLl9lbnRy
aWVzID0gW10KKworICBkZWYgX19nZXRpdGVtX18oc2VsZiwgdXJsKToKKyAgICBmb3IgZW50cnkg
aW4gc2VsZi5fZW50cmllczoKKyAgICAgIGlmIGVudHJ5WzBdLnNlYXJjaCh1cmwpOgorICAgICAg
ICByZXR1cm4gZW50cnlbMV0KKyAgICByZXR1cm4gTm9uZQorCisgIGRlZiBSZWdpc3RlcihzZWxm
LCB1cmxfcGF0dGVybl9zdHJpbmcsIGhhbmRsZXIpOgorICAgICIiIlJlZ2lzdGVyIGEgaGFuZGxl
ciBmb3IgYSBwYXR0ZXJuLiIiIgorCisgICAgc2VsZi5fZW50cmllcy5hcHBlbmQoKHJlLmNvbXBp
bGUodXJsX3BhdHRlcm5fc3RyaW5nKSwgaGFuZGxlcikpCisKKyAgZGVmIFNvdXJjZShzZWxmLCBz
b3VyY2Vfc3RyLCByZXNvdXJjZV9wYXR0ZXJuKToKKyAgICAiIiJTb3VyY2UgYSBoYW5kbGVyIGRl
ZmluaXRpb24gc3RyaW5nLiIiIgorCisgICAgZ2xvYmFsX2RpYyA9IHt9CisgICAgZXhlYyBzb3Vy
Y2Vfc3RyIGluIGdsb2JhbF9kaWMKKyAgICBpZiBfUkVTT1VSQ0VfUEFUVEVSTiBpbiBnbG9iYWxf
ZGljOgorICAgICAgIyBVc2UgdGhlIHJlc291cmNlIHBhdHRlcm4gaW4gdGhlIHNvdXJjZSwgaWYg
c3BlY2lmaWVkLgorICAgICAgcmVzb3VyY2VfcGF0dGVybiA9IGdsb2JhbF9kaWNbX1JFU09VUkNF
X1BBVFRFUk5dCisgICAgaGFuZGxlcnMgPSBbXQorICAgIGZvciBuYW1lIGluIGdsb2JhbF9kaWM6
CisgICAgICBoYW5kbGVyID0gZ2xvYmFsX2RpY1tuYW1lXQorICAgICAgaWYgaW5zcGVjdC5pc2Ns
YXNzKGhhbmRsZXIpIGFuZCBpc3N1YmNsYXNzKGhhbmRsZXIsIFdlYlNvY2tldEhhbmRsZXIpOgor
ICAgICAgICBoYW5kbGVycy5hcHBlbmQoaGFuZGxlcikKKyAgICAgICAgaWYgbmFtZSA9PSBfV0VC
U09DS0VUX0hBTkRMRVI6CisgICAgICAgICAgIyBJZiBhIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8g
V0VCU09DS0VUX0hBTkRMRVIgdmFyaWFibGUsIHVzZSBpdC4KKyAgICAgICAgICBoYW5kbGVycyA9
IGhhbmRsZXJzWy0xOl0KKyAgICAgICAgICBicmVhaworICAgIGlmIG5vdCBoYW5kbGVyczoKKyAg
ICAgIGxvZ2dpbmcud2FybmluZygnTm8gaGFuZGxlciByZWdpc3RlcmVkIGZvciAlci4nICUgcmVz
b3VyY2VfcGF0dGVybikKKyAgICAgIHJldHVybgorICAgIGhhbmRsZXJzLnNvcnQoX0NvbXBhcmVD
bGFzcykKKyAgICBoYW5kbGVyID0gaGFuZGxlcnNbMF0KKyAgICBzZWxmLlJlZ2lzdGVyKHJlc291
cmNlX3BhdHRlcm4sIGhhbmRsZXIpCisgICAgbG9nZ2luZy5pbmZvKCdSZWdpc3RlcmVkIGhhbmRs
ZXIgJXIgZm9yICVyLicgJSAoaGFuZGxlci5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9wYXR0ZXJuKSkKKworICBk
ZWYgU291cmNlRmlsZXNJbkRpcihzZWxmLCBkaXJlY3RvcnkpOgorICAgICIiIlNvdXJjZSBhbGwg
dGhlIGhhbmRsZXIgc291cmNlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuIiIiCisKKyAgICB0b19y
ZXNvdXJjZV9wYXRoID0gX0dldFJlc291cmNlUGF0aENvbnZlcnRlcihkaXJlY3RvcnkpCisgICAg
Zm9yIHNvdXJjZSBpbiBfU291cmNlRmlsZU5hbWVzKGRpcmVjdG9yeSk6CisgICAgICBzZWxmLlNv
dXJjZSgnJy5qb2luKG9wZW4oc291cmNlKSksIHRvX3Jlc291cmNlX3BhdGgoc291cmNlKSkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3Jl
Z2lzdHJ5X3VuaXR0ZXN0LnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0
X2hhbmRsZXJfcmVnaXN0cnlfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uY2M1N2M5YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tl
dC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5X3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEs
MTg3IEBACisjIS91c3IvYmluL3B5dGhvbjIuNAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIi
VGVzdHMgZm9yIFdlYlNvY2tldEhhbmRsZXJSZWdpc3RyeS4iIiIKKworCitpbXBvcnQgdW5pdHRl
c3QKKworZnJvbSB3ZWJzb2NrZXRfaGFuZGxlciBpbXBvcnQgV2ViU29ja2V0SGFuZGxlcgorZnJv
bSB3ZWJzb2NrZXRfaGFuZGxlcl9yZWdpc3RyeSBpbXBvcnQgV2ViU29ja2V0SGFuZGxlclJlZ2lz
dHJ5Citmcm9tIHdlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5IGltcG9ydCBfQ29tcGFyZUNsYXNz
Citmcm9tIHdlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5IGltcG9ydCBfR2V0UmVzb3VyY2VQYXRo
Q29udmVydGVyCisKKworX1RFU1RfU09VUkNFXzEgPSAiIiIKK2Zyb20gd2Vic29ja2V0X2hhbmRs
ZXIgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXIKKworY2xhc3MgTXlIYW5kbGVyMShXZWJTb2NrZXRI
YW5kbGVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6CisgICAgV2ViU29ja2V0SGFu
ZGxlci5fX2luaXRfXyhzZWxmLCB3c2NoYW4pCisiIiIKKworX1RFU1RfU09VUkNFXzIgPSAiIiIK
K2Zyb20gd2Vic29ja2V0X2hhbmRsZXIgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXIKKworY2xhc3Mg
TXlIYW5kbGVyMihXZWJTb2NrZXRIYW5kbGVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hh
bik6CisgICAgV2ViU29ja2V0SGFuZGxlci5fX2luaXRfXyhzZWxmLCB3c2NoYW4pCisKK1JFU09V
UkNFX1BBVFRFUk4gPSByJy93ZWJraXQnCisiIiIKKworX1RFU1RfU09VUkNFXzMgPSAiIiIKK2Zy
b20gd2Vic29ja2V0X2hhbmRsZXIgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXIKKworY2xhc3MgTXlI
YW5kbGVyMzEoV2ViU29ja2V0SGFuZGxlcik6CisgIGRlZiBfX2luaXRfXyhzZWxmLCB3c2NoYW4p
OgorICAgIFdlYlNvY2tldEhhbmRsZXIuX19pbml0X18oc2VsZiwgd3NjaGFuKQorCitjbGFzcyBN
eUhhbmRsZXIzMihNeUhhbmRsZXIzMSk6CisgIGRlZiBfX2luaXRfXyhzZWxmLCB3c2NoYW4pOgor
ICAgIFdlYlNvY2tldEhhbmRsZXIuX19pbml0X18oc2VsZiwgd3NjaGFuKQorCitjbGFzcyBNeUhh
bmRsZXIzMyhNeUhhbmRsZXIzMik6CisgIGRlZiBfX2luaXRfXyhzZWxmLCB3c2NoYW4pOgorICAg
IFdlYlNvY2tldEhhbmRsZXIuX19pbml0X18oc2VsZiwgd3NjaGFuKQorCitjbGFzcyBTb21lSGVs
cGVyKG9iamVjdCk6CisgIHBhc3MKKyIiIgorCitfVEVTVF9TT1VSQ0VfNCA9ICIiIgorZnJvbSB3
ZWJzb2NrZXRfaGFuZGxlciBpbXBvcnQgV2ViU29ja2V0SGFuZGxlcgorCitjbGFzcyBNeUhhbmRs
ZXI0MShXZWJTb2NrZXRIYW5kbGVyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6Cisg
ICAgV2ViU29ja2V0SGFuZGxlci5fX2luaXRfXyhzZWxmLCB3c2NoYW4pCisKK2NsYXNzIE15SGFu
ZGxlcjQyKE15SGFuZGxlcjQxKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6CisgICAg
V2ViU29ja2V0SGFuZGxlci5fX2luaXRfXyhzZWxmLCB3c2NoYW4pCisKK2NsYXNzIE15SGFuZGxl
cjQzKE15SGFuZGxlcjQyKToKKyAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6CisgICAgV2Vi
U29ja2V0SGFuZGxlci5fX2luaXRfXyhzZWxmLCB3c2NoYW4pCisKK2NsYXNzIFNvbWVIZWxwZXIo
b2JqZWN0KToKKyAgcGFzcworCitXRUJTT0NLRVRfSEFORExFUiA9IE15SGFuZGxlcjQxCisiIiIK
KworCitkZWYgX0NyZWF0ZUR1bW15SGFuZGxlcigpOgorICBjbGFzcyBEdW1teUhhbmRsZXIoV2Vi
U29ja2V0SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdzY2hhbik6CisgICAgICBX
ZWJTb2NrZXRIYW5kbGVyLl9faW5pdF9fKHNlbGYsIHdzY2hhbikKKyAgcmV0dXJuIER1bW15SGFu
ZGxlcgorCisKK2NsYXNzIFdlYnNvY2tldEhhbmRsZXJSZWdpc3RyeVRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgorICBkZWYgc2V0VXAoc2VsZik6CisgICAgc2VsZi5fcmVnaXN0cnkgPSBXZWJTb2Nr
ZXRIYW5kbGVyUmVnaXN0cnkoKQorCisgIGRlZiB0ZXN0Q29tcGFyZUNsYXNzKHNlbGYpOgorICAg
IGNsYXNzIEEob2JqZWN0KToKKyAgICAgIHBhc3MKKworICAgIGNsYXNzIEIoQSk6CisgICAgICBw
YXNzCisKKyAgICBjbGFzcyBDMShCKToKKyAgICAgIHBhc3MKKworICAgIGNsYXNzIEMyKEIpOgor
ICAgICAgcGFzcworCisgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBfQ29tcGFyZUNsYXNzKEEsIEEp
KQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgX0NvbXBhcmVDbGFzcyhDMSwgQzIpKQorICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMSwgX0NvbXBhcmVDbGFzcyhBLCBCKSkKKyAgICBzZWxmLmFzc2VydEVx
dWFsKDEsIF9Db21wYXJlQ2xhc3MoQSwgQzEpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIF9D
b21wYXJlQ2xhc3MoQiwgQSkpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgX0NvbXBhcmVDbGFz
cyhDMSwgQSkpCisKKyAgZGVmIHRlc3RHZXRSZXNvdXJjZVBhdGhDb252ZXJ0ZXIoc2VsZik6Cisg
ICAgY29udmVydGVyMSA9IF9HZXRSZXNvdXJjZVBhdGhDb252ZXJ0ZXIoJy9zb21lL3BhdGgnKQor
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oYW5kbGVyJywgY29udmVydGVyMSgnL3NvbWUvcGF0aC9o
YW5kbGVyX3dzaC5weScpKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9zdWIvaGFuZGxlcicsCisg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIxKCcvc29tZS9wYXRoL3N1Yi9oYW5kbGVyX3dz
aC5weScpKQorCisgICAgY29udmVydGVyMiA9IF9HZXRSZXNvdXJjZVBhdGhDb252ZXJ0ZXIoJy9z
b21lL3BhdGgvJykKKyAgICBzZWxmLmFzc2VydEVxdWFsKCcvaGFuZGxlcicsIGNvbnZlcnRlcjIo
Jy9zb21lL3BhdGgvaGFuZGxlcl93c2gucHknKSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCcvc3Vi
L2hhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyMignL3NvbWUvcGF0aC9z
dWIvaGFuZGxlcl93c2gucHknKSkKKworICBkZWYgdGVzdFJlZ2lzdGVySW52YWxpZFBhdHRlcm4o
c2VsZik6CisgICAgZGVmIHJlZ2lzdGVySW52YWxpZFBhdHRlcm4oKToKKyAgICAgIHNlbGYuX3Jl
Z2lzdHJ5LlJlZ2lzdGVyKHInKicsIF9DcmVhdGVEdW1teUhhbmRsZXIoKSkKKyAgICBzZWxmLmFz
c2VydFJhaXNlcyhFeGNlcHRpb24sIHJlZ2lzdGVySW52YWxpZFBhdHRlcm4pCisKKyAgZGVmIHRl
c3RHZXRJdGVtKHNlbGYpOgorICAgIGhhbmRsZXJfMSA9IF9DcmVhdGVEdW1teUhhbmRsZXIoKQor
ICAgIHNlbGYuX3JlZ2lzdHJ5LlJlZ2lzdGVyKHInXi9hYmMnLCBoYW5kbGVyXzEpCisgICAgaGFu
ZGxlcl8yID0gX0NyZWF0ZUR1bW15SGFuZGxlcigpCisgICAgc2VsZi5fcmVnaXN0cnkuUmVnaXN0
ZXIocidhYmMnLCBoYW5kbGVyXzIpCisgICAgaGFuZGxlcl8zID0gX0NyZWF0ZUR1bW15SGFuZGxl
cigpCisgICAgc2VsZi5fcmVnaXN0cnkuUmVnaXN0ZXIocidbMC05XSsnLCBoYW5kbGVyXzMpCisK
KyAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfMSwgc2VsZi5fcmVnaXN0cnlbJy9hYmMnXSkK
KyAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfMiwgc2VsZi5fcmVnaXN0cnlbJ3h5ei9hYmMn
XSkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfMywgc2VsZi5fcmVnaXN0cnlbJy8wJ10p
CisgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLl9yZWdpc3RyeVsnLyddKQorCisgIGRl
ZiB0ZXN0U291cmNlKHNlbGYpOgorICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5fcmVn
aXN0cnlbJy9leGFtcGxlJ10pCisgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLl9yZWdp
c3RyeVsnL3dlYmtpdCddKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5fcmVnaXN0
cnlbJy9tdWx0aXBsZSddKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5fcmVnaXN0
cnlbJy9hc3NpZ24nXSkKKworICAgIHNlbGYuX3JlZ2lzdHJ5LlNvdXJjZShfVEVTVF9TT1VSQ0Vf
MSwgJy9leGFtcGxlJykKKyAgICBzZWxmLl9yZWdpc3RyeS5Tb3VyY2UoX1RFU1RfU09VUkNFXzIs
ICcvd2lsbC9iZS9vdmVycmlkZGVuJykKKyAgICBzZWxmLl9yZWdpc3RyeS5Tb3VyY2UoX1RFU1Rf
U09VUkNFXzMsICcvbXVsdGlwbGUnKQorICAgIHNlbGYuX3JlZ2lzdHJ5LlNvdXJjZShfVEVTVF9T
T1VSQ0VfNCwgJy9hc3NpZ24nKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ015SGFuZGxlcjEnLAor
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVnaXN0cnlbJy9leGFtcGxlJ10uX19uYW1lX18p
CisgICAgIyBUaGUgcmVzb3VyY2UgcGF0aCBzcGVjaWZpZWQgYnkgUkVTT1VSQ0VfUEFUVEVSTiBp
biB0aGUgc291cmNlIHNob3VsZCBiZQorICAgICMgdXNlZC4KKyAgICBzZWxmLmFzc2VydEVxdWFs
KCdNeUhhbmRsZXIyJywKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlZ2lzdHJ5Wycvd2Vi
a2l0J10uX19uYW1lX18pCisgICAgIyBUaGUgbW9zdC1kZXJpdmVkIGhhbmRsZXIgaW4gdGhlIHNv
dXJjZSBzaG91bGQgYmUgdXNlZC4KKyAgICBzZWxmLmFzc2VydEVxdWFsKCdNeUhhbmRsZXIzMycs
CisgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWdpc3RyeVsnL211bHRpcGxlJ10uX19uYW1l
X18pCisgICAgIyBUaGUgaGFuZGxlciBhc3NpZ25lZCB0byBXRUJTT0NLRVRfSEFORExFUiBzaG91
bGQgYmUgdXNlZC4KKyAgICBzZWxmLmFzc2VydEVxdWFsKCdNeUhhbmRsZXI0MScsCisgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9yZWdpc3RyeVsnL2Fzc2lnbiddLl9fbmFtZV9fKQorCisKK2lm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2h0dHBfc2VydmVyLnB5IGIvTGF5
b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2h0dHBfc2VydmVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkM2Y1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfaHR0cF9zZXJ2ZXIucHkKQEAgLTAs
MCArMSwxNjggQEAKKyMhL3Vzci9iaW4vcHl0aG9uMi40CisjCisjIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CisiIiJTaW1wbGUgV2ViIFNvY2tldCAmIEhUVFAgc2VydmVyIGltcGxlbWVudGF0aW9uLgorIiIi
CisKK2ltcG9ydCB3ZWJzb2NrZXRfY2hhbm5lbAoraW1wb3J0IHdlYnNvY2tldF9jb21tb24KK2Zy
b20gd2Vic29ja2V0X2hhbmRsZXIgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXIKK2Zyb20gd2Vic29j
a2V0X2hhbmRsZXJfcmVnaXN0cnkgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXJSZWdpc3RyeQoraW1w
b3J0IHdlYnNvY2tldF9sb2dnaW5nCisKK2ltcG9ydCBCYXNlSFRUUFNlcnZlciBhcyBCSFMKK2lt
cG9ydCBTaW1wbGVIVFRQU2VydmVyIGFzIFNIUworaW1wb3J0IFNvY2tldFNlcnZlciBhcyBTUwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgdXJscGFy
c2UKKworCitjbGFzcyBXZWJTb2NrZXRIVFRQU2VydmVyKFNTLlRocmVhZGluZ01peEluLCBCSFMu
SFRUUFNlcnZlcik6CisgIGRhZW1vbl90aHJlYWRzID0gVHJ1ZQorICBwYXNzCisKKworY2xhc3Mg
V2ViU29ja2V0SFRUUFJlcXVlc3RIYW5kbGVyKFNIUy5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIp
OgorICBfaGFuZGxlcl9yZWdpc3RyeSA9IFdlYlNvY2tldEhhbmRsZXJSZWdpc3RyeSgpCisKKyAg
ZGVmIFNvdXJjZUZpbGVzSW5EaXIoaGFuZGxlcl9iYXNlKToKKyAgICBXZWJTb2NrZXRIVFRQUmVx
dWVzdEhhbmRsZXIuX2hhbmRsZXJfcmVnaXN0cnkuU291cmNlRmlsZXNJbkRpcigKKyAgICAgICAg
aGFuZGxlcl9iYXNlKQorICBTb3VyY2VGaWxlc0luRGlyID0gc3RhdGljbWV0aG9kKFNvdXJjZUZp
bGVzSW5EaXIpCisKKyAgZGVmIFJlZ2lzdGVyKHJlc291cmNlX25hbWUsIGhhbmRsZXIpOgorICAg
IFdlYlNvY2tldEhUVFBSZXF1ZXN0SGFuZGxlci5faGFuZGxlcl9yZWdpc3RyeS5SZWdpc3RlcigK
KyAgICAgICAgcmVzb3VyY2VfbmFtZSwgaGFuZGxlcikKKyAgUmVnaXN0ZXIgPSBzdGF0aWNtZXRo
b2QoUmVnaXN0ZXIpCisKKyAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmtleXdvcmRzKToK
KyAgICBzZWxmLnVwZ3JhZGVfdG9fd2Vic29ja2V0ID0gMAorICAgIHNlbGYubG9jYXRpb24gPSBO
b25lCisgICAgU0hTLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCAqYXJn
cywgKiprZXl3b3JkcykKKworICBkZWYgcGFyc2VfcmVxdWVzdChzZWxmKToKKyAgICByZXN1bHQg
PSBTSFMuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qoc2VsZikKKyAgICBp
ZiByZXN1bHQ6CisgICAgICBzZWxmLl9NYXliZVVwZ3JhZGVUb1dlYlNvY2tldCgpCisgICAgcmV0
dXJuIHJlc3VsdAorCisgIGRlZiBkb19HRVQoc2VsZik6CisgICAgaWYgbm90IHNlbGYudXBncmFk
ZV90b193ZWJzb2NrZXQ6CisgICAgICByZXR1cm4gU0hTLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxl
ci5kb19HRVQoc2VsZikKKyAgICBzZWxmLl9IYW5kc2hha2UoKQorICAgIHNlbGYuX0hhbmRsZVdl
YlNvY2tldFJlcXVlc3QoKQorCisgIGRlZiBfU2V0VXBSZXNvdXJjZU5hbWUoc2VsZik6CisgICAg
dXJsID0gdXJscGFyc2UudXJscGFyc2Uoc2VsZi5wYXRoKQorICAgIGlmIHVybFswXSBvciB1cmxb
MV0gb3Igbm90IHVybFsyXS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAjIEFic29sdXRlIFVSSSBv
ciBub24tYWJzb2x1dGUgcGF0aC4KKyAgICAgIHJhaXNlIHdlYnNvY2tldC5XZWJTb2NrZXRIYW5k
c2hha2VFcnJvcigKKyAgICAgICAgICAnSW52YWxpZCByZXNvdXJjZSBuYW1lOiAlcicgJSBzZWxm
LnBhdGgpCisgICAgIyBJZ25vcmUgcGFyYW1ldGVycywgcXVlcnksIGZyYWdtZW50LCBldGMuCisg
ICAgc2VsZi5yZXNvdXJjZV9uYW1lID0gdXJsWzJdCisKKyAgZGVmIF9TZXRVcExvY2F0aW9uKHNl
bGYpOgorICAgIGxvY2F0aW9uX3BhcnRzID0gW10KKyAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQo
J3dzOi8vbG9jYWxob3N0JykKKyAgICBwb3J0ID0gc2VsZi5zZXJ2ZXIuc29ja2V0LmdldHNvY2tu
YW1lKClbMV0KKyAgICBpZiBwb3J0ICE9IHdlYnNvY2tldF9jb21tb24uREVGQVVMVF9XU19QT1JU
OgorICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKCc6JykKKyAgICAgIGxvY2F0aW9uX3BhcnRz
LmFwcGVuZChzdHIocG9ydCkpCisgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKHNlbGYucmVzb3Vy
Y2VfbmFtZSkKKyAgICBzZWxmLmxvY2F0aW9uID0gJycuam9pbihsb2NhdGlvbl9wYXJ0cykKKwor
ICBkZWYgX01heWJlVXBncmFkZVRvV2ViU29ja2V0KHNlbGYpOgorICAgIHNlbGYudXBncmFkZV90
b193ZWJzb2NrZXQgPSAoCisgICAgICAgIHNlbGYuaGVhZGVycy5nZXQoJ1VwZ3JhZGUnLCAnJykg
PT0gJ1dlYlNvY2tldCcgYW5kCisgICAgICAgIHNlbGYuaGVhZGVycy5nZXQoJ0Nvbm5lY3Rpb24n
LCAnJykgPT0gJ1VwZ3JhZGUnKQorICAgIGlmIG5vdCBzZWxmLnVwZ3JhZGVfdG9fd2Vic29ja2V0
OgorICAgICAgcmV0dXJuCisgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMAorICAgIHNlbGYu
b3JpZ2luID0gc2VsZi5oZWFkZXJzLmdldCgnT3JpZ2luJywgTm9uZSkKKyAgICBzZWxmLnByb3Rv
Y29sID0gc2VsZi5oZWFkZXJzLmdldCgnV2ViU29ja2V0LVByb3RvY29sJywgTm9uZSkKKyAgICBz
ZWxmLl9TZXRVcFJlc291cmNlTmFtZSgpCisgICAgc2VsZi5fU2V0VXBMb2NhdGlvbigpCisKKyAg
ZGVmIF9IYW5kc2hha2Uoc2VsZik6CisgICAgc2VsZi53ZmlsZS53cml0ZSgnSFRUUC8xLjEgMTAx
IFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicpCisgICAgc2VsZi53ZmlsZS53cml0
ZSgnVXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgc2VsZi53ZmlsZS53cml0ZSgnQ29ubmVj
dGlvbjogVXBncmFkZVxyXG4nKQorICAgIHNlbGYud2ZpbGUud3JpdGUoJ1dlYlNvY2tldC1Pcmln
aW46ICcpCisgICAgc2VsZi53ZmlsZS53cml0ZShzZWxmLm9yaWdpbi5lbmNvZGUoJ3V0Zi04Jykp
CisgICAgc2VsZi53ZmlsZS53cml0ZSgnXHJcbicpCisgICAgc2VsZi53ZmlsZS53cml0ZSgnV2Vi
U29ja2V0LUxvY2F0aW9uOiAnKQorICAgIHNlbGYud2ZpbGUud3JpdGUoc2VsZi5sb2NhdGlvbi5l
bmNvZGUoJ3V0Zi04JykpCisgICAgc2VsZi53ZmlsZS53cml0ZSgnXHJcbicpCisgICAgaWYgc2Vs
Zi5wcm90b2NvbDoKKyAgICAgIHNlbGYud2ZpbGUud3JpdGUoJ1dlYlNvY2tldC1Qcm90b2NvbDog
JykKKyAgICAgIHNlbGYud2ZpbGUud3JpdGUoc2VsZi5wcm90b2NvbC5lbmNvZGUoJ3V0Zi04Jykp
CisgICAgICBzZWxmLndmaWxlLndyaXRlKCdcclxuJykKKyAgICBzZWxmLndmaWxlLndyaXRlKCdc
clxuJykKKworICBkZWYgX0hhbmRsZVdlYlNvY2tldFJlcXVlc3Qoc2VsZik6CisgICAgd3NjID0g
d2Vic29ja2V0X2NoYW5uZWwuV2ViU29ja2V0Q2hhbm5lbChzZWxmLnJlcXVlc3QpCisgICAgaGFu
ZGxlcl9jbGFzcyA9IFdlYlNvY2tldEhUVFBSZXF1ZXN0SGFuZGxlci5faGFuZGxlcl9yZWdpc3Ry
eVsKKyAgICAgICAgc2VsZi5yZXNvdXJjZV9uYW1lXQorICAgIGlmIGhhbmRsZXJfY2xhc3M6Cisg
ICAgICBoYW5kbGVyX2NsYXNzKHdzYykuSGFuZGxlKCkKKyAgICBlbHNlOgorICAgICAgbG9nZ2lu
Zy53YXJuaW5nKCdObyBoYW5kbGVyIGRlZmluZWQgZm9yOiAlcicsIHNlbGYucmVzb3VyY2VfbmFt
ZSkKKworCitkZWYgbWFpbigpOgorICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQor
ICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywgZGVzdD0ncG9ydCcsIHR5cGU9J2lu
dCcsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9d2Vic29ja2V0X2NvbW1vbi5ERUZBVUxU
X1dTX1BPUlQsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9J3BvcnQgdG8gbGlzdGVuIHRvJykK
KyAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0taGFuZGxlci1iYXNlJywgZGVzdD0naGFuZGxl
cl9iYXNlJywKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nLicsCisgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J2Jhc2UgZGlyZWN0b3J5IGZyb20gd2hpY2ggdG8gc2NhbiBXZWIgU29ja2V0
IEhhbmRsZXInCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZSBmaWxlcy4nKQorICB3
ZWJzb2NrZXRfbG9nZ2luZy5BZGRMb2dnaW5nT3B0aW9ucyhwYXJzZXIpCisgIChvcHRpb25zLCBf
KSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICB3ZWJzb2NrZXRfbG9nZ2luZy5Db25maWd1cmVM
b2dnaW5nKG9wdGlvbnMpCisKKyAgV2ViU29ja2V0SFRUUFJlcXVlc3RIYW5kbGVyLlNvdXJjZUZp
bGVzSW5EaXIob3B0aW9ucy5oYW5kbGVyX2Jhc2UpCisgIFdlYlNvY2tldEhUVFBSZXF1ZXN0SGFu
ZGxlci5SZWdpc3RlcignL0xpdmVuZXNzVGVzdCcsIFdlYlNvY2tldEhhbmRsZXIpCisgIFdlYlNv
Y2tldEhUVFBSZXF1ZXN0SGFuZGxlci5wcm90b2NvbF92ZXJzaW9uID0gJ0hUVFAvMS4wJworCisg
IG9zLmNoZGlyKG9wdGlvbnMuaGFuZGxlcl9iYXNlKQorICBodHRwZCA9IFdlYlNvY2tldEhUVFBT
ZXJ2ZXIoCisgICAgICAoJycsIG9wdGlvbnMucG9ydCksIFdlYlNvY2tldEhUVFBSZXF1ZXN0SGFu
ZGxlcikKKworICBodHRwZC5zZXJ2ZV9mb3JldmVyKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICBtYWluKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25m
L3dlYnNvY2tldF9sb2dnaW5nLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29j
a2V0X2xvZ2dpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGNhMjYx
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL3dlYnNvY2tl
dF9sb2dnaW5nLnB5CkBAIC0wLDAgKzEsNjYgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMi40CisjCisj
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCisKKyIiIkxvZ2dpbmcgY29uZmlndXJhdGlvbiBmb3IgV2ViIFNv
Y2tldC4KKworVGhpcyBtb2R1bGUgaGFuZGxlcyBsb2dnaW5nIHNldHRpbmcgZm9yIFdlYiBTb2Nr
ZXQgU2VydmVyIGFuZCBDbGllbnQuCisiIiIKKworCitpbXBvcnQgbG9nZ2luZworCisKK19MT0df
TEVWRUxTID0geworICAgICdkZWJ1Zyc6IGxvZ2dpbmcuREVCVUcsCisgICAgJ2luZm8nOiBsb2dn
aW5nLklORk8sCisgICAgJ3dhcm5pbmcnOiBsb2dnaW5nLldBUk5JTkcsCisgICAgJ2Vycm9yJzog
bG9nZ2luZy5FUlJPUiwKKyAgICAnY3JpdGljYWwnOiBsb2dnaW5nLkNSSVRJQ0FMfQorCisKK2Rl
ZiBfR2V0TG9nTGV2ZWwob3B0aW9ucyk6CisgIGlmIG9wdGlvbnMudmVyYm9zZToKKyAgICByZXR1
cm4gbG9nZ2luZy5ERUJVRworICByZXR1cm4gX0xPR19MRVZFTFMuZ2V0KG9wdGlvbnMubG9nX2xl
dmVsLCBsb2dnaW5nLklORk8pCisKKworZGVmIEFkZExvZ2dpbmdPcHRpb25zKHBhcnNlcik6Cisg
IHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBkZXN0PSd2ZXJib3NlJywKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAg
ICAgICAgICAgICAgICAgICAgaGVscD0ndmVyYm9zZScpCisgIHBhcnNlci5hZGRfb3B0aW9uKCct
LWxvZ19sZXZlbCcsIGRlc3Q9J2xvZ19sZXZlbCcsIHR5cGU9J3N0cicsCisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9J2luZm8nLCBoZWxwPSdkZWJ1Zy9pbmZvL3dhcm5pbmcvZXJyb3IvY3Jp
dGljYWwnKQorCisKK2RlZiBDb25maWd1cmVMb2dnaW5nKG9wdGlvbnMpOgorICBsb2dnaW5nLmJh
c2ljQ29uZmlnKGxldmVsPV9HZXRMb2dMZXZlbChvcHRpb25zKSwKKyAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2xvZ2dpbmdfdW5p
dHRlc3QucHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfbG9nZ2luZ191
bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOTAzYTk3Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvd2Vic29ja2V0X2xv
Z2dpbmdfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw2OSBAQAorIyEvdXNyL2Jpbi9weXRob24yLjQK
KyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciB3ZWIgc29ja2V0IGxvZ2dpbmcu
IiIiCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgd2Vic29j
a2V0X2xvZ2dpbmcKKworCitjbGFzcyBXZWJzb2NrZXRIYW5kbGVyUmVnaXN0cnlUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgZGVmIHRlc3RHZXRMb2dMZXZlbChzZWxmKToKKyAgICBjbGFzcyBN
b2NrT3B0aW9ucyhvYmplY3QpOgorICAgICAgcGFzcworCisgICAgY2FzZXMgPSBbCisgICAgICAg
ICMgbG9nX2xldmVsIG9wdGlvbiwgdmVyYm9zZSBvcHRpb24sIGV4cGVjdGVkIGxvZyBsZXZlbAor
ICAgICAgICAoJycsIEZhbHNlLCBsb2dnaW5nLklORk8pLAorICAgICAgICAoJ2RlYnVnJywgRmFs
c2UsIGxvZ2dpbmcuREVCVUcpLAorICAgICAgICAoJ2luZm8nLCBGYWxzZSwgbG9nZ2luZy5JTkZP
KSwKKyAgICAgICAgKCd3YXJuaW5nJywgRmFsc2UsIGxvZ2dpbmcuV0FSTklORyksCisgICAgICAg
ICgnZXJyb3InLCBGYWxzZSwgbG9nZ2luZy5FUlJPUiksCisgICAgICAgICgnY3JpdGljYWwnLCBG
YWxzZSwgbG9nZ2luZy5DUklUSUNBTCksCisgICAgICAgICgnJywgVHJ1ZSwgbG9nZ2luZy5ERUJV
RyksCisgICAgICAgICgnZGVidWcnLCBUcnVlLCBsb2dnaW5nLkRFQlVHKSwKKyAgICAgICAgKCdp
bmZvJywgVHJ1ZSwgbG9nZ2luZy5ERUJVRyksCisgICAgICAgICgnd2FybmluZycsIFRydWUsIGxv
Z2dpbmcuREVCVUcpLAorICAgICAgICAoJ2Vycm9yJywgVHJ1ZSwgbG9nZ2luZy5ERUJVRyksCisg
ICAgICAgICgnY3JpdGljYWwnLCBUcnVlLCBsb2dnaW5nLkRFQlVHKSwKKyAgICAgICAgXQorICAg
IGZvciBjYXNlIGluIGNhc2VzOgorICAgICAgb3B0aW9ucyA9IE1vY2tPcHRpb25zKCkKKyAgICAg
IG9wdGlvbnMubG9nX2xldmVsID0gY2FzZVswXQorICAgICAgb3B0aW9ucy52ZXJib3NlID0gY2Fz
ZVsxXQorICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXNlWzJdLCB3ZWJzb2NrZXRfbG9nZ2luZy5f
R2V0TG9nTGV2ZWwob3B0aW9ucykpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAg
dW5pdHRlc3QubWFpbigpCg==
</data>
<flag name="review"
          id="18222"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34124</attachid>
            <date>2009-08-05 01:52:13 -0700</date>
            <delta_ts>2009-09-30 02:41:44 -0700</delta_ts>
            <desc>Web Socket Server, in desired coding style, with shorter file names.</desc>
            <filename>ws-server-patch.txt</filename>
            <type>text/plain</type>
            <size>41679</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MWUwM2JkLi41ODMyMDJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDktMDct
MjEgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yNzQ5MAorICAgICAgICBXZWIgU29ja2V0cyBUZXN0IEluZnJhc3RydWN0
dXJlIFBhcnQgMS8zOiBTZXJ2ZXIKKworICAgICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tl
dC5weToKKyAgICAgICAgKiB3ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfY2xpZW50LnB5OgorICAg
ICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyLnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5LnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9oYW5kbGVyX3JlZ2lzdHJ5X3VuaXR0ZXN0LnB5OgorICAg
ICAgICAqIHdlYnNvY2tldC9jb25mL3dlYnNvY2tldF9sb2dnaW5nLnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9sb2dnaW5nX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIHdl
YnNvY2tldC9jb25mL3dlYnNvY2tldF9zZXJ2ZXIucHk6CisKIDIwMDktMDctMjAgIEFkYW0gTGFu
Z2xleSAgPGFnbEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvY2hhbm5lbC5weSBiL0xh
eW91dFRlc3RzL3dlYnNvY2tldC9jb25mL2NoYW5uZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uNTE4MmMxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC9jb25mL2NoYW5uZWwucHkKQEAgLTAsMCArMSwxMzIgQEAKKyMhL3Vzci9iaW4vcHl0
aG9uCisjIFJlcXVpcmVzIFB5dGhvbiAyLjMgYW5kIGxhdGVyLgorIworIyBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworIiIiV2ViIFNvY2tldCBjaGFubmVsIGltcGxlbWVudGF0aW9uLgorCitXZWIgU29ja2V0
IGNoYW5uZWwgaXMgYW4gYWJzdHJhY3Rpb24gb2YgdGhlIHVuZGVybHlpbmcgc29ja2V0IGFmdGVy
IGhhbmRzaGFrZQoraGFzIGJlZW4gY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyIiIgorCisKK2lt
cG9ydCBsb2dnaW5nCisKKworX19hbGxfXyA9IFsnV2ViU29ja2V0Q2hhbm5lbCddCisKKworY2xh
c3MgV2ViU29ja2V0Q2hhbm5lbChvYmplY3QpOgorICAgICIiIkFic3RyYWN0aW9uIG9mIHRoZSB1
bmRlcmx5aW5nIHNvY2tldCBzdWNjZXNzZnVsbHkgaGFuZHNoYWtlZC4iIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBzb2NrZXRfKToKKyAgICAgICAgc2VsZi5fc29ja2V0ID0gc29ja2V0Xwor
CisgICAgZGVmIHJlY2VpdmVfbWVzc2FnZShzZWxmKToKKyAgICAgICAgIiIiUmVjZWl2ZXMgYSBX
ZWIgU29ja2V0IGZyYW1lIGFuZCByZXR1cm5zIGl0cyBwYXlsb2FkIGluIHV0Zi04LiIiIgorICAg
ICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZnJhbWVfdHlwZV9zdHIgPSBzZWxmLl9zb2Nr
ZXQucmVjdigxKQorICAgICAgICAgICAgaWYgbm90IGZyYW1lX3R5cGVfc3RyOgorICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBmcmFtZV90eXBlID0gb3JkKGZyYW1lX3R5
cGVfc3RyWzBdKQorICAgICAgICAgICAgaWYgKGZyYW1lX3R5cGUgJiAweDgwKSA9PSAweDgwOgor
ICAgICAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuX3BheWxvYWRfbGVuZ3RoKCkKKyAgICAgICAg
ICAgICAgICBpZiBsZW5ndGggaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLnJlY2VpdmVfYnl0ZXMobGVuZ3RoKQorICAg
ICAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnRGlzY2FyZCBhIGZyYW1lIHdpdGggdHlwZSAleCBs
ZW4gJWQnICUKKyAgICAgICAgICAgICAgICAgICAgKGZyYW1lX3R5cGUsIGxlbmd0aCkpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUmVhZCB1bnRpbCB0aGUgdGVybWluYXRv
ci4KKyAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLnJlYWRfdW50aWwoJ1x4ZmYnKQorCisgICAg
ICAgICAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAgICAgICAgICAgICAgICAgICBk
YXRhID0gbXNnLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmlu
Zm8oJ3JlY2VpdmVfbWVzc2FnZTogJXInICUgZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGRhdGEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dn
aW5nLmluZm8oJ0Rpc2NhcmQgYSBmcmFtZSBvZiB1bmtub3duIHR5cGU6ICV4IDogJXInICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChmcmFtZV90eXBlLCBtc2cpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNlbmRfbWVzc2FnZShzZWxmLCBtc2cpOgorICAg
ICAgICBsb2dnaW5nLmluZm8oJ3NlbmRfbWVzc2FnZTogJXInICUgbXNnKQorICAgICAgICBlbmNv
ZGVkX21zZyA9IG1zZy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5zZW5kX2J5dGVzKCdc
eDAwJyArIGVuY29kZWRfbXNnICsgJ1x4ZmYnKQorCisgICAgZGVmIHNlbmRfYnl0ZXMoc2VsZiwg
Ynl0ZXMpOgorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZChieXRlcykKKworICAgIGRlZiByZWFk
X3VudGlsKHNlbGYsIHRlcm0sIGluY2x1ZGVfdGVybT1GYWxzZSk6CisgICAgICAgIG1zZyA9IFtd
CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjaCA9IHNlbGYuX3NvY2tldC5yZWN2
KDEpCisgICAgICAgICAgICBpZiBjaCA9PSB0ZXJtOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICBtc2cuYXBwZW5kKGNoKQorICAgICAgICBpZiBpbmNsdWRlX3Rlcm06CisgICAg
ICAgICAgICBtc2cuYXBwZW5kKHRlcm0pCisgICAgICAgIHJldHVybiAnJy5qb2luKG1zZykKKwor
ICAgIGRlZiByZWNlaXZlX2J5dGVzKHNlbGYsIGxlbmd0aCk6CisgICAgICAgIG1zZyA9IFtdCisg
ICAgICAgIHdoaWxlIGxlbmd0aCA+IDA6CisgICAgICAgICAgICBkYXRhID0gTm9uZQorICAgICAg
ICAgICAgZGF0YSA9IHNlbGYuX3NvY2tldC5yZWN2KGxlbmd0aCkKKyAgICAgICAgICAgIG1zZy5h
cHBlbmQoZGF0YSkKKyAgICAgICAgICAgIGxlbmd0aCAtPSBsZW4oZGF0YSkKKyAgICAgICAgcmV0
dXJuICcnLmpvaW4obXNnKQorCisgICAgZGVmIGV4cGVjdChzZWxmLCBleHBlY3RlZF9ieXRlcyk6
CisgICAgICAgIGFjdHVhbF9ieXRlcyA9IHNlbGYucmVjZWl2ZV9ieXRlcyhsZW4oZXhwZWN0ZWRf
Ynl0ZXMpKQorICAgICAgICByZXR1cm4gYWN0dWFsX2J5dGVzID09IGV4cGVjdGVkX2J5dGVzCisK
KyAgICBkZWYgcmVhZF9oZWFkZXJzKHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gW10KKyAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGhlYWRlciA9IHNlbGYucmVhZF91bnRpbCgnXHIn
KQorICAgICAgICAgICAgc2VsZi5leHBlY3QoJ1xuJykKKyAgICAgICAgICAgIGlmIG5vdCBoZWFk
ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlcnMKKyAgICAgICAgICAgIGhlYWRlcnMu
YXBwZW5kKGhlYWRlcikKKworICAgIGRlZiBfcGF5bG9hZF9sZW5ndGgoc2VsZik6CisgICAgICAg
IGxlbmd0aCA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGJfc3RyID0gc2Vs
Zi5fc29ja2V0LnJlY3YoMSkKKyAgICAgICAgICAgIGlmIG5vdCBiX3N0cjoKKyAgICAgICAgICAg
ICAgICBsb2dnaW5nLmluZm8oJ0ZyYW1lIGxlbmd0aCBieXRlKHMpIGVuZGVkIHByZW1hdHVyZWx5
LicpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGIgPSBvcmQoYl9z
dHJbMF0pCisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggKiAxMjggKyAoYiAmIDB4N2YpCisg
ICAgICAgICAgICBpZiAoYiAmIDB4ODApID09IDA6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgcmV0dXJuIGxlbmd0aAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
Y29uZi9jb21tb24ucHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi9jb21tb24ucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNkZjRkMAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL2NvbW1vbi5weQpAQCAtMCwwICsxLDQ1IEBA
CisjIS91c3IvYmluL3B5dGhvbgorIyBSZXF1aXJlcyBQeXRob24gMi4zIGFuZCBsYXRlci4KKyMK
KyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldlYiBTb2NrZXRzIGNvbW1vbiBjb25zdGFudHMgYW5k
IGZ1bmN0aW9ucy4KKyIiIgorCisKK19fYWxsX18gPSBbJ0RFRkFVTFRfV1NfUE9SVF9JTl9TUEVD
JywgJ0RFRkFVTFRfV1NfUE9SVF9GT1JfVEVTVCddCisKKworIyBEZWZhdWx0IFdlYiBTb2NrZXQg
cG9ydCBkZWZpbmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uLgorREVGQVVMVF9XU19QT1JUX0lOX1NQ
RUMgPSA4MQorCisjIERlZmF1bHQgV2ViIFNvY2tldCBwb3J0IHRvIHVzZSBmb3IgdGVzdGluZyBv
dXIgV2ViIFNvY2tldCBzZXJ2ZXIuCitERUZBVUxUX1dTX1BPUlRfRk9SX1RFU1QgPSA4MDgxCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL2hhbmRsZXIucHkgYi9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvY29uZi9oYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAuLjNmNTYwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJz
b2NrZXQvY29uZi9oYW5kbGVyLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyMhL3Vzci9iaW4vcHl0aG9u
CisjIFJlcXVpcmVzIFB5dGhvbiAyLjMgYW5kIGxhdGVyLgorIworIyBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworCisiIiJXZWIgU29ja2V0IEhhbmRsZXIuCisKK1dlYlNvY2tldEhUVFBSZXF1ZXN0SGFuZGxl
ciBjYWxscyBXZWJTb2NrZXRIYW5kbGVyIGFmdGVyIGhhbmRzaGFrZS4KKyIiIgorCisKK19fYWxs
X18gPSBbJ1dlYlNvY2tldEhhbmRsZXInXQorCisKK2NsYXNzIFdlYlNvY2tldEhhbmRsZXIob2Jq
ZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBXZWIgU29ja2V0IGhhbmRsZXIuIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CisgICAgICAgIHNlbGYuY2hhbm5lbCA9IGNo
YW5uZWwKKworICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgIHBhc3MKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvaGFuZGxlcl9yZWdpc3RyeS5weSBiL0xheW91
dFRlc3RzL3dlYnNvY2tldC9jb25mL2hhbmRsZXJfcmVnaXN0cnkucHkKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMC4uMWFkNjM5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC9jb25mL2hhbmRsZXJfcmVnaXN0cnkucHkKQEAgLTAsMCArMSwxOTQgQEAK
KyMhL3Vzci9iaW4vcHl0aG9uCisjIFJlcXVpcmVzIFB5dGhvbiAyLjMgYW5kIGxhdGVyLgorIwor
IyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworCisiIiJSZWdpc3RyeSBvZiBXZWJTb2NrZXRIYW5kbGVyLgor
CitUaGlzIGlzIGEgcmVnaXN0cnkgb2YgV2ViU29ja2V0SGFuZGxlciBkZWZpbml0aW9ucy4gRGVm
aW5pdGlvbnMgY2FuIGJlIHBhc3NlZAorYXMgc3RyaW5ncyBvciBhcyBmaWxlcyBuYW1lZCAuKl93
c2gucHkuCisKK0EgZGVyaXZlZCBjbGFzcyBvZiBXZWJTb2NrZXRIYW5kbGVyIG11c3QgYmUgZGVm
aW5lZCBpbiBhIHN0cmluZyBvciBhIGZpbGUuCitJZiBtb3JlIHRoYW4gb25lIGRlcml2ZWQgY2xh
c3NlcyBhcmUgZGVmaW5lZCwgZm9sbG93aW5nIHNlbGVjdGlvbiBydWxlIGlzCithcHBsaWVkOgor
CisxLiBJZiBhIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gV0VCU09DS0VUX0hBTkRMRVIgdmFyaWFi
bGUsIHVzZSBpdC4KKzIuIE90aGVyd2lzZSwgdXNlIHRoZSBtb3N0LWRlcml2ZWQgaGFuZGxlci4g
SWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUKKyAgIG1vc3QtZGVyaXZlZCBoYW5kbGVycywgdXNl
IHRoZSBvbmUgZm91bmQgZmlyc3QuCisKKyAgIEZvciBleGFtcGxlLCBpZiBIYW5kbGVyQiBkZXJp
dmVzIGZyb20gSGFuZGxlckEsIHdoaWNoIGluIHR1cm4gZGVyaXZlcyBmcm9tCisgICBXZWJTb2Nr
ZXRIYW5kbGVyLCB1c2UgSGFuZGxlckIuCisKK1Jlc291cmNlIHBhdHRlcm4gd2hpY2ggYSBoYW5k
bGVyIGlzIGFzc29jaWF0ZWQgd2l0aCBzaG91bGQgYmUgZXhwbGljaXRseQorc3BlY2lmaWVkIGZv
ciBhIGhhbmRsZXIgZGVmaW5lZCBpbiBhIHN0cmluZy4gRm9yIGEgaGFuZGxlciBpbiBhIGZpbGUs
IHRoZSBwYXRoCitvZiB0aGUgZmlsZSByZWxhdGl2ZSB0byB0aGUgaGFuZGxlciBiYXNlIGRpcmVj
dG9yeSwgZXhjbHVkaW5nIF93c2gucHksIGlzIHVzZWQKK2FzIHRoZSByZXNvdXJjZSBwYXR0ZXJu
LgorCitSZXNvdXJjZSBwYXR0ZXJuIGNhbiBiZSBzcGVjaWZpZWQgaW4gYSBmaWxlIG9yIGEgc3Ry
aW5nIGJ5IGFzc2lnbmluZyB0aGF0IHRvCitSRVNPVVJDRV9QQVRURVJOLiBJZiBzcGVjaWZpZWQs
IGl0IHdpbGwgb3ZlcnJpZGUgdGhlIG9uZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZQorZmlsZSBw
YXRoLgorCitCeSByZXBlYXRpbmcgc291cmNpbmcsIGRlZmluaXRpb25zIGluIG11bHRpcGxlIHNv
dXJjZSBmaWxlcyBjYW4gYmUgdXNlZC4KKworVHdvIGhhbmRsZXJzIG9mIHRoZSBzYW1lIG5hbWUg
ZGVmaW5lZCBpbiBkaWZmZXJlbnQgc291cmNlIGZpbGVzIHdvbid0IGNvbmZsaWN0LgorVGhhdCBp
cywgYm90aCBoYW5kbGVycyByZW1haW4gZWZmZWN0aXZlIChhcyBmYXIgYXMgdGhlIHJlc291cmNl
IHBhdHRlcm4gZG9lc24ndAorY29uZmxpY3QpLiBJbiBjYXNlIG9mIHJlc291cmNlIHBhdHRlcm4g
Y29uZmxpY3QsIGhhbmRsZXJzIHJlZ2lzdGVyZWQgZWFybGllciBhcmUKK2dpdmVuIGhpZ2hlciBw
cmVjZWRlbmNlLgorCitFeGFtcGxlOgorCitUbyByZWdpc3RlciBNeUhhbmRsZXIgZm9yIC9oZWxs
by9lY2hvOgorCis8YmFzZV9kaXI+L2hlbGxvL2VjaG9fd3NoLnB5CistLS0tLS0tLQorZnJvbSBo
YW5kbGVyIGltcG9ydCBXZWJTb2NrZXRIYW5kbGVyCisKK2NsYXNzIFdlYlNvY2tldEVjaG9IYW5k
bGVyKFdlYlNvY2tldEhhbmRsZXIpOgorICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgIG1z
ZyA9IHNlbGYuY2hhbm5lbC5yZWNlaXZlX21lc3NhZ2UoKQorICAgICAgICBpZiBtc2c6CisgICAg
ICAgICAgICBzZWxmLmNoYW5uZWwuc2VuZF9tZXNzYWdlKG1zZykKKy0tLS0tLS0tCisKKyIiIgor
CisKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUK
KworZnJvbSBoYW5kbGVyIGltcG9ydCBXZWJTb2NrZXRIYW5kbGVyCisKKworX19hbGxfXyA9IFsn
V2ViU29ja2V0SGFuZGxlclJlZ2lzdHJ5J10KKworCitfU09VUkNFX1BBVEhfUEFUVEVSTiA9IHJl
LmNvbXBpbGUocicoP2kpX3dzaFwucHkkJykKKworX1JFU09VUkNFX1BBVFRFUk4gPSAnUkVTT1VS
Q0VfUEFUVEVSTicKKworX1dFQlNPQ0tFVF9IQU5ETEVSID0gJ1dFQlNPQ0tFVF9IQU5ETEVSJwor
CisKK2RlZiBfY29tcGFyZV9jbGFzcyhjbGFzc19hLCBjbGFzc19iKToKKyAgICAiIiJDb21wYXJl
IGNsYXNzZXMuCisKKyAgICBXZSBjb25zaWRlciBjbGFzcyBBIGlzIHNtYWxsZXIgdGhhbiBjbGFz
cyBCIGlmIEEgZGVyaXZlcyBmcm9tIEIsIGVpdGhlcgorICAgIGRpcmVjdGx5IG9yIGluZGlyZWN0
bHkuIFdlIGNvbnNpZGVyIEEgZXF1YWxzIEIgaWYgdGhlcmUgaXMgbm8KKyAgICBzdXBlcmNsYXNz
L3N1YmNsYXNzIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28uCisgICAgIiIiCisgICAgaWYg
aXNzdWJjbGFzcyhjbGFzc19hLCBjbGFzc19iKToKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhjbGFz
c19iLCBjbGFzc19hKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVybiAtMQor
ICAgIGlmIGlzc3ViY2xhc3MoY2xhc3NfYiwgY2xhc3NfYSk6CisgICAgICAgIHJldHVybiAxCisg
ICAgcmV0dXJuIDAKKworCitkZWYgX2dldF9yZXNvdXJjZV9wYXRoX2NvbnZlcnRlcihiYXNlX2Rp
cmVjdG9yeSk6CisgICAgYmFzZV9sZW4gPSBsZW4oYmFzZV9kaXJlY3RvcnkpCisgICAgZXh0X2xl
biA9IGxlbignX3dzaC5weScpCisgICAgZGVmIF9Db252ZXJ0VG9SZXNvdXJjZVBhdGgoZmlsZV9w
YXRoKToKKyAgICAgICAgcmVzb3VyY2VfcGF0dGVybiA9IGZpbGVfcGF0aFtiYXNlX2xlbjpdLnJl
cGxhY2UoJ1xcJywgJy8nKQorICAgICAgICBpZiBub3QgcmVzb3VyY2VfcGF0dGVybi5zdGFydHN3
aXRoKCcvJyk6CisgICAgICAgICAgICByZXNvdXJjZV9wYXR0ZXJuID0gJy8nICsgcmVzb3VyY2Vf
cGF0dGVybgorICAgICAgICByZXR1cm4gcmVzb3VyY2VfcGF0dGVybls6LWV4dF9sZW5dCisgICAg
cmV0dXJuIF9Db252ZXJ0VG9SZXNvdXJjZVBhdGgKKworCitkZWYgX3NvdXJjZV9maWxlX25hbWVz
KGRpcmVjdG9yeSk6CisgICAgIiIiWWllbGQgV2ViIFNvY2tldCBIYW5kbGVyIHNvdXJjZSBmaWxl
IG5hbWVzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkuIiIiCisKKyAgICBmb3Igcm9vdCwgdW51c2Vk
X2RpcnMsIGZpbGVzIGluIG9zLndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgZm9yIGJhc2UgaW4g
ZmlsZXM6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGJhc2UpCisgICAg
ICAgICAgICBpZiBfU09VUkNFX1BBVEhfUEFUVEVSTi5zZWFyY2gocGF0aCk6CisgICAgICAgICAg
ICAgICAgbG9nZ2luZy5pbmZvKCdXZWJTb2NrZXRIYW5kbGVyIHNvdXJjZSBmaWxlOicgKyBwYXRo
KQorICAgICAgICAgICAgICAgIHlpZWxkIHBhdGgKKworCitjbGFzcyBXZWJTb2NrZXRIYW5kbGVy
UmVnaXN0cnkob2JqZWN0KToKKyAgICAiIiJXZWIgU29ja2V0IEhhbmRsZXIgcmVnaXN0cnkuCisK
KyAgICBTZWUgdGhlIG1vZHVsZSBkb2N1bWVudCBmb3IgZGV0YWlscy4iIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW50cmllcyA9IFtdCisKKyAgICBkZWYgX19n
ZXRpdGVtX18oc2VsZiwgdXJsKToKKyAgICAgICAgZm9yIGVudHJ5IGluIHNlbGYuX2VudHJpZXM6
CisgICAgICAgICAgICBpZiBlbnRyeVswXS5zZWFyY2godXJsKToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZW50cnlbMV0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiByZWdpc3Rlcihz
ZWxmLCB1cmxfcGF0dGVybl9zdHJpbmcsIGhhbmRsZXIpOgorICAgICAgICAiIiJSZWdpc3RlciBh
IGhhbmRsZXIgZm9yIGEgcGF0dGVybi4iIiIKKworICAgICAgICBzZWxmLl9lbnRyaWVzLmFwcGVu
ZCgocmUuY29tcGlsZSh1cmxfcGF0dGVybl9zdHJpbmcpLCBoYW5kbGVyKSkKKworICAgIGRlZiBz
b3VyY2Uoc2VsZiwgc291cmNlX3N0ciwgcmVzb3VyY2VfcGF0dGVybik6CisgICAgICAgICIiIlNv
dXJjZSBhIGhhbmRsZXIgZGVmaW5pdGlvbiBzdHJpbmcuIiIiCisKKyAgICAgICAgZ2xvYmFsX2Rp
YyA9IHt9CisgICAgICAgIGV4ZWMgc291cmNlX3N0ciBpbiBnbG9iYWxfZGljCisgICAgICAgIGlm
IF9SRVNPVVJDRV9QQVRURVJOIGluIGdsb2JhbF9kaWM6CisgICAgICAgICAgICAjIFVzZSB0aGUg
cmVzb3VyY2UgcGF0dGVybiBpbiB0aGUgc291cmNlLCBpZiBzcGVjaWZpZWQuCisgICAgICAgICAg
ICByZXNvdXJjZV9wYXR0ZXJuID0gZ2xvYmFsX2RpY1tfUkVTT1VSQ0VfUEFUVEVSTl0KKyAgICAg
ICAgaGFuZGxlcnMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBnbG9iYWxfZGljOgorICAgICAg
ICAgICAgaGFuZGxlciA9IGdsb2JhbF9kaWNbbmFtZV0KKyAgICAgICAgICAgIGlmIChpbnNwZWN0
LmlzY2xhc3MoaGFuZGxlcikgYW5kCisgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhoYW5kbGVy
LCBXZWJTb2NrZXRIYW5kbGVyKSk6CisgICAgICAgICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGhh
bmRsZXIpCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSBfV0VCU09DS0VUX0hBTkRMRVI6Cisg
ICAgICAgICAgICAgICAgICAgICMgSWYgYSBoYW5kbGVyIGlzIGFzc2lnbmVkIHRvIFdFQlNPQ0tF
VF9IQU5ETEVSIHZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAjIHVzZSBpdC4KKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBoYW5kbGVyc1stMTpdCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBoYW5kbGVyczoKKyAgICAgICAgICAgIGxvZ2dpbmcu
d2FybmluZygnTm8gaGFuZGxlciByZWdpc3RlcmVkIGZvciAlci4nICUgcmVzb3VyY2VfcGF0dGVy
bikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBoYW5kbGVycy5zb3J0KF9jb21wYXJlX2Ns
YXNzKQorICAgICAgICBoYW5kbGVyID0gaGFuZGxlcnNbMF0KKyAgICAgICAgc2VsZi5yZWdpc3Rl
cihyZXNvdXJjZV9wYXR0ZXJuLCBoYW5kbGVyKQorICAgICAgICBsb2dnaW5nLmluZm8oCisgICAg
ICAgICAgICAnUmVnaXN0ZXJlZCBoYW5kbGVyICVyIGZvciAlci4nICUKKyAgICAgICAgICAgICho
YW5kbGVyLl9fbmFtZV9fLCByZXNvdXJjZV9wYXR0ZXJuKSkKKworICAgIGRlZiBzb3VyY2VfZmls
ZXNfaW5fZGlyKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgICAgICIiIlNvdXJjZSBhbGwgdGhlIGhh
bmRsZXIgc291cmNlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuIiIiCisKKyAgICAgICAgdG9fcmVz
b3VyY2VfcGF0aCA9IF9nZXRfcmVzb3VyY2VfcGF0aF9jb252ZXJ0ZXIoZGlyZWN0b3J5KQorICAg
ICAgICBmb3Igc291cmNlIGluIF9zb3VyY2VfZmlsZV9uYW1lcyhkaXJlY3RvcnkpOgorICAgICAg
ICAgICAgc2VsZi5zb3VyY2UoJycuam9pbihvcGVuKHNvdXJjZSkpLCB0b19yZXNvdXJjZV9wYXRo
KHNvdXJjZSkpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC9jb25mL2hhbmRs
ZXJfcmVnaXN0cnlfdW5pdHRlc3QucHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi9oYW5k
bGVyX3JlZ2lzdHJ5X3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAuLjUzNTI2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29u
Zi9oYW5kbGVyX3JlZ2lzdHJ5X3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTg4IEBACisjIS91c3Iv
YmluL3B5dGhvbgorIyBSZXF1aXJlcyBQeXRob24gMi4zIGFuZCBsYXRlci4KKyMKKyMgQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBXZWJTb2NrZXRIYW5kbGVyUmVnaXN0cnkuIiIiCisK
KworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gaGFuZGxlciBpbXBvcnQgV2ViU29ja2V0SGFuZGxl
cgorZnJvbSBoYW5kbGVyX3JlZ2lzdHJ5IGltcG9ydCBXZWJTb2NrZXRIYW5kbGVyUmVnaXN0cnkK
K2Zyb20gaGFuZGxlcl9yZWdpc3RyeSBpbXBvcnQgX2NvbXBhcmVfY2xhc3MKK2Zyb20gaGFuZGxl
cl9yZWdpc3RyeSBpbXBvcnQgX2dldF9yZXNvdXJjZV9wYXRoX2NvbnZlcnRlcgorCisKK19URVNU
X1NPVVJDRV8xID0gIiIiCitmcm9tIGhhbmRsZXIgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXIKKwor
Y2xhc3MgTXlIYW5kbGVyMShXZWJTb2NrZXRIYW5kbGVyKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgY2hhbm5lbF8pOgorICAgICAgICBXZWJTb2NrZXRIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNo
YW5uZWxfKQorIiIiCisKK19URVNUX1NPVVJDRV8yID0gIiIiCitmcm9tIGhhbmRsZXIgaW1wb3J0
IFdlYlNvY2tldEhhbmRsZXIKKworY2xhc3MgTXlIYW5kbGVyMihXZWJTb2NrZXRIYW5kbGVyKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbF8pOgorICAgICAgICBXZWJTb2NrZXRIYW5k
bGVyLl9faW5pdF9fKHNlbGYsIGNoYW5uZWxfKQorCitSRVNPVVJDRV9QQVRURVJOID0gcicvd2Vi
a2l0JworIiIiCisKK19URVNUX1NPVVJDRV8zID0gIiIiCitmcm9tIGhhbmRsZXIgaW1wb3J0IFdl
YlNvY2tldEhhbmRsZXIKKworY2xhc3MgTXlIYW5kbGVyMzEoV2ViU29ja2V0SGFuZGxlcik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWxfKToKKyAgICAgICAgV2ViU29ja2V0SGFuZGxl
ci5fX2luaXRfXyhzZWxmLCBjaGFubmVsXykKKworY2xhc3MgTXlIYW5kbGVyMzIoTXlIYW5kbGVy
MzEpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsXyk6CisgICAgICAgIFdlYlNvY2tl
dEhhbmRsZXIuX19pbml0X18oc2VsZiwgY2hhbm5lbF8pCisKK2NsYXNzIE15SGFuZGxlcjMzKE15
SGFuZGxlcjMyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbF8pOgorICAgICAgICBX
ZWJTb2NrZXRIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNoYW5uZWxfKQorCitjbGFzcyBTb21lSGVs
cGVyKG9iamVjdCk6CisgICAgcGFzcworIiIiCisKK19URVNUX1NPVVJDRV80ID0gIiIiCitmcm9t
IGhhbmRsZXIgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXIKKworY2xhc3MgTXlIYW5kbGVyNDEoV2Vi
U29ja2V0SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoYW5uZWxfKToKKyAgICAg
ICAgV2ViU29ja2V0SGFuZGxlci5fX2luaXRfXyhzZWxmLCBjaGFubmVsXykKKworY2xhc3MgTXlI
YW5kbGVyNDIoTXlIYW5kbGVyNDEpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsXyk6
CisgICAgICAgIFdlYlNvY2tldEhhbmRsZXIuX19pbml0X18oc2VsZiwgY2hhbm5lbF8pCisKK2Ns
YXNzIE15SGFuZGxlcjQzKE15SGFuZGxlcjQyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hh
bm5lbF8pOgorICAgICAgICBXZWJTb2NrZXRIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNoYW5uZWxf
KQorCitjbGFzcyBTb21lSGVscGVyKG9iamVjdCk6CisgICAgcGFzcworCitXRUJTT0NLRVRfSEFO
RExFUiA9IE15SGFuZGxlcjQxCisiIiIKKworCitkZWYgX2NyZWF0ZV9kdW1teV9oYW5kbGVyKCk6
CisgICAgY2xhc3MgRHVtbXlIYW5kbGVyKFdlYlNvY2tldEhhbmRsZXIpOgorICAgICAgICBkZWYg
X19pbml0X18oc2VsZiwgY2hhbm5lbF8pOgorICAgICAgICAgICAgV2ViU29ja2V0SGFuZGxlci5f
X2luaXRfXyhzZWxmLCBjaGFubmVsXykKKyAgICByZXR1cm4gRHVtbXlIYW5kbGVyCisKKworY2xh
c3MgV2Vic29ja2V0SGFuZGxlclJlZ2lzdHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWdpc3RyeSA9IFdlYlNvY2tldEhhbmRs
ZXJSZWdpc3RyeSgpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX2NsYXNzKHNlbGYpOgorICAgICAg
ICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQihB
KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDMShCKToKKyAgICAgICAgICAg
IHBhc3MKKworICAgICAgICBjbGFzcyBDMihCKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDAsIF9jb21wYXJlX2NsYXNzKEEsIEEpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIF9jb21wYXJlX2NsYXNzKEMxLCBDMikpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoMSwgX2NvbXBhcmVfY2xhc3MoQSwgQikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMSwgX2NvbXBhcmVfY2xhc3MoQSwgQzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0x
LCBfY29tcGFyZV9jbGFzcyhCLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgX2Nv
bXBhcmVfY2xhc3MoQzEsIEEpKQorCisgICAgZGVmIHRlc3RfZ2V0X3Jlc291cmNlX3BhdGhfY29u
dmVydGVyKHNlbGYpOgorICAgICAgICBjb252ZXJ0ZXIxID0gX2dldF9yZXNvdXJjZV9wYXRoX2Nv
bnZlcnRlcignL3NvbWUvcGF0aCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oYW5kbGVy
JywgY29udmVydGVyMSgnL3NvbWUvcGF0aC9oYW5kbGVyX3dzaC5weScpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCcvc3ViL2hhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnZlcnRlcjEoJy9zb21lL3BhdGgvc3ViL2hhbmRsZXJfd3NoLnB5JykpCisKKyAgICAgICAgY29u
dmVydGVyMiA9IF9nZXRfcmVzb3VyY2VfcGF0aF9jb252ZXJ0ZXIoJy9zb21lL3BhdGgvJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2hhbmRsZXInLCBjb252ZXJ0ZXIyKCcvc29tZS9wYXRo
L2hhbmRsZXJfd3NoLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9zdWIvaGFuZGxl
cicsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyMignL3NvbWUvcGF0aC9zdWIv
aGFuZGxlcl93c2gucHknKSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2ludmFsaWRfcGF0dGVy
bihzZWxmKToKKyAgICAgICAgZGVmIHJlZ2lzdGVySW52YWxpZFBhdHRlcm4oKToKKyAgICAgICAg
ICAgIHNlbGYuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHInKicsIF9jcmVhdGVfZHVtbXlfaGFuZGxlcigp
KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHJlZ2lzdGVySW52YWxpZFBh
dHRlcm4pCisKKyAgICBkZWYgdGVzdF9nZXRfaXRlbShzZWxmKToKKyAgICAgICAgaGFuZGxlcl8x
ID0gX2NyZWF0ZV9kdW1teV9oYW5kbGVyKCkKKyAgICAgICAgc2VsZi5fcmVnaXN0cnkucmVnaXN0
ZXIocideL2FiYycsIGhhbmRsZXJfMSkKKyAgICAgICAgaGFuZGxlcl8yID0gX2NyZWF0ZV9kdW1t
eV9oYW5kbGVyKCkKKyAgICAgICAgc2VsZi5fcmVnaXN0cnkucmVnaXN0ZXIocidhYmMnLCBoYW5k
bGVyXzIpCisgICAgICAgIGhhbmRsZXJfMyA9IF9jcmVhdGVfZHVtbXlfaGFuZGxlcigpCisgICAg
ICAgIHNlbGYuX3JlZ2lzdHJ5LnJlZ2lzdGVyKHInWzAtOV0rJywgaGFuZGxlcl8zKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlcl8xLCBzZWxmLl9yZWdpc3RyeVsnL2FiYyddKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfMiwgc2VsZi5fcmVnaXN0cnlbJ3h5ei9h
YmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyXzMsIHNlbGYuX3JlZ2lzdHJ5
WycvMCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuX3JlZ2lzdHJ5Wycv
J10pCisKKyAgICBkZWYgdGVzdF9zb3VyY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgc2VsZi5fcmVnaXN0cnlbJy9leGFtcGxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoTm9uZSwgc2VsZi5fcmVnaXN0cnlbJy93ZWJraXQnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChOb25lLCBzZWxmLl9yZWdpc3RyeVsnL211bHRpcGxlJ10pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5fcmVnaXN0cnlbJy9hc3NpZ24nXSkKKworICAgICAgICBz
ZWxmLl9yZWdpc3RyeS5zb3VyY2UoX1RFU1RfU09VUkNFXzEsICcvZXhhbXBsZScpCisgICAgICAg
IHNlbGYuX3JlZ2lzdHJ5LnNvdXJjZShfVEVTVF9TT1VSQ0VfMiwgJy93aWxsL2JlL292ZXJyaWRk
ZW4nKQorICAgICAgICBzZWxmLl9yZWdpc3RyeS5zb3VyY2UoX1RFU1RfU09VUkNFXzMsICcvbXVs
dGlwbGUnKQorICAgICAgICBzZWxmLl9yZWdpc3RyeS5zb3VyY2UoX1RFU1RfU09VUkNFXzQsICcv
YXNzaWduJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnTXlIYW5kbGVyMScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fcmVnaXN0cnlbJy9leGFtcGxlJ10uX19uYW1lX18pCisg
ICAgICAgICMgVGhlIHJlc291cmNlIHBhdGggc3BlY2lmaWVkIGJ5IFJFU09VUkNFX1BBVFRFUk4g
aW4gdGhlIHNvdXJjZSBzaG91bGQKKyAgICAgICAgIyBiZSB1c2VkLgorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdNeUhhbmRsZXIyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9y
ZWdpc3RyeVsnL3dlYmtpdCddLl9fbmFtZV9fKQorICAgICAgICAjIFRoZSBtb3N0LWRlcml2ZWQg
aGFuZGxlciBpbiB0aGUgc291cmNlIHNob3VsZCBiZSB1c2VkLgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdNeUhhbmRsZXIzMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVn
aXN0cnlbJy9tdWx0aXBsZSddLl9fbmFtZV9fKQorICAgICAgICAjIFRoZSBoYW5kbGVyIGFzc2ln
bmVkIHRvIFdFQlNPQ0tFVF9IQU5ETEVSIHNob3VsZCBiZSB1c2VkLgorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdNeUhhbmRsZXI0MScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
cmVnaXN0cnlbJy9hc3NpZ24nXS5fX25hbWVfXykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L2NvbmYvbGl2ZW5lc3NfY2hlY2tfY2xpZW50LnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L2NvbmYvbGl2ZW5lc3NfY2hlY2tfY2xpZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAuLjdhYWU4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvY29uZi9saXZlbmVzc19jaGVja19jbGllbnQucHkKQEAgLTAsMCArMSwxMTYgQEAKKyMhL3Vz
ci9iaW4vcHl0aG9uCisjIFJlcXVpcmVzIFB5dGhvbiAyLjMgYW5kIGxhdGVyLgorIworIyBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworIiIiU2ltcGxlIFdlYiBTb2NrZXQgY2xpZW50IHRvIGNoZWNrIHRoZSBs
aXZlbnNzIG9mIHRoZSBzZXJ2ZXIuCisiIiIKKworCitpbXBvcnQgbG9nZ2luZworZnJvbSBvcHRw
YXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKK2ltcG9y
dCBzeXMKKworaW1wb3J0IGNoYW5uZWwKK2ltcG9ydCBjb21tb24KK2ltcG9ydCBsb2dnaW5nX2Nv
bmYKKworCitfX2FsbF9fID0gWydMaXZlbmVzc0NoZWNrQ2xpZW50J10KKworCitjbGFzcyBMaXZl
bmVzc0NoZWNrQ2xpZW50KG9iamVjdCk6CisgICAgIiIiV2ViIFNvY2tldCBjbGllbnQgdG8gY2hl
Y2sgdGhlIGxpdmVuZXNzIG9mIHRoZSBzZXJ2ZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2Vs
Ziwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisKKyAgICBkZWYg
Y2hlY2tfbGl2ZW5lc3Moc2VsZik6CisgICAgICAgIHNvY2tldF8gPSBzb2NrZXQuc29ja2V0KCkK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29ja2V0Xy5jb25uZWN0KChzZWxmLl9vcHRpb25z
Lmhvc3QsIHNlbGYuX29wdGlvbnMucG9ydCkpCisgICAgICAgICAgICBzZWxmLl9jaGFubmVsID0g
Y2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsKHNvY2tldF8pCisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5faGFuZHNoYWtlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldF8uY2xv
c2UoKQorCisgICAgZGVmIF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgIGxvZ2dpbmcuaW5mbygn
SGFuZHNoYWtlIChyZXNvdXJjZT0iJXMiLCBob3N0PSIlcyIsIG9yaWdpbj0iJXMiKScsCisgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLnJlc291cmNlLAorICAgICAgICAgICAgc2VsZi5fb3B0aW9u
cy5ob3N0LAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5vcmlnaW4pCisKKyAgICAgICAgc2Vs
Zi5fY2hhbm5lbC5zZW5kX2J5dGVzKAorICAgICAgICAgICAgJ0dFVCAlcyBIVFRQLzEuMVxyXG4n
ICUgc2VsZi5fb3B0aW9ucy5yZXNvdXJjZS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYu
X2NoYW5uZWwuc2VuZF9ieXRlcygnVXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgICAgIHNl
bGYuX2NoYW5uZWwuc2VuZF9ieXRlcygnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nKQorICAgICAg
ICBzZWxmLl9jaGFubmVsLnNlbmRfYnl0ZXMoCisgICAgICAgICAgICAnSG9zdDogJXNcclxuJyAl
IHNlbGYuX29wdGlvbnMuaG9zdC5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuX2NoYW5u
ZWwuc2VuZF9ieXRlcygKKyAgICAgICAgICAgICdPcmlnaW46ICVzXHJcbicgJSBzZWxmLl9vcHRp
b25zLm9yaWdpbi5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuX2NoYW5uZWwuc2VuZF9i
eXRlcygnXHJcbicpCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2NoYW5uZWwuZXhwZWN0KAorICAg
ICAgICAgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4n
CisgICAgICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAgICAgICAgICdDb25u
ZWN0aW9uOiBVcGdyYWRlXHJcbicpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg
IHNlbGYuX2NoYW5uZWwucmVhZF9oZWFkZXJzKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworZGVm
IG1haW4oKToKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorICAgIHBhcnNlci5hZGRfb3B0
aW9uKCctcycsICctLWhvc3QnLCBkZXN0PSdob3N0JywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0PSdsb2NhbGhvc3QnLCBoZWxwPSdzZXJ2ZXIgaG9zdCcpCisg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLCB0eXBlPSdp
bnQnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Y29tbW9uLkRFRkFVTFRfV1NfUE9S
VF9GT1JfVEVTVCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZXJ2ZXIgcG9ydCcpCisg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3JpZ2luJywgZGVzdD0nb3JpZ2luJywgdHlw
ZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdodHRwOi8vbG9jYWxo
b3N0LycsIGhlbHA9J29yaWdpbicpCisgICAgbG9nZ2luZ19jb25mLmFkZF9sb2dnaW5nX29wdGlv
bnMocGFyc2VyKQorICAgIChvcHRpb25zLCBfKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAg
IGxvZ2dpbmdfY29uZi5jb25maWd1cmVfbG9nZ2luZyhvcHRpb25zKQorCisgICAgb3B0aW9ucy5y
ZXNvdXJjZSA9ICcvTGl2ZW5lc3NUZXN0JworCisgICAgY2xpZW50ID0gTGl2ZW5lc3NDaGVja0Ns
aWVudChvcHRpb25zKQorICAgIHJlc3VsdCA9IGNsaWVudC5jaGVja19saXZlbmVzcygpCisgICAg
ZXhpdF9jb2RlID0gMAorICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgIGV4aXRfY29kZSA9IDEK
KyAgICBzeXMuZXhpdChleGl0X2NvZGUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICBtYWluKCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvbG9n
Z2luZ19jb25mLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvbG9nZ2luZ19jb25mLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwMmM1ZmQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi9sb2dnaW5nX2NvbmYucHkKQEAgLTAs
MCArMSw3MiBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgUmVxdWlyZXMgUHl0aG9uIDIuMyBhbmQg
bGF0ZXIuCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisKKyIiIkxvZ2dpbmcgY29uZmlndXJhdGlv
biBmb3IgV2ViIFNvY2tldC4KKworVGhpcyBtb2R1bGUgaGFuZGxlcyBsb2dnaW5nIHNldHRpbmcg
Zm9yIFdlYiBTb2NrZXQgU2VydmVyIGFuZCBDbGllbnQuCisiIiIKKworCitpbXBvcnQgbG9nZ2lu
ZworCisKK19fYWxsX18gPSBbJ2FkZF9sb2dnaW5nX29wdGlvbnMnLCAnY29uZmlndXJlX2xvZ2dp
bmcnXQorCisKK19MT0dfTEVWRUxTID0geworICAgICdkZWJ1Zyc6IGxvZ2dpbmcuREVCVUcsCisg
ICAgJ2luZm8nOiBsb2dnaW5nLklORk8sCisgICAgJ3dhcm5pbmcnOiBsb2dnaW5nLldBUk5JTkcs
CisgICAgJ2Vycm9yJzogbG9nZ2luZy5FUlJPUiwKKyAgICAnY3JpdGljYWwnOiBsb2dnaW5nLkNS
SVRJQ0FMLAorfQorCisKK2RlZiBfZ2V0X2xvZ19sZXZlbChvcHRpb25zKToKKyAgICBpZiBvcHRp
b25zLnZlcmJvc2U6CisgICAgICAgIHJldHVybiBsb2dnaW5nLkRFQlVHCisgICAgcmV0dXJuIF9M
T0dfTEVWRUxTLmdldChvcHRpb25zLmxvZ19sZXZlbCwgbG9nZ2luZy5JTkZPKQorCisKK2RlZiBh
ZGRfbG9nZ2luZ19vcHRpb25zKHBhcnNlcik6CisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy12Jywg
Jy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0ndmVyYm9zZScpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbG9nX2xldmVsJywgZGVzdD0n
bG9nX2xldmVsJywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
PSdpbmZvJywgaGVscD0nZGVidWcvaW5mby93YXJuaW5nL2Vycm9yL2NyaXRpY2FsJykKKworCitk
ZWYgY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucyk6CisgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygp
CisgICAgbG9nZ2luZy5nZXRMb2dnZXIoKS5zZXRMZXZlbChfZ2V0X2xvZ19sZXZlbChvcHRpb25z
KSkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvbG9nZ2luZ19jb25m
X3VuaXR0ZXN0LnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L2NvbmYvbG9nZ2luZ19jb25mX3Vu
aXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4ZDk2ZDcKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvY29uZi9sb2dnaW5nX2NvbmZf
dW5pdHRlc3QucHkKQEAgLTAsMCArMSw3MCBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgUmVxdWly
ZXMgUHl0aG9uIDIuMyBhbmQgbGF0ZXIuCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0
cyBmb3Igd2ViIHNvY2tldCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uIiIiCisKKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbG9nZ2luZ19jb25mCisKKworY2xhc3Mg
V2Vic29ja2V0SGFuZGxlclJlZ2lzdHJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVm
IHRlc3RfZ2V0X2xvZ19sZXZlbChzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ja09wdGlvbnMob2Jq
ZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAg
ICMgbG9nX2xldmVsIG9wdGlvbiwgdmVyYm9zZSBvcHRpb24sIGV4cGVjdGVkIGxvZyBsZXZlbAor
ICAgICAgICAgICAgKCcnLCBGYWxzZSwgbG9nZ2luZy5JTkZPKSwKKyAgICAgICAgICAgICgnZGVi
dWcnLCBGYWxzZSwgbG9nZ2luZy5ERUJVRyksCisgICAgICAgICAgICAoJ2luZm8nLCBGYWxzZSwg
bG9nZ2luZy5JTkZPKSwKKyAgICAgICAgICAgICgnd2FybmluZycsIEZhbHNlLCBsb2dnaW5nLldB
Uk5JTkcpLAorICAgICAgICAgICAgKCdlcnJvcicsIEZhbHNlLCBsb2dnaW5nLkVSUk9SKSwKKyAg
ICAgICAgICAgICgnY3JpdGljYWwnLCBGYWxzZSwgbG9nZ2luZy5DUklUSUNBTCksCisgICAgICAg
ICAgICAoJycsIFRydWUsIGxvZ2dpbmcuREVCVUcpLAorICAgICAgICAgICAgKCdkZWJ1ZycsIFRy
dWUsIGxvZ2dpbmcuREVCVUcpLAorICAgICAgICAgICAgKCdpbmZvJywgVHJ1ZSwgbG9nZ2luZy5E
RUJVRyksCisgICAgICAgICAgICAoJ3dhcm5pbmcnLCBUcnVlLCBsb2dnaW5nLkRFQlVHKSwKKyAg
ICAgICAgICAgICgnZXJyb3InLCBUcnVlLCBsb2dnaW5nLkRFQlVHKSwKKyAgICAgICAgICAgICgn
Y3JpdGljYWwnLCBUcnVlLCBsb2dnaW5nLkRFQlVHKSwKKyAgICAgICAgXQorICAgICAgICBmb3Ig
Y2FzZSBpbiBjYXNlczoKKyAgICAgICAgICAgIG9wdGlvbnMgPSBNb2NrT3B0aW9ucygpCisgICAg
ICAgICAgICBvcHRpb25zLmxvZ19sZXZlbCA9IGNhc2VbMF0KKyAgICAgICAgICAgIG9wdGlvbnMu
dmVyYm9zZSA9IGNhc2VbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzZVsyXSwg
bG9nZ2luZ19jb25mLl9nZXRfbG9nX2xldmVsKG9wdGlvbnMpKQorCisKK2lmIF9fbmFtZV9fID09
ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfaHR0cF9zZXJ2ZXIucHkgYi9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvY29uZi93ZWJzb2NrZXRfaHR0cF9zZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMC4uNjNkZTNkYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC9jb25mL3dlYnNvY2tldF9odHRwX3NlcnZlci5weQpAQCAtMCwwICsxLDE3NiBA
QAorIyEvdXNyL2Jpbi9weXRob24KKyMgUmVxdWlyZXMgUHl0aG9uIDIuMyBhbmQgbGF0ZXIuCisj
CisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJTaW1wbGUgV2ViIFNvY2tldCAmIEhUVFAgc2VydmVy
IGltcGxlbWVudGF0aW9uLgorIiIiCisKK2ltcG9ydCBCYXNlSFRUUFNlcnZlcgorZnJvbSBTaW1w
bGVIVFRQU2VydmVyIGltcG9ydCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKK2ltcG9ydCBTb2Nr
ZXRTZXJ2ZXIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1w
b3J0IHVybHBhcnNlCisKK2ltcG9ydCBjaGFubmVsCitpbXBvcnQgY29tbW9uCitmcm9tIGhhbmRs
ZXIgaW1wb3J0IFdlYlNvY2tldEhhbmRsZXIKK2Zyb20gaGFuZGxlcl9yZWdpc3RyeSBpbXBvcnQg
V2ViU29ja2V0SGFuZGxlclJlZ2lzdHJ5CitpbXBvcnQgbG9nZ2luZ19jb25mCisKKworX19hbGxf
XyA9IFsnV2ViU29ja2V0SFRUUFNlcnZlcicsICdXZWJTb2NrZXRIVFRQUmVxdWVzdEhhbmRsZXIn
XQorCisKK2NsYXNzIFdlYlNvY2tldEhUVFBTZXJ2ZXIoU29ja2V0U2VydmVyLlRocmVhZGluZ01p
eEluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorICAgIGRhZW1vbl90aHJlYWRzID0gVHJ1ZQor
ICAgIHBhc3MKKworCitjbGFzcyBXZWJTb2NrZXRIVFRQUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRU
UFJlcXVlc3RIYW5kbGVyKToKKyAgICBfaGFuZGxlcl9yZWdpc3RyeSA9IFdlYlNvY2tldEhhbmRs
ZXJSZWdpc3RyeSgpCisKKyAgICBkZWYgc291cmNlX2ZpbGVzX2luX2RpcihoYW5kbGVyX2Jhc2Up
OgorICAgICAgICBXZWJTb2NrZXRIVFRQUmVxdWVzdEhhbmRsZXIuX2hhbmRsZXJfcmVnaXN0cnku
c291cmNlX2ZpbGVzX2luX2RpcigKKyAgICAgICAgICAgIGhhbmRsZXJfYmFzZSkKKyAgICBzb3Vy
Y2VfZmlsZXNfaW5fZGlyID0gc3RhdGljbWV0aG9kKHNvdXJjZV9maWxlc19pbl9kaXIpCisKKyAg
ICBkZWYgcmVnaXN0ZXIocmVzb3VyY2VfbmFtZSwgaGFuZGxlcik6CisgICAgICAgIFdlYlNvY2tl
dEhUVFBSZXF1ZXN0SGFuZGxlci5faGFuZGxlcl9yZWdpc3RyeS5yZWdpc3RlcigKKyAgICAgICAg
ICAgIHJlc291cmNlX25hbWUsIGhhbmRsZXIpCisgICAgcmVnaXN0ZXIgPSBzdGF0aWNtZXRob2Qo
cmVnaXN0ZXIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa2V5d29yZHMpOgor
ICAgICAgICBzZWxmLnVwZ3JhZGVfdG9fd2Vic29ja2V0ID0gMAorICAgICAgICBzZWxmLmxvY2F0
aW9uID0gTm9uZQorICAgICAgICBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuX19pbml0X18oc2Vs
ZiwgKmFyZ3MsICoqa2V5d29yZHMpCisKKyAgICBkZWYgcGFyc2VfcmVxdWVzdChzZWxmKToKKyAg
ICAgICAgcmVzdWx0ID0gU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qoc2Vs
ZikKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5fbWF5YmVfdXBncmFkZV90
b193ZWJzb2NrZXQoKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZG9fR0VUKHNl
bGYpOgorICAgICAgICBpZiBub3Qgc2VsZi51cGdyYWRlX3RvX3dlYnNvY2tldDoKKyAgICAgICAg
ICAgIHJldHVybiBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuZG9fR0VUKHNlbGYpCisgICAgICAg
IHNlbGYuX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuX2hhbmRsZV93ZWJzb2NrZXRfcmVxdWVz
dCgpCisKKyAgICBkZWYgX3NldF91cF9yZXNvdXJjZV9uYW1lKHNlbGYpOgorICAgICAgICB1cmwg
PSB1cmxwYXJzZS51cmxwYXJzZShzZWxmLnBhdGgpCisgICAgICAgIGlmIHVybFswXSBvciB1cmxb
MV0gb3Igbm90IHVybFsyXS5zdGFydHN3aXRoKCcvJyk6CisgICAgICAgICAgICAjIEFic29sdXRl
IFVSSSBvciBub24tYWJzb2x1dGUgcGF0aC4KKyAgICAgICAgICAgIHJhaXNlIHdlYnNvY2tldC5X
ZWJTb2NrZXRIYW5kc2hha2VFcnJvcigKKyAgICAgICAgICAgICAgICAnSW52YWxpZCByZXNvdXJj
ZSBuYW1lOiAlcicgJSBzZWxmLnBhdGgpCisgICAgICAgICMgSWdub3JlIHBhcmFtZXRlcnMsIHF1
ZXJ5LCBmcmFnbWVudCwgZXRjLgorICAgICAgICBzZWxmLnJlc291cmNlX25hbWUgPSB1cmxbMl0K
KworICAgIGRlZiBfc2V0X3VwX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0
cyA9IFtdCisgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZCgnd3M6Ly9sb2NhbGhvc3QnKQor
ICAgICAgICBwb3J0ID0gc2VsZi5zZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KKyAgICAg
ICAgaWYgcG9ydCAhPSBjb21tb24uREVGQVVMVF9XU19QT1JUX0lOX1NQRUM6CisgICAgICAgICAg
ICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoJzonKQorICAgICAgICAgICAgbG9jYXRpb25fcGFydHMu
YXBwZW5kKHN0cihwb3J0KSkKKyAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKHNlbGYucmVz
b3VyY2VfbmFtZSkKKyAgICAgICAgc2VsZi5sb2NhdGlvbiA9ICcnLmpvaW4obG9jYXRpb25fcGFy
dHMpCisKKyAgICBkZWYgX21heWJlX3VwZ3JhZGVfdG9fd2Vic29ja2V0KHNlbGYpOgorICAgICAg
ICAjIFdlIGFyZSBtb3JlIGxlbmllbnQgaGVyZSB0aGFuIHRoZSBXZWIgU29ja2V0IFByb3RvY29s
IHNwZWNpZmljYXRpb24KKyAgICAgICAgIyBtYW5kYXRlcywgaS5lLiwgd2UgZG9uJ3QgY2hlY2sg
dGhlIG9yZGVyIG9mIHRoZSBoZWFkZXJzLgorICAgICAgICBzZWxmLnVwZ3JhZGVfdG9fd2Vic29j
a2V0ID0gKAorICAgICAgICAgICAgc2VsZi5oZWFkZXJzLmdldCgnVXBncmFkZScsICcnKSA9PSAn
V2ViU29ja2V0JyBhbmQKKyAgICAgICAgICAgIHNlbGYuaGVhZGVycy5nZXQoJ0Nvbm5lY3Rpb24n
LCAnJykgPT0gJ1VwZ3JhZGUnKQorICAgICAgICBpZiBub3Qgc2VsZi51cGdyYWRlX3RvX3dlYnNv
Y2tldDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24g
PSAwCisgICAgICAgIHNlbGYub3JpZ2luID0gc2VsZi5oZWFkZXJzLmdldCgnT3JpZ2luJywgTm9u
ZSkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHNlbGYuaGVhZGVycy5nZXQoJ1dlYlNvY2tldC1Q
cm90b2NvbCcsIE5vbmUpCisgICAgICAgIHNlbGYuX3NldF91cF9yZXNvdXJjZV9uYW1lKCkKKyAg
ICAgICAgc2VsZi5fc2V0X3VwX2xvY2F0aW9uKCkKKworICAgIGRlZiBfaGFuZHNoYWtlKHNlbGYp
OgorICAgICAgICBzZWxmLndmaWxlLndyaXRlKCdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90
b2NvbCBIYW5kc2hha2VcclxuJykKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgnVXBncmFkZTog
V2ViU29ja2V0XHJcbicpCisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoJ0Nvbm5lY3Rpb246IFVw
Z3JhZGVcclxuJykKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgnV2ViU29ja2V0LU9yaWdpbjog
JykKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShzZWxmLm9yaWdpbi5lbmNvZGUoJ3V0Zi04Jykp
CisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoJ1xyXG4nKQorICAgICAgICBzZWxmLndmaWxlLndy
aXRlKCdXZWJTb2NrZXQtTG9jYXRpb246ICcpCisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoc2Vs
Zi5sb2NhdGlvbi5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoJ1xy
XG4nKQorICAgICAgICBpZiBzZWxmLnByb3RvY29sOgorICAgICAgICAgICAgc2VsZi53ZmlsZS53
cml0ZSgnV2ViU29ja2V0LVByb3RvY29sOiAnKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0
ZShzZWxmLnByb3RvY29sLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUu
d3JpdGUoJ1xyXG4nKQorICAgICAgICBzZWxmLndmaWxlLndyaXRlKCdcclxuJykKKworICAgIGRl
ZiBfaGFuZGxlX3dlYnNvY2tldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICB3c2MgPSBjaGFubmVs
LldlYlNvY2tldENoYW5uZWwoc2VsZi5yZXF1ZXN0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0g
V2ViU29ja2V0SFRUUFJlcXVlc3RIYW5kbGVyLl9oYW5kbGVyX3JlZ2lzdHJ5WworICAgICAgICAg
ICAgc2VsZi5yZXNvdXJjZV9uYW1lXQorICAgICAgICBpZiBoYW5kbGVyX2NsYXNzOgorICAgICAg
ICAgICAgaGFuZGxlcl9jbGFzcyh3c2MpLmhhbmRsZSgpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBsb2dnaW5nLndhcm5pbmcoJ05vIGhhbmRsZXIgZGVmaW5lZCBmb3I6ICVyJywgc2VsZi5y
ZXNvdXJjZV9uYW1lKQorCisKK2RlZiBtYWluKCk6CisgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0
aW9uUGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1wb3J0JywgZGVzdD0n
cG9ydCcsIHR5cGU9J2ludCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1jb21tb24u
REVGQVVMVF9XU19QT1JUX0ZPUl9URVNULAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Bv
cnQgdG8gbGlzdGVuIHRvJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWInLCAnLS1oYW5kbGVy
LWJhc2UnLCBkZXN0PSdoYW5kbGVyX2Jhc2UnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Jhc2UgZGlyZWN0b3J5IGZyb20g
d2hpY2ggdG8gc2NhbiBXZWIgU29ja2V0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBI
YW5kbGVyIHNvdXJjZSBmaWxlcy4nKQorICAgIGxvZ2dpbmdfY29uZi5hZGRfbG9nZ2luZ19vcHRp
b25zKHBhcnNlcikKKyAgICAob3B0aW9ucywgXykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAg
ICBsb2dnaW5nX2NvbmYuY29uZmlndXJlX2xvZ2dpbmcob3B0aW9ucykKKworICAgIFdlYlNvY2tl
dEhUVFBSZXF1ZXN0SGFuZGxlci5zb3VyY2VfZmlsZXNfaW5fZGlyKG9wdGlvbnMuaGFuZGxlcl9i
YXNlKQorICAgIFdlYlNvY2tldEhUVFBSZXF1ZXN0SGFuZGxlci5yZWdpc3RlcignL0xpdmVuZXNz
VGVzdCcsIFdlYlNvY2tldEhhbmRsZXIpCisgICAgV2ViU29ja2V0SFRUUFJlcXVlc3RIYW5kbGVy
LnByb3RvY29sX3ZlcnNpb24gPSAnSFRUUC8xLjEnCisKKyAgICBvcy5jaGRpcihvcHRpb25zLmhh
bmRsZXJfYmFzZSkKKyAgICBodHRwZCA9IFdlYlNvY2tldEhUVFBTZXJ2ZXIoCisgICAgICAgICAg
ICAoJycsIG9wdGlvbnMucG9ydCksIFdlYlNvY2tldEhUVFBSZXF1ZXN0SGFuZGxlcikKKworICAg
IGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Cisg
ICAgbWFpbigpCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40351</attachid>
            <date>2009-09-30 02:36:49 -0700</date>
            <delta_ts>2009-09-30 02:41:53 -0700</delta_ts>
            <desc>add pywebsocket to test Web Socket</desc>
            <filename>add-pywebsocket-to-test-Web-Socket.patch</filename>
            <type>text/plain</type>
            <size>96828</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">YTE0NWM4YzkwZmY1YWJlZGY1NjMwNmM0MWNlNmM5ODE1MjYyYmJkMApkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY5OTI4ZDcu
LjE2N2Q3YTYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAwOS0wOS0zMCAgWXV6byBGdWppc2hp
bWEgIDx5dXpvQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHB5d2Vic29ja2V0IDAuMi4wIHRvIHRlc3QgV2ViIFNvY2tldC4K
KyAgICAgICAgaHR0cDovL2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXdlYnNvY2tldC8KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDkwCisKKyAg
ICAgICAgKiBweXdlYnNvY2tldC9DT1BZSU5HOiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tl
dC9NQU5JRkVTVC5pbjogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvUkVBRE1FOiBBZGRl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xpZW50LnB5OiBBZGRlZC4K
KyAgICAgICAgKiBweXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHk6IEFkZGVkLgorICAg
ICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weTogQWRkZWQuCisg
ICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS5weTogQWRkZWQu
CisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBhcnNlcmhhbmRs
ZXIucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tc2d1
dGlsLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvc3Rh
bmRhbG9uZS5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0
L3V0aWwucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3NldHVwLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L2NvbmZpZy5weTogQWRkZWQuCisgICAgICAgICog
cHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90
ZXN0L3J1bl9hbGwucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF9k
aXNwYXRjaC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRz
aGFrZS5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21vY2sucHk6
IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RfdXRpbC5weTogQWRkZWQuCisgICAg
ICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9hX3dzaC5weTogQWRkZWQu
CisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9iX3dzaC5weTog
QWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIv
Y193c2gucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvc3ViL2QucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvc3ViL2Vfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9mX3dzaC5weTogQWRkZWQuCisgICAgICAgICogcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZ193c2gucHk6IEFkZGVkLgorICAg
ICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2hfd3NoLnB5OiBB
ZGRlZC4KKwogMjAwOS0wOS0yOSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUnViYmVyc3RhbXBlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvQ09QWUlORyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L0NP
UFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NTY5NQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L0NPUFlJTkcKQEAgLTAsMCArMSwy
MDIgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKwor
ICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJ
QlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVh
biB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAg
YW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRo
aXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0
IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVy
IHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNo
YWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90
aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRl
ciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3Nl
cyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dl
ciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBt
YW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBv
dGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9y
ZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBv
d25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxs
IG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVy
bWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0g
c2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAor
ICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwg
ZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKwor
ICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1l
Y2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNl
IGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVj
dCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0
byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsg
b2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBt
YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAg
IGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUg
d29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93
KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRo
ZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3Ig
ZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFs
IHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0
aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1
dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZh
dGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2Vw
YXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRl
cmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4K
KworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlw
LCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBh
bnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJp
dmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0
dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdo
dCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9y
aXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBG
b3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1l
YW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0
aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBp
bmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0
cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAg
YW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVo
YWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5n
IGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRp
b24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2ln
bmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmli
dXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFu
eSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBD
b250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJz
ZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2Yg
Q29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m
CisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZ
b3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJn
ZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8g
cmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBk
aXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUK
KyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0
IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0
ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1
dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBu
b24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAg
IChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFr
ZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFu
ZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2Ug
YXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkg
c3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIK
KyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBD
b250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmli
dXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxp
dGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xh
aW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yawor
ICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25z
dGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50
LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRo
aXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhl
IGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4g
WW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29y
ayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRo
b3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBw
cm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisK
KyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3Jr
IG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBh
bmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJy
eSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0
aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNl
IGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmli
dXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0
cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAg
ICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBw
YXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkg
SWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMK
KyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZ
b3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2Yg
dGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2gg
Tk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAg
ICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVh
c3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElD
RSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0
aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRh
dGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisg
ICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29y
a3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBu
b3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmls
ZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBu
b3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgor
ICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJp
YnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElD
RSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0
aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAg
YXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBj
b3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBw
cm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlv
bnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIg
bW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFz
IGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlz
dHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUg
Y29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9m
IENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisg
ICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNp
b24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5k
ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhv
dXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFu
ZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkK
KyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1h
eSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRy
aWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFu
dCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBz
ZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4
Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNj
cmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUg
Y29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFu
dHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAg
Q29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1p
dGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9O
LUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQ
QVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1p
bmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGlu
ZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlv
dXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBM
aW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRo
ZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250
cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3Rz
KSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAg
ICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJl
Y3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMg
b2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vu
c2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsg
KGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2ls
bCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24s
IG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2Vz
KSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRo
ZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50
eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRo
ZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2Zm
ZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3
YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25z
IGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2
ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAg
ICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90
IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZ
b3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRy
aWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3Ig
Y2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAg
ICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJp
bGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBI
b3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8g
YXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dp
bmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5
IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcg
aW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRl
eHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBz
eW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAg
ICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVk
ZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90
aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBh
cmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJd
CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9NQU5JRkVTVC5pbiBiL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L01BTklGRVNULmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE5MjU2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9N
QU5JRkVTVC5pbgpAQCAtMCwwICsxLDYgQEAKK2luY2x1ZGUgQ09QWUlORworaW5jbHVkZSBNQU5J
RkVTVC5pbgoraW5jbHVkZSBSRUFETUUKK3JlY3Vyc2l2ZS1pbmNsdWRlIGV4YW1wbGUgKi5weQor
cmVjdXJzaXZlLWluY2x1ZGUgbW9kX3B5d2Vic29ja2V0ICoucHkKK3JlY3Vyc2l2ZS1pbmNsdWRl
IHRlc3QgKi5weQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVBRE1FIGIv
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFmOWYwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9SRUFETUUKQEAgLTAsMCArMSw2IEBACitJbnN0YWxsIHRoaXMgcGFja2FnZSBieToKKyQg
cHl0aG9uIHNldHVwLnB5IGJ1aWxkCiskIHN1ZG8gcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKKwor
VGhlbiByZWFkIGRvY3VtZW50IGJ5OgorJCBweWRvYyBtb2RfcHl3ZWJzb2NrZXQKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQucHkgYi9XZWJL
aXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xpZW50LnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2MGM4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xpZW50LnB5CkBAIC0wLDAgKzEsMTY4IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4K
KyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisj
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiV2Vi
IFNvY2tldCBFY2hvIGNsaWVudC4KKworVGhpcyBpcyBhbiBleGFtcGxlIFdlYiBTb2NrZXQgY2xp
ZW50IHRoYXQgdGFsa3Mgd2l0aCBlY2hvX3dzaC5weS4KK1RoaXMgbWF5IGJlIHVzZWZ1bCBmb3Ig
Y2hlY2tpbmcgbW9kX3B5d2Vic29ja2V0IGluc3RhbGxhdGlvbi4KKworTm90ZToKK1RoaXMgY29k
ZSBpcyBmYXIgZnJvbSByb2J1c3QsIGUuZy4sIHdlIGN1dCBjb3JuZXJzIGluIGhhbmRzaGFrZS4K
KyIiIgorCisKK2ltcG9ydCBjb2RlY3MKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNl
cgoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworCisKK19ERUZBVUxUX1BPUlQgPSA4MAorX0RF
RkFVTFRfU0VDVVJFX1BPUlQgPSA0NDMKK19VTkRFRklORURfUE9SVCA9IC0xCisKKworY2xhc3Mg
X1RMU1NvY2tldChvYmplY3QpOgorICAgICIiIldyYXBwZXIgZm9yIGEgVExTIGNvbm5lY3Rpb24u
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3X3NvY2tldCk6CisgICAgICAgIHNlbGYu
X3NzbCA9IHNvY2tldC5zc2wocmF3X3NvY2tldCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGJ5dGVz
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbC53cml0ZShieXRlcykKKworICAgIGRlZiByZWN2
KHNlbGYsIHNpemU9LTEpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3NsLnJlYWQoc2l6ZSkKKwor
ICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvLgorICAgICAgICBw
YXNzCisKKworY2xhc3MgRWNob0NsaWVudChvYmplY3QpOgorICAgICIiIldlYiBTb2NrZXQgZWNo
byBjbGllbnQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6CisgICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKKwor
ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgY2xpZW50LgorCisgICAgICAg
IFNoYWtlIGhhbmRzIGFuZCB0aGVuIHJlcGVhdCBzZW5kaW5nIG1lc3NhZ2UgYW5kIHJlY2Vpdmlu
ZyBpdHMgZWNoby4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldC5z
b2NrZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuY29ubmVjdCgo
c2VsZi5fb3B0aW9ucy5zZXJ2ZXJfaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0KSkKKyAgICAgICAgICAgIGlmIHNlbGYuX29w
dGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQgPSBfVExTU29ja2V0
KHNlbGYuX3NvY2tldCkKKyAgICAgICAgICAgIHNlbGYuX2hhbmRzaGFrZSgpCisgICAgICAgICAg
ICBmb3IgbGluZSBpbiBzZWxmLl9vcHRpb25zLm1lc3NhZ2Uuc3BsaXQoJywnKToKKyAgICAgICAg
ICAgICAgICBmcmFtZSA9ICdceDAwJyArIGxpbmUuZW5jb2RlKCd1dGYtOCcpICsgJ1x4ZmYnCisg
ICAgICAgICAgICAgICAgc2VsZi5fc29ja2V0LnNlbmQoZnJhbWUpCisgICAgICAgICAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnU2Vu
ZDogJXMnICUgbGluZQorICAgICAgICAgICAgICAgIHJlY2VpdmVkID0gc2VsZi5fc29ja2V0LnJl
Y3YobGVuKGZyYW1lKSkKKyAgICAgICAgICAgICAgICBpZiByZWNlaXZlZCAhPSBmcmFtZToKKyAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbmNvcnJlY3QgZWNobzogJXInICUg
cmVjZWl2ZWQpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAg
ICAgICAgICAgICAgICAgICBwcmludCAnUmVjdjogJXMnICUgcmVjZWl2ZWRbMTotMV0uZGVjb2Rl
KCd1dGYtOCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuY2xv
c2UoKQorCisgICAgZGVmIF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3NvY2tldC5z
ZW5kKAorICAgICAgICAgICAgICAgICdHRVQgJXMgSFRUUC8xLjFcclxuJyAlIHNlbGYuX29wdGlv
bnMucmVzb3VyY2UpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKCdVcGdyYWRlOiBXZWJTb2Nr
ZXRcclxuJykKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmQoJ0Nvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJykKKyAgICAgICAgc2VsZi5fc29ja2V0LnNlbmQoc2VsZi5fZm9ybWF0X2hvc3RfaGVhZGVy
KCkpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKAorICAgICAgICAgICAgICAgICdPcmlnaW46
ICVzXHJcbicgJSBzZWxmLl9vcHRpb25zLm9yaWdpbikKKyAgICAgICAgc2VsZi5fc29ja2V0LnNl
bmQoJ1xyXG4nKQorCisgICAgICAgIGZvciBleHBlY3RlZF9jaGFyIGluICgKKyAgICAgICAgICAg
ICAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAg
ICAgICAgICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAgICAgICAgICAgICAn
Q29ubmVjdGlvbjogVXBncmFkZVxyXG4nKToKKyAgICAgICAgICAgIHJlY2VpdmVkID0gc2VsZi5f
c29ja2V0LnJlY3YoMSlbMF0KKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX2NoYXIgIT0gcmVjZWl2
ZWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdIYW5kc2hha2UgZmFpbHVyZScp
CisgICAgICAgICMgV2UgY3V0IGNvcm5lcnMgYW5kIHNraXAgb3RoZXIgaGVhZGVycy4KKyAgICAg
ICAgc2VsZi5fc2tpcF9oZWFkZXJzKCkKKworICAgIGRlZiBfc2tpcF9oZWFkZXJzKHNlbGYpOgor
ICAgICAgICB0ZXJtaW5hdG9yID0gJ1xyXG5cclxuJworICAgICAgICBwb3MgPSAwCisgICAgICAg
IHdoaWxlIHBvcyA8IGxlbih0ZXJtaW5hdG9yKToKKyAgICAgICAgICAgIHJlY2VpdmVkID0gc2Vs
Zi5fc29ja2V0LnJlY3YoMSlbMF0KKyAgICAgICAgICAgIGlmIHJlY2VpdmVkID09IHRlcm1pbmF0
b3JbcG9zXToKKyAgICAgICAgICAgICAgICBwb3MgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICBwb3MgPSAwCisKKyAgICBkZWYgX2Zvcm1hdF9ob3N0X2hlYWRlcihzZWxm
KToKKyAgICAgICAgaG9zdCA9ICdIb3N0OiAnICsgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfaG9zdAor
ICAgICAgICBpZiAoKG5vdCBzZWxmLl9vcHRpb25zLnVzZV90bHMgYW5kCisgICAgICAgICAgICAg
c2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCAhPSBfREVGQVVMVF9QT1JUKSBvcgorICAgICAgICAg
ICAgKHNlbGYuX29wdGlvbnMudXNlX3RscyBhbmQKKyAgICAgICAgICAgICBzZWxmLl9vcHRpb25z
LnNlcnZlcl9wb3J0ICE9IF9ERUZBVUxUX1NFQ1VSRV9QT1JUKSk6CisgICAgICAgICAgICBob3N0
ICs9ICc6JyArIHN0cihzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0KQorICAgICAgICBob3N0ICs9
ICdcclxuJworICAgICAgICByZXR1cm4gaG9zdAorCisKK2RlZiBtYWluKCk6CisgICAgc3lzLnN0
ZG91dCA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04Jykoc3lzLnN0ZG91dCkKKworICAgIHBhcnNl
ciA9IE9wdGlvblBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2VydmVy
X2hvc3QnLCBkZXN0PSdzZXJ2ZXJfaG9zdCcsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0nbG9jYWxob3N0JywgaGVscD0nc2VydmVyIGhvc3QnKQorICAgIHBh
cnNlci5hZGRfb3B0aW9uKCctcCcsICctLXNlcnZlcl9wb3J0JywgZGVzdD0nc2VydmVyX3BvcnQn
LCB0eXBlPSdpbnQnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9X1VOREVGSU5FRF9Q
T1JULCBoZWxwPSdzZXJ2ZXIgcG9ydCcpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0t
b3JpZ2luJywgZGVzdD0nb3JpZ2luJywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PSdodHRwOi8vbG9jYWxob3N0LycsIGhlbHA9J29yaWdpbicpCisgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy1yJywgJy0tcmVzb3VyY2UnLCBkZXN0PSdyZXNvdXJjZScsIHR5cGU9
J3N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nL2VjaG8nLCBoZWxwPSdy
ZXNvdXJjZSBwYXRoJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLW0nLCAnLS1tZXNzYWdlJywg
ZGVzdD0nbWVzc2FnZScsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nY29tbWEtc2VwYXJhdGVkIG1lc3NhZ2VzIHRvIHNlbmQnKQorICAgIHBhcnNlci5hZGRfb3B0
aW9uKCctcScsICctLXF1aWV0JywgZGVzdD0ndmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfZmFsc2Un
LAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgaGVscD0nc3VwcHJlc3MgbWVz
c2FnZXMnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRscycsIGRlc3Q9J3VzZV90
bHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
RmFsc2UsIGhlbHA9J3VzZSBUTFMgKHdzczovLyknKQorICAgIChvcHRpb25zLCBfKSA9IHBhcnNl
ci5wYXJzZV9hcmdzKCkKKworICAgICMgRGVmYXVsdCBwb3J0IG51bWJlciBkZXBlbmRzIG9uIHdo
ZXRoZXIgVExTIGlzIHVzZWQuCisgICAgaWYgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9PSBfVU5ERUZJ
TkVEX1BPUlQ6CisgICAgICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgIG9wdGlv
bnMuc2VydmVyX3BvcnQgPSBfREVGQVVMVF9TRUNVUkVfUE9SVAorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9IF9ERUZBVUxUX1BPUlQKKworICAgICMgb3B0
cGFyc2UgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBub24tYXNjaWkgZGVmYXVsdCB2YWx1ZXMuCisg
ICAgIyBTZXQgZGVmYXVsdCBtZXNzYWdlIGhlcmUuCisgICAgaWYgbm90IG9wdGlvbnMubWVzc2Fn
ZToKKyAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gdSdIZWxsbyxcdTY1ZTVcdTY3MmMnICAgIyAi
SmFwYW4iIGluIEphcGFuZXNlCisKKyAgICBFY2hvQ2xpZW50KG9wdGlvbnMpLnJ1bigpCisKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKKworCisjIHZpOnN0cz00IHN3
PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L2V4YW1wbGUvZWNob193
c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVjMzFiODMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5CkBAIC0wLDAgKzEs
MzEgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRh
dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0
IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KToKKyAgICBw
YXNzICAjIGFsd2F5cyBhY2NlcHQKKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJl
cXVlc3QpOgorICAgIHJlY2VpdmVyID0gbXNndXRpbC5NZXNzYWdlUmVjZWl2ZXIocmVxdWVzdCkK
KyAgICBzZW5kZXIgPSBtc2d1dGlsLk1lc3NhZ2VTZW5kZXIocmVxdWVzdCkKKyAgICB3aGlsZSBU
cnVlOgorICAgICAgICBsaW5lID0gcmVjZWl2ZXIucmVjZWl2ZSgpCisgICAgICAgIHNlbmRlci5z
ZW5kKGxpbmUpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkgYi9XZWJLaXRUb29scy9w
eXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMC4uY2MwMWFiYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDc5IEBA
CisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisj
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6
Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisj
IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJ
UyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIldlYiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFj
aGUgSFRUUCBTZXJ2ZXIuCisKK21vZF9weXdlYnNvY2tldCBpcyBhIFdlYiBTb2NrZXQgZXh0ZW5z
aW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIKK2ludGVuZGVkIGZvciB0ZXN0aW5nIG9yIGV4cGVy
aW1lbnRhbCBwdXJwb3Nlcy4gbW9kX3B5dGhvbiBpcyByZXF1aXJlZC4KKworSW5zdGFsbGF0aW9u
OgorCiswLiBQcmVwYXJlIGFuIEFwYWNoZSBIVFRQIFNlcnZlciBmb3Igd2hpY2ggbW9kX3B5dGhv
biBpcyBlbmFibGVkLgorCisxLiBTcGVjaWZ5IHRoZSBmb2xsb3dpbmcgQXBhY2hlIEhUVFAgU2Vy
dmVyIGRpcmVjdGl2ZXMgdG8gc3VpdCB5b3VyCisgICBjb25maWd1cmF0aW9uLgorCisgICBJZiBt
b2RfcHl3ZWJzb2NrZXQgaXMgbm90IGluIHRoZSBQeXRob24gcGF0aCwgc3BlY2lmeSB0aGUgZm9s
bG93aW5nLgorICAgPHdlYnNvY2tfbGliPiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIG1vZF9weXdl
YnNvY2tldCBpcyBpbnN0YWxsZWQuCisKKyAgICAgICBQeXRob25QYXRoICJzeXMucGF0aCtbJzx3
ZWJzb2NrX2xpYj4nXSIKKworICAgQWx3YXlzIHNwZWNpZnkgdGhlIGZvbGxvd2luZy4gPHdlYnNv
Y2tfaGFuZGxlcnM+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyAgIHVzZXItd3JpdHRlbiBXZWIg
U29ja2V0IGhhbmRsZXJzIGFyZSBwbGFjZWQuCisKKyAgICAgICBQeXRob25PcHRpb24gbW9kX3B5
d2Vic29ja2V0LmhhbmRsZXJfcm9vdCA8d2Vic29ja19oYW5kbGVycz4KKyAgICAgICBQeXRob25I
ZWFkZXJQYXJzZXJIYW5kbGVyIG1vZF9weXdlYnNvY2tldC5oZWFkZXJwYXJzZXJoYW5kbGVyCisK
KyAgIEV4YW1wbGUgc25pcHBldCBvZiBodHRwZC5jb25mOgorICAgKG1vZF9weXdlYnNvY2tldCBp
cyBpbiAvd2Vic29ja19saWIsIFdlYiBTb2NrZXQgaGFuZGxlcnMgYXJlIGluCisgICAvd2Vic29j
a19oYW5kbGVycywgcG9ydCBpcyA4MCBmb3Igd3MsIDQ0MyBmb3Igd3NzLikKKworICAgICAgIDxJ
Zk1vZHVsZSBweXRob25fbW9kdWxlPgorICAgICAgICAgUHl0aG9uUGF0aCAic3lzLnBhdGgrWycv
d2Vic29ja19saWInXSIKKyAgICAgICAgIFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuaGFu
ZGxlcl9yb290IC93ZWJzb2NrX2hhbmRsZXJzCisgICAgICAgICBQeXRob25IZWFkZXJQYXJzZXJI
YW5kbGVyIG1vZF9weXdlYnNvY2tldC5oZWFkZXJwYXJzZXJoYW5kbGVyCisgICAgICAgPC9JZk1v
ZHVsZT4KKworV3JpdGluZyBXZWIgU29ja2V0IGhhbmRsZXJzOgorCitXaGVuIGEgV2ViIFNvY2tl
dCByZXF1ZXN0IGNvbWVzIGluLCB0aGUgcmVzb3VyY2UgbmFtZQorc3BlY2lmaWVkIGluIHRoZSBo
YW5kc2hha2UgaXMgY29uc2lkZXJlZCBhcyBpZiBpdCBpcyBhIGZpbGUgcGF0aCB1bmRlcgorPHdl
YnNvY2tfaGFuZGxlcnM+IGFuZCB0aGUgaGFuZGxlciBkZWZpbmVkIGluCis8d2Vic29ja19oYW5k
bGVycz4vPHJlc291cmNlX25hbWU+X3dzaC5weSBpcyBpbnZva2VkLgorCitGb3IgZXhhbXBsZSwg
aWYgdGhlIHJlc291cmNlIG5hbWUgaXMgL2V4YW1wbGUvY2hhdCwgdGhlIGhhbmRsZXIgZGVmaW5l
ZCBpbgorPHdlYnNvY2tfaGFuZGxlcnM+L2V4YW1wbGUvY2hhdF93c2gucHkgaXMgaW52b2tlZC4K
KworQSBXZWIgU29ja2V0IGhhbmRsZXIgaXMgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyB0d28g
ZnVuY3Rpb25zOgorCisgICAgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KQorICAgIHdl
Yl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorCit3aGVyZToKKyAgICByZXF1ZXN0OiBt
b2RfcHl0aG9uIHJlcXVlc3QuCisKK3dlYl9zb2NrZXRfc2hha2VfaGFuZHMgaXMgY2FsbGVkIGR1
cmluZyB0aGUgaGFuZHNoYWtlIGFmdGVyIHRoZSBoZWFkZXJzCithcmUgc3VjY2Vzc2Z1bGx5IHBh
cnNlZCBhbmQgV2ViIFNvY2tldCBwcm9wZXJ0aWVzICh3c19sb2NhdGlvbiwKK3dzX29yaWdpbiwg
d3NfcHJvdG9jb2wsIGFuZCB3c19yZXNvdXJjZSkgYXJlIGFkZGVkIHRvIHJlcXVlc3QuCitBIGhh
bmRsZXIgY2FuIHJlamVjdCB0aGUgcmVxdWVzdCBieSByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKwor
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhIGlzIGNhbGxlZCBhZnRlciB0aGUgaGFuZHNoYWtlIGNv
bXBsZXRlZAorc3VjY2Vzc2Z1bGx5LiBBIGhhbmRsZXIgY2FuIHJlY2VpdmUvc2VuZCBtZXNzYWdl
cyBmcm9tL3RvIHRoZSBjbGllbnQKK3VzaW5nIHJlcXVlc3QuIG1vZF9weXdlYnNvY2tldC5tc2d1
dGlsIG1vZHVsZSBwcm92aWRlcyB1dGlsaXRpZXMKK2ZvciBkYXRhIHRyYW5zZmVyLgorIiIiCisK
KworIyB2aTpzdHM9NCBzdz00IGV0IHR3PTcyCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdl
YnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uZmI4M2QxNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L21vZF9weXdlYnNvY2tldC9kaXNwYXRjaC5weQpAQCAtMCwwICsxLDE2MCBAQAorIyBD
b3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lm
aWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKworCisiIiJEaXNwYXRjaCBXZWIgU29ja2V0IHJlcXVlc3QuCisiIiIK
KworCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitpbXBvcnQgdXRpbAorCisKK19TT1VSQ0VfUEFU
SF9QQVRURVJOID0gcmUuY29tcGlsZShyJyg/aSlfd3NoXC5weSQnKQorX1NPVVJDRV9TVUZGSVgg
PSAnX3dzaC5weScKK19TSEFLRV9IQU5EU19IQU5ETEVSX05BTUUgPSAnd2ViX3NvY2tldF9zaGFr
ZV9oYW5kcycKK19UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSA9ICd3ZWJfc29ja2V0X3RyYW5z
ZmVyX2RhdGEnCisKKworY2xhc3MgRGlzcGF0Y2hFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkV4
Y2VwdGlvbiBpbiBkaXNwYXRjaGluZyBXZWIgU29ja2V0IHJlcXVlc3QuIiIiCisKKyAgICBwYXNz
CisKKworZGVmIF9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcihiYXNlX2Rpcik6CisgICAgYmFz
ZV9kaXIgPSBvcy5wYXRoLm5vcm1wYXRoKGJhc2VfZGlyKS5yZXBsYWNlKCdcXCcsICcvJykKKyAg
ICBiYXNlX2xlbiA9IGxlbihiYXNlX2RpcikKKyAgICBzdWZmaXhfbGVuID0gbGVuKF9TT1VSQ0Vf
U1VGRklYKQorICAgIGRlZiBjb252ZXJ0ZXIocGF0aCk6CisgICAgICAgIGlmIG5vdCBwYXRoLmVu
ZHN3aXRoKF9TT1VSQ0VfU1VGRklYKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
IHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAg
ICBpZiBub3QgcGF0aC5zdGFydHN3aXRoKGJhc2VfZGlyKToKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIHJldHVybiBwYXRoW2Jhc2VfbGVuOi1zdWZmaXhfbGVuXQorICAgIHJldHVy
biBjb252ZXJ0ZXIKKworCitkZWYgX3NvdXJjZV9maWxlX3BhdGhzKGRpcmVjdG9yeSk6CisgICAg
IiIiWWllbGQgV2ViIFNvY2tldCBIYW5kbGVyIHNvdXJjZSBmaWxlIG5hbWVzIGluIHRoZSBnaXZl
biBkaXJlY3RvcnkuIiIiCisKKyAgICBmb3Igcm9vdCwgdW51c2VkX2RpcnMsIGZpbGVzIGluIG9z
LndhbGsoZGlyZWN0b3J5KToKKyAgICAgICAgZm9yIGJhc2UgaW4gZmlsZXM6CisgICAgICAgICAg
ICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGJhc2UpCisgICAgICAgICAgICBpZiBfU09VUkNF
X1BBVEhfUEFUVEVSTi5zZWFyY2gocGF0aCk6CisgICAgICAgICAgICAgICAgeWllbGQgcGF0aAor
CisKK2RlZiBfc291cmNlKHNvdXJjZV9zdHIpOgorICAgICIiIlNvdXJjZSBhIGhhbmRsZXIgZGVm
aW5pdGlvbiBzdHJpbmcuIiIiCisKKyAgICBnbG9iYWxfZGljID0ge30KKyAgICB0cnk6CisgICAg
ICAgIGV4ZWMgc291cmNlX3N0ciBpbiBnbG9iYWxfZGljCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoK
KyAgICAgICAgcmFpc2UgRGlzcGF0Y2hFcnJvcignRXJyb3IgaW4gc291cmNpbmcgaGFuZGxlcjon
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmdldF9zdGFja190cmFjZSgpKQor
ICAgIHJldHVybiAoX2V4dHJhY3RfaGFuZGxlcihnbG9iYWxfZGljLCBfU0hBS0VfSEFORFNfSEFO
RExFUl9OQU1FKSwKKyAgICAgICAgICAgIF9leHRyYWN0X2hhbmRsZXIoZ2xvYmFsX2RpYywgX1RS
QU5TRkVSX0RBVEFfSEFORExFUl9OQU1FKSkKKworCitkZWYgX2V4dHJhY3RfaGFuZGxlcihkaWMs
IG5hbWUpOgorICAgIGlmIG5hbWUgbm90IGluIGRpYzoKKyAgICAgICAgcmFpc2UgRGlzcGF0Y2hF
cnJvcignJXMgaXMgbm90IGRlZmluZWQuJyAlIG5hbWUpCisgICAgaGFuZGxlciA9IGRpY1tuYW1l
XQorICAgIGlmIG5vdCBjYWxsYWJsZShoYW5kbGVyKToKKyAgICAgICAgcmFpc2UgRGlzcGF0Y2hF
cnJvcignJXMgaXMgbm90IGNhbGxhYmxlLicgJSBuYW1lKQorICAgIHJldHVybiBoYW5kbGVyCisK
KworY2xhc3MgRGlzcGF0Y2hlcihvYmplY3QpOgorICAgICIiIkRpc3BhdGNoZXMgV2ViIFNvY2tl
dCByZXF1ZXN0cy4KKworICAgIFRoaXMgY2xhc3MgbWFpbnRhaW5zIGEgbWFwIGZyb20gcmVzb3Vy
Y2UgbmFtZSB0byBoYW5kbGVycy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
b290X2Rpcik6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBB
cmdzOgorICAgICAgICAgICAgcm9vdF9kaXI6IFRoZSBkaXJlY3Rvcnkgd2hlcmUgaGFuZGxlciBk
ZWZpbml0aW9uIGZpbGVzIGFyZQorICAgICAgICAgICAgcGxhY2VkLgorICAgICAgICAiIiIKKwor
ICAgICAgICBzZWxmLl9oYW5kbGVycyA9IHt9CisgICAgICAgIHNlbGYuX3NvdXJjZV93YXJuaW5n
cyA9IFtdCisgICAgICAgIHNlbGYuX3NvdXJjZV9maWxlc19pbl9kaXIocm9vdF9kaXIpCisKKyAg
ICBkZWYgc291cmNlX3dhcm5pbmdzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gd2FybmluZ3Mg
aW4gc291cmNpbmcgaGFuZGxlcnMuIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvdXJjZV93
YXJuaW5ncworCisgICAgZGVmIHNoYWtlX2hhbmRzKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAi
IiJIb29rIGludG8gV2ViIFNvY2tldCBoYW5kc2hha2UuCisKKyAgICAgICAgU2VsZWN0IGEgaGFu
ZGxlciBiYXNlZCBvbiByZXF1ZXN0LnVyaSBhbmQgY2FsbCBpdHMKKyAgICAgICAgd2ViX3NvY2tl
dF9zaGFrZV9oYW5kcyBmdW5jdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVx
dWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICBzaGFrZV9o
YW5kc18sIF8gPSBzZWxmLl9oYW5kbGVyKHJlcXVlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNoYWtlX2hhbmRzXyhyZXF1ZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAg
ICAgICAgICAgcmFpc2UgRGlzcGF0Y2hFcnJvcignc2hha2VfaGFuZHMoKSByYWlzZWQgZXhjZXB0
aW9uOiAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5nZXRfc3RhY2tf
dHJhY2UoKSkKKworICAgIGRlZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIHJlcXVlc3QpOgorICAgICAg
ICAiIiJMZXQgYSBoYW5kbGVyIHRyYW5zZmVyX2RhdGEgd2l0aCBhIFdlYiBTb2NrZXQgY2xpZW50
LgorCisgICAgICAgIFNlbGVjdCBhIGhhbmRsZXIgYmFzZWQgb24gcmVxdWVzdC53c19yZXNvdXJj
ZSBhbmQgY2FsbCBpdHMKKyAgICAgICAgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhIGZ1bmN0aW9u
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVl
c3QuCisgICAgICAgICIiIgorCisgICAgICAgIF8sIHRyYW5zZmVyX2RhdGFfID0gc2VsZi5faGFu
ZGxlcihyZXF1ZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cmFuc2Zlcl9kYXRhXyhy
ZXF1ZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgRGlz
cGF0Y2hFcnJvcigndHJhbnNmZXJfZGF0YSgpIHJhaXNlZCBleGNlcHRpb246ICcgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmdldF9zdGFja190cmFjZSgpKQorCisgICAg
ZGVmIF9oYW5kbGVyKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5faGFuZGxlcnNbcmVxdWVzdC53c19yZXNvdXJjZV0KKyAgICAgICAgZXhjZXB0
IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgRGlzcGF0Y2hFcnJvcignTm8gaGFuZGxlciBm
b3I6ICVyJyAlIHJlcXVlc3Qud3NfcmVzb3VyY2UpCisKKyAgICBkZWYgX3NvdXJjZV9maWxlc19p
bl9kaXIoc2VsZiwgcm9vdF9kaXIpOgorICAgICAgICAiIiJTb3VyY2UgYWxsIHRoZSBoYW5kbGVy
IHNvdXJjZSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiIiIgorCisgICAgICAgIHRvX3Jlc291cmNl
ID0gX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKHJvb3RfZGlyKQorICAgICAgICBmb3IgcGF0
aCBpbiBfc291cmNlX2ZpbGVfcGF0aHMocm9vdF9kaXIpOgorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIGhhbmRsZXIgPSBfc291cmNlKG9wZW4ocGF0aCkucmVhZCgpKQorICAgICAg
ICAgICAgZXhjZXB0IERpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgc2VsZi5fc291
cmNlX3dhcm5pbmdzLmFwcGVuZCgnJXM6ICVzJyAlIChwYXRoLCBlKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5faGFuZGxlcnNbdG9fcmVzb3VyY2UocGF0aCld
ID0gaGFuZGxlcgorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS5weSBiL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UucHkKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMC4uYzA0YzRmMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UucHkKQEAgLTAsMCArMSwx
NjIgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRh
dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiV2ViIFNvY2tldCBoYW5kc2hha2luZy4K
KworTm90ZTogcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlL3JlYWQgYXJlIHVzZWQgaW4gdGhpcyBt
b2R1bGUsIGV2ZW4gdGhvdWdoCittb2RfcHl0aG9uIGRvY3VtZW50IHNheXMgdGhhdCB0aGV5IHNo
b3VsZCBiZSB1c2VkIG9ubHkgaW4gY29ubmVjdGlvbiBoYW5kbGVycy4KK1VuZm9ydHVuYXRlbHks
IHdlIGhhdmUgbm8gb3RoZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHJlcXVlc3Qud3JpdGUvcmVh
ZCBhcmUKK25vdCBzdWl0YWJsZSBiZWNhdXNlIHRoZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBi
eXRlcyB3cml0aW5nL3JlYWRpbmcuCisiIiIKKworCitpbXBvcnQgcmUKKworCitfREVGQVVMVF9X
RUJfU09DS0VUX1BPUlQgPSA4MAorX0RFRkFVTFRfV0VCX1NPQ0tFVF9TRUNVUkVfUE9SVCA9IDQ0
MworX1dFQl9TT0NLRVRfU0NIRU1FID0gJ3dzJworX1dFQl9TT0NLRVRfU0VDVVJFX1NDSEVNRSA9
ICd3c3MnCisKK19NRVRIT0RfTElORSA9IHJlLmNvbXBpbGUocideR0VUIChbXiBdKykgSFRUUC8x
LjFcclxuJCcpCisKK19NQU5EQVRPUllfSEVBREVSUyA9IFsKKyAgICAjIGtleSwgZXhwZWN0ZWQg
dmFsdWUgb3IgTm9uZQorICAgIFsnVXBncmFkZScsICdXZWJTb2NrZXQnXSwKKyAgICBbJ0Nvbm5l
Y3Rpb24nLCAnVXBncmFkZSddLAorICAgIFsnSG9zdCcsIE5vbmVdLAorICAgIFsnT3JpZ2luJywg
Tm9uZV0sCitdCisKKworY2xhc3MgSGFuZHNoYWtlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJF
eGNlcHRpb24gaW4gV2ViIFNvY2tldCBIYW5kc2hha2UuIiIiCisKKyAgICBwYXNzCisKKworZGVm
IF92YWxpZGF0ZV9wcm90b2NvbChwcm90b2NvbCk6CisgICAgIiIiVmFsaWRhdGUgV2ViU29ja2V0
LVByb3RvY29sIHN0cmluZy4iIiIKKworICAgIGlmIG5vdCBwcm90b2NvbDoKKyAgICAgICAgcmFp
c2UgSGFuZHNoYWtlRXJyb3IoJ0ludmFsaWQgV2ViU29ja2V0LVByb3RvY29sOiBlbXB0eScpCisg
ICAgZm9yIGMgaW4gcHJvdG9jb2w6CisgICAgICAgIGlmIG5vdCAweDIxIDw9IG9yZChjKSA8PSAw
eDdlOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0lsbGVnYWwgY2hhcmFjdGVy
IGluIHByb3RvY29sOiAlcicgJSBjKQorCisKK2NsYXNzIEhhbmRzaGFrZXIob2JqZWN0KToKKyAg
ICAiIiJUaGlzIGNsYXNzIHBlcmZvcm1zIFdlYiBTb2NrZXQgaGFuZHNoYWtlLiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGRpc3BhdGNoZXIpOgorICAgICAgICAiIiJDb25z
dHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6
IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIg
KGRpc3BhdGNoLkRpc3BhdGNoZXIpLgorCisgICAgICAgIEhhbmRzaGFrZXIgd2lsbCBhZGQgYXR0
cmlidXRlcyBzdWNoIGFzIHdzX3Jlc291cmNlIGluIHBlcmZvcm1pbmcKKyAgICAgICAgaGFuZHNo
YWtlLgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAg
ICAgICBzZWxmLl9kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcgorCisgICAgZGVmIHNoYWtlX2hhbmRz
KHNlbGYpOgorICAgICAgICAiIiJQZXJmb3JtIFdlYiBTb2NrZXQgSGFuZHNoYWtlLiIiIgorCisg
ICAgICAgIHNlbGYuX2NoZWNrX2hlYWRlcl9saW5lcygpCisgICAgICAgIHNlbGYuX3NldF9yZXNv
dXJjZSgpCisgICAgICAgIHNlbGYuX3NldF9vcmlnaW4oKQorICAgICAgICBzZWxmLl9zZXRfbG9j
YXRpb24oKQorICAgICAgICBzZWxmLl9zZXRfcHJvdG9jb2woKQorICAgICAgICBzZWxmLl9kaXNw
YXRjaGVyLnNoYWtlX2hhbmRzKHNlbGYuX3JlcXVlc3QpCisgICAgICAgIHNlbGYuX3NlbmRfaGFu
ZHNoYWtlKCkKKworICAgIGRlZiBfc2V0X3Jlc291cmNlKHNlbGYpOgorICAgICAgICBzZWxmLl9y
ZXF1ZXN0LndzX3Jlc291cmNlID0gc2VsZi5fcmVxdWVzdC51cmkKKworICAgIGRlZiBfc2V0X29y
aWdpbihzZWxmKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19vcmlnaW4gPSBzZWxmLl9yZXF1
ZXN0LmhlYWRlcnNfaW5bJ09yaWdpbiddCisKKyAgICBkZWYgX3NldF9sb2NhdGlvbihzZWxmKToK
KyAgICAgICAgbG9jYXRpb25fcGFydHMgPSBbXQorICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0Lmlz
X2h0dHBzKCk6CisgICAgICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoX1dFQl9TT0NLRVRf
U0VDVVJFX1NDSEVNRSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvY2F0aW9uX3BhcnRz
LmFwcGVuZChfV0VCX1NPQ0tFVF9TQ0hFTUUpCisgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVu
ZCgnOi8vJykKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuX3BhcnNlX2hvc3RfaGVhZGVyKCkK
KyAgICAgICAgY29ubl9wb3J0ID0gc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLmxvY2FsX2FkZHJb
MV0KKyAgICAgICAgaWYgcG9ydCAhPSBjb25uX3BvcnQ6CisgICAgICAgICAgICByYWlzZSBIYW5k
c2hha2VFcnJvcignSGVhZGVyL2Nvbm5lY3Rpb24gcG9ydCBtaXNtYXRjaDogJWQvJWQnICUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3J0LCBjb25uX3BvcnQpKQorICAgICAg
ICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoaG9zdCkKKyAgICAgICAgaWYgKChub3Qgc2VsZi5fcmVx
dWVzdC5pc19odHRwcygpIGFuZAorICAgICAgICAgICAgIHBvcnQgIT0gX0RFRkFVTFRfV0VCX1NP
Q0tFVF9QT1JUKSBvcgorICAgICAgICAgICAgKHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKSBhbmQK
KyAgICAgICAgICAgICBwb3J0ICE9IF9ERUZBVUxUX1dFQl9TT0NLRVRfU0VDVVJFX1BPUlQpKToK
KyAgICAgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZCgnOicpCisgICAgICAgICAgICBsb2Nh
dGlvbl9wYXJ0cy5hcHBlbmQoc3RyKHBvcnQpKQorICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBl
bmQoc2VsZi5fcmVxdWVzdC51cmkpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfbG9jYXRpb24g
PSAnJy5qb2luKGxvY2F0aW9uX3BhcnRzKQorCisgICAgZGVmIF9wYXJzZV9ob3N0X2hlYWRlcihz
ZWxmKToKKyAgICAgICAgZmllbGRzID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luWydIb3N0J10u
c3BsaXQoJzonLCAxKQorICAgICAgICBpZiBsZW4oZmllbGRzKSA9PSAxOgorICAgICAgICAgICAg
cG9ydCA9IF9ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVAorICAgICAgICAgICAgaWYgc2VsZi5fcmVx
dWVzdC5pc19odHRwcygpOgorICAgICAgICAgICAgICAgIHBvcnQgPSBfREVGQVVMVF9XRUJfU09D
S0VUX1NFQ1VSRV9QT1JUCisgICAgICAgICAgICByZXR1cm4gZmllbGRzWzBdLCBwb3J0CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmaWVsZHNbMF0sIGludChmaWVsZHNbMV0pCisg
ICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtl
RXJyb3IoJ0ludmFsaWQgcG9ydCBudW1iZXIgZm9ybWF0OiAlcicgJSBlKQorCisgICAgZGVmIF9z
ZXRfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHByb3RvY29sID0gc2VsZi5fcmVxdWVzdC5oZWFk
ZXJzX2luLmdldCgnV2ViU29ja2V0LVByb3RvY29sJykKKyAgICAgICAgaWYgcHJvdG9jb2wgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICBfdmFsaWRhdGVfcHJvdG9jb2wocHJvdG9jb2wpCisgICAg
ICAgIHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wgPSBwcm90b2NvbAorCisgICAgZGVmIF9zZW5k
X2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRl
KAorICAgICAgICAgICAgICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5k
c2hha2VcclxuJykKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdVcGdy
YWRlOiBXZWJTb2NrZXRcclxuJykKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndy
aXRlKCdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicpCisgICAgICAgIHNlbGYuX3JlcXVlc3QuY29u
bmVjdGlvbi53cml0ZSgnV2ViU29ja2V0LU9yaWdpbjogJykKKyAgICAgICAgc2VsZi5fcmVxdWVz
dC5jb25uZWN0aW9uLndyaXRlKHNlbGYuX3JlcXVlc3Qud3Nfb3JpZ2luKQorICAgICAgICBzZWxm
Ll9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1xyXG4nKQorICAgICAgICBzZWxmLl9yZXF1ZXN0
LmNvbm5lY3Rpb24ud3JpdGUoJ1dlYlNvY2tldC1Mb2NhdGlvbjogJykKKyAgICAgICAgc2VsZi5f
cmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKHNlbGYuX3JlcXVlc3Qud3NfbG9jYXRpb24pCisgICAg
ICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnXHJcbicpCisgICAgICAgIGlmIHNl
bGYuX3JlcXVlc3Qud3NfcHJvdG9jb2w6CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5l
Y3Rpb24ud3JpdGUoJ1dlYlNvY2tldC1Qcm90b2NvbDogJykKKyAgICAgICAgICAgIHNlbGYuX3Jl
cXVlc3QuY29ubmVjdGlvbi53cml0ZShzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sKQorICAgICAg
ICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdcclxuJykKKyAgICAgICAgc2Vs
Zi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdcclxuJykKKworICAgIGRlZiBfY2hlY2tfaGVh
ZGVyX2xpbmVzKHNlbGYpOgorICAgICAgICBmb3Iga2V5LCBleHBlY3RlZF92YWx1ZSBpbiBfTUFO
REFUT1JZX0hFQURFUlM6CisgICAgICAgICAgICBhY3R1YWxfdmFsdWUgPSBzZWxmLl9yZXF1ZXN0
LmhlYWRlcnNfaW4uZ2V0KGtleSkKKyAgICAgICAgICAgIGlmIG5vdCBhY3R1YWxfdmFsdWU6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0hlYWRlciAlcyBub3QgZGVmaW5l
ZCcgJSBrZXkpCisgICAgICAgICAgICBpZiBleHBlY3RlZF92YWx1ZToKKyAgICAgICAgICAgICAg
ICBpZiBhY3R1YWxfdmFsdWUgIT0gZXhwZWN0ZWRfdmFsdWU6CisgICAgICAgICAgICAgICAgICAg
IHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJbGxlZ2FsIHZhbHVlIGZvciBoZWFkZXIgJXM6ICVzJyAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXksIGFjdHVhbF92
YWx1ZSkpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9w
eXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFyc2VyaGFuZGxlci5weSBiL1dlYktp
dFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oZWFkZXJwYXJzZXJoYW5kbGVyLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4MmNlZDYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFy
c2VyaGFuZGxlci5weQpAQCAtMCwwICsxLDc3IEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJ
bmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
KHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIi
IlB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgZm9yIG1vZF9weXdlYnNvY2tldC4KKworQXBhY2hl
IEhUVFAgU2VydmVyIGFuZCBtb2RfcHl0aG9uIG11c3QgYmUgY29uZmlndXJlZCBzdWNoIHRoYXQg
dGhpcworZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGhhbmRsZSBXZWIgU29ja2V0IHJlcXVlc3QuCisi
IiIKKworCitmcm9tIG1vZF9weXRob24gaW1wb3J0IGFwYWNoZQorCitpbXBvcnQgZGlzcGF0Y2gK
K2ltcG9ydCBoYW5kc2hha2UKK2ltcG9ydCB1dGlsCisKKworIyBQeXRob25PcHRpb24gdG8gc3Bl
Y2lmeSB0aGUgaGFuZGxlciByb290IGRpcmVjdG9yeS4KK19QWU9QVF9IQU5ETEVSX1JPT1QgPSAn
bW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCcKKworCitkZWYgX2NyZWF0ZV9kaXNwYXRjaGVy
KCk6CisgICAgX0hBTkRMRVJfUk9PVCA9IGFwYWNoZS5tYWluX3NlcnZlci5nZXRfb3B0aW9ucygp
LmdldCgKKyAgICAgICAgICAgIF9QWU9QVF9IQU5ETEVSX1JPT1QsIE5vbmUpCisgICAgaWYgbm90
IF9IQU5ETEVSX1JPT1Q6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignUHl0aG9uT3B0aW9uICVz
IGlzIG5vdCBkZWZpbmVkJyAlIF9QWU9QVF9IQU5ETEVSX1JPT1QsCisgICAgICAgICAgICAgICAg
ICAgICAgICBhcGFjaGUuQVBMT0dfRVJSKQorICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNw
YXRjaGVyKF9IQU5ETEVSX1JPT1QpCisgICAgZm9yIHdhcm5pbmcgaW4gZGlzcGF0Y2hlci5zb3Vy
Y2Vfd2FybmluZ3MoKToKKyAgICAgICAgYXBhY2hlLmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0
OiAlcycgJSB3YXJuaW5nLCBhcGFjaGUuQVBMT0dfV0FSTklORykKKyAgICByZXR1cm4gZGlzcGF0
Y2hlcgorCisKKyMgSW5pdGlhbGl6ZQorX2Rpc3BhdGNoZXIgPSBfY3JlYXRlX2Rpc3BhdGNoZXIo
KQorCisKK2RlZiBoZWFkZXJwYXJzZXJoYW5kbGVyKHJlcXVlc3QpOgorICAgICIiIkhhbmRsZSBy
ZXF1ZXN0LgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0
LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBuYW1lZCBoZWFkZXJwYXJzZXJoYW5kbGVyIGJlY2F1
c2UgaXQgaXMgdGhlIGRlZmF1bHQgbmFtZQorICAgIGZvciBhIFB5dGhvbkhlYWRlclBhcnNlckhh
bmRsZXIuCisgICAgIiIiCisKKyAgICB0cnk6CisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hh
a2UuSGFuZHNoYWtlcihyZXF1ZXN0LCBfZGlzcGF0Y2hlcikKKyAgICAgICAgaGFuZHNoYWtlci5z
aGFrZV9oYW5kcygpCisgICAgICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6
IHJlc291cmNlOiVyJyAlIHJlcXVlc3Qud3NfcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwYWNoZS5BUExPR19ERUJVRykKKyAgICAgICAgX2Rpc3BhdGNoZXIudHJhbnNmZXJf
ZGF0YShyZXF1ZXN0KQorICAgIGV4Y2VwdCBoYW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsIGU6Cisg
ICAgICAgICMgSGFuZHNoYWtlIGZvciB3cy93c3MgZmFpbGVkLgorICAgICAgICAjIEJ1dCB0aGUg
cmVxdWVzdCBjYW4gYmUgdmFsaWQgaHR0cC9odHRwcyByZXF1ZXN0LgorICAgICAgICByZXF1ZXN0
LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlLCBhcGFjaGUuQVBMT0dfSU5GTykK
KyAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAorICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNw
YXRjaEVycm9yLCBlOgorICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0
OiAlcycgJSBlLCBhcGFjaGUuQVBMT0dfV0FSTklORykKKyAgICAgICAgcmV0dXJuIGFwYWNoZS5E
RUNMSU5FRAorICAgIHJldHVybiBhcGFjaGUuRE9ORSAgIyBSZXR1cm4gRE9ORSBzdWNoIHRoYXQg
bm8gb3RoZXIgaGFuZGxlcnMgYXJlIGludm9rZWQuCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbXNndXRp
bC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhODMxZWEKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbXNndXRpbC5w
eQpAQCAtMCwwICsxLDE4NCBAQAorIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3
cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJNZXNzYWdlIHJl
bGF0ZWQgdXRpbGl0aWVzLgorCitOb3RlOiByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBh
cmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZlbiB0aG91Z2gKK21vZF9weXRob24gZG9jdW1lbnQg
c2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uIGhhbmRsZXJz
LgorVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwg
cmVxdWVzdC53cml0ZS9yZWFkIGFyZQorbm90IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBh
bGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRpbmcvcmVhZGluZy4KKyIiIgorCisKK2ltcG9ydCBR
dWV1ZQoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdGhyZWFkaW5n
CisKKworZGVmIHNlbmRfbWVzc2FnZShyZXF1ZXN0LCBtZXNzYWdlKToKKyAgICAiIiJTZW5kIG1l
c3NhZ2UuCisKKyAgICBBcmdzOgorICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3Qu
CisgICAgICAgIG1lc3NhZ2U6IHVuaWNvZGUgc3RyaW5nIHRvIHNlbmQuCisgICAgIiIiCisKKyAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1x4MDAnICsgbWVzc2FnZS5lbmNvZGUoJ3V0Zi04
JykgKyAnXHhmZicpCisKKworZGVmIHJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KToKKyAgICAiIiJS
ZWNlaXZlIGEgV2ViIFNvY2tldCBmcmFtZSBhbmQgcmV0dXJuIGl0cyBwYXlsb2FkIGFzIHVuaWNv
ZGUgc3RyaW5nLgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1
ZXN0LgorICAgICIiIgorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyBSZWFkIDEgYnl0ZS4K
KyAgICAgICAgIyBtcF9jb25uLnJlYWQgd2lsbCBibG9jayBpZiBubyBieXRlcyBhcmUgYXZhaWxh
YmxlLgorICAgICAgICAjIFRpbWVvdXQgaXMgY29udHJvbGxlZCBieSBUaW1lT3V0IGRpcmVjdGl2
ZSBvZiBBcGFjaGUuCisgICAgICAgIGZyYW1lX3R5cGVfc3RyID0gcmVxdWVzdC5jb25uZWN0aW9u
LnJlYWQoMSkKKyAgICAgICAgZnJhbWVfdHlwZSA9IG9yZChmcmFtZV90eXBlX3N0clswXSkKKyAg
ICAgICAgaWYgKGZyYW1lX3R5cGUgJiAweDgwKSA9PSAweDgwOgorICAgICAgICAgICAgIyBUaGUg
cGF5bG9hZCBsZW5ndGggaXMgc3BlY2lmaWVkIGluIHRoZSBmcmFtZS4KKyAgICAgICAgICAgICMg
UmVhZCBhbmQgZGlzY2FyZC4KKyAgICAgICAgICAgIGxlbmd0aCA9IF9wYXlsb2FkX2xlbmd0aChy
ZXF1ZXN0KQorICAgICAgICAgICAgX3JlY2VpdmVfYnl0ZXMocmVxdWVzdCwgbGVuZ3RoKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgcGF5bG9hZCBpcyBkZWxpbWl0ZWQgd2l0aCBc
eGZmLgorICAgICAgICAgICAgYnl0ZXMgPSBfcmVhZF91bnRpbChyZXF1ZXN0LCAnXHhmZicpCisg
ICAgICAgICAgICBtZXNzYWdlID0gYnl0ZXMuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBp
ZiBmcmFtZV90eXBlID09IDB4MDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UKKyAg
ICAgICAgICAgICMgRGlzY2FyZCBkYXRhIG9mIG90aGVyIHR5cGVzLgorCisKK2RlZiBfcGF5bG9h
ZF9sZW5ndGgocmVxdWVzdCk6CisgICAgbGVuZ3RoID0gMAorICAgIHdoaWxlIFRydWU6CisgICAg
ICAgIGJfc3RyID0gcmVxdWVzdC5jb25uZWN0aW9uLnJlYWQoMSkKKyAgICAgICAgYiA9IG9yZChi
X3N0clswXSkKKyAgICAgICAgbGVuZ3RoID0gbGVuZ3RoICogMTI4ICsgKGIgJiAweDdmKQorICAg
ICAgICBpZiAoYiAmIDB4ODApID09IDA6CisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiBs
ZW5ndGgKKworCitkZWYgX3JlY2VpdmVfYnl0ZXMocmVxdWVzdCwgbGVuZ3RoKToKKyAgICBieXRl
cyA9ICcnCisgICAgd2hpbGUgbGVuZ3RoID4gMDoKKyAgICAgICAgbmV3X2J5dGVzID0gcmVxdWVz
dC5jb25uZWN0aW9uLnJlYWQobGVuZ3RoKQorICAgICAgICBieXRlcyArPSBuZXdfYnl0ZXMKKyAg
ICAgICAgbGVuZ3RoIC09IGxlbihuZXdfYnl0ZXMpCisgICAgcmV0dXJuIGJ5dGVzCisKKworZGVm
IF9yZWFkX3VudGlsKHJlcXVlc3QsIGRlbGltX2NoYXIpOgorICAgIGJ5dGVzID0gJycKKyAgICB3
aGlsZSBUcnVlOgorICAgICAgICBjaCA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisgICAg
ICAgIGlmIGNoID09IGRlbGltX2NoYXI6CisgICAgICAgICAgICBicmVhaworICAgICAgICBieXRl
cyArPSBjaAorICAgIHJldHVybiBieXRlcworCisKK2NsYXNzIE1lc3NhZ2VSZWNlaXZlcih0aHJl
YWRpbmcuVGhyZWFkKToKKyAgICAiIiJUaGlzIGNsYXNzIHJlY2VpdmVzIG1lc3NhZ2VzIGZyb20g
dGhlIGNsaWVudC4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgYm90aCBzeW5jaHJvbm91cyBh
bmQgYXN5bmNocm9ub3VzIHdheXMgdG8gcmVjZWl2ZQorICAgIG1lc3NhZ2VzLgorICAgICIiIgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBvbm1lc3NhZ2U9Tm9uZSk6CisgICAgICAg
ICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAg
cmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAgICAgb25tZXNzYWdlOiBhIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgQ2FuIGJlIE5vbmUuCisgICAgICAgICIiIgorICAgICAgICB0aHJlYWRp
bmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0
CisgICAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl9vbm1l
c3NhZ2UgPSBvbm1lc3NhZ2UKKyAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAg
c2VsZi5zdGFydCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgor
ICAgICAgICAgICAgbWVzc2FnZSA9IHJlY2VpdmVfbWVzc2FnZShzZWxmLl9yZXF1ZXN0KQorICAg
ICAgICAgICAgaWYgc2VsZi5fb25tZXNzYWdlOgorICAgICAgICAgICAgICAgIHNlbGYuX29ubWVz
c2FnZShtZXNzYWdlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9x
dWV1ZS5wdXQobWVzc2FnZSkKKworICAgIGRlZiByZWNlaXZlKHNlbGYpOgorICAgICAgICAiIiIg
UmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgY2hhbm5lbCwgYmxvY2tpbmcuCisKKyAgICAgICAg
UmV0dXJuczoKKyAgICAgICAgICAgIG1lc3NhZ2UgYXMgYSB1bmljb2RlIHN0cmluZy4KKyAgICAg
ICAgIiIiCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3F1ZXVlLmdldCgpCisKKyAgICBkZWYgcmVj
ZWl2ZV9ub3dhaXQoc2VsZik6CisgICAgICAgICIiIiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIHRo
ZSBjaGFubmVsLCBub24tYmxvY2tpbmcuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAg
IG1lc3NhZ2UgYXMgYSB1bmljb2RlIHN0cmluZyBpZiBhdmFpbGFibGUuIE5vbmUgb3RoZXJ3aXNl
LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYu
X3F1ZXVlLmdldF9ub3dhaXQoKQorICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAg
ICAgICBtZXNzYWdlID0gTm9uZQorICAgICAgICByZXR1cm4gbWVzc2FnZQorCisKK2NsYXNzIE1l
c3NhZ2VTZW5kZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiVGhpcyBjbGFzcyBzZW5kcyBt
ZXNzYWdlcyB0byB0aGUgY2xpZW50LgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBib3RoIHN5
bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgd2F5cyB0byBzZW5kCisgICAgbWVzc2FnZXMuCisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJDb25z
dHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6
IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgIiIiCisgICAgICAgIHRocmVhZGluZy5UaHJl
YWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcmVxdWVzdCA9IHJlcXVlc3QKKyAgICAg
ICAgc2VsZi5fcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuc2V0RGFlbW9uKFRy
dWUpCisgICAgICAgIHNlbGYuc3RhcnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAg
d2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAg
ICAgICAgICAgc2VuZF9tZXNzYWdlKHNlbGYuX3JlcXVlc3QsIG1lc3NhZ2UpCisKKyAgICBkZWYg
c2VuZChzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIiIiU2VuZCBhIG1lc3NhZ2UsIGJsb2NraW5n
LiIiIgorCisgICAgICAgIHNlbmRfbWVzc2FnZShzZWxmLl9yZXF1ZXN0LCBtZXNzYWdlKQorCisg
ICAgZGVmIHNlbmRfbm93YWl0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAiIiJTZW5kIGEgbWVz
c2FnZSwgbm9uLWJsb2NraW5nLiIiIgorCisgICAgICAgIHNlbGYuX3F1ZXVlLnB1dChtZXNzYWdl
KQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkgYi9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvc3RhbmRhbG9uZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwLi44YjQyZjFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKQEAgLTAsMCArMSwxNTYgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgor
IworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T
RS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0
byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMg
U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1p
c3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJTdGFu
ZGFsb25lIFdlYiBTb2NrZXQgc2VydmVyLgorCitVc2UgdGhpcyBzZXJ2ZXIgdG8gcnVuIG1vZF9w
eXdlYnNvY2tldCB3aXRob3V0IEFwYWNoZSBIVFRQIFNlcnZlci4KKyIiIgorCitpbXBvcnQgQmFz
ZUhUVFBTZXJ2ZXIKK2ltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitpbXBvcnQgU29ja2V0U2VydmVy
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgdXJscGFyc2UKKworaW1w
b3J0IGRpc3BhdGNoCitpbXBvcnQgaGFuZHNoYWtlCisKKworY2xhc3MgX1N0YW5kYWxvbmVDb25u
ZWN0aW9uKG9iamVjdCk6CisgICAgIiIiTWltaWMgbW9kX3B5dGhvbiBtcF9jb25uLiIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgICIiIkNvbnN0
cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdF9o
YW5kbGVyOiBBIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyIGluc3RhbmNlLgorICAgICAgICAiIiIK
KyAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyID0gcmVxdWVzdF9oYW5kbGVyCisKKyAgICBk
ZWYgZ2V0X2xvY2FsX2FkZHIoc2VsZik6CisgICAgICAgICIiIkdldHRlciB0byBtaW1pYyBtcF9j
b25uLmxvY2FsX2FkZHIuIiIiCisgICAgICAgIHJldHVybiAoc2VsZi5fcmVxdWVzdF9oYW5kbGVy
LnNlcnZlci5zZXJ2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0X2hhbmRs
ZXIuc2VydmVyLnNlcnZlcl9wb3J0KQorICAgIGxvY2FsX2FkZHIgPSBwcm9wZXJ0eShnZXRfbG9j
YWxfYWRkcikKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiTWltaWMg
bXBfY29ubi53cml0ZSgpLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVy
LndmaWxlLndyaXRlKGRhdGEpCisKKyAgICBkZWYgcmVhZChzZWxmLCBsZW5ndGgpOgorICAgICAg
ICAiIiJNaW1pYyBtcF9jb25uLnJlYWQoKS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVl
c3RfaGFuZGxlci5yZmlsZS5yZWFkKGxlbmd0aCkKKworCitjbGFzcyBfU3RhbmRhbG9uZVJlcXVl
c3Qob2JqZWN0KToKKyAgICAiIiJNaW1pYyBtb2RfcHl0aG9uIHJlcXVlc3QuIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdF9oYW5kbGVyKToKKyAgICAgICAgIiIiQ29uc3RydWN0
IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0X2hhbmRs
ZXI6IEEgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAg
ICAgICBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIgPSByZXF1ZXN0X2hhbmRsZXIKKyAgICAgICAgc2Vs
Zi5jb25uZWN0aW9uID0gX1N0YW5kYWxvbmVDb25uZWN0aW9uKHJlcXVlc3RfaGFuZGxlcikKKwor
ICAgIGRlZiBnZXRfdXJpKHNlbGYpOgorICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgcmVxdWVz
dC51cmkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucGF0aAorICAg
IHVyaSA9IHByb3BlcnR5KGdldF91cmkpCisKKyAgICBkZWYgZ2V0X2hlYWRlcnNfaW4oc2VsZik6
CisgICAgICAgICIiIkdldHRlciB0byBtaW1pYyByZXF1ZXN0LmhlYWRlcnNfaW4uIiIiCisgICAg
ICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIuaGVhZGVycworICAgIGhlYWRlcnNfaW4g
PSBwcm9wZXJ0eShnZXRfaGVhZGVyc19pbikKKworICAgIGRlZiBpc19odHRwcyhzZWxmKToKKyAg
ICAgICAgIiIiTWltaWMgcmVxdWVzdC5pc19odHRwcygpLiIiIgorICAgICAgICAjIFRPRE8oeXV6
byk6IEltcGxlbWVudCB0aGlzLgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBXZWJT
b2NrZXRTZXJ2ZXIoU29ja2V0U2VydmVyLlRocmVhZGluZ01peEluLCBCYXNlSFRUUFNlcnZlci5I
VFRQU2VydmVyKToKKyAgICAiIiJIVFRQU2VydmVyIHNwZWNpYWxpemVkIGZvciBXZWIgU29ja2V0
LiIiIgorCisgICAgZGFlbW9uX3RocmVhZHMgPSBUcnVlCisgICAgcGFzcworCisKK2NsYXNzIFdl
YlNvY2tldFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RI
YW5kbGVyKToKKyAgICAiIiJTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIgc3BlY2lhbGl6ZWQgZm9y
IFdlYiBTb2NrZXQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa2V5d29y
ZHMpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gX1N0YW5kYWxvbmVSZXF1ZXN0KHNlbGYpCisg
ICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKAorICAgICAgICAg
ICAgICAgIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLm9wdGlvbnMud2Vic29ja19oYW5kbGVycykK
KyAgICAgICAgc2VsZi5fcHJpbnRfd2FybmluZ3NfaWZfYW55KCkKKyAgICAgICAgc2VsZi5faGFu
ZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHNlbGYuX3JlcXVlc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaXNwYXRjaGVyKQor
ICAgICAgICBTaW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5fX2luaXRf
XygKKyAgICAgICAgICAgICAgICBzZWxmLCAqYXJncywgKiprZXl3b3JkcykKKworICAgIGRlZiBf
cHJpbnRfd2FybmluZ3NfaWZfYW55KHNlbGYpOgorICAgICAgICB3YXJuaW5ncyA9IHNlbGYuX2Rp
c3BhdGNoZXIuc291cmNlX3dhcm5pbmdzKCkKKyAgICAgICAgaWYgd2FybmluZ3M6CisgICAgICAg
ICAgICBmb3Igd2FybmluZyBpbiB3YXJuaW5nczoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndh
cm5pbmcoJ21vZF9weXdlYnNvY2tldDogJXMnICUgd2FybmluZykKKworICAgIGRlZiBwYXJzZV9y
ZXF1ZXN0KHNlbGYpOgorICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNlcnZlci5CYXNlSFRU
UFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3QuCisKKyAgICAgICAgUmV0dXJuIFRydWUgdG8g
Y29udGludWUgcHJvY2Vzc2luZyBmb3IgSFRUUChTKSwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAg
ICAiIiIKKyAgICAgICAgcmVzdWx0ID0gU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVz
dEhhbmRsZXIucGFyc2VfcmVxdWVzdChzZWxmKQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlci5zaGFrZV9oYW5kcygp
CisgICAgICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHNlbGYuX3Jl
cXVlc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBleGNlcHQg
aGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLCBlOgorICAgICAgICAgICAgICAgICMgSGFuZHNoYWtl
IGZvciB3cyhzKSBmYWlsZWQuIEFzc3VtZSBodHRwKHMpLgorICAgICAgICAgICAgICAgIGxvZ2dp
bmcuaW5mbygnbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlKQorICAgICAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZToKKyAg
ICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ21vZF9weXdlYnNvY2tldDogJXMnICUgZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisK
K2RlZiBfbWFpbigpOgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoKQorCisgICAgcGFyc2VyID0g
b3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1w
b3J0JywgZGVzdD0ncG9ydCcsIHR5cGU9J2ludCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdD1oYW5kc2hha2UuX0RFRkFVTFRfV0VCX1NPQ0tFVF9QT1JULAorICAgICAgICAgICAgICAg
ICAgICAgIGhlbHA9J3BvcnQgdG8gbGlzdGVuIHRvJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbign
LXcnLCAnLS13ZWJzb2NrX2hhbmRsZXJzJywgZGVzdD0nd2Vic29ja19oYW5kbGVycycsCisgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nLicsCisgICAgICAgICAgICAgICAgICAgICAgaGVs
cD0nV2ViIFNvY2tldCBoYW5kbGVycyBiYXNlIGRpcmVjdG9yeS4nKQorICAgICMgVE9ETyh5dXpv
KTogQWRkIHdzcy1yZWxhdGVkIG9wdGlvbnMuCisgICAgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIu
b3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKClbMF0KKworICAgIFdlYlNvY2tldFNlcnZlcigo
JycsIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLm9wdGlvbnMucG9ydCksCisgICAgICAgICAgICAg
ICAgICAgIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyKS5zZXJ2ZV9mb3JldmVyKCkKKworCitpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIF9tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC91
dGlsLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTIxYWY2OQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC91dGlsLnB5CkBA
IC0wLDAgKzEsMzcgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisj
CisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisj
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiV2ViIFNvY2tldHMgdXRp
bGl0aWVzLgorIiIiCisKKworaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdHJhY2ViYWNrCisKKwor
ZGVmIGdldF9zdGFja190cmFjZSgpOgorICAgICIiIkdldCB0aGUgY3VycmVudCBzdGFjayB0cmFj
ZSBhcyBzdHJpbmcuCisKKyAgICBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IFB5dGhvbiAyLjMu
CisgICAgVE9ETzogUmVtb3ZlIHRoaXMgd2hlbiB3ZSBvbmx5IHN1cHBvcnQgUHl0aG9uIDIuNCBh
bmQgYWJvdmUuCisgICAgICAgICAgVXNlIHRyYWNlYmFjay5mb3JtYXRfZXhjIGluc3RlYWQuCisg
ICAgIiIiCisKKyAgICBvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgdHJhY2ViYWNrLnBy
aW50X2V4YyhmaWxlPW91dCkKKyAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3NldHVwLnB5
IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uYzVmOTE4MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L3NldHVwLnB5CkBAIC0wLDAgKzEsNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIworIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi
QVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJTZXQgdXAgc2NyaXB0IGZvciBtb2RfcHl3
ZWJzb2NrZXQuCisiIiIKKworCitmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAoraW1w
b3J0IHN5cworCisKK19QQUNLQUdFX05BTUUgPSAnbW9kX3B5d2Vic29ja2V0JworCitpZiBzeXMu
dmVyc2lvbiA8ICcyLjMnOgorICAgIHByaW50ID4+c3lzLnN0ZGVyciwgJyVzIHJlcXVpcmVzIFB5
dGhvbiAyLjMgb3IgbGF0ZXIuJyAlIF9QQUNLQUdFX05BTUUKKyAgICBzeXMuZXhpdCgxKQorCitz
ZXR1cChhdXRob3I9J1l1em8gRnVqaXNoaW1hJywKKyAgICAgIGF1dGhvcl9lbWFpbD0neXV6b0Bj
aHJvbWl1bS5vcmcnLAorICAgICAgZGVzY3JpcHRpb249J1dlYiBTb2NrZXQgZXh0ZW5zaW9uIGZv
ciBBcGFjaGUgSFRUUCBTZXJ2ZXIuJywKKyAgICAgIGxvbmdfZGVzY3JpcHRpb249KAorICAgICAg
ICAgICAgICAnbW9kX3B5d2Vic29ja2V0IGlzIGFuIEFwYWNoZSBIVFRQIFNlcnZlciBleHRlbnNp
b24gZm9yICcKKyAgICAgICAgICAgICAgJ1dlYiBTb2NrZXQgKGh0dHA6Ly90b29scy5pZXRmLm9y
Zy9odG1sLycKKyAgICAgICAgICAgICAgJ2RyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29s
KS4gJworICAgICAgICAgICAgICAnU2VlIG1vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weSBmb3Ig
bW9yZSBkZXRhaWwuJyksCisgICAgICBsaWNlbnNlPSdodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAnLAorICAgICAgbmFtZT1fUEFDS0FHRV9OQU1FLAorICAgICAgcGFj
a2FnZXM9W19QQUNLQUdFX05BTUVdLAorICAgICAgdXJsPSdodHRwOi8vY29kZS5nb29nbGUuY29t
L3AvcHl3ZWJzb2NrZXQvJywKKyAgICAgIHZlcnNpb249JzAuMi4wJywKKyAgICAgICkKKworCisj
IHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvY29uZmlnLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9jb25maWcucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2JhZWFjNgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5CkBAIC0wLDAgKzEsMzAg
QEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K
KyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl
IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlv
bnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiQ29uZmlndXJhdGlvbiBmb3IgdGVzdGluZy4K
KworVGVzdCBmaWxlcyBzaG91bGQgaW1wb3J0IHRoaXMgbW9kdWxlIGJlZm9yZSBtb2RfcHl3ZWJz
b2NrZXQuCisiIiIKKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCisjIEFkZCB0aGUgcGFy
ZW50IGRpcmVjdG9yeSB0byBzeXMucGF0aCB0byBlbmFibGUgaW1wb3J0aW5nIG1vZF9weXdlYnNv
Y2tldC4KK3N5cy5wYXRoICs9IFtvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylb
MF0sICcuLicpXQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVz
dC9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjOTc0ZmIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L21vY2sucHkKQEAg
LTAsMCArMSwxODggQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisj
CisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisj
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiTW9ja3MgZm9yIHRlc3Rp
bmcuCisiIiIKKworCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aHJlYWRpbmcKKworCitjbGFzcyBf
TW9ja0Nvbm5CYXNlKG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBvZiBtb2NrcyBmb3IgbW9k
X3B5dGhvbi5hcGFjaGUubXBfY29ubi4KKworICAgIFRoaXMgZW5hYmxlcyB0ZXN0cyB0byBjaGVj
ayB3aGF0IGlzIHdyaXR0ZW4gdG8gYSAobW9jaykgbXBfY29ubi4KKyAgICAiIiIKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fd3JpdGVfZGF0YSA9IFtdCisKKyAgICBk
ZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBh
Y2hlLm1wX2Nvbm4ud3JpdGUuIiIiCisKKyAgICAgICAgc2VsZi5fd3JpdGVfZGF0YS5hcHBlbmQo
ZGF0YSkKKworICAgIGRlZiB3cml0dGVuX2RhdGEoc2VsZik6CisgICAgICAgICIiIkdldCBieXRl
cyB3cml0dGVuIHRvIHRoaXMgbW9jay4iIiIKKworICAgICAgICByZXR1cm4gJycuam9pbihzZWxm
Ll93cml0ZV9kYXRhKQorCisKK2NsYXNzIE1vY2tDb25uKF9Nb2NrQ29ubkJhc2UpOgorICAgICIi
Ik1vY2sgZm9yIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4uCisKKyAgICBUaGlzIGVuYWJsZXMg
dGVzdHMgdG8gc3BlY2lmeSB3aGF0IHNob3VsZCBiZSByZWFkIGZyb20gYSAobW9jaykgbXBfY29u
biBhcworICAgIHdlbGwgYXMgdG8gY2hlY2sgd2hhdCBpcyB3cml0dGVuIHRvIGl0LgorICAgICIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWRfZGF0YSk6CisgICAgICAgICIiIkNvbnN0
cnVjdHMgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlYWRfZGF0
YTogYnl0ZXMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgd2hlbiByZWFkKiBtZXRob2RzIGFyZQor
ICAgICAgICAgICAgY2FsbGVkLgorICAgICAgICAiIiIKKworICAgICAgICBfTW9ja0Nvbm5CYXNl
Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3JlYWRfZGF0YSA9IHJlYWRfZGF0YQorICAg
ICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAg
ICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkbGluZS4iIiIKKwor
ICAgICAgICBpZiBzZWxmLl9yZWFkX3BvcyA+PSBsZW4oc2VsZi5fcmVhZF9kYXRhKToKKyAgICAg
ICAgICAgIHJldHVybiAnJworICAgICAgICBlbmRfaW5kZXggPSBzZWxmLl9yZWFkX2RhdGEuZmlu
ZCgnXG4nLCBzZWxmLl9yZWFkX3BvcykgKyAxCisgICAgICAgIGlmIGVuZF9pbmRleCA9PSAwOgor
ICAgICAgICAgICAgZW5kX2luZGV4ID0gbGVuKHNlbGYuX3JlYWRfZGF0YSkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlYWRfdXBfdG8oZW5kX2luZGV4KQorCisgICAgZGVmIHJlYWQoc2VsZiwgbGVu
Z3RoKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFk
LiIiIgorCisgICAgICAgIGlmIHNlbGYuX3JlYWRfcG9zID49IGxlbihzZWxmLl9yZWFkX2RhdGEp
OgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGVuZF9pbmRleCA9IG1pbihsZW4oc2Vs
Zi5fcmVhZF9kYXRhKSwgc2VsZi5fcmVhZF9wb3MgKyBsZW5ndGgpCisgICAgICAgIHJldHVybiBz
ZWxmLl9yZWFkX3VwX3RvKGVuZF9pbmRleCkKKworICAgIGRlZiBfcmVhZF91cF90byhzZWxmLCBl
bmRfaW5kZXgpOgorICAgICAgICBsaW5lID0gc2VsZi5fcmVhZF9kYXRhW3NlbGYuX3JlYWRfcG9z
OmVuZF9pbmRleF0KKyAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSBlbmRfaW5kZXgKKyAgICAgICAg
cmV0dXJuIGxpbmUKKworCitjbGFzcyBNb2NrQmxvY2tpbmdDb25uKF9Nb2NrQ29ubkJhc2UpOgor
ICAgICIiIkJsb2NraW5nIG1vY2sgZm9yIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4uCisKKyAg
ICBUaGlzIGVuYWJsZXMgdGVzdHMgdG8gc3BlY2lmeSB3aGF0IHNob3VsZCBiZSByZWFkIGZyb20g
YSAobW9jaykgbXBfY29ubiBhcworICAgIHdlbGwgYXMgdG8gY2hlY2sgd2hhdCBpcyB3cml0dGVu
IHRvIGl0LgorICAgIENhbGxlcnMgb2YgcmVhZCogbWV0aG9kcyB3aWxsIGJsb2NrIGlmIHRoZXJl
IGlzIG5vIGJ5dGVzIGF2YWlsYWJsZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
KToKKyAgICAgICAgX01vY2tDb25uQmFzZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAg
IiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkbGluZS4iIiIKKyAgICAg
ICAgbGluZSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjaCA9IHNlbGYu
X3F1ZXVlLmdldCgpCisgICAgICAgICAgICBsaW5lICs9IGNoCisgICAgICAgICAgICBpZiBjaCA9
PSAnXG4nOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgcmVhZChzZWxm
LCBsZW5ndGgpOgorICAgICAgICAiIiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25u
LnJlYWQuIiIiCisKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIGZvciBfIGluIHJhbmdlKGxl
bmd0aCk6CisgICAgICAgICAgICBkYXRhICs9IHNlbGYuX3F1ZXVlLmdldCgpCisgICAgICAgIHJl
dHVybiBkYXRhCisKKyAgICBkZWYgcHV0X2J5dGVzKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgIiIi
UHV0IGJ5dGVzIHRvIGJlIHJlYWQgZnJvbSB0aGlzIG1vY2suCisKKyAgICAgICAgQXJnczoKKyAg
ICAgICAgICAgIGJ5dGVzOiBieXRlcyB0byBiZSByZWFkLgorICAgICAgICAiIiIKKworICAgICAg
ICBmb3IgYnl0ZSBpbiBieXRlczoKKyAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnB1dChieXRlKQor
CisKK2NsYXNzIE1vY2tUYWJsZShkaWN0KToKKyAgICAiIiJNb2NrIHRhYmxlLgorCisgICAgVGhp
cyBtaW1pY2tzIG1vZF9weXRob24gbXBfdGFibGUuIE5vdGUgdGhhdCBvbmx5IHRoZSBtZXRob2Rz
IHVzZWQgYnkKKyAgICB0ZXN0cyBhcmUgb3ZlcnJpZGRlbi4KKyAgICAiIiIKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBjb3B5X2Zyb209e30pOgorICAgICAgICBpZiBpc2luc3RhbmNlKGNvcHlf
ZnJvbSwgZGljdCk6CisgICAgICAgICAgICBjb3B5X2Zyb20gPSBjb3B5X2Zyb20uaXRlbXMoKQor
ICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjb3B5X2Zyb206CisgICAgICAgICAgICBzZWxmLl9f
c2V0aXRlbV9fKGtleSwgdmFsdWUpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToK
KyAgICAgICAgcmV0dXJuIHN1cGVyKE1vY2tUYWJsZSwgc2VsZikuX19nZXRpdGVtX18oa2V5Lmxv
d2VyKCkpCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAg
IHN1cGVyKE1vY2tUYWJsZSwgc2VsZikuX19zZXRpdGVtX18oa2V5Lmxvd2VyKCksIHZhbHVlKQor
CisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZl92YWx1ZT1Ob25lKToKKyAgICAgICAgcmV0dXJu
IHN1cGVyKE1vY2tUYWJsZSwgc2VsZikuZ2V0KGtleS5sb3dlcigpLCBkZWZfdmFsdWUpCisKKwor
Y2xhc3MgTW9ja1JlcXVlc3Qob2JqZWN0KToKKyAgICAiIiJNb2NrIHJlcXVlc3QuCisKKyAgICBU
aGlzIG1pbWljcyBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgdXJpPU5vbmUsIGhlYWRlcnNfaW49e30sIGNvbm5lY3Rpb249Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgaXNfaHR0cHM9RmFsc2UpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5z
dGFuY2UuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICAgdXJpOiBVUkkgb2YgdGhl
IHJlcXVlc3QuCisgICAgICAgICAgICBoZWFkZXJzX2luOiBSZXF1ZXN0IGhlYWRlcnMuCisgICAg
ICAgICAgICBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHVzZWQgZm9yIHRoZSByZXF1ZXN0LgorICAg
ICAgICAgICAgaXNfaHR0cHM6IFdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIgU1NMLgorCisg
ICAgICAgIFNlZSB0aGUgZG9jdW1lbnQgb2YgbW9kX3B5dGhvbiBtcF9jb25uIGZvciBkZXRhaWxz
LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi51cmkgPSB1cmkKKyAgICAgICAgc2VsZi5jb25u
ZWN0aW9uID0gY29ubmVjdGlvbgorICAgICAgICBzZWxmLmhlYWRlcnNfaW4gPSBNb2NrVGFibGUo
aGVhZGVyc19pbikKKyAgICAgICAgc2VsZi5pc19odHRwc18gPSBpc19odHRwcworCisgICAgZGVm
IGlzX2h0dHBzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGlzIHJlcXVlc3Qg
aXMgb3ZlciBTU0wuIiIiCisgICAgICAgIHJldHVybiBzZWxmLmlzX2h0dHBzXworCisKK2NsYXNz
IE1vY2tEaXNwYXRjaGVyKG9iamVjdCk6CisgICAgIiIiTW9jayBmb3IgZGlzcGF0Y2guRGlzcGF0
Y2hlci4iIiIKKworICAgIGRlZiBzaGFrZV9oYW5kcyhzZWxmLCBjb25uX2NvbnRleHQpOgorICAg
ICAgICBwYXNzCisKKyAgICBkZWYgdHJhbnNmZXJfZGF0YShzZWxmLCBjb25uX2NvbnRleHQpOgor
ICAgICAgICBwYXNzCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3J1bl9hbGwucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC90ZXN0L3J1bl9hbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTZm
N2E3YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvcnVu
X2FsbC5weQpAQCAtMCwwICsxLDQ5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29w
eXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
UywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCisKKworIiIiUnVuIGFsbCB0ZXN0cyBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisiIiIKKworCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHVuaXR0ZXN0CisKKworX1RF
U1RfTU9EVUxFX1BBVFRFUk4gPSByZS5jb21waWxlKHInXih0ZXN0Xy4rKVwucHkkJykKKworCitk
ZWYgX2xpc3RfdGVzdF9tb2R1bGVzKGRpcmVjdG9yeSk6CisgICAgbW9kdWxlX25hbWVzID0gW10K
KyAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgorICAgICAgICBtYXRj
aCA9IF9URVNUX01PRFVMRV9QQVRURVJOLnNlYXJjaChmaWxlbmFtZSkKKyAgICAgICAgaWYgbWF0
Y2g6CisgICAgICAgICAgICBtb2R1bGVfbmFtZXMuYXBwZW5kKG1hdGNoLmdyb3VwKDEpKQorICAg
IHJldHVybiBtb2R1bGVfbmFtZXMKKworCitkZWYgX3N1aXRlKCk6CisgICAgbG9hZGVyID0gdW5p
dHRlc3QuVGVzdExvYWRlcigpCisgICAgcmV0dXJuIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMo
CisgICAgICAgICAgICBfbGlzdF90ZXN0X21vZHVsZXMob3MucGF0aC5qb2luKG9zLnBhdGguc3Bs
aXQoX19maWxlX18pWzBdLCAnLicpKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgor
ICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J19zdWl0ZScpCisKKworIyB2aTpzdHM9NCBz
dz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfZGlz
cGF0Y2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfZGlzcGF0Y2gucHkK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWE0YmQ1NQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weQpAQCAt
MCwwICsxLDE1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5
IEdvb2dsZSBJbmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy
c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhP
VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl
LgorCisKKyIiIlRlc3RzIGZvciBkaXNwYXRjaCBtb2R1bGUuIiIiCisKKworCitpbXBvcnQgb3MK
K2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRl
ZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0LgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGRp
c3BhdGNoCisKK2ltcG9ydCBtb2NrCisKKworX1RFU1RfSEFORExFUlNfRElSID0gb3MucGF0aC5q
b2luKAorICAgICAgICBvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJ3Rlc3RkYXRhJywgJ2hh
bmRsZXJzJykKKworY2xhc3MgRGlzcGF0Y2hlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiB0ZXN0X2NvbnZlcnRlcihzZWxmKToKKyAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2gu
X3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKCcvYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnL2gnLCBjb252ZXJ0ZXIoJy9hL2IvaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnL2MvaCcsIGNvbnZlcnRlcignL2EvYi9jL2hfd3NoLnB5JykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoTm9uZSwgY29udmVydGVyKCcvYS9iL2gucHknKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChOb25lLCBjb252ZXJ0ZXIoJ2EvYi9oX3dzaC5weScpKQorCisgICAgICAg
IGNvbnZlcnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignYS9iJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoJ2EvYi9oX3dzaC5weScp
KQorCisgICAgICAgIGNvbnZlcnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZl
cnRlcignL2EvYi8vLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVy
KCcvYS9iL2hfd3NoLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVy
dGVyKCcvYS9iLy4uL2IvaF93c2gucHknKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRj
aC5fcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoJy9hLy4uL2EvYi8uLi9iLycpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKCcvYS9iL2hfd3NoLnB5JykpCisKKyAg
ICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKHIn
XGFcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKHInXGFcYlxo
X3dzaC5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcihyJy9h
L2IvaF93c2gucHknKSkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9maWxlX3BhdGhzKHNlbGYpOgor
ICAgICAgICBwYXRocyA9IGxpc3QoZGlzcGF0Y2guX3NvdXJjZV9maWxlX3BhdGhzKF9URVNUX0hB
TkRMRVJTX0RJUikpCisgICAgICAgIHBhdGhzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKDcsIGxlbihwYXRocykpCisgICAgICAgIGV4cGVjdGVkX3BhdGhzID0gWworICAgICAgICAg
ICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdhX3dzaC5weScpLAorICAg
ICAgICAgICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdiX3dzaC5weScp
LAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWIv
Y193c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNf
RElSLCAnc3ViL2Vfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNU
X0hBTkRMRVJTX0RJUiwgJ3N1Yi9mX3dzaC5weScpLAorICAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwgaW4gemlwKGV4cGVjdGVkX3BhdGhzLCBwYXRocyk6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCisKKyAgICBkZWYg
dGVzdF9zb3VyY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3BhdGNoLkRp
c3BhdGNoRXJyb3IsIGRpc3BhdGNoLl9zb3VyY2UsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBkaXNwYXRjaC5fc291cmNlLCAnZGVmJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZGlzcGF0Y2gu
X3NvdXJjZSwgJzEvMCcpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkaXNwYXRjaC5fc291cmNl
KAorICAgICAgICAgICAgICAgICdkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KTpw
YXNzXG4nCisgICAgICAgICAgICAgICAgJ2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVx
dWVzdCk6cGFzc1xuJykpCisKKyAgICBkZWYgdGVzdF9zb3VyY2Vfd2FybmluZ3Moc2VsZik6Cisg
ICAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJ
UikKKyAgICAgICAgd2FybmluZ3MgPSBkaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5ncygpCisgICAg
ICAgIHdhcm5pbmdzLnNvcnQoKQorICAgICAgICBleHBlY3RlZF93YXJuaW5ncyA9IFsKKyAgICAg
ICAgICAgICAgICAob3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ2Jfd3NoLnB5Jykg
KyAnOiAnCisgICAgICAgICAgICAgICAgICd3ZWJfc29ja2V0X3NoYWtlX2hhbmRzIGlzIG5vdCBk
ZWZpbmVkLicpLAorICAgICAgICAgICAgICAgIChvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNf
RElSLCAnc3ViJywgJ2Nfd3NoLnB5JykgKyAnOiAnCisgICAgICAgICAgICAgICAgICd3ZWJfc29j
a2V0X3NoYWtlX2hhbmRzIGlzIG5vdCBjYWxsYWJsZS4nKSwKKyAgICAgICAgICAgICAgICAob3Mu
cGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdnX3dzaC5weScpICsgJzogJwor
ICAgICAgICAgICAgICAgICAnd2ViX3NvY2tldF9zaGFrZV9oYW5kcyBpcyBub3QgZGVmaW5lZC4n
KSwKKyAgICAgICAgICAgICAgICAob3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1
YicsICdoX3dzaC5weScpICsgJzogJworICAgICAgICAgICAgICAgICAnd2ViX3NvY2tldF90cmFu
c2Zlcl9kYXRhIGlzIG5vdCBkZWZpbmVkLicpLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoNCwgbGVuKHdhcm5pbmdzKSkKKyAgICAgICAgZm9yIGV4cGVjdGVk
LCBhY3R1YWwgaW4gemlwKGV4cGVjdGVkX3dhcm5pbmdzLCB3YXJuaW5ncyk6CisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3Rfc2hh
a2VfaGFuZChzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIo
X1RFU1RfSEFORExFUlNfRElSKQorICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdCgp
CisgICAgICAgIHJlcXVlc3Qud3NfcmVzb3VyY2UgPSAnL2EnCisgICAgICAgIHJlcXVlc3Qud3Nf
b3JpZ2luID0gJ2h0dHA6Ly9leGFtcGxlLmNvbScKKyAgICAgICAgZGlzcGF0Y2hlci5zaGFrZV9o
YW5kcyhyZXF1ZXN0KSAgIyBNdXN0IG5vdCByYWlzZSBleGNlcHRpb24uCisKKyAgICAgICAgcmVx
dWVzdC53c19vcmlnaW4gPSAnaHR0cDovL2JhZC5leGFtcGxlLmNvbScKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzcGF0Y2hlci5zaGFrZV9oYW5kcywgcmVxdWVzdCkKKworICAgIGRlZiB0ZXN0X3Ry
YW5zZmVyX2RhdGEoc2VsZik6CisgICAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRj
aGVyKF9URVNUX0hBTkRMRVJTX0RJUikKKyAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVl
c3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkKKyAgICAgICAgcmVxdWVzdC53c19yZXNv
dXJjZSA9ICcvYScKKyAgICAgICAgcmVxdWVzdC53c19wcm90b2NvbCA9ICdwMScKKworICAgICAg
ICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnYV93c2gucHkgaXMgY2FsbGVkIGZvciAvYSwgcDEnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgICAgICByZXF1
ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAg
ICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9zdWIvZScKKyAgICAgICAgcmVxdWVzdC53c19w
cm90b2NvbCA9IE5vbmUKKyAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3Qp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3N1Yi9lX3dzaC5weSBpcyBjYWxsZWQgZm9yIC9z
dWIvZSwgTm9uZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
LndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YV9ub19oYW5kbGVy
KHNlbGYpOgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9I
QU5ETEVSU19ESVIpCisgICAgICAgIGZvciByZXNvdXJjZSBpbiBbJy9iJywgJy9zdWIvYycsICcv
c3ViL2QnLCAnL2RvZXMvbm90L2V4aXN0J106CisgICAgICAgICAgICByZXF1ZXN0ID0gbW9jay5N
b2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAgICAgICAgICAgcmVx
dWVzdC53c19yZXNvdXJjZSA9IHJlc291cmNlCisgICAgICAgICAgICByZXF1ZXN0LndzX3Byb3Rv
Y29sID0gJ3AyJworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIu
dHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAg
ICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZToKKyAgICAgICAgICAgICAg
ICBzZWxmLmZhaWxVbmxlc3Moc3RyKGUpLmZpbmQoJ05vIGhhbmRsZXInKSAhPSAtMSkKKyAgICAg
ICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKKwor
ICAgIGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGFfaGFuZGxlcl9leGNlcHRpb24oc2VsZik6CisgICAg
ICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUikK
KyAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tD
b25uKCcnKSkKKyAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL2YnCisgICAgICAg
IHJlcXVlc3Qud3NfcHJvdG9jb2wgPSAncDMnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRp
c3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCkK
KyAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgICAgICBz
ZWxmLmZhaWxVbmxlc3Moc3RyKGUpLmZpbmQoJ0ludGVudGlvbmFsJykgIT0gLTEpCisgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisKK2lmIF9fbmFt
ZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBz
dz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFu
ZHNoYWtlLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5w
eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzlhNjQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5weQpA
QCAtMCwwICsxLDMwMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAy
MDA5IEdvb2dsZSBJbmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorCisKKyIiIlRlc3RzIGZvciBoYW5kc2hha2UgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1
bml0dGVzdAorCitpbXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUg
bW9kX3B5d2Vic29ja2V0LgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhhbmRzaGFrZQor
CitpbXBvcnQgbW9jaworCisKK19HT09EX1JFUVVFU1QgPSAoCisgICAgODAsCisgICAgJy9kZW1v
JywKKyAgICB7CisgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgJ0Nvbm5l
Y3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAgICAg
ICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICAnV2ViU29ja2V0LVByb3Rv
Y29sJzonc2FtcGxlJywKKyAgICB9CispCisKK19HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCA9
ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicK
KyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxy
XG4nCisgICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAg
J1dlYlNvY2tldC1Mb2NhdGlvbjogd3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicKKyAgICAnV2Vi
U29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJykKKworX0dPT0RfUkVTUE9O
U0VfU0VDVVJFID0gKAorICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5k
c2hha2VcclxuJworICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9u
OiBVcGdyYWRlXHJcbicKKyAgICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29t
XHJcbicKKyAgICAnV2ViU29ja2V0LUxvY2F0aW9uOiB3c3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJc
bicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJykKKwor
X0dPT0RfUkVRVUVTVF9OT05ERUZBVUxUX1BPUlQgPSAoCisgICAgODA4MSwKKyAgICAnL2RlbW8n
LAorICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAnQ29ubmVj
dGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tOjgwODEnLAorICAg
ICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgJ1dlYlNvY2tldC1Q
cm90b2NvbCc6J3NhbXBsZScsCisgICAgfQorKQorCitfR09PRF9SRVNQT05TRV9OT05ERUZBVUxU
X1BPUlQgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFr
ZVxyXG4nCisgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVw
Z3JhZGVcclxuJworICAgICdXZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxu
JworICAgICdXZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb206ODA4MS9kZW1vXHJc
bicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJykKKwor
X0dPT0RfUkVTUE9OU0VfU0VDVVJFX05PTkRFRiA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYiBT
b2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJc
bicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1PcmlnaW46
IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3NzOi8v
ZXhhbXBsZS5jb206ODA4MS9kZW1vXHJcbicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1w
bGVcclxuJworICAgICdcclxuJykKKworX0dPT0RfUkVRVUVTVF9OT19QUk9UT0NPTCA9ICgKKyAg
ICA4MCwKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQn
LAorICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAnSG9zdCc6J2V4YW1w
bGUuY29tJywKKyAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgfQor
KQorCitfR09PRF9SRVNQT05TRV9OT19QUk9UT0NPTCA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdl
YiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0
XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1Pcmln
aW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3M6
Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicKKyAgICAnXHJcbicpCisKK19HT09EX1JFUVVFU1RfV0lU
SF9PUFRJT05BTF9IRUFERVJTID0gKAorICAgIDgwLAorICAgICcvZGVtbycsCisgICAgeworICAg
ICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcsCisgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFk
ZScsCisgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAnT3JpZ2luJzonaHR0
cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScs
CisgICAgICAgICdBS2V5JzonQVZhbHVlJywKKyAgICAgICAgJ0VtcHR5VmFsdWUnOicnLAorICAg
IH0KKykKKworX0JBRF9SRVFVRVNUUyA9ICgKKyAgICAoICAjIEhUVFAgcmVxdWVzdAorICAgICAg
ICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOid3
d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAnVXNlci1BZ2VudCc6J01vemlsbGEvNS4wIChN
YWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYIDEwLjU7JworICAgICAgICAgICAgICAgICAgICAg
ICAgICcgZW4tVVM7IHJ2OjEuOS4xLjMpIEdlY2tvLzIwMDkwODI0IEZpcmVmb3gvMy41LjMnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgJyBHVEI2IEdUQkEnLAorICAgICAgICAgICAgJ0FjY2Vw
dCc6J3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45
LCcKKyAgICAgICAgICAgICAgICAgICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAgJ0FjY2Vw
dC1MYW5ndWFnZSc6J2VuLXVzLGVuO3E9MC41JywKKyAgICAgICAgICAgICdBY2NlcHQtRW5jb2Rp
bmcnOidnemlwLGRlZmxhdGUnLAorICAgICAgICAgICAgJ0FjY2VwdC1DaGFyc2V0JzonSVNPLTg4
NTktMSx1dGYtODtxPTAuNywqO3E9MC43JywKKyAgICAgICAgICAgICdLZWVwLUFsaXZlJzonMzAw
JywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzona2VlcC1hbGl2ZScsCisgICAgICAgIH0KKyAg
ICApLAorICAgICggICMgTWlzc2luZyBVcGdyYWRlCisgICAgICAgIDgwLAorICAgICAgICAnL2Rl
bW8nLAorICAgICAgICB7CisgICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAg
ICAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAgICAgICAgICAnT3JpZ2luJzonaHR0
cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1w
bGUnLAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAjIFdyb25nIFVwZ3JhZGUKKyAgICAgICAg
ODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzon
Tm9uV2ViU29ja2V0JywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCisgICAg
ICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdPcmlnaW4nOidodHRw
Oi8vZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBs
ZScsCisgICAgICAgIH0KKyAgICApLAorICAgICggICMgRW1wdHkgV2ViU29ja2V0LVByb3RvY29s
CisgICAgICAgIDgwLAorICAgICAgICAnL2RlbW8nLAorICAgICAgICB7CisgICAgICAgICAgICAn
VXBncmFkZSc6J1dlYlNvY2tldCcsCisgICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUn
LAorICAgICAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAgICAgICAgICAnT3JpZ2lu
JzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wn
OicnLAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAjIFdyb25nIHBvcnQgbnVtYmVyIGZvcm1h
dAorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAg
J1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRl
JywKKyAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb206MHg1MCcsCisgICAgICAgICAgICAn
T3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJv
dG9jb2wnOidzYW1wbGUnLAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAjIEhlYWRlci9jb25u
ZWN0aW9uIHBvcnQgbWlzbWF0Y2gKKyAgICAgICAgODA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAg
ICAgICAgeworICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAgICAg
J0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20n
LAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAg
ICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKKyAgICAgICAgfQorICAgICksCisgICAg
KCAgIyBJbGxlZ2FsIFdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICA4MCwKKyAgICAgICAgJy9k
ZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAg
ICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0JzonZXhh
bXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisg
ICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonaWxsZWdhbCBwcm90b2NvbCcsCisgICAg
ICAgIH0KKyAgICApLAorKQorCisKK2RlZiBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpOgor
ICAgIGNvbm4gPSBtb2NrLk1vY2tDb25uKCcnKQorICAgIGNvbm4ubG9jYWxfYWRkciA9ICgnMC4w
LjAuMCcsIHJlcXVlc3RfZGVmWzBdKQorICAgIHJldHVybiBtb2NrLk1vY2tSZXF1ZXN0KAorICAg
ICAgICAgICAgdXJpPXJlcXVlc3RfZGVmWzFdLAorICAgICAgICAgICAgaGVhZGVyc19pbj1yZXF1
ZXN0X2RlZlsyXSwKKyAgICAgICAgICAgIGNvbm5lY3Rpb249Y29ubikKKworCitjbGFzcyBIYW5k
c2hha2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdmFsaWRhdGVfcHJv
dG9jb2woc2VsZik6CisgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2woJ3NhbXBs
ZScpICAjIHNob3VsZCBzdWNjZWVkLgorICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3Rv
Y29sKCdTYW1wbGUnKSAgIyBzaG91bGQgc3VjY2VlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoaGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAn
c2FtcGxlIHByb3RvY29sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtlLkhh
bmRzaGFrZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UuX3ZhbGlk
YXRlX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAjICJKYXBhbiIgaW4gSmFw
YW5lc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdcdTY1ZTVcdTY3MmMnKQorCisgICAg
ZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X2RlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVz
dCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAgICAgICBoYW5kc2hha2VyID0g
aGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtl
ci5zaGFrZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0Vf
REVGQVVMVF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2RlbW8nLCByZXF1
ZXN0LndzX3Jlc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vZXhhbXBs
ZS5jb20nLCByZXF1ZXN0LndzX29yaWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnd3M6
Ly9leGFtcGxlLmNvbS9kZW1vJywgcmVxdWVzdC53c19sb2NhdGlvbikKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0
X2dvb2RfcmVxdWVzdF9zZWN1cmVfZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICByZXF1ZXN0
ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1QpCisgICAgICAgIHJlcXVlc3QuY29ubmVj
dGlvbi5sb2NhbF9hZGRyID0gKCcwLjAuMC4wJywgNDQzKQorICAgICAgICByZXF1ZXN0LmlzX2h0
dHBzXyA9IFRydWUKKyAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJl
cXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1v
Y2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX1NFQ1VSRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYg
dGVzdF9nb29kX3JlcXVlc3Rfbm9uZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICByZXF1ZXN0
ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1RfTk9OREVGQVVMVF9QT1JUKQorICAgICAg
ICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAg
ICAgICAgaGFuZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
X0dPT0RfUkVTUE9OU0VfTk9OREVGQVVMVF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2Rf
cmVxdWVzdF9zZWN1cmVfbm9uX2RlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9
IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX05PTkRFRkFVTFRfUE9SVCkKKyAgICAgICAg
cmVxdWVzdC5pc19odHRwc18gPSBUcnVlCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2Uu
SGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLnNoYWtlX2hh
bmRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9TRUNVUkVfTk9O
REVGLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVu
X2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19w
cm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0X25vX3Byb3RvY29s
KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1Rf
Tk9fUFJPVE9DT0wpCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihy
ZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5N
b2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLnNoYWtlX2hhbmRzKCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9OT19QUk9UT0NPTCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRl
ZiB0ZXN0X2dvb2RfcmVxdWVzdF9vcHRpb25hbF9oZWFkZXJzKHNlbGYpOgorICAgICAgICByZXF1
ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1RfV0lUSF9PUFRJT05BTF9IRUFERVJT
KQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNo
ZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ0FWYWx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFk
ZXJzX2luWydBS2V5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzX2luWydFbXB0eVZhbHVlJ10pCisKKyAgICBk
ZWYgdGVzdF9iYWRfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIGZvciByZXF1ZXN0IGluIG1hcChf
Y3JlYXRlX3JlcXVlc3QsIF9CQURfUkVRVUVTVFMpOgorICAgICAgICAgICAgaGFuZHNoYWtlciA9
IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLCBoYW5kc2hha2VyLnNo
YWtlX2hhbmRzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3Qu
bWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9w
eXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvdGVzdF9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0MjU1
NzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rf
bW9jay5weQpAQCAtMCwwICsxLDExMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENv
cHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVy
IHRoZSBMaWNlbnNlLgorCisKKyIiIlRlc3RzIGZvciBtb2NrIG1vZHVsZS4iIiIKKworCitpbXBv
cnQgUXVldWUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgbW9j
aworCisKK2NsYXNzIE1vY2tDb25uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNl
dFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9jb25uID0gbW9jay5Nb2NrQ29ubignQUJDXHJcbkRF
RkdcclxuXHJcbkhJSksnKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ0FCQ1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0RFRkdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcclxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdISUpLJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisKKyAg
ICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBQkNcclxu
RCcsIHNlbGYuX2Nvbm4ucmVhZCg2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRUZHXHJc
blxyXG5ISScsIHNlbGYuX2Nvbm4ucmVhZCg5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
SksnLCBzZWxmLl9jb25uLnJlYWQoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBz
ZWxmLl9jb25uLnJlYWQoMTApKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbmRfcmVhZGxpbmUoc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FCQ1xyXG5EJywgc2VsZi5fY29ubi5yZWFk
KDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdFRkdcclxuJywgc2VsZi5fY29ubi5yZWFk
bGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcclxuSElKSycsIHNlbGYuX2Nvbm4u
cmVhZCg5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5yZWFkbGlu
ZSgpKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Nvbm4ud3Jp
dGUoJ0hlbGxvXHJcbicpCisgICAgICAgIHNlbGYuX2Nvbm4ud3JpdGUoJ1dvcmxkXHJcbicpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvXHJcbldvcmxkXHJcbicsIHNlbGYuX2Nvbm4u
d3JpdHRlbl9kYXRhKCkpCisKKworY2xhc3MgTW9ja0Jsb2NraW5nQ29ublRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIGNsYXNzIExpbmVS
ZWFkZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwg
Y29ubiwgcXVldWUpOgorICAgICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18o
c2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9xdWV1ZSA9IHF1ZXVlCisgICAgICAgICAgICAg
ICAgc2VsZi5fY29ubiA9IGNvbm4KKyAgICAgICAgICAgICAgICBzZWxmLnNldERhZW1vbihUcnVl
KQorICAgICAgICAgICAgICAgIHNlbGYuc3RhcnQoKQorICAgICAgICAgICAgZGVmIHJ1bihzZWxm
KToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBkYXRh
ID0gc2VsZi5fY29ubi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVl
LnB1dChkYXRhKQorICAgICAgICBjb25uID0gbW9jay5Nb2NrQmxvY2tpbmdDb25uKCkKKyAgICAg
ICAgcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHJlYWRlciA9IExpbmVSZWFkZXIoY29u
biwgcXVldWUpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhxdWV1ZS5lbXB0eSgpKQorICAgICAg
ICBjb25uLnB1dF9ieXRlcygnRm9vIGJhclxyXG4nKQorICAgICAgICByZWFkID0gcXVldWUuZ2V0
KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRm9vIGJhclxyXG4nLCByZWFkKQorCisKK2Ns
YXNzIE1vY2tUYWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NyZWF0
ZV9mcm9tX2RpY3Qoc2VsZik6CisgICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoeydLZXkn
OidWYWx1ZSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgn
S0VZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQor
CisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fbGlzdChzZWxmKToKKyAgICAgICAgdGFibGUgPSBt
b2NrLk1vY2tUYWJsZShbKCdLZXknLCAnVmFsdWUnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLRVknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
VmFsdWUnLCB0YWJsZVsna2V5J10pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV90dXBsZShz
ZWxmKToKKyAgICAgICAgdGFibGUgPSBtb2NrLk1vY2tUYWJsZSgoKCdLZXknLCAnVmFsdWUnKSwp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQorCisgICAgZGVm
IHRlc3Rfc2V0X2FuZF9nZXQoc2VsZik6CisgICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUo
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHRhYmxlLmdldCgnS2V5JykpCisgICAg
ICAgIHRhYmxlWydLZXknXSA9ICdWYWx1ZScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFs
dWUnLCB0YWJsZS5nZXQoJ0tleScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScs
IHRhYmxlLmdldCgna2V5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFi
bGUuZ2V0KCdLRVknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsn
S2V5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydLRVknXSkKKworCitpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3Rz
PTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
X21zZ3V0aWwucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbXNndXRpbC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGEyNjNjCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwucHkKQEAg
LTAsMCArMSwxMzQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAw
OSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KKworCisiIiJUZXN0cyBmb3IgbXNndXRpbCBtb2R1bGUuIiIiCisKKworaW1wb3J0IFF1ZXVl
CitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZyAgIyBUaGlzIG11c3QgYmUgaW1wb3J0
ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBt
c2d1dGlsCisKK2ltcG9ydCBtb2NrCisKKworZGVmIF9jcmVhdGVfcmVxdWVzdChyZWFkX2RhdGEp
OgorICAgIHJldHVybiBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubihy
ZWFkX2RhdGEpKQorCitkZWYgX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCk6CisgICAgcmV0dXJu
IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tCbG9ja2luZ0Nvbm4oKSkKKwor
Y2xhc3MgTWVzc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NlbmRf
bWVzc2FnZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnJykKKyAg
ICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0hlbGxvJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnXHgwMEhlbGxvXHhmZicsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVu
X2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3NlbmRfbWVzc2FnZV91bmljb2RlKHNlbGYpOgorICAg
ICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCcnKQorICAgICAgICBtc2d1dGlsLnNlbmRf
bWVzc2FnZShyZXF1ZXN0LCB1J1x1NjVlNScpCisgICAgICAgICMgVSs2NWU1IGlzIGVuY29kZWQg
YXMgZTYsOTcsYTUgaW4gVVRGLTgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFx4ZTZc
eDk3XHhhNVx4ZmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZShzZWxmKToK
KyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnXHgwMEhlbGxvXHhmZlx4MDBXb3Js
ZCFceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8nLCBtc2d1dGlsLnJlY2Vp
dmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQhJywg
bXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZl
X21lc3NhZ2VfdW5pY29kZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVz
dCgnXHgwMFx4ZTZceDljXHhhY1x4ZmYnKQorICAgICAgICAjIFUrNjcyYyBpcyBlbmNvZGVkIGFz
IGU2LDljLGFjIGluIFVURi04CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdTY3MmMnLCBt
c2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVf
bWVzc2FnZV9kaXNjYXJkKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
KCdceDgwXHgwNklHTk9SRVx4MDBIZWxsb1x4ZmYnCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdceDAxRElTUkVHQVJEXHhmZlx4MDBXb3JsZCFceGZmJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnSGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQhJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2Uo
cmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9wYXlsb2FkX2xlbmd0aChzZWxmKToKKyAgICAgICAg
Zm9yIGxlbmd0aCwgYnl0ZXMgaW4gKCgwLCAnXHgwMCcpLCAoMHg3ZiwgJ1x4N2YnKSwgKDB4ODAs
ICdceDgxXHgwMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTIzNCwgJ1x4
ODBceGE0XHgzNCcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLl9wYXlsb2FkX2xlbmd0aChfY3JlYXRl
X3JlcXVlc3QoYnl0ZXMpKSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfYnl0ZXMoc2VsZik6Cisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ2FiY2RlZmcnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdhYmMnLCBtc2d1dGlsLl9yZWNlaXZlX2J5dGVzKHJlcXVlc3QsIDMpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdkZWZnJywgbXNndXRpbC5fcmVjZWl2ZV9ieXRlcyhy
ZXF1ZXN0LCA0KSkKKworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWwoc2VsZik6CisgICAgICAgIHJl
cXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ2FiY1hkZWZnWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ2FiYycsIG1zZ3V0aWwuX3JlYWRfdW50aWwocmVxdWVzdCwgJ1gnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnZGVmZycsIG1zZ3V0aWwuX3JlYWRfdW50aWwocmVxdWVzdCwgJ1gn
KSkKKworCitjbGFzcyBNZXNzYWdlUmVjZWl2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICBkZWYgdGVzdF9xdWV1ZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfYmxvY2tp
bmdfcmVxdWVzdCgpCisgICAgICAgIHJlY2VpdmVyID0gbXNndXRpbC5NZXNzYWdlUmVjZWl2ZXIo
cmVxdWVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlY2VpdmVyLnJlY2Vp
dmVfbm93YWl0KCkpCisKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygnXHgw
MEhlbGxvIVx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbyEnLCByZWNlaXZl
ci5yZWNlaXZlKCkpCisKKyAgICBkZWYgdGVzdF9vbm1lc3NhZ2Uoc2VsZik6CisgICAgICAgIG9u
bWVzc2FnZV9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgZGVmIG9ubWVzc2FnZV9oYW5k
bGVyKG1lc3NhZ2UpOgorICAgICAgICAgICAgb25tZXNzYWdlX3F1ZXVlLnB1dChtZXNzYWdlKQor
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQorICAgICAgICBy
ZWNlaXZlciA9IG1zZ3V0aWwuTWVzc2FnZVJlY2VpdmVyKHJlcXVlc3QsIG9ubWVzc2FnZV9oYW5k
bGVyKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoJ1x4MDBIZWxsbyFc
eGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8hJywgb25tZXNzYWdlX3F1ZXVl
LmdldCgpKQorCisKK2NsYXNzIE1lc3NhZ2VTZW5kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9j
a2luZ19yZXF1ZXN0KCkKKyAgICAgICAgc2VuZGVyID0gbXNndXRpbC5NZXNzYWdlU2VuZGVyKHJl
cXVlc3QpCisKKyAgICAgICAgc2VuZGVyLnNlbmQoJ1dvcmxkJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnXHgwMFdvcmxkXHhmZicsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEo
KSkKKworICAgIGRlZiB0ZXN0X3NlbmRfbm93YWl0KHNlbGYpOgorICAgICAgICAjIFVzZSBhIHF1
ZXVlIHRvIGNoZWNrIHRoZSBieXRlcyB3cml0dGVuIGJ5IE1lc3NhZ2VTZW5kZXIuCisgICAgICAg
ICMgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpIGNhbm5vdCBiZSB1c2VkIGhlcmUg
YmVjYXVzZQorICAgICAgICAjIE1lc3NhZ2VTZW5kZXIgcnVucyBpbiBhIHNlcGFyYXRlIHRocmVh
ZC4KKyAgICAgICAgc2VuZF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgZGVmIHdyaXRl
KGJ5dGVzKToKKyAgICAgICAgICAgIHNlbmRfcXVldWUucHV0KGJ5dGVzKQorICAgICAgICByZXF1
ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0
aW9uLndyaXRlID0gd3JpdGUKKworICAgICAgICBzZW5kZXIgPSBtc2d1dGlsLk1lc3NhZ2VTZW5k
ZXIocmVxdWVzdCkKKworICAgICAgICBzZW5kZXIuc2VuZF9ub3dhaXQoJ0hlbGxvJykKKyAgICAg
ICAgc2VuZGVyLnNlbmRfbm93YWl0KCdXb3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J1x4MDBIZWxsb1x4ZmYnLCBzZW5kX3F1ZXVlLmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdceDAwV29ybGRceGZmJywgc2VuZF9xdWV1ZS5nZXQoKSkKKworCitpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBl
dApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3V0aWwucHkg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfdXRpbC5weQpuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjJjNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3V0aWwucHkKQEAgLTAsMCArMSw0MiBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisj
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIlRlc3RzIGZv
ciB1dGlsIG1vZHVsZS4iIiIKKworCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZyAg
IyBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KK2Zyb20gbW9k
X3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCisKKworY2xhc3MgVXRpbFRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIGRlZiB0ZXN0X2dldF9zdGFja190cmFjZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnTm9uZVxuJywgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgYSA9IDEgLyAwICAjIEludGVudGlvbmFsbHkgcmFpc2UgZXhjZXB0
aW9uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICB0cmFjZSA9IHV0aWwu
Z2V0X3N0YWNrX3RyYWNlKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5zdGFy
dHN3aXRoKCdUcmFjZWJhY2snKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5m
aW5kKCdaZXJvRGl2aXNpb25FcnJvcicpICE9IC0xKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2Ff
d3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9h
X3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzhlZmMyCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5k
bGVycy9hX3dzaC5weQpAQCAtMCwwICsxLDI3IEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJ
bmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
KHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKK2Rl
ZiB3ZWJfc29ja2V0X3NoYWtlX2hhbmRzKHJlcXVlc3QpOgorICAgIGlmIHJlcXVlc3Qud3Nfb3Jp
Z2luID09ICdodHRwOi8vZXhhbXBsZS5jb20nOgorICAgICAgICByZXR1cm4KKyAgICByYWlzZSBW
YWx1ZUVycm9yKCdVbmFjY2VwdGFibGUgb3JpZ2luOiAlcicgJSByZXF1ZXN0LndzX29yaWdpbikK
KworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi53cml0ZSgnYV93c2gucHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVlc3Qud3Nf
cHJvdG9jb2wpKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9iX3dzaC5weSBiL1dlYktpdFRv
b2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYl93c2gucHkKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTZhMzZjMQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYl93c2gucHkKQEAg
LTAsMCArMSwxNiBAQAorIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMK
KyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMg
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9O
UyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
IyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisjIGludGVudGlvbmFsbHkgbGVm
dCBibGFuawpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0
YS9oYW5kbGVycy9zdWIvY193c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rl
c3RkYXRhL2hhbmRsZXJzL3N1Yi9jX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAw
MDAwMDAwLi41YThhNzRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvY193c2gucHkKQEAgLTAsMCArMSwyNCBAQAor
IyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJOb24tY2FsbGFibGUgaGFuZGxlcnMuCisiIiIKKwor
Cit3ZWJfc29ja2V0X3NoYWtlX2hhbmRzID0gVHJ1ZQord2ViX3NvY2tldF90cmFuc2Zlcl9kYXRh
ID0gMQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZC5weSBiL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2QucHkKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMC4uYTM5MWY2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2QucHkKQEAgLTAsMCAr
MSwyOSBAQAorIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAg
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJDb3JyZWN0IHNpZ25hdHVyZXMsIHdy
b25nIGZpbGUgbmFtZS4KKyIiIgorCisKK2RlZiB3ZWJfc29ja2V0X3NoYWtlX2hhbmRzKHJlcXVl
c3QpOgorICAgIHBhc3MKKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3Qp
OgorICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnc3ViL2QucHkgaXMgY2FsbGVkIGZvciAl
cywgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3Qud3NfcmVzb3Vy
Y2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIv
ZV93c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L3N1Yi9lX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2I3YjMx
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0
YS9oYW5kbGVycy9zdWIvZV93c2gucHkKQEAgLTAsMCArMSwyNSBAQAorIyBDb3B5cmlnaHQgMjAw
OSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl
eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KKworCitkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KToKKyAgICByZXR1cm4g
VHJ1ZQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVx
dWVzdC5jb25uZWN0aW9uLndyaXRlKCdzdWIvZV93c2gucHkgaXMgY2FsbGVkIGZvciAlcywgJXMn
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJl
cXVlc3Qud3NfcHJvdG9jb2wpKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZl93c2gu
cHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9m
X3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YjBkYTQwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5k
bGVycy9zdWIvZl93c2gucHkKQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgMjAwOSBHb29n
bGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g
Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwor
CisiIiJFeGNlcHRpb24gaW4gd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKCkuCisiIiIKKworCitk
ZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIHdl
Yl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByYWlzZSBFeGNlcHRpb24oJ0lu
dGVudGlvbmFsIEV4Y2VwdGlvbiBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgIChy
ZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00
IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvc3ViL2dfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90
ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZ193c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uMDQxZTBkZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2dfd3NoLnB5CkBAIC0wLDAgKzEsMjkgQEAK
KyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMg
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMg
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiV3Jvbmcgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyBz
aWduYXR1cmUuCisiIiIKKworCitkZWYgbm9fd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0
KToKKyAgICBwYXNzCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToK
KyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ3N1Yi9nX3dzaC5weSBpcyBjYWxsZWQgZm9y
ICVzLCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNv
dXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1
Yi9oX3dzaC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxl
cnMvc3ViL2hfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4Y2M4
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzL3N1Yi9oX3dzaC5weQpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAy
MDA5IEdvb2dsZSBJbmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorCisKKyIiIldyb25nIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSgpIHNpZ25hdHVyZS4K
KyIiIgorCisKK2RlZiB3ZWJfc29ja2V0X3NoYWtlX2hhbmRzKHJlcXVlc3QpOgorICAgIHBhc3MK
KworCitkZWYgbm9fd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0ZSgnc3ViL2hfd3NoLnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1
ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40353</attachid>
            <date>2009-09-30 02:41:59 -0700</date>
            <delta_ts>2009-10-01 19:36:07 -0700</delta_ts>
            <desc>add pywebsocket to test Web Socket</desc>
            <filename>bug-27490-20090930184157.patch</filename>
            <type>text/plain</type>
            <size>96786</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmOTkyOGQ3Li4xNjdkN2E2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDktMDkt
MzAgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBweXdlYnNvY2tldCAwLjIuMCB0byB0
ZXN0IFdlYiBTb2NrZXQuCisgICAgICAgIGh0dHA6Ly9odHRwOi8vY29kZS5nb29nbGUuY29tL3Av
cHl3ZWJzb2NrZXQvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzQ5MAorCisgICAgICAgICogcHl3ZWJzb2NrZXQvQ09QWUlORzogQWRkZWQuCisgICAg
ICAgICogcHl3ZWJzb2NrZXQvTUFOSUZFU1QuaW46IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29j
a2V0L1JFQURNRTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX2Ns
aWVudC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5w
eTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L19faW5pdF9f
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0
Y2gucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5k
c2hha2UucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9o
ZWFkZXJwYXJzZXJoYW5kbGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2Rf
cHl3ZWJzb2NrZXQvbXNndXRpbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9k
X3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0
L21vZF9weXdlYnNvY2tldC91dGlsLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9z
ZXR1cC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC9jb25maWcucHk6IEFk
ZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvbW9jay5weTogQWRkZWQuCisgICAgICAg
ICogcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNv
Y2tldC90ZXN0L3Rlc3RfZGlzcGF0Y2gucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0
L3Rlc3QvdGVzdF9oYW5kc2hha2UucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rl
c3QvdGVzdF9tb2NrLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3Rf
bXNndXRpbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3V0aWwu
cHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMv
YV93c2gucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvYl93c2gucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvc3ViL2Nfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9kLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNv
Y2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9lX3dzaC5weTogQWRkZWQuCisgICAgICAg
ICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZl93c2gucHk6IEFkZGVk
LgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2dfd3No
LnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L3N1Yi9oX3dzaC5weTogQWRkZWQuCisKIDIwMDktMDktMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlcnN0YW1wZWQgYnkgRGFuIEJlcm5zdGVpbi4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L0NPUFlJTkcgYi9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQ2NDU2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9DT1BZ
SU5HCkBAIC0wLDAgKzEsMjAyIEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwg
SmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVD
VElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxp
Y2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJv
ZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAx
IHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1l
YW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhl
IGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAi
TGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBh
bmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVk
IGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHku
IEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1l
YW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAg
ICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250
cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJj
ZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChp
aWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAo
b3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAg
ICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAg
ICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcg
bW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdh
cmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3Vy
YXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSBy
ZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xh
dGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0
byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBh
bmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFs
bCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAg
ICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGlj
YXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3Ig
YXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRo
ZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFu
IGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQg
aXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUK
KyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9y
IG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3Jp
Z2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlz
IExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCBy
ZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBu
YW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZl
IFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdv
cmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBv
ZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0
aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFs
bHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3Jr
IGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVn
YWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNv
cHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJt
aXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdy
aXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJl
cHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVu
aWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wg
c3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFn
ZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBv
c2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1
ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3
aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBh
cyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFu
IExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJl
aGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29y
IGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisK
KyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBh
bmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhl
cmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhj
bHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHly
aWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAor
ICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5k
IGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4g
U291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4g
U3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5z
ZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAg
ICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGly
cmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVu
dCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwg
c2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hl
cmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vu
c2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5m
cmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmlu
YXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdo
aWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5z
dGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEK
KyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5n
IHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRo
aW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0
ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVk
IHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUK
KyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4g
UmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBv
ZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRp
dW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBv
ciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBp
ZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9m
IHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZp
ZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRo
YXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFp
biwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAg
dGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFu
ZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2Yg
dGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3Qg
cGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBh
bmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxl
IGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0
aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSBy
ZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAg
ICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0
IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUg
V29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2Vz
OiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFy
dCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAg
ICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRp
dmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRo
ZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJk
LXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBv
ZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5k
CisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBv
d24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtz
IHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVu
ZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAg
IHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0
cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1h
eSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMg
YW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRl
cm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3Ry
aWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVy
aXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJv
ZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMg
d2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAg
NS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3Rh
dGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1p
dHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vu
c29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhp
cyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisg
ICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBl
cnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2Ug
YWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdh
cmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vu
c2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1l
cywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGlj
ZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3Rv
bWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQg
cmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNj
bGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IK
KyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAo
YW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBv
biBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRp
bmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAg
ICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVT
UyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25z
aWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcg
b3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFz
c29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGlj
ZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1
bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBu
ZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAg
ICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250
cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFu
eSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2Vx
dWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1
bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2Ug
dGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9y
IGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJl
IG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBk
YW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJl
ZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBB
Y2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJp
YnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBt
YXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFu
Y2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJp
bGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAg
ICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1h
eSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVz
cG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRv
ciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5k
IGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAg
aW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9y
IGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3Ig
YWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwor
CisgICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdv
cmsuCisKKyAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0
dGFjaCB0aGUgZm9sbG93aW5nCisgICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZp
ZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIg
b3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQorICAgICAgdGhlIGJy
YWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUK
KyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21t
ZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBw
dXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0
aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCisgICAgICBpZGVudGlmaWNhdGlvbiB3aXRo
aW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2Yg
Y29weXJpZ2h0IG93bmVyXQorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisg
ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRo
ZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvTUFOSUZFU1Qu
aW4gYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9NQU5JRkVTVC5pbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xOTI1Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvTUFOSUZFU1QuaW4KQEAgLTAsMCArMSw2IEBACitpbmNsdWRlIENPUFlJ
TkcKK2luY2x1ZGUgTUFOSUZFU1QuaW4KK2luY2x1ZGUgUkVBRE1FCityZWN1cnNpdmUtaW5jbHVk
ZSBleGFtcGxlICoucHkKK3JlY3Vyc2l2ZS1pbmNsdWRlIG1vZF9weXdlYnNvY2tldCAqLnB5City
ZWN1cnNpdmUtaW5jbHVkZSB0ZXN0ICoucHkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L1JFQURNRSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L1JFQURNRQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjlmMDVmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVBRE1FCkBAIC0wLDAgKzEsNiBAQAorSW5zdGFsbCB0aGlz
IHBhY2thZ2UgYnk6CiskIHB5dGhvbiBzZXR1cC5weSBidWlsZAorJCBzdWRvIHB5dGhvbiBzZXR1
cC5weSBpbnN0YWxsCisKK1RoZW4gcmVhZCBkb2N1bWVudCBieToKKyQgcHlkb2MgbW9kX3B5d2Vi
c29ja2V0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9f
Y2xpZW50LnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX2NsaWVudC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNjBjOGIyCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX2NsaWVudC5weQpA
QCAtMCwwICsxLDE2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAy
MDA5IEdvb2dsZSBJbmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwg
VmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVu
ZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorCisKKyIiIldlYiBTb2NrZXQgRWNobyBjbGllbnQuCisKK1RoaXMgaXMgYW4gZXhhbXBs
ZSBXZWIgU29ja2V0IGNsaWVudCB0aGF0IHRhbGtzIHdpdGggZWNob193c2gucHkuCitUaGlzIG1h
eSBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIG1vZF9weXdlYnNvY2tldCBpbnN0YWxsYXRpb24uCisK
K05vdGU6CitUaGlzIGNvZGUgaXMgZmFyIGZyb20gcm9idXN0LCBlLmcuLCB3ZSBjdXQgY29ybmVy
cyBpbiBoYW5kc2hha2UuCisiIiIKKworCitpbXBvcnQgY29kZWNzCitmcm9tIG9wdHBhcnNlIGlt
cG9ydCBPcHRpb25QYXJzZXIKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKKworCitfREVGQVVM
VF9QT1JUID0gODAKK19ERUZBVUxUX1NFQ1VSRV9QT1JUID0gNDQzCitfVU5ERUZJTkVEX1BPUlQg
PSAtMQorCisKK2NsYXNzIF9UTFNTb2NrZXQob2JqZWN0KToKKyAgICAiIiJXcmFwcGVyIGZvciBh
IFRMUyBjb25uZWN0aW9uLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd19zb2NrZXQp
OgorICAgICAgICBzZWxmLl9zc2wgPSBzb2NrZXQuc3NsKHJhd19zb2NrZXQpCisKKyAgICBkZWYg
c2VuZChzZWxmLCBieXRlcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9zc2wud3JpdGUoYnl0ZXMp
CisKKyAgICBkZWYgcmVjdihzZWxmLCBzaXplPS0xKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Nz
bC5yZWFkKHNpemUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICMgTm90aGluZyB0
byBkby4KKyAgICAgICAgcGFzcworCisKK2NsYXNzIEVjaG9DbGllbnQob2JqZWN0KToKKyAgICAi
IiJXZWIgU29ja2V0IGVjaG8gY2xpZW50LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9w
dGlvbnMpOgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLl9z
b2NrZXQgPSBOb25lCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAiIiJSdW4gdGhlIGNs
aWVudC4KKworICAgICAgICBTaGFrZSBoYW5kcyBhbmQgdGhlbiByZXBlYXQgc2VuZGluZyBtZXNz
YWdlIGFuZCByZWNlaXZpbmcgaXRzIGVjaG8uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9z
b2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5f
c29ja2V0LmNvbm5lY3QoKHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCkpCisgICAgICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICAgICAgc2VsZi5fc29j
a2V0ID0gX1RMU1NvY2tldChzZWxmLl9zb2NrZXQpCisgICAgICAgICAgICBzZWxmLl9oYW5kc2hh
a2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fb3B0aW9ucy5tZXNzYWdlLnNwbGl0
KCcsJyk6CisgICAgICAgICAgICAgICAgZnJhbWUgPSAnXHgwMCcgKyBsaW5lLmVuY29kZSgndXRm
LTgnKSArICdceGZmJworICAgICAgICAgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKGZyYW1lKQor
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQgJ1NlbmQ6ICVzJyAlIGxpbmUKKyAgICAgICAgICAgICAgICByZWNlaXZlZCA9
IHNlbGYuX3NvY2tldC5yZWN2KGxlbihmcmFtZSkpCisgICAgICAgICAgICAgICAgaWYgcmVjZWl2
ZWQgIT0gZnJhbWU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW5jb3Jy
ZWN0IGVjaG86ICVyJyAlIHJlY2VpdmVkKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlv
bnMudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1JlY3Y6ICVzJyAlIHJlY2Vp
dmVkWzE6LTFdLmRlY29kZSgndXRmLTgnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
c2VsZi5fc29ja2V0LmNsb3NlKCkKKworICAgIGRlZiBfaGFuZHNoYWtlKHNlbGYpOgorICAgICAg
ICBzZWxmLl9zb2NrZXQuc2VuZCgKKyAgICAgICAgICAgICAgICAnR0VUICVzIEhUVFAvMS4xXHJc
bicgJSBzZWxmLl9vcHRpb25zLnJlc291cmNlKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZCgn
VXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKCdDb25u
ZWN0aW9uOiBVcGdyYWRlXHJcbicpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKHNlbGYuX2Zv
cm1hdF9ob3N0X2hlYWRlcigpKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZCgKKyAgICAgICAg
ICAgICAgICAnT3JpZ2luOiAlc1xyXG4nICUgc2VsZi5fb3B0aW9ucy5vcmlnaW4pCisgICAgICAg
IHNlbGYuX3NvY2tldC5zZW5kKCdcclxuJykKKworICAgICAgICBmb3IgZXhwZWN0ZWRfY2hhciBp
biAoCisgICAgICAgICAgICAgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhh
bmRzaGFrZVxyXG4nCisgICAgICAgICAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisg
ICAgICAgICAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJyk6CisgICAgICAgICAgICBy
ZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCisgICAgICAgICAgICBpZiBleHBlY3Rl
ZF9jaGFyICE9IHJlY2VpdmVkOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSGFu
ZHNoYWtlIGZhaWx1cmUnKQorICAgICAgICAjIFdlIGN1dCBjb3JuZXJzIGFuZCBza2lwIG90aGVy
IGhlYWRlcnMuCisgICAgICAgIHNlbGYuX3NraXBfaGVhZGVycygpCisKKyAgICBkZWYgX3NraXBf
aGVhZGVycyhzZWxmKToKKyAgICAgICAgdGVybWluYXRvciA9ICdcclxuXHJcbicKKyAgICAgICAg
cG9zID0gMAorICAgICAgICB3aGlsZSBwb3MgPCBsZW4odGVybWluYXRvcik6CisgICAgICAgICAg
ICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCisgICAgICAgICAgICBpZiByZWNl
aXZlZCA9PSB0ZXJtaW5hdG9yW3Bvc106CisgICAgICAgICAgICAgICAgcG9zICs9IDEKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG9zID0gMAorCisgICAgZGVmIF9mb3JtYXRf
aG9zdF9oZWFkZXIoc2VsZik6CisgICAgICAgIGhvc3QgPSAnSG9zdDogJyArIHNlbGYuX29wdGlv
bnMuc2VydmVyX2hvc3QKKyAgICAgICAgaWYgKChub3Qgc2VsZi5fb3B0aW9ucy51c2VfdGxzIGFu
ZAorICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX3BvcnQgIT0gX0RFRkFVTFRfUE9S
VCkgb3IKKyAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLnVzZV90bHMgYW5kCisgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCAhPSBfREVGQVVMVF9TRUNVUkVfUE9SVCkpOgor
ICAgICAgICAgICAgaG9zdCArPSAnOicgKyBzdHIoc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCkK
KyAgICAgICAgaG9zdCArPSAnXHJcbicKKyAgICAgICAgcmV0dXJuIGhvc3QKKworCitkZWYgbWFp
bigpOgorICAgIHN5cy5zdGRvdXQgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHN5cy5zdGRv
dXQpCisKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorICAgIHBhcnNlci5hZGRfb3B0aW9u
KCctcycsICctLXNlcnZlcl9ob3N0JywgZGVzdD0nc2VydmVyX2hvc3QnLCB0eXBlPSdzdHJpbmcn
LAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2xvY2FsaG9zdCcsIGhlbHA9J3NlcnZl
ciBob3N0JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXAnLCAnLS1zZXJ2ZXJfcG9ydCcsIGRl
c3Q9J3NlcnZlcl9wb3J0JywgdHlwZT0naW50JywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0PV9VTkRFRklORURfUE9SVCwgaGVscD0nc2VydmVyIHBvcnQnKQorICAgIHBhcnNlci5hZGRf
b3B0aW9uKCctbycsICctLW9yaWdpbicsIGRlc3Q9J29yaWdpbicsIHR5cGU9J3N0cmluZycsCisg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0naHR0cDovL2xvY2FsaG9zdC8nLCBoZWxwPSdv
cmlnaW4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlc291cmNlJywgZGVzdD0n
cmVzb3VyY2UnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9
Jy9lY2hvJywgaGVscD0ncmVzb3VyY2UgcGF0aCcpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1t
JywgJy0tbWVzc2FnZScsIGRlc3Q9J21lc3NhZ2UnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9J2NvbW1hLXNlcGFyYXRlZCBtZXNzYWdlcyB0byBzZW5kJykKKyAg
ICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGRlc3Q9J3ZlcmJvc2UnLCBhY3Rp
b249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGhl
bHA9J3N1cHByZXNzIG1lc3NhZ2VzJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10
bHMnLCBkZXN0PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6Ly8pJykKKyAgICAob3B0
aW9ucywgXykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICAjIERlZmF1bHQgcG9ydCBudW1i
ZXIgZGVwZW5kcyBvbiB3aGV0aGVyIFRMUyBpcyB1c2VkLgorICAgIGlmIG9wdGlvbnMuc2VydmVy
X3BvcnQgPT0gX1VOREVGSU5FRF9QT1JUOgorICAgICAgICBpZiBvcHRpb25zLnVzZV90bHM6Cisg
ICAgICAgICAgICBvcHRpb25zLnNlcnZlcl9wb3J0ID0gX0RFRkFVTFRfU0VDVVJFX1BPUlQKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMuc2VydmVyX3BvcnQgPSBfREVGQVVMVF9Q
T1JUCisKKyAgICAjIG9wdHBhcnNlIGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgbm9uLWFzY2lpIGRl
ZmF1bHQgdmFsdWVzLgorICAgICMgU2V0IGRlZmF1bHQgbWVzc2FnZSBoZXJlLgorICAgIGlmIG5v
dCBvcHRpb25zLm1lc3NhZ2U6CisgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IHUnSGVsbG8sXHU2
NWU1XHU2NzJjJyAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQorCisgICAgRWNob0NsaWVudChvcHRp
b25zKS5ydW4oKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCisK
KworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC9leGFtcGxlL2VjaG9fd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvZXhhbXBsZS9l
Y2hvX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YzMxYjgzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX3dz
aC5weQpAQCAtMCwwICsxLDMxIEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisj
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKK2Zyb20gbW9kX3B5
d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMo
cmVxdWVzdCk6CisgICAgcGFzcyAgIyBhbHdheXMgYWNjZXB0CisKKworZGVmIHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByZWNlaXZlciA9IG1zZ3V0aWwuTWVzc2FnZVJl
Y2VpdmVyKHJlcXVlc3QpCisgICAgc2VuZGVyID0gbXNndXRpbC5NZXNzYWdlU2VuZGVyKHJlcXVl
c3QpCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgbGluZSA9IHJlY2VpdmVyLnJlY2VpdmUoKQor
ICAgICAgICBzZW5kZXIuc2VuZChsaW5lKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L19faW5pdF9fLnB5
IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L19faW5pdF9fLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjMDFhYmIKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkK
QEAgLTAsMCArMSw3OSBAQAorIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMK
KyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBM
aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu
ZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJXZWIgU29ja2V0IGV4
dGVuc2lvbiBmb3IgQXBhY2hlIEhUVFAgU2VydmVyLgorCittb2RfcHl3ZWJzb2NrZXQgaXMgYSBX
ZWIgU29ja2V0IGV4dGVuc2lvbiBmb3IgQXBhY2hlIEhUVFAgU2VydmVyCitpbnRlbmRlZCBmb3Ig
dGVzdGluZyBvciBleHBlcmltZW50YWwgcHVycG9zZXMuIG1vZF9weXRob24gaXMgcmVxdWlyZWQu
CisKK0luc3RhbGxhdGlvbjoKKworMC4gUHJlcGFyZSBhbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgZm9y
IHdoaWNoIG1vZF9weXRob24gaXMgZW5hYmxlZC4KKworMS4gU3BlY2lmeSB0aGUgZm9sbG93aW5n
IEFwYWNoZSBIVFRQIFNlcnZlciBkaXJlY3RpdmVzIHRvIHN1aXQgeW91cgorICAgY29uZmlndXJh
dGlvbi4KKworICAgSWYgbW9kX3B5d2Vic29ja2V0IGlzIG5vdCBpbiB0aGUgUHl0aG9uIHBhdGgs
IHNwZWNpZnkgdGhlIGZvbGxvd2luZy4KKyAgIDx3ZWJzb2NrX2xpYj4gaXMgdGhlIGRpcmVjdG9y
eSB3aGVyZSBtb2RfcHl3ZWJzb2NrZXQgaXMgaW5zdGFsbGVkLgorCisgICAgICAgUHl0aG9uUGF0
aCAic3lzLnBhdGgrWyc8d2Vic29ja19saWI+J10iCisKKyAgIEFsd2F5cyBzcGVjaWZ5IHRoZSBm
b2xsb3dpbmcuIDx3ZWJzb2NrX2hhbmRsZXJzPiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlCisgICB1
c2VyLXdyaXR0ZW4gV2ViIFNvY2tldCBoYW5kbGVycyBhcmUgcGxhY2VkLgorCisgICAgICAgUHl0
aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5oYW5kbGVyX3Jvb3QgPHdlYnNvY2tfaGFuZGxlcnM+
CisgICAgICAgUHl0aG9uSGVhZGVyUGFyc2VySGFuZGxlciBtb2RfcHl3ZWJzb2NrZXQuaGVhZGVy
cGFyc2VyaGFuZGxlcgorCisgICBFeGFtcGxlIHNuaXBwZXQgb2YgaHR0cGQuY29uZjoKKyAgICht
b2RfcHl3ZWJzb2NrZXQgaXMgaW4gL3dlYnNvY2tfbGliLCBXZWIgU29ja2V0IGhhbmRsZXJzIGFy
ZSBpbgorICAgL3dlYnNvY2tfaGFuZGxlcnMsIHBvcnQgaXMgODAgZm9yIHdzLCA0NDMgZm9yIHdz
cy4pCisKKyAgICAgICA8SWZNb2R1bGUgcHl0aG9uX21vZHVsZT4KKyAgICAgICAgIFB5dGhvblBh
dGggInN5cy5wYXRoK1snL3dlYnNvY2tfbGliJ10iCisgICAgICAgICBQeXRob25PcHRpb24gbW9k
X3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCAvd2Vic29ja19oYW5kbGVycworICAgICAgICAgUHl0
aG9uSGVhZGVyUGFyc2VySGFuZGxlciBtb2RfcHl3ZWJzb2NrZXQuaGVhZGVycGFyc2VyaGFuZGxl
cgorICAgICAgIDwvSWZNb2R1bGU+CisKK1dyaXRpbmcgV2ViIFNvY2tldCBoYW5kbGVyczoKKwor
V2hlbiBhIFdlYiBTb2NrZXQgcmVxdWVzdCBjb21lcyBpbiwgdGhlIHJlc291cmNlIG5hbWUKK3Nw
ZWNpZmllZCBpbiB0aGUgaGFuZHNoYWtlIGlzIGNvbnNpZGVyZWQgYXMgaWYgaXQgaXMgYSBmaWxl
IHBhdGggdW5kZXIKKzx3ZWJzb2NrX2hhbmRsZXJzPiBhbmQgdGhlIGhhbmRsZXIgZGVmaW5lZCBp
bgorPHdlYnNvY2tfaGFuZGxlcnM+LzxyZXNvdXJjZV9uYW1lPl93c2gucHkgaXMgaW52b2tlZC4K
KworRm9yIGV4YW1wbGUsIGlmIHRoZSByZXNvdXJjZSBuYW1lIGlzIC9leGFtcGxlL2NoYXQsIHRo
ZSBoYW5kbGVyIGRlZmluZWQgaW4KKzx3ZWJzb2NrX2hhbmRsZXJzPi9leGFtcGxlL2NoYXRfd3No
LnB5IGlzIGludm9rZWQuCisKK0EgV2ViIFNvY2tldCBoYW5kbGVyIGlzIGNvbXBvc2VkIG9mIHRo
ZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9uczoKKworICAgIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMo
cmVxdWVzdCkKKyAgICB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCkKKword2hlcmU6
CisgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorCit3ZWJfc29ja2V0X3NoYWtlX2hh
bmRzIGlzIGNhbGxlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZSBhZnRlciB0aGUgaGVhZGVycworYXJl
IHN1Y2Nlc3NmdWxseSBwYXJzZWQgYW5kIFdlYiBTb2NrZXQgcHJvcGVydGllcyAod3NfbG9jYXRp
b24sCit3c19vcmlnaW4sIHdzX3Byb3RvY29sLCBhbmQgd3NfcmVzb3VyY2UpIGFyZSBhZGRlZCB0
byByZXF1ZXN0LgorQSBoYW5kbGVyIGNhbiByZWplY3QgdGhlIHJlcXVlc3QgYnkgcmFpc2luZyBh
biBleGNlcHRpb24uCisKK3dlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBpcyBjYWxsZWQgYWZ0ZXIg
dGhlIGhhbmRzaGFrZSBjb21wbGV0ZWQKK3N1Y2Nlc3NmdWxseS4gQSBoYW5kbGVyIGNhbiByZWNl
aXZlL3NlbmQgbWVzc2FnZXMgZnJvbS90byB0aGUgY2xpZW50Cit1c2luZyByZXF1ZXN0LiBtb2Rf
cHl3ZWJzb2NrZXQubXNndXRpbCBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0aWVzCitmb3IgZGF0YSB0
cmFuc2Zlci4KKyIiIgorCisKKyMgdmk6c3RzPTQgc3c9NCBldCB0dz03MgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5IGIvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiODNkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHkKQEAgLTAs
MCArMSwxNjAgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cisj
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisj
ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMg
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiRGlzcGF0Y2ggV2ViIFNvY2tl
dCByZXF1ZXN0LgorIiIiCisKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKKworaW1wb3J0IHV0aWwK
KworCitfU09VUkNFX1BBVEhfUEFUVEVSTiA9IHJlLmNvbXBpbGUocicoP2kpX3dzaFwucHkkJykK
K19TT1VSQ0VfU1VGRklYID0gJ193c2gucHknCitfU0hBS0VfSEFORFNfSEFORExFUl9OQU1FID0g
J3dlYl9zb2NrZXRfc2hha2VfaGFuZHMnCitfVFJBTlNGRVJfREFUQV9IQU5ETEVSX05BTUUgPSAn
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhJworCisKK2NsYXNzIERpc3BhdGNoRXJyb3IoRXhjZXB0
aW9uKToKKyAgICAiIiJFeGNlcHRpb24gaW4gZGlzcGF0Y2hpbmcgV2ViIFNvY2tldCByZXF1ZXN0
LiIiIgorCisgICAgcGFzcworCisKK2RlZiBfcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoYmFz
ZV9kaXIpOgorICAgIGJhc2VfZGlyID0gb3MucGF0aC5ub3JtcGF0aChiYXNlX2RpcikucmVwbGFj
ZSgnXFwnLCAnLycpCisgICAgYmFzZV9sZW4gPSBsZW4oYmFzZV9kaXIpCisgICAgc3VmZml4X2xl
biA9IGxlbihfU09VUkNFX1NVRkZJWCkKKyAgICBkZWYgY29udmVydGVyKHBhdGgpOgorICAgICAg
ICBpZiBub3QgcGF0aC5lbmRzd2l0aChfU09VUkNFX1NVRkZJWCk6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKS5yZXBsYWNlKCdc
XCcsICcvJykKKyAgICAgICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aChiYXNlX2Rpcik6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gcGF0aFtiYXNlX2xlbjotc3VmZml4
X2xlbl0KKyAgICByZXR1cm4gY29udmVydGVyCisKKworZGVmIF9zb3VyY2VfZmlsZV9wYXRocyhk
aXJlY3RvcnkpOgorICAgICIiIllpZWxkIFdlYiBTb2NrZXQgSGFuZGxlciBzb3VyY2UgZmlsZSBu
YW1lcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgorCisgICAgZm9yIHJvb3QsIHVudXNlZF9k
aXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6CisgICAgICAgIGZvciBiYXNlIGluIGZp
bGVzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBiYXNlKQorICAgICAg
ICAgICAgaWYgX1NPVVJDRV9QQVRIX1BBVFRFUk4uc2VhcmNoKHBhdGgpOgorICAgICAgICAgICAg
ICAgIHlpZWxkIHBhdGgKKworCitkZWYgX3NvdXJjZShzb3VyY2Vfc3RyKToKKyAgICAiIiJTb3Vy
Y2UgYSBoYW5kbGVyIGRlZmluaXRpb24gc3RyaW5nLiIiIgorCisgICAgZ2xvYmFsX2RpYyA9IHt9
CisgICAgdHJ5OgorICAgICAgICBleGVjIHNvdXJjZV9zdHIgaW4gZ2xvYmFsX2RpYworICAgIGV4
Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ0Vycm9yIGluIHNv
dXJjaW5nIGhhbmRsZXI6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5nZXRf
c3RhY2tfdHJhY2UoKSkKKyAgICByZXR1cm4gKF9leHRyYWN0X2hhbmRsZXIoZ2xvYmFsX2RpYywg
X1NIQUtFX0hBTkRTX0hBTkRMRVJfTkFNRSksCisgICAgICAgICAgICBfZXh0cmFjdF9oYW5kbGVy
KGdsb2JhbF9kaWMsIF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSkpCisKKworZGVmIF9leHRy
YWN0X2hhbmRsZXIoZGljLCBuYW1lKToKKyAgICBpZiBuYW1lIG5vdCBpbiBkaWM6CisgICAgICAg
IHJhaXNlIERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBkZWZpbmVkLicgJSBuYW1lKQorICAgIGhh
bmRsZXIgPSBkaWNbbmFtZV0KKyAgICBpZiBub3QgY2FsbGFibGUoaGFuZGxlcik6CisgICAgICAg
IHJhaXNlIERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBjYWxsYWJsZS4nICUgbmFtZSkKKyAgICBy
ZXR1cm4gaGFuZGxlcgorCisKK2NsYXNzIERpc3BhdGNoZXIob2JqZWN0KToKKyAgICAiIiJEaXNw
YXRjaGVzIFdlYiBTb2NrZXQgcmVxdWVzdHMuCisKKyAgICBUaGlzIGNsYXNzIG1haW50YWlucyBh
IG1hcCBmcm9tIHJlc291cmNlIG5hbWUgdG8gaGFuZGxlcnMuCisgICAgIiIiCisKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcm9vdF9kaXIpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFu
Y2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJvb3RfZGlyOiBUaGUgZGlyZWN0b3J5
IHdoZXJlIGhhbmRsZXIgZGVmaW5pdGlvbiBmaWxlcyBhcmUKKyAgICAgICAgICAgIHBsYWNlZC4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5faGFuZGxlcnMgPSB7fQorICAgICAgICBzZWxm
Ll9zb3VyY2Vfd2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLl9zb3VyY2VfZmlsZXNfaW5fZGly
KHJvb3RfZGlyKQorCisgICAgZGVmIHNvdXJjZV93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgIiIi
UmV0dXJuIHdhcm5pbmdzIGluIHNvdXJjaW5nIGhhbmRsZXJzLiIiIgorCisgICAgICAgIHJldHVy
biBzZWxmLl9zb3VyY2Vfd2FybmluZ3MKKworICAgIGRlZiBzaGFrZV9oYW5kcyhzZWxmLCByZXF1
ZXN0KToKKyAgICAgICAgIiIiSG9vayBpbnRvIFdlYiBTb2NrZXQgaGFuZHNoYWtlLgorCisgICAg
ICAgIFNlbGVjdCBhIGhhbmRsZXIgYmFzZWQgb24gcmVxdWVzdC51cmkgYW5kIGNhbGwgaXRzCisg
ICAgICAgIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMgZnVuY3Rpb24uCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgIiIiCisK
KyAgICAgICAgc2hha2VfaGFuZHNfLCBfID0gc2VsZi5faGFuZGxlcihyZXF1ZXN0KQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBzaGFrZV9oYW5kc18ocmVxdWVzdCkKKyAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ3NoYWtlX2hhbmRz
KCkgcmFpc2VkIGV4Y2VwdGlvbjogJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisKKyAgICBkZWYgdHJhbnNmZXJfZGF0YShzZWxmLCBy
ZXF1ZXN0KToKKyAgICAgICAgIiIiTGV0IGEgaGFuZGxlciB0cmFuc2Zlcl9kYXRhIHdpdGggYSBX
ZWIgU29ja2V0IGNsaWVudC4KKworICAgICAgICBTZWxlY3QgYSBoYW5kbGVyIGJhc2VkIG9uIHJl
cXVlc3Qud3NfcmVzb3VyY2UgYW5kIGNhbGwgaXRzCisgICAgICAgIHdlYl9zb2NrZXRfdHJhbnNm
ZXJfZGF0YSBmdW5jdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDog
bW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICBfLCB0cmFuc2Zlcl9k
YXRhXyA9IHNlbGYuX2hhbmRsZXIocmVxdWVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
dHJhbnNmZXJfZGF0YV8ocmVxdWVzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAg
ICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ3RyYW5zZmVyX2RhdGEoKSByYWlzZWQgZXhjZXB0
aW9uOiAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5nZXRfc3RhY2tf
dHJhY2UoKSkKKworICAgIGRlZiBfaGFuZGxlcihzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZXJzW3JlcXVlc3Qud3NfcmVzb3VyY2Vd
CisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJy
b3IoJ05vIGhhbmRsZXIgZm9yOiAlcicgJSByZXF1ZXN0LndzX3Jlc291cmNlKQorCisgICAgZGVm
IF9zb3VyY2VfZmlsZXNfaW5fZGlyKHNlbGYsIHJvb3RfZGlyKToKKyAgICAgICAgIiIiU291cmNl
IGFsbCB0aGUgaGFuZGxlciBzb3VyY2UgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4iIiIKKworICAg
ICAgICB0b19yZXNvdXJjZSA9IF9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcihyb290X2RpcikK
KyAgICAgICAgZm9yIHBhdGggaW4gX3NvdXJjZV9maWxlX3BhdGhzKHJvb3RfZGlyKToKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBoYW5kbGVyID0gX3NvdXJjZShvcGVuKHBhdGgp
LnJlYWQoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBEaXNwYXRjaEVycm9yLCBlOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3NvdXJjZV93YXJuaW5ncy5hcHBlbmQoJyVzOiAlcycgJSAocGF0aCwgZSkp
CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzW3Rv
X3Jlc291cmNlKHBhdGgpXSA9IGhhbmRsZXIKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2Uu
cHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwNGM0ZjIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtl
LnB5CkBAIC0wLDAgKzEsMTYyIEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisj
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD
T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIldlYiBTb2Nr
ZXQgaGFuZHNoYWtpbmcuCisKK05vdGU6IHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZS9yZWFkIGFy
ZSB1c2VkIGluIHRoaXMgbW9kdWxlLCBldmVuIHRob3VnaAorbW9kX3B5dGhvbiBkb2N1bWVudCBz
YXlzIHRoYXQgdGhleSBzaG91bGQgYmUgdXNlZCBvbmx5IGluIGNvbm5lY3Rpb24gaGFuZGxlcnMu
CitVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIG5vIG90aGVyIG9wdGlvbnMuIEZvciBleGFtcGxlLCBy
ZXF1ZXN0LndyaXRlL3JlYWQgYXJlCitub3Qgc3VpdGFibGUgYmVjYXVzZSB0aGV5IGRvbid0IGFs
bG93IGRpcmVjdCByYXcgYnl0ZXMgd3JpdGluZy9yZWFkaW5nLgorIiIiCisKKworaW1wb3J0IHJl
CisKKworX0RFRkFVTFRfV0VCX1NPQ0tFVF9QT1JUID0gODAKK19ERUZBVUxUX1dFQl9TT0NLRVRf
U0VDVVJFX1BPUlQgPSA0NDMKK19XRUJfU09DS0VUX1NDSEVNRSA9ICd3cycKK19XRUJfU09DS0VU
X1NFQ1VSRV9TQ0hFTUUgPSAnd3NzJworCitfTUVUSE9EX0xJTkUgPSByZS5jb21waWxlKHInXkdF
VCAoW14gXSspIEhUVFAvMS4xXHJcbiQnKQorCitfTUFOREFUT1JZX0hFQURFUlMgPSBbCisgICAg
IyBrZXksIGV4cGVjdGVkIHZhbHVlIG9yIE5vbmUKKyAgICBbJ1VwZ3JhZGUnLCAnV2ViU29ja2V0
J10sCisgICAgWydDb25uZWN0aW9uJywgJ1VwZ3JhZGUnXSwKKyAgICBbJ0hvc3QnLCBOb25lXSwK
KyAgICBbJ09yaWdpbicsIE5vbmVdLAorXQorCisKK2NsYXNzIEhhbmRzaGFrZUVycm9yKEV4Y2Vw
dGlvbik6CisgICAgIiIiRXhjZXB0aW9uIGluIFdlYiBTb2NrZXQgSGFuZHNoYWtlLiIiIgorCisg
ICAgcGFzcworCisKK2RlZiBfdmFsaWRhdGVfcHJvdG9jb2wocHJvdG9jb2wpOgorICAgICIiIlZh
bGlkYXRlIFdlYlNvY2tldC1Qcm90b2NvbCBzdHJpbmcuIiIiCisKKyAgICBpZiBub3QgcHJvdG9j
b2w6CisgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJbnZhbGlkIFdlYlNvY2tldC1Qcm90
b2NvbDogZW1wdHknKQorICAgIGZvciBjIGluIHByb3RvY29sOgorICAgICAgICBpZiBub3QgMHgy
MSA8PSBvcmQoYykgPD0gMHg3ZToKKyAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJ
bGxlZ2FsIGNoYXJhY3RlciBpbiBwcm90b2NvbDogJXInICUgYykKKworCitjbGFzcyBIYW5kc2hh
a2VyKG9iamVjdCk6CisgICAgIiIiVGhpcyBjbGFzcyBwZXJmb3JtcyBXZWIgU29ja2V0IGhhbmRz
aGFrZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBkaXNwYXRjaGVyKToK
KyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICAgICBkaXNwYXRj
aGVyOiBEaXNwYXRjaGVyIChkaXNwYXRjaC5EaXNwYXRjaGVyKS4KKworICAgICAgICBIYW5kc2hh
a2VyIHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3VjaCBhcyB3c19yZXNvdXJjZSBpbiBwZXJmb3JtaW5n
CisgICAgICAgIGhhbmRzaGFrZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5fcmVxdWVz
dCA9IHJlcXVlc3QKKyAgICAgICAgc2VsZi5fZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXIKKworICAg
IGRlZiBzaGFrZV9oYW5kcyhzZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybSBXZWIgU29ja2V0IEhh
bmRzaGFrZS4iIiIKKworICAgICAgICBzZWxmLl9jaGVja19oZWFkZXJfbGluZXMoKQorICAgICAg
ICBzZWxmLl9zZXRfcmVzb3VyY2UoKQorICAgICAgICBzZWxmLl9zZXRfb3JpZ2luKCkKKyAgICAg
ICAgc2VsZi5fc2V0X2xvY2F0aW9uKCkKKyAgICAgICAgc2VsZi5fc2V0X3Byb3RvY29sKCkKKyAg
ICAgICAgc2VsZi5fZGlzcGF0Y2hlci5zaGFrZV9oYW5kcyhzZWxmLl9yZXF1ZXN0KQorICAgICAg
ICBzZWxmLl9zZW5kX2hhbmRzaGFrZSgpCisKKyAgICBkZWYgX3NldF9yZXNvdXJjZShzZWxmKToK
KyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19yZXNvdXJjZSA9IHNlbGYuX3JlcXVlc3QudXJpCisK
KyAgICBkZWYgX3NldF9vcmlnaW4oc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3Nfb3Jp
Z2luID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luWydPcmlnaW4nXQorCisgICAgZGVmIF9zZXRf
bG9jYXRpb24oc2VsZik6CisgICAgICAgIGxvY2F0aW9uX3BhcnRzID0gW10KKyAgICAgICAgaWYg
c2VsZi5fcmVxdWVzdC5pc19odHRwcygpOgorICAgICAgICAgICAgbG9jYXRpb25fcGFydHMuYXBw
ZW5kKF9XRUJfU09DS0VUX1NFQ1VSRV9TQ0hFTUUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoX1dFQl9TT0NLRVRfU0NIRU1FKQorICAgICAgICBsb2Nh
dGlvbl9wYXJ0cy5hcHBlbmQoJzovLycpCisgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLl9wYXJz
ZV9ob3N0X2hlYWRlcigpCisgICAgICAgIGNvbm5fcG9ydCA9IHNlbGYuX3JlcXVlc3QuY29ubmVj
dGlvbi5sb2NhbF9hZGRyWzFdCisgICAgICAgIGlmIHBvcnQgIT0gY29ubl9wb3J0OgorICAgICAg
ICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0hlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0
Y2g6ICVkLyVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9ydCwgY29u
bl9wb3J0KSkKKyAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKGhvc3QpCisgICAgICAgIGlm
ICgobm90IHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKSBhbmQKKyAgICAgICAgICAgICBwb3J0ICE9
IF9ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCkgb3IKKyAgICAgICAgICAgIChzZWxmLl9yZXF1ZXN0
LmlzX2h0dHBzKCkgYW5kCisgICAgICAgICAgICAgcG9ydCAhPSBfREVGQVVMVF9XRUJfU09DS0VU
X1NFQ1VSRV9QT1JUKSk6CisgICAgICAgICAgICBsb2NhdGlvbl9wYXJ0cy5hcHBlbmQoJzonKQor
ICAgICAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKHN0cihwb3J0KSkKKyAgICAgICAgbG9j
YXRpb25fcGFydHMuYXBwZW5kKHNlbGYuX3JlcXVlc3QudXJpKQorICAgICAgICBzZWxmLl9yZXF1
ZXN0LndzX2xvY2F0aW9uID0gJycuam9pbihsb2NhdGlvbl9wYXJ0cykKKworICAgIGRlZiBfcGFy
c2VfaG9zdF9oZWFkZXIoc2VsZik6CisgICAgICAgIGZpZWxkcyA9IHNlbGYuX3JlcXVlc3QuaGVh
ZGVyc19pblsnSG9zdCddLnNwbGl0KCc6JywgMSkKKyAgICAgICAgaWYgbGVuKGZpZWxkcykgPT0g
MToKKyAgICAgICAgICAgIHBvcnQgPSBfREVGQVVMVF9XRUJfU09DS0VUX1BPUlQKKyAgICAgICAg
ICAgIGlmIHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKToKKyAgICAgICAgICAgICAgICBwb3J0ID0g
X0RFRkFVTFRfV0VCX1NPQ0tFVF9TRUNVUkVfUE9SVAorICAgICAgICAgICAgcmV0dXJuIGZpZWxk
c1swXSwgcG9ydAorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZmllbGRzWzBdLCBp
bnQoZmllbGRzWzFdKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgICAg
IHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJbnZhbGlkIHBvcnQgbnVtYmVyIGZvcm1hdDogJXInICUg
ZSkKKworICAgIGRlZiBfc2V0X3Byb3RvY29sKHNlbGYpOgorICAgICAgICBwcm90b2NvbCA9IHNl
bGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoJ1dlYlNvY2tldC1Qcm90b2NvbCcpCisgICAgICAg
IGlmIHByb3RvY29sIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3ZhbGlkYXRlX3Byb3RvY29s
KHByb3RvY29sKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sID0gcHJvdG9jb2wK
KworICAgIGRlZiBfc2VuZF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qu
Y29ubmVjdGlvbi53cml0ZSgKKyAgICAgICAgICAgICAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2Nr
ZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicpCisgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVj
dGlvbi53cml0ZSgnVXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgICAgIHNlbGYuX3JlcXVl
c3QuY29ubmVjdGlvbi53cml0ZSgnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nKQorICAgICAgICBz
ZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1dlYlNvY2tldC1PcmlnaW46ICcpCisgICAg
ICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZShzZWxmLl9yZXF1ZXN0LndzX29yaWdp
bikKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdcclxuJykKKyAgICAg
ICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdXZWJTb2NrZXQtTG9jYXRpb246ICcp
CisgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZShzZWxmLl9yZXF1ZXN0Lndz
X2xvY2F0aW9uKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1xyXG4n
KQorICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LndzX3Byb3RvY29sOgorICAgICAgICAgICAgc2Vs
Zi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdXZWJTb2NrZXQtUHJvdG9jb2w6ICcpCisgICAg
ICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoc2VsZi5fcmVxdWVzdC53c19w
cm90b2NvbCkKKyAgICAgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnXHJc
bicpCisgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnXHJcbicpCisKKyAg
ICBkZWYgX2NoZWNrX2hlYWRlcl9saW5lcyhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgZXhwZWN0
ZWRfdmFsdWUgaW4gX01BTkRBVE9SWV9IRUFERVJTOgorICAgICAgICAgICAgYWN0dWFsX3ZhbHVl
ID0gc2VsZi5fcmVxdWVzdC5oZWFkZXJzX2luLmdldChrZXkpCisgICAgICAgICAgICBpZiBub3Qg
YWN0dWFsX3ZhbHVlOgorICAgICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdIZWFk
ZXIgJXMgbm90IGRlZmluZWQnICUga2V5KQorICAgICAgICAgICAgaWYgZXhwZWN0ZWRfdmFsdWU6
CisgICAgICAgICAgICAgICAgaWYgYWN0dWFsX3ZhbHVlICE9IGV4cGVjdGVkX3ZhbHVlOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSWxsZWdhbCB2YWx1ZSBmb3Ig
aGVhZGVyICVzOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoa2V5LCBhY3R1YWxfdmFsdWUpKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBhcnNlcmhh
bmRsZXIucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVy
cGFyc2VyaGFuZGxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ODJj
ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L2hlYWRlcnBhcnNlcmhhbmRsZXIucHkKQEAgLTAsMCArMSw3NyBAQAorIyBDb3B5cmln
aHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAor
IyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
TGljZW5zZS4KKworCisiIiJQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVyIGZvciBtb2RfcHl3ZWJz
b2NrZXQuCisKK0FwYWNoZSBIVFRQIFNlcnZlciBhbmQgbW9kX3B5dGhvbiBtdXN0IGJlIGNvbmZp
Z3VyZWQgc3VjaCB0aGF0IHRoaXMKK2Z1bmN0aW9uIGlzIGNhbGxlZCB0byBoYW5kbGUgV2ViIFNv
Y2tldCByZXF1ZXN0LgorIiIiCisKKworZnJvbSBtb2RfcHl0aG9uIGltcG9ydCBhcGFjaGUKKwor
aW1wb3J0IGRpc3BhdGNoCitpbXBvcnQgaGFuZHNoYWtlCitpbXBvcnQgdXRpbAorCisKKyMgUHl0
aG9uT3B0aW9uIHRvIHNwZWNpZnkgdGhlIGhhbmRsZXIgcm9vdCBkaXJlY3RvcnkuCitfUFlPUFRf
SEFORExFUl9ST09UID0gJ21vZF9weXdlYnNvY2tldC5oYW5kbGVyX3Jvb3QnCisKKworZGVmIF9j
cmVhdGVfZGlzcGF0Y2hlcigpOgorICAgIF9IQU5ETEVSX1JPT1QgPSBhcGFjaGUubWFpbl9zZXJ2
ZXIuZ2V0X29wdGlvbnMoKS5nZXQoCisgICAgICAgICAgICBfUFlPUFRfSEFORExFUl9ST09ULCBO
b25lKQorICAgIGlmIG5vdCBfSEFORExFUl9ST09UOgorICAgICAgICByYWlzZSBFeGNlcHRpb24o
J1B5dGhvbk9wdGlvbiAlcyBpcyBub3QgZGVmaW5lZCcgJSBfUFlPUFRfSEFORExFUl9ST09ULAor
ICAgICAgICAgICAgICAgICAgICAgICAgYXBhY2hlLkFQTE9HX0VSUikKKyAgICBkaXNwYXRjaGVy
ID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfSEFORExFUl9ST09UKQorICAgIGZvciB3YXJuaW5nIGlu
IGRpc3BhdGNoZXIuc291cmNlX3dhcm5pbmdzKCk6CisgICAgICAgIGFwYWNoZS5sb2dfZXJyb3Io
J21vZF9weXdlYnNvY2tldDogJXMnICUgd2FybmluZywgYXBhY2hlLkFQTE9HX1dBUk5JTkcpCisg
ICAgcmV0dXJuIGRpc3BhdGNoZXIKKworCisjIEluaXRpYWxpemUKK19kaXNwYXRjaGVyID0gX2Ny
ZWF0ZV9kaXNwYXRjaGVyKCkKKworCitkZWYgaGVhZGVycGFyc2VyaGFuZGxlcihyZXF1ZXN0KToK
KyAgICAiIiJIYW5kbGUgcmVxdWVzdC4KKworICAgIEFyZ3M6CisgICAgICAgIHJlcXVlc3Q6IG1v
ZF9weXRob24gcmVxdWVzdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgaGVhZGVycGFy
c2VyaGFuZGxlciBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IG5hbWUKKyAgICBmb3IgYSBQeXRo
b25IZWFkZXJQYXJzZXJIYW5kbGVyLgorICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICBoYW5k
c2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwgX2Rpc3BhdGNoZXIpCisgICAg
ICAgIGhhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcign
bW9kX3B5d2Vic29ja2V0OiByZXNvdXJjZTolcicgJSByZXF1ZXN0LndzX3Jlc291cmNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfREVCVUcpCisgICAgICAgIF9kaXNw
YXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICBleGNlcHQgaGFuZHNoYWtlLkhhbmRz
aGFrZUVycm9yLCBlOgorICAgICAgICAjIEhhbmRzaGFrZSBmb3Igd3Mvd3NzIGZhaWxlZC4KKyAg
ICAgICAgIyBCdXQgdGhlIHJlcXVlc3QgY2FuIGJlIHZhbGlkIGh0dHAvaHR0cHMgcmVxdWVzdC4K
KyAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3IoJ21vZF9weXdlYnNvY2tldDogJXMnICUgZSwgYXBh
Y2hlLkFQTE9HX0lORk8pCisgICAgICAgIHJldHVybiBhcGFjaGUuREVDTElORUQKKyAgICBleGNl
cHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZToKKyAgICAgICAgcmVxdWVzdC5sb2dfZXJyb3Io
J21vZF9weXdlYnNvY2tldDogJXMnICUgZSwgYXBhY2hlLkFQTE9HX1dBUk5JTkcpCisgICAgICAg
IHJldHVybiBhcGFjaGUuREVDTElORUQKKyAgICByZXR1cm4gYXBhY2hlLkRPTkUgICMgUmV0dXJu
IERPTkUgc3VjaCB0aGF0IG5vIG90aGVyIGhhbmRsZXJzIGFyZSBpbnZva2VkLgorCisKKyMgdmk6
c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5
d2Vic29ja2V0L21zZ3V0aWwucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJz
b2NrZXQvbXNndXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YTgz
MWVhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L21zZ3V0aWwucHkKQEAgLTAsMCArMSwxODQgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29v
Z2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv
ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVy
bmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisK
KworIiIiTWVzc2FnZSByZWxhdGVkIHV0aWxpdGllcy4KKworTm90ZTogcmVxdWVzdC5jb25uZWN0
aW9uLndyaXRlL3JlYWQgYXJlIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoCittb2Rf
cHl0aG9uIGRvY3VtZW50IHNheXMgdGhhdCB0aGV5IHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gY29u
bmVjdGlvbiBoYW5kbGVycy4KK1VuZm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gb3RoZXIgb3B0aW9u
cy4gRm9yIGV4YW1wbGUsIHJlcXVlc3Qud3JpdGUvcmVhZCBhcmUKK25vdCBzdWl0YWJsZSBiZWNh
dXNlIHRoZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRlcyB3cml0aW5nL3JlYWRpbmcuCisi
IiIKKworCitpbXBvcnQgUXVldWUKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHRyYWNlYmFjawor
aW1wb3J0IHRocmVhZGluZworCisKK2RlZiBzZW5kX21lc3NhZ2UocmVxdWVzdCwgbWVzc2FnZSk6
CisgICAgIiIiU2VuZCBtZXNzYWdlLgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9k
X3B5dGhvbiByZXF1ZXN0LgorICAgICAgICBtZXNzYWdlOiB1bmljb2RlIHN0cmluZyB0byBzZW5k
LgorICAgICIiIgorCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdceDAwJyArIG1lc3Nh
Z2UuZW5jb2RlKCd1dGYtOCcpICsgJ1x4ZmYnKQorCisKK2RlZiByZWNlaXZlX21lc3NhZ2UocmVx
dWVzdCk6CisgICAgIiIiUmVjZWl2ZSBhIFdlYiBTb2NrZXQgZnJhbWUgYW5kIHJldHVybiBpdHMg
cGF5bG9hZCBhcyB1bmljb2RlIHN0cmluZy4KKworICAgIEFyZ3M6CisgICAgICAgIHJlcXVlc3Q6
IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAiIiIKKworICAgIHdoaWxlIFRydWU6CisgICAgICAg
ICMgUmVhZCAxIGJ5dGUuCisgICAgICAgICMgbXBfY29ubi5yZWFkIHdpbGwgYmxvY2sgaWYgbm8g
Ynl0ZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgIyBUaW1lb3V0IGlzIGNvbnRyb2xsZWQgYnkg
VGltZU91dCBkaXJlY3RpdmUgb2YgQXBhY2hlLgorICAgICAgICBmcmFtZV90eXBlX3N0ciA9IHJl
cXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisgICAgICAgIGZyYW1lX3R5cGUgPSBvcmQoZnJhbWVf
dHlwZV9zdHJbMF0pCisgICAgICAgIGlmIChmcmFtZV90eXBlICYgMHg4MCkgPT0gMHg4MDoKKyAg
ICAgICAgICAgICMgVGhlIHBheWxvYWQgbGVuZ3RoIGlzIHNwZWNpZmllZCBpbiB0aGUgZnJhbWUu
CisgICAgICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQuCisgICAgICAgICAgICBsZW5ndGggPSBf
cGF5bG9hZF9sZW5ndGgocmVxdWVzdCkKKyAgICAgICAgICAgIF9yZWNlaXZlX2J5dGVzKHJlcXVl
c3QsIGxlbmd0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIHBheWxvYWQgaXMg
ZGVsaW1pdGVkIHdpdGggXHhmZi4KKyAgICAgICAgICAgIGJ5dGVzID0gX3JlYWRfdW50aWwocmVx
dWVzdCwgJ1x4ZmYnKQorICAgICAgICAgICAgbWVzc2FnZSA9IGJ5dGVzLmRlY29kZSgndXRmLTgn
KQorICAgICAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtZXNzYWdlCisgICAgICAgICAgICAjIERpc2NhcmQgZGF0YSBvZiBvdGhlciB0eXBlcy4K
KworCitkZWYgX3BheWxvYWRfbGVuZ3RoKHJlcXVlc3QpOgorICAgIGxlbmd0aCA9IDAKKyAgICB3
aGlsZSBUcnVlOgorICAgICAgICBiX3N0ciA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisg
ICAgICAgIGIgPSBvcmQoYl9zdHJbMF0pCisgICAgICAgIGxlbmd0aCA9IGxlbmd0aCAqIDEyOCAr
IChiICYgMHg3ZikKKyAgICAgICAgaWYgKGIgJiAweDgwKSA9PSAwOgorICAgICAgICAgICAgYnJl
YWsKKyAgICByZXR1cm4gbGVuZ3RoCisKKworZGVmIF9yZWNlaXZlX2J5dGVzKHJlcXVlc3QsIGxl
bmd0aCk6CisgICAgYnl0ZXMgPSAnJworICAgIHdoaWxlIGxlbmd0aCA+IDA6CisgICAgICAgIG5l
d19ieXRlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKGxlbmd0aCkKKyAgICAgICAgYnl0ZXMg
Kz0gbmV3X2J5dGVzCisgICAgICAgIGxlbmd0aCAtPSBsZW4obmV3X2J5dGVzKQorICAgIHJldHVy
biBieXRlcworCisKK2RlZiBfcmVhZF91bnRpbChyZXF1ZXN0LCBkZWxpbV9jaGFyKToKKyAgICBi
eXRlcyA9ICcnCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgY2ggPSByZXF1ZXN0LmNvbm5lY3Rp
b24ucmVhZCgxKQorICAgICAgICBpZiBjaCA9PSBkZWxpbV9jaGFyOgorICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgYnl0ZXMgKz0gY2gKKyAgICByZXR1cm4gYnl0ZXMKKworCitjbGFzcyBNZXNz
YWdlUmVjZWl2ZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiVGhpcyBjbGFzcyByZWNlaXZl
cyBtZXNzYWdlcyBmcm9tIHRoZSBjbGllbnQuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGJv
dGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyB3YXlzIHRvIHJlY2VpdmUKKyAgICBtZXNz
YWdlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgb25tZXNzYWdl
PU5vbmUpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgICAg
IG9ubWVzc2FnZTogYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVj
ZWl2ZWQuCisgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBOb25lLgorICAgICAgICAiIiIK
KyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9y
ZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAg
ICAgICAgc2VsZi5fb25tZXNzYWdlID0gb25tZXNzYWdlCisgICAgICAgIHNlbGYuc2V0RGFlbW9u
KFRydWUpCisgICAgICAgIHNlbGYuc3RhcnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlX21lc3NhZ2Uoc2Vs
Zi5fcmVxdWVzdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX29ubWVzc2FnZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9vbm1lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgc2VsZi5fcXVldWUucHV0KG1lc3NhZ2UpCisKKyAgICBkZWYgcmVjZWl2ZShzZWxm
KToKKyAgICAgICAgIiIiIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIGNoYW5uZWwsIGJsb2Nr
aW5nLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBtZXNzYWdlIGFzIGEgdW5pY29k
ZSBzdHJpbmcuCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9xdWV1ZS5nZXQo
KQorCisgICAgZGVmIHJlY2VpdmVfbm93YWl0KHNlbGYpOgorICAgICAgICAiIiIgUmVjZWl2ZSBh
IG1lc3NhZ2UgZnJvbSB0aGUgY2hhbm5lbCwgbm9uLWJsb2NraW5nLgorCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgICBtZXNzYWdlIGFzIGEgdW5pY29kZSBzdHJpbmcgaWYgYXZhaWxhYmxl
LiBOb25lIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSBzZWxmLl9xdWV1ZS5nZXRfbm93YWl0KCkKKyAgICAgICAgZXhjZXB0IFF1ZXVl
LkVtcHR5OgorICAgICAgICAgICAgbWVzc2FnZSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIG1lc3Nh
Z2UKKworCitjbGFzcyBNZXNzYWdlU2VuZGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIlRo
aXMgY2xhc3Mgc2VuZHMgbWVzc2FnZXMgdG8gdGhlIGNsaWVudC4KKworICAgIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHdheXMgdG8gc2VuZAor
ICAgIG1lc3NhZ2VzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToK
KyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICIiIgorICAgICAg
ICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qg
PSByZXF1ZXN0CisgICAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBz
ZWxmLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnN0YXJ0KCkKKworICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5f
cXVldWUuZ2V0KCkKKyAgICAgICAgICAgIHNlbmRfbWVzc2FnZShzZWxmLl9yZXF1ZXN0LCBtZXNz
YWdlKQorCisgICAgZGVmIHNlbmQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiIlNlbmQgYSBt
ZXNzYWdlLCBibG9ja2luZy4iIiIKKworICAgICAgICBzZW5kX21lc3NhZ2Uoc2VsZi5fcmVxdWVz
dCwgbWVzc2FnZSkKKworICAgIGRlZiBzZW5kX25vd2FpdChzZWxmLCBtZXNzYWdlKToKKyAgICAg
ICAgIiIiU2VuZCBhIG1lc3NhZ2UsIG5vbi1ibG9ja2luZy4iIiIKKworICAgICAgICBzZWxmLl9x
dWV1ZS5wdXQobWVzc2FnZSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IGIvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGI0MmYxZAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5CkBA
IC0wLDAgKzEsMTU2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIw
MDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lU
SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuCisKKworIiIiU3RhbmRhbG9uZSBXZWIgU29ja2V0IHNlcnZlci4KKworVXNlIHRoaXMgc2Vy
dmVyIHRvIHJ1biBtb2RfcHl3ZWJzb2NrZXQgd2l0aG91dCBBcGFjaGUgSFRUUCBTZXJ2ZXIuCisi
IiIKKworaW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgoraW1w
b3J0IFNvY2tldFNlcnZlcgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0
IHVybHBhcnNlCisKK2ltcG9ydCBkaXNwYXRjaAoraW1wb3J0IGhhbmRzaGFrZQorCisKK2NsYXNz
IF9TdGFuZGFsb25lQ29ubmVjdGlvbihvYmplY3QpOgorICAgICIiIk1pbWljIG1vZF9weXRob24g
bXBfY29ubi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0X2hhbmRsZXIpOgor
ICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIHJlcXVlc3RfaGFuZGxlcjogQSBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlciBpbnN0YW5j
ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlcXVlc3RfaGFuZGxlciA9IHJlcXVlc3Rf
aGFuZGxlcgorCisgICAgZGVmIGdldF9sb2NhbF9hZGRyKHNlbGYpOgorICAgICAgICAiIiJHZXR0
ZXIgdG8gbWltaWMgbXBfY29ubi5sb2NhbF9hZGRyLiIiIgorICAgICAgICByZXR1cm4gKHNlbGYu
X3JlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX25hbWUsCisgICAgICAgICAgICAgICAgc2Vs
Zi5fcmVxdWVzdF9oYW5kbGVyLnNlcnZlci5zZXJ2ZXJfcG9ydCkKKyAgICBsb2NhbF9hZGRyID0g
cHJvcGVydHkoZ2V0X2xvY2FsX2FkZHIpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6Cisg
ICAgICAgICIiIk1pbWljIG1wX2Nvbm4ud3JpdGUoKS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3JlcXVlc3RfaGFuZGxlci53ZmlsZS53cml0ZShkYXRhKQorCisgICAgZGVmIHJlYWQoc2VsZiwg
bGVuZ3RoKToKKyAgICAgICAgIiIiTWltaWMgbXBfY29ubi5yZWFkKCkuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChsZW5ndGgpCisKKworY2xhc3Mg
X1N0YW5kYWxvbmVSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiTWltaWMgbW9kX3B5dGhvbiByZXF1
ZXN0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAg
ICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAg
ICAgcmVxdWVzdF9oYW5kbGVyOiBBIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyIGluc3RhbmNlLgor
ICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyID0gcmVxdWVzdF9oYW5k
bGVyCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IF9TdGFuZGFsb25lQ29ubmVjdGlvbihyZXF1
ZXN0X2hhbmRsZXIpCisKKyAgICBkZWYgZ2V0X3VyaShzZWxmKToKKyAgICAgICAgIiIiR2V0dGVy
IHRvIG1pbWljIHJlcXVlc3QudXJpLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9o
YW5kbGVyLnBhdGgKKyAgICB1cmkgPSBwcm9wZXJ0eShnZXRfdXJpKQorCisgICAgZGVmIGdldF9o
ZWFkZXJzX2luKHNlbGYpOgorICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgcmVxdWVzdC5oZWFk
ZXJzX2luLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLmhlYWRlcnMK
KyAgICBoZWFkZXJzX2luID0gcHJvcGVydHkoZ2V0X2hlYWRlcnNfaW4pCisKKyAgICBkZWYgaXNf
aHR0cHMoc2VsZik6CisgICAgICAgICIiIk1pbWljIHJlcXVlc3QuaXNfaHR0cHMoKS4iIiIKKyAg
ICAgICAgIyBUT0RPKHl1em8pOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgcmV0dXJuIEZhbHNl
CisKKworY2xhc3MgV2ViU29ja2V0U2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRpbmdNaXhJbiwg
QmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgICAgIiIiSFRUUFNlcnZlciBzcGVjaWFsaXpl
ZCBmb3IgV2ViIFNvY2tldC4iIiIKKworICAgIGRhZW1vbl90aHJlYWRzID0gVHJ1ZQorICAgIHBh
c3MKKworCitjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQU2VydmVyLlNp
bXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVy
IHNwZWNpYWxpemVkIGZvciBXZWIgU29ja2V0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
ICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdCA9IF9TdGFuZGFsb25l
UmVxdWVzdChzZWxmKQorICAgICAgICBzZWxmLl9kaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0
Y2hlcigKKyAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLndl
YnNvY2tfaGFuZGxlcnMpCisgICAgICAgIHNlbGYuX3ByaW50X3dhcm5pbmdzX2lmX2FueSgpCisg
ICAgICAgIHNlbGYuX2hhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihzZWxmLl9yZXF1
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fZGlzcGF0Y2hlcikKKyAgICAgICAgU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVz
dEhhbmRsZXIuX19pbml0X18oCisgICAgICAgICAgICAgICAgc2VsZiwgKmFyZ3MsICoqa2V5d29y
ZHMpCisKKyAgICBkZWYgX3ByaW50X3dhcm5pbmdzX2lmX2FueShzZWxmKToKKyAgICAgICAgd2Fy
bmluZ3MgPSBzZWxmLl9kaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5ncygpCisgICAgICAgIGlmIHdh
cm5pbmdzOgorICAgICAgICAgICAgZm9yIHdhcm5pbmcgaW4gd2FybmluZ3M6CisgICAgICAgICAg
ICAgICAgbG9nZ2luZy53YXJuaW5nKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIHdhcm5pbmcpCisK
KyAgICBkZWYgcGFyc2VfcmVxdWVzdChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgQmFzZUhU
VFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0LgorCisgICAgICAg
IFJldHVybiBUcnVlIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgZm9yIEhUVFAoUyksIEZhbHNlIG90
aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IFNpbXBsZUhUVFBTZXJ2ZXIu
U2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qoc2VsZikKKyAgICAgICAgaWYg
cmVzdWx0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRzaGFr
ZXIuc2hha2VfaGFuZHMoKQorICAgICAgICAgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIudHJhbnNm
ZXJfZGF0YShzZWxmLl9yZXF1ZXN0KQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwgZToKKyAgICAgICAgICAg
ICAgICAjIEhhbmRzaGFrZSBmb3Igd3MocykgZmFpbGVkLiBBc3N1bWUgaHR0cChzKS4KKyAgICAg
ICAgICAgICAgICBsb2dnaW5nLmluZm8oJ21vZF9weXdlYnNvY2tldDogJXMnICUgZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3Bh
dGNoRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdtb2RfcHl3ZWJz
b2NrZXQ6ICVzJyAlIGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJl
dHVybiByZXN1bHQKKworCitkZWYgX21haW4oKToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkK
KworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLCB0eXBlPSdpbnQnLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9aGFuZHNoYWtlLl9ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCwK
KyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwb3J0IHRvIGxpc3RlbiB0bycpCisgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy13JywgJy0td2Vic29ja19oYW5kbGVycycsIGRlc3Q9J3dlYnNvY2tf
aGFuZGxlcnMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Jy4nLAorICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9J1dlYiBTb2NrZXQgaGFuZGxlcnMgYmFzZSBkaXJlY3RvcnkuJykK
KyAgICAjIFRPRE8oeXV6byk6IEFkZCB3c3MtcmVsYXRlZCBvcHRpb25zLgorICAgIFdlYlNvY2tl
dFJlcXVlc3RIYW5kbGVyLm9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncygpWzBdCisKKyAgICBX
ZWJTb2NrZXRTZXJ2ZXIoKCcnLCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLnBvcnQp
LAorICAgICAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcikuc2VydmVfZm9y
ZXZlcigpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBfbWFpbigpCisKKwor
IyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9t
b2RfcHl3ZWJzb2NrZXQvdXRpbC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdl
YnNvY2tldC91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyMWFm
NjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJz
b2NrZXQvdXRpbC5weQpAQCAtMCwwICsxLDM3IEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJ
bmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
KHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIi
IldlYiBTb2NrZXRzIHV0aWxpdGllcy4KKyIiIgorCisKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0
IHRyYWNlYmFjaworCisKK2RlZiBnZXRfc3RhY2tfdHJhY2UoKToKKyAgICAiIiJHZXQgdGhlIGN1
cnJlbnQgc3RhY2sgdHJhY2UgYXMgc3RyaW5nLgorCisgICAgVGhpcyBpcyBuZWVkZWQgdG8gc3Vw
cG9ydCBQeXRob24gMi4zLgorICAgIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gd2Ugb25seSBzdXBw
b3J0IFB5dGhvbiAyLjQgYW5kIGFib3ZlLgorICAgICAgICAgIFVzZSB0cmFjZWJhY2suZm9ybWF0
X2V4YyBpbnN0ZWFkLgorICAgICIiIgorCisgICAgb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQor
ICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1vdXQpCisgICAgcmV0dXJuIG91dC5nZXR2YWx1
ZSgpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdl
YnNvY2tldC9zZXR1cC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3NldHVwLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1ZjkxODEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQpAQCAtMCwwICsxLDQ4IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMg
TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl
bnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiU2V0IHVwIHNj
cmlwdCBmb3IgbW9kX3B5d2Vic29ja2V0LgorIiIiCisKKworZnJvbSBkaXN0dXRpbHMuY29yZSBp
bXBvcnQgc2V0dXAKK2ltcG9ydCBzeXMKKworCitfUEFDS0FHRV9OQU1FID0gJ21vZF9weXdlYnNv
Y2tldCcKKworaWYgc3lzLnZlcnNpb24gPCAnMi4zJzoKKyAgICBwcmludCA+PnN5cy5zdGRlcnIs
ICclcyByZXF1aXJlcyBQeXRob24gMi4zIG9yIGxhdGVyLicgJSBfUEFDS0FHRV9OQU1FCisgICAg
c3lzLmV4aXQoMSkKKworc2V0dXAoYXV0aG9yPSdZdXpvIEZ1amlzaGltYScsCisgICAgICBhdXRo
b3JfZW1haWw9J3l1em9AY2hyb21pdW0ub3JnJywKKyAgICAgIGRlc2NyaXB0aW9uPSdXZWIgU29j
a2V0IGV4dGVuc2lvbiBmb3IgQXBhY2hlIEhUVFAgU2VydmVyLicsCisgICAgICBsb25nX2Rlc2Ny
aXB0aW9uPSgKKyAgICAgICAgICAgICAgJ21vZF9weXdlYnNvY2tldCBpcyBhbiBBcGFjaGUgSFRU
UCBTZXJ2ZXIgZXh0ZW5zaW9uIGZvciAnCisgICAgICAgICAgICAgICdXZWIgU29ja2V0IChodHRw
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC8nCisgICAgICAgICAgICAgICdkcmFmdC1oaXhpZS10aGV3
ZWJzb2NrZXRwcm90b2NvbCkuICcKKyAgICAgICAgICAgICAgJ1NlZSBtb2RfcHl3ZWJzb2NrZXQv
X19pbml0X18ucHkgZm9yIG1vcmUgZGV0YWlsLicpLAorICAgICAgbGljZW5zZT0naHR0cDovL3d3
dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wJywKKyAgICAgIG5hbWU9X1BBQ0tBR0Vf
TkFNRSwKKyAgICAgIHBhY2thZ2VzPVtfUEFDS0FHRV9OQU1FXSwKKyAgICAgIHVybD0naHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL3B5d2Vic29ja2V0LycsCisgICAgICB2ZXJzaW9uPScwLjIuMCcs
CisgICAgICApCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L2NvbmZpZy5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvY29uZmlnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiYWVhYzYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L2NvbmZpZy5w
eQpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisjIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
IworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIkNvbmZpZ3VyYXRp
b24gZm9yIHRlc3RpbmcuCisKK1Rlc3QgZmlsZXMgc2hvdWxkIGltcG9ydCB0aGlzIG1vZHVsZSBi
ZWZvcmUgbW9kX3B5d2Vic29ja2V0LgorIiIiCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisK
KworIyBBZGQgdGhlIHBhcmVudCBkaXJlY3RvcnkgdG8gc3lzLnBhdGggdG8gZW5hYmxlIGltcG9y
dGluZyBtb2RfcHl3ZWJzb2NrZXQuCitzeXMucGF0aCArPSBbb3MucGF0aC5qb2luKG9zLnBhdGgu
c3BsaXQoX19maWxlX18pWzBdLCAnLi4nKV0KKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvbW9jay5weSBiL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvbW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwLi5iYzk3NGZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC9tb2NrLnB5CkBAIC0wLDAgKzEsMTg4IEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJ
bmMuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg
KHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M
SUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdy
ZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIi
Ik1vY2tzIGZvciB0ZXN0aW5nLgorIiIiCisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdGhyZWFk
aW5nCisKKworY2xhc3MgX01vY2tDb25uQmFzZShvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3Mg
b2YgbW9ja3MgZm9yIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4uCisKKyAgICBUaGlzIGVuYWJs
ZXMgdGVzdHMgdG8gY2hlY2sgd2hhdCBpcyB3cml0dGVuIHRvIGEgKG1vY2spIG1wX2Nvbm4uCisg
ICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlX2Rh
dGEgPSBbXQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJPdmVycmlk
ZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLndyaXRlLiIiIgorCisgICAgICAgIHNlbGYuX3dy
aXRlX2RhdGEuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYgd3JpdHRlbl9kYXRhKHNlbGYpOgorICAg
ICAgICAiIiJHZXQgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIG1vY2suIiIiCisKKyAgICAgICAgcmV0
dXJuICcnLmpvaW4oc2VsZi5fd3JpdGVfZGF0YSkKKworCitjbGFzcyBNb2NrQ29ubihfTW9ja0Nv
bm5CYXNlKToKKyAgICAiIiJNb2NrIGZvciBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLgorCisg
ICAgVGhpcyBlbmFibGVzIHRlc3RzIHRvIHNwZWNpZnkgd2hhdCBzaG91bGQgYmUgcmVhZCBmcm9t
IGEgKG1vY2spIG1wX2Nvbm4gYXMKKyAgICB3ZWxsIGFzIHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRl
biB0byBpdC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWFkX2RhdGEpOgor
ICAgICAgICAiIiJDb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICByZWFkX2RhdGE6IGJ5dGVzIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIHdoZW4gcmVh
ZCogbWV0aG9kcyBhcmUKKyAgICAgICAgICAgIGNhbGxlZC4KKyAgICAgICAgIiIiCisKKyAgICAg
ICAgX01vY2tDb25uQmFzZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9yZWFkX2RhdGEg
PSByZWFkX2RhdGEKKyAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCisKKyAgICBkZWYgcmVhZGxp
bmUoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4u
cmVhZGxpbmUuIiIiCisKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9wb3MgPj0gbGVuKHNlbGYuX3Jl
YWRfZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgZW5kX2luZGV4ID0gc2Vs
Zi5fcmVhZF9kYXRhLmZpbmQoJ1xuJywgc2VsZi5fcmVhZF9wb3MpICsgMQorICAgICAgICBpZiBl
bmRfaW5kZXggPT0gMDoKKyAgICAgICAgICAgIGVuZF9pbmRleCA9IGxlbihzZWxmLl9yZWFkX2Rh
dGEpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VwX3RvKGVuZF9pbmRleCkKKworICAgIGRl
ZiByZWFkKHNlbGYsIGxlbmd0aCk6CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBh
Y2hlLm1wX2Nvbm4ucmVhZC4iIiIKKworICAgICAgICBpZiBzZWxmLl9yZWFkX3BvcyA+PSBsZW4o
c2VsZi5fcmVhZF9kYXRhKToKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbmRfaW5k
ZXggPSBtaW4obGVuKHNlbGYuX3JlYWRfZGF0YSksIHNlbGYuX3JlYWRfcG9zICsgbGVuZ3RoKQor
ICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91cF90byhlbmRfaW5kZXgpCisKKyAgICBkZWYgX3Jl
YWRfdXBfdG8oc2VsZiwgZW5kX2luZGV4KToKKyAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRfZGF0
YVtzZWxmLl9yZWFkX3BvczplbmRfaW5kZXhdCisgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gZW5k
X2luZGV4CisgICAgICAgIHJldHVybiBsaW5lCisKKworY2xhc3MgTW9ja0Jsb2NraW5nQ29ubihf
TW9ja0Nvbm5CYXNlKToKKyAgICAiIiJCbG9ja2luZyBtb2NrIGZvciBtb2RfcHl0aG9uLmFwYWNo
ZS5tcF9jb25uLgorCisgICAgVGhpcyBlbmFibGVzIHRlc3RzIHRvIHNwZWNpZnkgd2hhdCBzaG91
bGQgYmUgcmVhZCBmcm9tIGEgKG1vY2spIG1wX2Nvbm4gYXMKKyAgICB3ZWxsIGFzIHRvIGNoZWNr
IHdoYXQgaXMgd3JpdHRlbiB0byBpdC4KKyAgICBDYWxsZXJzIG9mIHJlYWQqIG1ldGhvZHMgd2ls
bCBibG9jayBpZiB0aGVyZSBpcyBubyBieXRlcyBhdmFpbGFibGUuCisgICAgIiIiCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIF9Nb2NrQ29ubkJhc2UuX19pbml0X18oc2VsZikK
KyAgICAgICAgc2VsZi5fcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgcmVhZGxpbmUo
c2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVh
ZGxpbmUuIiIiCisgICAgICAgIGxpbmUgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg
ICAgICAgY2ggPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAgICAgICAgICAgbGluZSArPSBjaAorICAg
ICAgICAgICAgaWYgY2ggPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorCisg
ICAgZGVmIHJlYWQoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhv
bi5hcGFjaGUubXBfY29ubi5yZWFkLiIiIgorCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICBm
b3IgXyBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICAgICAgZGF0YSArPSBzZWxmLl9xdWV1ZS5n
ZXQoKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHB1dF9ieXRlcyhzZWxmLCBieXRl
cyk6CisgICAgICAgICIiIlB1dCBieXRlcyB0byBiZSByZWFkIGZyb20gdGhpcyBtb2NrLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgICBieXRlczogYnl0ZXMgdG8gYmUgcmVhZC4KKyAgICAg
ICAgIiIiCisKKyAgICAgICAgZm9yIGJ5dGUgaW4gYnl0ZXM6CisgICAgICAgICAgICBzZWxmLl9x
dWV1ZS5wdXQoYnl0ZSkKKworCitjbGFzcyBNb2NrVGFibGUoZGljdCk6CisgICAgIiIiTW9jayB0
YWJsZS4KKworICAgIFRoaXMgbWltaWNrcyBtb2RfcHl0aG9uIG1wX3RhYmxlLiBOb3RlIHRoYXQg
b25seSB0aGUgbWV0aG9kcyB1c2VkIGJ5CisgICAgdGVzdHMgYXJlIG92ZXJyaWRkZW4uCisgICAg
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29weV9mcm9tPXt9KToKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShjb3B5X2Zyb20sIGRpY3QpOgorICAgICAgICAgICAgY29weV9mcm9tID0gY29w
eV9mcm9tLml0ZW1zKCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY29weV9mcm9tOgorICAg
ICAgICAgICAgc2VsZi5fX3NldGl0ZW1fXyhrZXksIHZhbHVlKQorCisgICAgZGVmIF9fZ2V0aXRl
bV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzdXBlcihNb2NrVGFibGUsIHNlbGYpLl9f
Z2V0aXRlbV9fKGtleS5sb3dlcigpKQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwg
dmFsdWUpOgorICAgICAgICBzdXBlcihNb2NrVGFibGUsIHNlbGYpLl9fc2V0aXRlbV9fKGtleS5s
b3dlcigpLCB2YWx1ZSkKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZfdmFsdWU9Tm9uZSk6
CisgICAgICAgIHJldHVybiBzdXBlcihNb2NrVGFibGUsIHNlbGYpLmdldChrZXkubG93ZXIoKSwg
ZGVmX3ZhbHVlKQorCisKK2NsYXNzIE1vY2tSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiTW9jayBy
ZXF1ZXN0LgorCisgICAgVGhpcyBtaW1pY3MgbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICIiIgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVyaT1Ob25lLCBoZWFkZXJzX2luPXt9LCBjb25uZWN0
aW9uPU5vbmUsCisgICAgICAgICAgICAgICAgIGlzX2h0dHBzPUZhbHNlKToKKyAgICAgICAgIiIi
Q29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAg
IHVyaTogVVJJIG9mIHRoZSByZXF1ZXN0LgorICAgICAgICAgICAgaGVhZGVyc19pbjogUmVxdWVz
dCBoZWFkZXJzLgorICAgICAgICAgICAgY29ubmVjdGlvbjogQ29ubmVjdGlvbiB1c2VkIGZvciB0
aGUgcmVxdWVzdC4KKyAgICAgICAgICAgIGlzX2h0dHBzOiBXaGV0aGVyIHRoaXMgcmVxdWVzdCBp
cyBvdmVyIFNTTC4KKworICAgICAgICBTZWUgdGhlIGRvY3VtZW50IG9mIG1vZF9weXRob24gbXBf
Y29ubiBmb3IgZGV0YWlscy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudXJpID0gdXJpCisg
ICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5oZWFkZXJz
X2luID0gTW9ja1RhYmxlKGhlYWRlcnNfaW4pCisgICAgICAgIHNlbGYuaXNfaHR0cHNfID0gaXNf
aHR0cHMKKworICAgIGRlZiBpc19odHRwcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRo
ZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIgU1NMLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5pc19o
dHRwc18KKworCitjbGFzcyBNb2NrRGlzcGF0Y2hlcihvYmplY3QpOgorICAgICIiIk1vY2sgZm9y
IGRpc3BhdGNoLkRpc3BhdGNoZXIuIiIiCisKKyAgICBkZWYgc2hha2VfaGFuZHMoc2VsZiwgY29u
bl9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRyYW5zZmVyX2RhdGEoc2VsZiwg
Y29ubl9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5IGIvV2ViS2l0
VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAuLjk2ZjdhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdl
YnNvY2tldC90ZXN0L3J1bl9hbGwucHkKQEAgLTAsMCArMSw0OSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisjIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAg
ICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2Ug
Zm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIlJ1biBhbGwgdGVzdHMgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorIiIiCisKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCB1
bml0dGVzdAorCisKK19URVNUX01PRFVMRV9QQVRURVJOID0gcmUuY29tcGlsZShyJ14odGVzdF8u
KylcLnB5JCcpCisKKworZGVmIF9saXN0X3Rlc3RfbW9kdWxlcyhkaXJlY3RvcnkpOgorICAgIG1v
ZHVsZV9uYW1lcyA9IFtdCisgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoZGlyZWN0b3J5
KToKKyAgICAgICAgbWF0Y2ggPSBfVEVTVF9NT0RVTEVfUEFUVEVSTi5zZWFyY2goZmlsZW5hbWUp
CisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgbW9kdWxlX25hbWVzLmFwcGVuZChtYXRj
aC5ncm91cCgxKSkKKyAgICByZXR1cm4gbW9kdWxlX25hbWVzCisKKworZGVmIF9zdWl0ZSgpOgor
ICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgIHJldHVybiBsb2FkZXIubG9h
ZFRlc3RzRnJvbU5hbWVzKAorICAgICAgICAgICAgX2xpc3RfdGVzdF9tb2R1bGVzKG9zLnBhdGgu
am9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJy4nKSkpCisKKworaWYgX19uYW1lX18g
PT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSdfc3VpdGUnKQor
CisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90
ZXN0X2Rpc3BhdGNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhNGJk
NTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rf
ZGlzcGF0Y2gucHkKQEAgLTAsMCArMSwxNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJUZXN0cyBmb3IgZGlzcGF0Y2ggbW9kdWxlLiIiIgor
CisKKworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZyAgIyBUaGlz
IG11c3QgYmUgaW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KK2Zyb20gbW9kX3B5d2Vi
c29ja2V0IGltcG9ydCBkaXNwYXRjaAorCitpbXBvcnQgbW9jaworCisKK19URVNUX0hBTkRMRVJT
X0RJUiA9IG9zLnBhdGguam9pbigKKyAgICAgICAgb3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0s
ICd0ZXN0ZGF0YScsICdoYW5kbGVycycpCisKK2NsYXNzIERpc3BhdGNoZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb252ZXJ0ZXIoc2VsZik6CisgICAgICAgIGNvbnZl
cnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignL2EvYicpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKCcvYS9iL2hfd3NoLnB5JykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9jL2gnLCBjb252ZXJ0ZXIoJy9hL2IvYy9oX3dzaC5w
eScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGNvbnZlcnRlcignL2EvYi9oLnB5
JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgY29udmVydGVyKCdhL2IvaF93c2gu
cHknKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90b19yZXNvdXJjZV9j
b252ZXJ0ZXIoJ2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVy
KCdhL2IvaF93c2gucHknKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90
b19yZXNvdXJjZV9jb252ZXJ0ZXIoJy9hL2IvLy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcvaCcsIGNvbnZlcnRlcignL2EvYi9oX3dzaC5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi8uLi9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29u
dmVydGVyID0gZGlzcGF0Y2guX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKCcvYS8uLi9hL2Iv
Li4vYi8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi9o
X3dzaC5weScpKQorCisgICAgICAgIGNvbnZlcnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291
cmNlX2NvbnZlcnRlcihyJ1xhXGInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNv
bnZlcnRlcihyJ1xhXGJcaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gn
LCBjb252ZXJ0ZXIocicvYS9iL2hfd3NoLnB5JykpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZmls
ZV9wYXRocyhzZWxmKToKKyAgICAgICAgcGF0aHMgPSBsaXN0KGRpc3BhdGNoLl9zb3VyY2VfZmls
ZV9wYXRocyhfVEVTVF9IQU5ETEVSU19ESVIpKQorICAgICAgICBwYXRocy5zb3J0KCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBsZW4ocGF0aHMpKQorICAgICAgICBleHBlY3RlZF9wYXRo
cyA9IFsKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAn
YV93c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNf
RElSLCAnYl93c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFO
RExFUlNfRElSLCAnc3ViL2Nfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2lu
KF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1Yi9lX3dzaC5weScpLAorICAgICAgICAgICAgICAgIG9z
LnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWIvZl93c2gucHknKSwKKyAgICAgICAg
ICAgICAgICBdCisgICAgICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHppcChleHBlY3RlZF9w
YXRocywgcGF0aHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0
dWFsKQorCisgICAgZGVmIHRlc3Rfc291cmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBkaXNwYXRjaC5fc291cmNlLCAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZGlzcGF0Y2guX3Nv
dXJjZSwgJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3BhdGNoLkRpc3BhdGNo
RXJyb3IsIGRpc3BhdGNoLl9zb3VyY2UsICcxLzAnKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3Mo
ZGlzcGF0Y2guX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAnZGVmIHdlYl9zb2NrZXRfc2hha2Vf
aGFuZHMocmVxdWVzdCk6cGFzc1xuJworICAgICAgICAgICAgICAgICdkZWYgd2ViX3NvY2tldF90
cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOnBhc3NcbicpKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3dh
cm5pbmdzKHNlbGYpOgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihf
VEVTVF9IQU5ETEVSU19ESVIpCisgICAgICAgIHdhcm5pbmdzID0gZGlzcGF0Y2hlci5zb3VyY2Vf
d2FybmluZ3MoKQorICAgICAgICB3YXJuaW5ncy5zb3J0KCkKKyAgICAgICAgZXhwZWN0ZWRfd2Fy
bmluZ3MgPSBbCisgICAgICAgICAgICAgICAgKG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19E
SVIsICdiX3dzaC5weScpICsgJzogJworICAgICAgICAgICAgICAgICAnd2ViX3NvY2tldF9zaGFr
ZV9oYW5kcyBpcyBub3QgZGVmaW5lZC4nKSwKKyAgICAgICAgICAgICAgICAob3MucGF0aC5qb2lu
KF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdjX3dzaC5weScpICsgJzogJworICAgICAgICAg
ICAgICAgICAnd2ViX3NvY2tldF9zaGFrZV9oYW5kcyBpcyBub3QgY2FsbGFibGUuJyksCisgICAg
ICAgICAgICAgICAgKG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWInLCAnZ193
c2gucHknKSArICc6ICcKKyAgICAgICAgICAgICAgICAgJ3dlYl9zb2NrZXRfc2hha2VfaGFuZHMg
aXMgbm90IGRlZmluZWQuJyksCisgICAgICAgICAgICAgICAgKG9zLnBhdGguam9pbihfVEVTVF9I
QU5ETEVSU19ESVIsICdzdWInLCAnaF93c2gucHknKSArICc6ICcKKyAgICAgICAgICAgICAgICAg
J3dlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBpcyBub3QgZGVmaW5lZC4nKSwKKyAgICAgICAgICAg
ICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDQsIGxlbih3YXJuaW5ncykpCisgICAg
ICAgIGZvciBleHBlY3RlZCwgYWN0dWFsIGluIHppcChleHBlY3RlZF93YXJuaW5ncywgd2Fybmlu
Z3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCkKKwor
ICAgIGRlZiB0ZXN0X3NoYWtlX2hhbmQoc2VsZik6CisgICAgICAgIGRpc3BhdGNoZXIgPSBkaXNw
YXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUikKKyAgICAgICAgcmVxdWVzdCA9IG1v
Y2suTW9ja1JlcXVlc3QoKQorICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9hJworICAg
ICAgICByZXF1ZXN0LndzX29yaWdpbiA9ICdodHRwOi8vZXhhbXBsZS5jb20nCisgICAgICAgIGRp
c3BhdGNoZXIuc2hha2VfaGFuZHMocmVxdWVzdCkgICMgTXVzdCBub3QgcmFpc2UgZXhjZXB0aW9u
LgorCisgICAgICAgIHJlcXVlc3Qud3Nfb3JpZ2luID0gJ2h0dHA6Ly9iYWQuZXhhbXBsZS5jb20n
CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIuc2hha2VfaGFuZHMsIHJlcXVlc3QpCisK
KyAgICBkZWYgdGVzdF90cmFuc2Zlcl9kYXRhKHNlbGYpOgorICAgICAgICBkaXNwYXRjaGVyID0g
ZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19ESVIpCisgICAgICAgIHJlcXVlc3Qg
PSBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignJykpCisgICAgICAg
IHJlcXVlc3Qud3NfcmVzb3VyY2UgPSAnL2EnCisgICAgICAgIHJlcXVlc3Qud3NfcHJvdG9jb2wg
PSAncDEnCisKKyAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2Ffd3NoLnB5IGlzIGNhbGxlZCBmb3IgL2EsIHAxJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkp
CisKKyAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1v
Y2tDb25uKCcnKSkKKyAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL2UnCisgICAg
ICAgIHJlcXVlc3Qud3NfcHJvdG9jb2wgPSBOb25lCisgICAgICAgIGRpc3BhdGNoZXIudHJhbnNm
ZXJfZGF0YShyZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzdWIvZV93c2gucHkg
aXMgY2FsbGVkIGZvciAvc3ViL2UsIE5vbmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3RyYW5zZmVy
X2RhdGFfbm9faGFuZGxlcihzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRp
c3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSKQorICAgICAgICBmb3IgcmVzb3VyY2UgaW4gWycv
YicsICcvc3ViL2MnLCAnL3N1Yi9kJywgJy9kb2VzL25vdC9leGlzdCddOgorICAgICAgICAgICAg
cmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkK
KyAgICAgICAgICAgIHJlcXVlc3Qud3NfcmVzb3VyY2UgPSByZXNvdXJjZQorICAgICAgICAgICAg
cmVxdWVzdC53c19wcm90b2NvbCA9ICdwMicKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAg
ICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBz
ZWxmLmZhaWwoKQorICAgICAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsIGU6
CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cihlKS5maW5kKCdObyBoYW5kbGVy
JykgIT0gLTEpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAg
IHNlbGYuZmFpbCgpCisKKyAgICBkZWYgdGVzdF90cmFuc2Zlcl9kYXRhX2hhbmRsZXJfZXhjZXB0
aW9uKHNlbGYpOgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVT
VF9IQU5ETEVSU19ESVIpCisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5l
Y3Rpb249bW9jay5Nb2NrQ29ubignJykpCisgICAgICAgIHJlcXVlc3Qud3NfcmVzb3VyY2UgPSAn
L3N1Yi9mJworICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gJ3AzJworICAgICAgICB0cnk6
CisgICAgICAgICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAg
ICAgIHNlbGYuZmFpbCgpCisgICAgICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBl
OgorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHN0cihlKS5maW5kKCdJbnRlbnRpb25hbCcp
ICE9IC0xKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5mYWls
KCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQor
CisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3Qv
dGVzdF9oYW5kc2hha2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjM5
YTY0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVz
dF9oYW5kc2hha2UucHkKQEAgLTAsMCArMSwzMDEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IworIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBu
b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgor
IyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVp
cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQor
IyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJUZXN0cyBmb3IgaGFuZHNoYWtlIG1vZHVsZS4i
IiIKKworCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZyAgIyBUaGlzIG11c3QgYmUg
aW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGlt
cG9ydCBoYW5kc2hha2UKKworaW1wb3J0IG1vY2sKKworCitfR09PRF9SRVFVRVNUID0gKAorICAg
IDgwLAorICAgICcvZGVtbycsCisgICAgeworICAgICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcs
CisgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICdIb3N0JzonZXhhbXBs
ZS5jb20nLAorICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAg
J1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCisgICAgfQorKQorCitfR09PRF9SRVNQT05T
RV9ERUZBVUxUX1BPUlQgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29s
IEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5l
Y3Rpb246IFVwZ3JhZGVcclxuJworICAgICdXZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBs
ZS5jb21cclxuJworICAgICdXZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb20vZGVt
b1xyXG4nCisgICAgJ1dlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicKKyAgICAnXHJcbicp
CisKK19HT09EX1JFU1BPTlNFX1NFQ1VSRSA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2Nr
ZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicK
KyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0
dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3NzOi8vZXhh
bXBsZS5jb20vZGVtb1xyXG4nCisgICAgJ1dlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicK
KyAgICAnXHJcbicpCisKK19HT09EX1JFUVVFU1RfTk9OREVGQVVMVF9QT1JUID0gKAorICAgIDgw
ODEsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywK
KyAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgJ0hvc3QnOidleGFtcGxl
LmNvbTo4MDgxJywKKyAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAg
ICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAorICAgIH0KKykKKworX0dPT0RfUkVT
UE9OU0VfTk9OREVGQVVMVF9QT1JUID0gKAorICAgICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQ
cm90b2NvbCBIYW5kc2hha2VcclxuJworICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAg
ICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKyAgICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDov
L2V4YW1wbGUuY29tXHJcbicKKyAgICAnV2ViU29ja2V0LUxvY2F0aW9uOiB3czovL2V4YW1wbGUu
Y29tOjgwODEvZGVtb1xyXG4nCisgICAgJ1dlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicK
KyAgICAnXHJcbicpCisKK19HT09EX1JFU1BPTlNFX1NFQ1VSRV9OT05ERUYgPSAoCisgICAgJ0hU
VFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3Jh
ZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICdX
ZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJworICAgICdXZWJTb2NrZXQt
TG9jYXRpb246IHdzczovL2V4YW1wbGUuY29tOjgwODEvZGVtb1xyXG4nCisgICAgJ1dlYlNvY2tl
dC1Qcm90b2NvbDogc2FtcGxlXHJcbicKKyAgICAnXHJcbicpCisKK19HT09EX1JFUVVFU1RfTk9f
UFJPVE9DT0wgPSAoCisgICAgODAsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAgICdVcGdy
YWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAg
ICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBs
ZS5jb20nLAorICAgIH0KKykKKworX0dPT0RfUkVTUE9OU0VfTk9fUFJPVE9DT0wgPSAoCisgICAg
J0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgJ1Vw
Z3JhZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAg
ICdXZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJworICAgICdXZWJTb2Nr
ZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb20vZGVtb1xyXG4nCisgICAgJ1xyXG4nKQorCitf
R09PRF9SRVFVRVNUX1dJVEhfT1BUSU9OQUxfSEVBREVSUyA9ICgKKyAgICA4MCwKKyAgICAnL2Rl
bW8nLAorICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAnQ29u
bmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAg
ICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICdXZWJTb2NrZXQtUHJv
dG9jb2wnOidzYW1wbGUnLAorICAgICAgICAnQUtleSc6J0FWYWx1ZScsCisgICAgICAgICdFbXB0
eVZhbHVlJzonJywKKyAgICB9CispCisKK19CQURfUkVRVUVTVFMgPSAoCisgICAgKCAgIyBIVFRQ
IHJlcXVlc3QKKyAgICAgICAgODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAg
ICAgICAgICdIb3N0Jzond3d3Lmdvb2dsZS5jb20nLAorICAgICAgICAgICAgJ1VzZXItQWdlbnQn
OidNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWCAxMC41OycKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAnIGVuLVVTOyBydjoxLjkuMS4zKSBHZWNrby8yMDA5MDgyNCBG
aXJlZm94LzMuNS4zJworICAgICAgICAgICAgICAgICAgICAgICAgICcgR1RCNiBHVEJBJywKKyAg
ICAgICAgICAgICdBY2NlcHQnOid0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxp
Y2F0aW9uL3htbDtxPTAuOSwnCisgICAgICAgICAgICAgICAgICAgICAnKi8qO3E9MC44JywKKyAg
ICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOidlbi11cyxlbjtxPTAuNScsCisgICAgICAgICAg
ICAnQWNjZXB0LUVuY29kaW5nJzonZ3ppcCxkZWZsYXRlJywKKyAgICAgICAgICAgICdBY2NlcHQt
Q2hhcnNldCc6J0lTTy04ODU5LTEsdXRmLTg7cT0wLjcsKjtxPTAuNycsCisgICAgICAgICAgICAn
S2VlcC1BbGl2ZSc6JzMwMCcsCisgICAgICAgICAgICAnQ29ubmVjdGlvbic6J2tlZXAtYWxpdmUn
LAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAjIE1pc3NpbmcgVXBncmFkZQorICAgICAgICA4
MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ0Nvbm5lY3Rpb24n
OidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAg
ICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0
LVByb3RvY29sJzonc2FtcGxlJywKKyAgICAgICAgfQorICAgICksCisgICAgKCAgIyBXcm9uZyBV
cGdyYWRlCisgICAgICAgIDgwLAorICAgICAgICAnL2RlbW8nLAorICAgICAgICB7CisgICAgICAg
ICAgICAnVXBncmFkZSc6J05vbldlYlNvY2tldCcsCisgICAgICAgICAgICAnQ29ubmVjdGlvbic6
J1VwZ3JhZGUnLAorICAgICAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAgICAgICAg
ICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdXZWJTb2NrZXQt
UHJvdG9jb2wnOidzYW1wbGUnLAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAjIEVtcHR5IFdl
YlNvY2tldC1Qcm90b2NvbAorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAg
eworICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ0Nvbm5l
Y3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAg
ICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAgICAnV2Vi
U29ja2V0LVByb3RvY29sJzonJywKKyAgICAgICAgfQorICAgICksCisgICAgKCAgIyBXcm9uZyBw
b3J0IG51bWJlciBmb3JtYXQKKyAgICAgICAgODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAg
IHsKKyAgICAgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgICAgICdDb25u
ZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tOjB4NTAn
LAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAg
ICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKKyAgICAgICAgfQorICAgICksCisgICAg
KCAgIyBIZWFkZXIvY29ubmVjdGlvbiBwb3J0IG1pc21hdGNoCisgICAgICAgIDgwODAsCisgICAg
ICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0
JywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICAgICAnSG9z
dCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5j
b20nLAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCisgICAgICAg
IH0KKyAgICApLAorICAgICggICMgSWxsZWdhbCBXZWJTb2NrZXQtUHJvdG9jb2wKKyAgICAgICAg
ODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzon
V2ViU29ja2V0JywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCisgICAgICAg
ICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8v
ZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J2lsbGVnYWwg
cHJvdG9jb2wnLAorICAgICAgICB9CisgICAgKSwKKykKKworCitkZWYgX2NyZWF0ZV9yZXF1ZXN0
KHJlcXVlc3RfZGVmKToKKyAgICBjb25uID0gbW9jay5Nb2NrQ29ubignJykKKyAgICBjb25uLmxv
Y2FsX2FkZHIgPSAoJzAuMC4wLjAnLCByZXF1ZXN0X2RlZlswXSkKKyAgICByZXR1cm4gbW9jay5N
b2NrUmVxdWVzdCgKKyAgICAgICAgICAgIHVyaT1yZXF1ZXN0X2RlZlsxXSwKKyAgICAgICAgICAg
IGhlYWRlcnNfaW49cmVxdWVzdF9kZWZbMl0sCisgICAgICAgICAgICBjb25uZWN0aW9uPWNvbm4p
CisKKworY2xhc3MgSGFuZHNoYWtlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0
ZXN0X3ZhbGlkYXRlX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRl
X3Byb3RvY29sKCdzYW1wbGUnKSAgIyBzaG91bGQgc3VjY2VlZC4KKyAgICAgICAgaGFuZHNoYWtl
Ll92YWxpZGF0ZV9wcm90b2NvbCgnU2FtcGxlJykgICMgc2hvdWxkIHN1Y2NlZWQuCisgICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3NhbXBsZSBwcm90b2NvbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IyAiSmFwYW4iIGluIEphcGFuZXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUnXHU2NWU1
XHU2NzJjJykKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0X3BvcnQoc2VsZik6
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVCkKKyAgICAg
ICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisg
ICAgICAgIGhhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KF9HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJy9kZW1vJywgcmVxdWVzdC53c19yZXNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnaHR0cDovL2V4YW1wbGUuY29tJywgcmVxdWVzdC53c19vcmlnaW4pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ3dzOi8vZXhhbXBsZS5jb20vZGVtbycsIHJlcXVlc3Qud3NfbG9jYXRpb24p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wp
CisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfc2VjdXJlX2RlZmF1bHRfcG9ydChzZWxmKToK
KyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ubG9jYWxfYWRkciA9ICgnMC4wLjAuMCcsIDQ0MykKKyAgICAg
ICAgcmVxdWVzdC5pc19odHRwc18gPSBUcnVlCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hh
a2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLnNoYWtl
X2hhbmRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9TRUNVUkUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0
YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzYW1wbGUnLCByZXF1ZXN0LndzX3Byb3Rv
Y29sKQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X25vbmRlZmF1bHRfcG9ydChzZWxmKToK
KyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX05PTkRFRkFV
TFRfUE9SVCkKKyAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVl
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tE
aXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX05PTkRFRkFVTFRfUE9SVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAg
ICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfc2VjdXJlX25vbl9kZWZhdWx0X3BvcnQoc2VsZik6Cisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9OT05ERUZBVUxU
X1BPUlQpCisgICAgICAgIHJlcXVlc3QuaXNfaHR0cHNfID0gVHJ1ZQorICAgICAgICBoYW5kc2hh
a2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFu
ZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVT
UE9OU0VfU0VDVVJFX05PTkRFRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBs
ZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3RfZGVm
YXVsdF9ub19wcm90b2NvbChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVz
dChfR09PRF9SRVFVRVNUX05PX1BST1RPQ09MKQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNo
YWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5zaGFr
ZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfTk9fUFJP
VE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0
ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlcXVlc3Qud3NfcHJv
dG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfb3B0aW9uYWxfaGVhZGVycyhzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX1dJVEhf
T1BUSU9OQUxfSEVBREVSUykKKyAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hh
a2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBVmFsdWUnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3QuaGVhZGVyc19pblsnQUtleSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVyc19pblsnRW1wdHlW
YWx1ZSddKQorCisgICAgZGVmIHRlc3RfYmFkX3JlcXVlc3RzKHNlbGYpOgorICAgICAgICBmb3Ig
cmVxdWVzdCBpbiBtYXAoX2NyZWF0ZV9yZXF1ZXN0LCBfQkFEX1JFUVVFU1RTKToKKyAgICAgICAg
ICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIo
KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJv
ciwgaGFuZHNoYWtlci5zaGFrZV9oYW5kcykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21vY2sucHkgYi9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi41NDI1NTc5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0X21vY2sucHkKQEAgLTAsMCArMSwxMTEgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMg
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMg
ICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP
RiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJUZXN0cyBmb3IgbW9jayBtb2R1
bGUuIiIiCisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRl
c3QKKworaW1wb3J0IG1vY2sKKworCitjbGFzcyBNb2NrQ29ublRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fY29ubiA9IG1vY2suTW9j
a0Nvbm4oJ0FCQ1xyXG5ERUZHXHJcblxyXG5ISUpLJykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5l
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBQkNcclxuJywgc2VsZi5fY29ubi5y
ZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdERUZHXHJcbicsIHNlbGYuX2Nv
bm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHJcbicsIHNlbGYuX2Nv
bm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSElKSycsIHNlbGYuX2Nv
bm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5y
ZWFkbGluZSgpKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnQUJDXHJcbkQnLCBzZWxmLl9jb25uLnJlYWQoNikpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ0VGR1xyXG5cclxuSEknLCBzZWxmLl9jb25uLnJlYWQoOSkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ0pLJywgc2VsZi5fY29ubi5yZWFkKDEwKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5yZWFkKDEwKSkKKworICAgIGRlZiB0ZXN0X3JlYWRf
YW5kX3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBQkNcclxuRCcs
IHNlbGYuX2Nvbm4ucmVhZCg2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRUZHXHJcbics
IHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHJcbkhJ
SksnLCBzZWxmLl9jb25uLnJlYWQoOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNl
bGYuX2Nvbm4ucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAg
ICBzZWxmLl9jb25uLndyaXRlKCdIZWxsb1xyXG4nKQorICAgICAgICBzZWxmLl9jb25uLndyaXRl
KCdXb3JsZFxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsb1xyXG5Xb3JsZFxy
XG4nLCBzZWxmLl9jb25uLndyaXR0ZW5fZGF0YSgpKQorCisKK2NsYXNzIE1vY2tCbG9ja2luZ0Nv
bm5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAg
ICAgICBjbGFzcyBMaW5lUmVhZGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAgICAgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGNvbm4sIHF1ZXVlKToKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcu
VGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fcXVldWUgPSBxdWV1
ZQorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm4gPSBjb25uCisgICAgICAgICAgICAgICAgc2Vs
Zi5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0KCkKKyAgICAgICAg
ICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2Nvbm4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9xdWV1ZS5wdXQoZGF0YSkKKyAgICAgICAgY29ubiA9IG1vY2suTW9ja0Jsb2Nr
aW5nQ29ubigpCisgICAgICAgIHF1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICByZWFkZXIg
PSBMaW5lUmVhZGVyKGNvbm4sIHF1ZXVlKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3MocXVldWUu
ZW1wdHkoKSkKKyAgICAgICAgY29ubi5wdXRfYnl0ZXMoJ0ZvbyBiYXJcclxuJykKKyAgICAgICAg
cmVhZCA9IHF1ZXVlLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0ZvbyBiYXJcclxu
JywgcmVhZCkKKworCitjbGFzcyBNb2NrVGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9kaWN0KHNlbGYpOgorICAgICAgICB0YWJsZSA9IG1vY2su
TW9ja1RhYmxlKHsnS2V5JzonVmFsdWUnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFs
dWUnLCB0YWJsZS5nZXQoJ0tFWScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScs
IHRhYmxlWydrZXknXSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xpc3Qoc2VsZik6Cisg
ICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoWygnS2V5JywgJ1ZhbHVlJyldKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQorCisgICAgZGVmIHRlc3RfY3Jl
YXRlX2Zyb21fdHVwbGUoc2VsZik6CisgICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoKCgn
S2V5JywgJ1ZhbHVlJyksKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJs
ZS5nZXQoJ0tFWScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydr
ZXknXSkKKworICAgIGRlZiB0ZXN0X3NldF9hbmRfZ2V0KHNlbGYpOgorICAgICAgICB0YWJsZSA9
IG1vY2suTW9ja1RhYmxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB0YWJsZS5n
ZXQoJ0tleScpKQorICAgICAgICB0YWJsZVsnS2V5J10gPSAnVmFsdWUnCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLZXknKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ2tleScpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J1ZhbHVlJywgdGFibGVbJ0tleSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScs
IHRhYmxlWydrZXknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsn
S0VZJ10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWlu
KCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0X21zZ3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGRh
MjYzYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVz
dF9tc2d1dGlsLnB5CkBAIC0wLDAgKzEsMTM0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMK
KyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMg
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMg
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiVGVzdHMgZm9yIG1zZ3V0aWwgbW9kdWxlLiIiIgor
CisKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcgICMgVGhp
cyBtdXN0IGJlIGltcG9ydGVkIGJlZm9yZSBtb2RfcHl3ZWJzb2NrZXQuCitmcm9tIG1vZF9weXdl
YnNvY2tldCBpbXBvcnQgbXNndXRpbAorCitpbXBvcnQgbW9jaworCisKK2RlZiBfY3JlYXRlX3Jl
cXVlc3QocmVhZF9kYXRhKToKKyAgICByZXR1cm4gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9u
PW1vY2suTW9ja0Nvbm4ocmVhZF9kYXRhKSkKKworZGVmIF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVz
dCgpOgorICAgIHJldHVybiBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQmxv
Y2tpbmdDb25uKCkpCisKK2NsYXNzIE1lc3NhZ2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICBkZWYgdGVzdF9zZW5kX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRl
X3JlcXVlc3QoJycpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxs
bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBIZWxsb1x4ZmYnLCByZXF1ZXN0LmNv
bm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX21lc3NhZ2VfdW5p
Y29kZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnJykKKyAgICAg
ICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgdSdcdTY1ZTUnKQorICAgICAgICAjIFUr
NjVlNSBpcyBlbmNvZGVkIGFzIGU2LDk3LGE1IGluIFVURi04CisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ1x4MDBceGU2XHg5N1x4YTVceGZmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZl
X21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ1x4MDBI
ZWxsb1x4ZmZceDAwV29ybGQhXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxv
JywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ1dvcmxkIScsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAg
ZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlX3VuaWNvZGUoc2VsZik6CisgICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX3JlcXVlc3QoJ1x4MDBceGU2XHg5Y1x4YWNceGZmJykKKyAgICAgICAgIyBVKzY3
MmMgaXMgZW5jb2RlZCBhcyBlNiw5YyxhYyBpbiBVVEYtOAorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHUnXHU2NzJjJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBk
ZWYgdGVzdF9yZWNlaXZlX21lc3NhZ2VfZGlzY2FyZChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9
IF9jcmVhdGVfcmVxdWVzdCgnXHg4MFx4MDZJR05PUkVceDAwSGVsbG9ceGZmJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnXHgwMURJU1JFR0FSRFx4ZmZceDAwV29ybGQhXHhmZicp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvJywgbXNndXRpbC5yZWNlaXZlX21lc3Nh
Z2UocmVxdWVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1dvcmxkIScsIG1zZ3V0aWwu
cmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorCisgICAgZGVmIHRlc3RfcGF5bG9hZF9sZW5ndGgo
c2VsZik6CisgICAgICAgIGZvciBsZW5ndGgsIGJ5dGVzIGluICgoMCwgJ1x4MDAnKSwgKDB4N2Ys
ICdceDdmJyksICgweDgwLCAnXHg4MVx4MDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgweDEyMzQsICdceDgwXHhhNFx4MzQnKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNndXRpbC5fcGF5bG9h
ZF9sZW5ndGgoX2NyZWF0ZV9yZXF1ZXN0KGJ5dGVzKSkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZl
X2J5dGVzKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdhYmNkZWZn
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgbXNndXRpbC5fcmVjZWl2ZV9ieXRl
cyhyZXF1ZXN0LCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVmZycsIG1zZ3V0aWwu
X3JlY2VpdmVfYnl0ZXMocmVxdWVzdCwgNCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3VudGlsKHNl
bGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdhYmNYZGVmZ1gnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnLCBtc2d1dGlsLl9yZWFkX3VudGlsKHJlcXVlc3Qs
ICdYJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2RlZmcnLCBtc2d1dGlsLl9yZWFkX3Vu
dGlsKHJlcXVlc3QsICdYJykpCisKKworY2xhc3MgTWVzc2FnZVJlY2VpdmVyVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcXVldWUoc2VsZik6CisgICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQorICAgICAgICByZWNlaXZlciA9IG1zZ3V0aWwu
TWVzc2FnZVJlY2VpdmVyKHJlcXVlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25l
LCByZWNlaXZlci5yZWNlaXZlX25vd2FpdCgpKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi5wdXRfYnl0ZXMoJ1x4MDBIZWxsbyFceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
SGVsbG8hJywgcmVjZWl2ZXIucmVjZWl2ZSgpKQorCisgICAgZGVmIHRlc3Rfb25tZXNzYWdlKHNl
bGYpOgorICAgICAgICBvbm1lc3NhZ2VfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIGRl
ZiBvbm1lc3NhZ2VfaGFuZGxlcihtZXNzYWdlKToKKyAgICAgICAgICAgIG9ubWVzc2FnZV9xdWV1
ZS5wdXQobWVzc2FnZSkKKworICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1
ZXN0KCkKKyAgICAgICAgcmVjZWl2ZXIgPSBtc2d1dGlsLk1lc3NhZ2VSZWNlaXZlcihyZXF1ZXN0
LCBvbm1lc3NhZ2VfaGFuZGxlcikKKworICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5
dGVzKCdceDAwSGVsbG8hXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hlbGxvIScs
IG9ubWVzc2FnZV9xdWV1ZS5nZXQoKSkKKworCitjbGFzcyBNZXNzYWdlU2VuZGVyVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKKyAgICAgICAgcmVxdWVz
dCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgpCisgICAgICAgIHNlbmRlciA9IG1zZ3V0aWwu
TWVzc2FnZVNlbmRlcihyZXF1ZXN0KQorCisgICAgICAgIHNlbmRlci5zZW5kKCdXb3JsZCcpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBXb3JsZFx4ZmYnLCByZXF1ZXN0LmNvbm5lY3Rp
b24ud3JpdHRlbl9kYXRhKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kX25vd2FpdChzZWxmKToKKyAg
ICAgICAgIyBVc2UgYSBxdWV1ZSB0byBjaGVjayB0aGUgYnl0ZXMgd3JpdHRlbiBieSBNZXNzYWdl
U2VuZGVyLgorICAgICAgICAjIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSBjYW5u
b3QgYmUgdXNlZCBoZXJlIGJlY2F1c2UKKyAgICAgICAgIyBNZXNzYWdlU2VuZGVyIHJ1bnMgaW4g
YSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgIHNlbmRfcXVldWUgPSBRdWV1ZS5RdWV1ZSgpCisg
ICAgICAgIGRlZiB3cml0ZShieXRlcyk6CisgICAgICAgICAgICBzZW5kX3F1ZXVlLnB1dChieXRl
cykKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgpCisgICAgICAg
IHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSA9IHdyaXRlCisKKyAgICAgICAgc2VuZGVyID0gbXNn
dXRpbC5NZXNzYWdlU2VuZGVyKHJlcXVlc3QpCisKKyAgICAgICAgc2VuZGVyLnNlbmRfbm93YWl0
KCdIZWxsbycpCisgICAgICAgIHNlbmRlci5zZW5kX25vd2FpdCgnV29ybGQnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdceDAwSGVsbG9ceGZmJywgc2VuZF9xdWV1ZS5nZXQoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFdvcmxkXHhmZicsIHNlbmRfcXVldWUuZ2V0KCkpCisK
KworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisj
IHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvdGVzdF91dGlsLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3V0aWwu
cHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjYyYzQxNQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF91dGlsLnB5CkBAIC0w
LDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOSBH
b29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KworCisiIiJUZXN0cyBmb3IgdXRpbCBtb2R1bGUuIiIiCisKKworaW1wb3J0IHVuaXR0ZXN0CisK
K2ltcG9ydCBjb25maWcgICMgVGhpcyBtdXN0IGJlIGltcG9ydGVkIGJlZm9yZSBtb2RfcHl3ZWJz
b2NrZXQuCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorCisKK2NsYXNzIFV0aWxU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZXRfc3RhY2tfdHJhY2Uoc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ05vbmVcbicsIHV0aWwuZ2V0X3N0YWNrX3Ry
YWNlKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEgPSAxIC8gMCAgIyBJbnRlbnRpb25h
bGx5IHJhaXNlIGV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAg
ICAgdHJhY2UgPSB1dGlsLmdldF9zdGFja190cmFjZSgpCisgICAgICAgICAgICBzZWxmLmZhaWxV
bmxlc3ModHJhY2Uuc3RhcnRzd2l0aCgnVHJhY2ViYWNrJykpCisgICAgICAgICAgICBzZWxmLmZh
aWxVbmxlc3ModHJhY2UuZmluZCgnWmVyb0RpdmlzaW9uRXJyb3InKSAhPSAtMSkKKworCitpZiBf
X25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3Rz
PTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
ZGF0YS9oYW5kbGVycy9hX3dzaC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVz
dGRhdGEvaGFuZGxlcnMvYV93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MC4uZGM4ZWZjMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvdGVzdGRhdGEvaGFuZGxlcnMvYV93c2gucHkKQEAgLTAsMCArMSwyNyBAQAorIyBDb3B5cmln
aHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu
c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAor
IyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
TGljZW5zZS4KKworCitkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KToKKyAgICBp
ZiByZXF1ZXN0LndzX29yaWdpbiA9PSAnaHR0cDovL2V4YW1wbGUuY29tJzoKKyAgICAgICAgcmV0
dXJuCisgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hY2NlcHRhYmxlIG9yaWdpbjogJXInICUgcmVx
dWVzdC53c19vcmlnaW4pCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0
KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ2Ffd3NoLnB5IGlzIGNhbGxlZCBmb3Ig
JXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291
cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYl93
c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2Jf
d3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2YTM2YzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRs
ZXJzL2Jfd3NoLnB5CkBAIC0wLDAgKzEsMTYgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIElu
Yy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
CisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIyBp
bnRlbnRpb25hbGx5IGxlZnQgYmxhbmsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Nfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvY193c2gucHkKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWE4YTc0ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Nfd3NoLnB5CkBA
IC0wLDAgKzEsMjQgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisj
CisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisj
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiTm9uLWNhbGxhYmxlIGhh
bmRsZXJzLgorIiIiCisKKword2ViX3NvY2tldF9zaGFrZV9oYW5kcyA9IFRydWUKK3dlYl9zb2Nr
ZXRfdHJhbnNmZXJfZGF0YSA9IDEKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2QucHkg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9kLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzOTFmNmYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1
Yi9kLnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMK
KyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g
aW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9S
IENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiQ29ycmVj
dCBzaWduYXR1cmVzLCB3cm9uZyBmaWxlIG5hbWUuCisiIiIKKworCitkZWYgd2ViX3NvY2tldF9z
aGFrZV9oYW5kcyhyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNm
ZXJfZGF0YShyZXF1ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ3N1Yi9kLnB5
IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChy
ZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00
IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvc3ViL2Vfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90
ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZV93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uMjNiN2IzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Vfd3NoLnB5CkBAIC0wLDAgKzEsMjUgQEAK
KyMgQ29weXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMg
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMg
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisKKworZGVmIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMocmVxdWVz
dCk6CisgICAgcmV0dXJuIFRydWUKKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJl
cXVlc3QpOgorICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnc3ViL2Vfd3NoLnB5IGlzIGNh
bGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0
LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvc3ViL2Zfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0
YS9oYW5kbGVycy9zdWIvZl93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MC4uOGIwZGE0MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Zfd3NoLnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29w
eXJpZ2h0IDIwMDkgR29vZ2xlIEluYy4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
UywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCisKKworIiIiRXhjZXB0aW9uIGluIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0
YSgpLgorIiIiCisKKworZGVmIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMocmVxdWVzdCk6CisgICAg
cGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmFp
c2UgRXhjZXB0aW9uKCdJbnRlbnRpb25hbCBFeGNlcHRpb24gZm9yICVzLCAlcycgJQorICAgICAg
ICAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkp
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9nX3dzaC5weSBiL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2dfd3NoLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0MWUwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9nX3dzaC5weQpA
QCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAyMDA5IEdvb2dsZSBJbmMuCisjCisjIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
IworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIwor
IyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIldyb25nIHdlYl9zb2Nr
ZXRfc2hha2VfaGFuZHMgc2lnbmF0dXJlLgorIiIiCisKKworZGVmIG5vX3dlYl9zb2NrZXRfc2hh
a2VfaGFuZHMocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVy
X2RhdGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdzdWIvZ193c2gu
cHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQorCisKKyMgdmk6c3Rz
PTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
ZGF0YS9oYW5kbGVycy9zdWIvaF93c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0
L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9oX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi5hOGNjOGM1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvaF93c2gucHkKQEAgLTAsMCArMSwyOSBA
QAorIyBDb3B5cmlnaHQgMjAwOSBHb29nbGUgSW5jLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUg
QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBu
b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgor
IyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVp
cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQor
IyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiJXcm9uZyB3ZWJfc29ja2V0X3RyYW5zZmVyX2Rh
dGEoKSBzaWduYXR1cmUuCisiIiIKKworCitkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1
ZXN0KToKKyAgICBwYXNzCisKKworZGVmIG5vX3dlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1
ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ3N1Yi9oX3dzaC5weSBpcyBjYWxs
ZWQgZm9yICVzLCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC53
c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkpCisKKworIyB2aTpzdHM9NCBzdz00IGV0
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40493</attachid>
            <date>2009-10-01 19:38:04 -0700</date>
            <delta_ts>2009-10-06 02:50:48 -0700</delta_ts>
            <desc>add mod_pywebsocket to test Web Sockets</desc>
            <filename>bug-27490-20091002113802.patch</filename>
            <type>text/plain</type>
            <size>112067</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmOTkyOGQ3Li42NDVkMWFjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDktMTAt
MDEgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtb2RfcHl3ZWJzb2NrZXQgdG8gdGVz
dCBXZWIgU29ja2V0cy4KKyAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5d2Vic29j
a2V0LworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0
OTAKKworICAgICAgICAqIHB5d2Vic29ja2V0L0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAqIHB5
d2Vic29ja2V0L01BTklGRVNULmluOiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9SRUFE
TUU6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQucHk6
IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L2V4YW1wbGUvZWNob193c2gucHk6IEFkZGVk
LgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weTogQWRk
ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFy
c2VyaGFuZGxlci5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29j
a2V0L21zZ3V0aWwucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9zdGFuZGFsb25lLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3
ZWJzb2NrZXQvdXRpbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvc2V0dXAucHk6
IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBweXdlYnNvY2tldC90ZXN0L21vY2sucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vi
c29ja2V0L3Rlc3QvcnVuX2FsbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0X2Rpc3BhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rl
c3RfaGFuZHNoYWtlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3Rf
bW9jay5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwu
cHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF91dGlsLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2Ffd3NoLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2Jf
d3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRs
ZXJzL3N1Yi9jX3dzaC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
ZGF0YS9oYW5kbGVycy9zdWIvZC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZV93c2gucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vi
c29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Zfd3NoLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9nX3dzaC5weTogQWRk
ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvaF93
c2gucHk6IEFkZGVkLgorCiAyMDA5LTA5LTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSdWJiZXJzdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9DT1BZSU5HIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlkNTJk
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvQ09QWUlORwpAQCAt
MCwwICsxLDI4IEBACitDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KK0FsbCByaWdodHMgcmVz
ZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC9NQU5JRkVTVC5pbiBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L01BTklG
RVNULmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MjU2ODgKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9NQU5JRkVTVC5pbgpAQCAtMCww
ICsxLDYgQEAKK2luY2x1ZGUgQ09QWUlORworaW5jbHVkZSBNQU5JRkVTVC5pbgoraW5jbHVkZSBS
RUFETUUKK3JlY3Vyc2l2ZS1pbmNsdWRlIGV4YW1wbGUgKi5weQorcmVjdXJzaXZlLWluY2x1ZGUg
bW9kX3B5d2Vic29ja2V0ICoucHkKK3JlY3Vyc2l2ZS1pbmNsdWRlIHRlc3QgKi5weQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVBRE1FIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWYwNWYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9SRUFETUUKQEAgLTAs
MCArMSw2IEBACitJbnN0YWxsIHRoaXMgcGFja2FnZSBieToKKyQgcHl0aG9uIHNldHVwLnB5IGJ1
aWxkCiskIHN1ZG8gcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKKworVGhlbiByZWFkIGRvY3VtZW50
IGJ5OgorJCBweWRvYyBtb2RfcHl3ZWJzb2NrZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC9leGFtcGxlL2VjaG9fY2xpZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAuLmE0MzhjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9l
eGFtcGxlL2VjaG9fY2xpZW50LnB5CkBAIC0wLDAgKzEsMTgzIEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldlYiBTb2NrZXQgRWNobyBjbGllbnQu
CisKK1RoaXMgaXMgYW4gZXhhbXBsZSBXZWIgU29ja2V0IGNsaWVudCB0aGF0IHRhbGtzIHdpdGgg
ZWNob193c2gucHkuCitUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIG1vZF9weXdlYnNv
Y2tldCBpbnN0YWxsYXRpb24uCisKK05vdGU6CitUaGlzIGNvZGUgaXMgZmFyIGZyb20gcm9idXN0
LCBlLmcuLCB3ZSBjdXQgY29ybmVycyBpbiBoYW5kc2hha2UuCisiIiIKKworCitpbXBvcnQgY29k
ZWNzCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2ltcG9ydCBzb2NrZXQKK2lt
cG9ydCBzeXMKKworCitfREVGQVVMVF9QT1JUID0gODAKK19ERUZBVUxUX1NFQ1VSRV9QT1JUID0g
NDQzCitfVU5ERUZJTkVEX1BPUlQgPSAtMQorCisKK2NsYXNzIF9UTFNTb2NrZXQob2JqZWN0KToK
KyAgICAiIiJXcmFwcGVyIGZvciBhIFRMUyBjb25uZWN0aW9uLiIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHJhd19zb2NrZXQpOgorICAgICAgICBzZWxmLl9zc2wgPSBzb2NrZXQuc3NsKHJh
d19zb2NrZXQpCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6CisgICAgICAgIHJldHVybiBz
ZWxmLl9zc2wud3JpdGUoYnl0ZXMpCisKKyAgICBkZWYgcmVjdihzZWxmLCBzaXplPS0xKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3NzbC5yZWFkKHNpemUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6
CisgICAgICAgICMgTm90aGluZyB0byBkby4KKyAgICAgICAgcGFzcworCisKK2NsYXNzIEVjaG9D
bGllbnQob2JqZWN0KToKKyAgICAiIiJXZWIgU29ja2V0IGVjaG8gY2xpZW50LiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0
aW9ucworICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCisKKyAgICBkZWYgcnVuKHNlbGYpOgor
ICAgICAgICAiIiJSdW4gdGhlIGNsaWVudC4KKworICAgICAgICBTaGFrZSBoYW5kcyBhbmQgdGhl
biByZXBlYXQgc2VuZGluZyBtZXNzYWdlIGFuZCByZWNlaXZpbmcgaXRzIGVjaG8uCisgICAgICAg
ICIiIgorICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNvbm5lY3QoKHNlbGYuX29wdGlvbnMuc2VydmVy
X2hvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5z
ZXJ2ZXJfcG9ydCkpCisgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV90bHM6CisgICAg
ICAgICAgICAgICAgc2VsZi5fc29ja2V0ID0gX1RMU1NvY2tldChzZWxmLl9zb2NrZXQpCisgICAg
ICAgICAgICBzZWxmLl9oYW5kc2hha2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5f
b3B0aW9ucy5tZXNzYWdlLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAgZnJhbWUgPSAnXHgw
MCcgKyBsaW5lLmVuY29kZSgndXRmLTgnKSArICdceGZmJworICAgICAgICAgICAgICAgIHNlbGYu
X3NvY2tldC5zZW5kKGZyYW1lKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVy
Ym9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1NlbmQ6ICVzJyAlIGxpbmUKKyAgICAg
ICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KGxlbihmcmFtZSkpCisgICAg
ICAgICAgICAgICAgaWYgcmVjZWl2ZWQgIT0gZnJhbWU6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignSW5jb3JyZWN0IGVjaG86ICVyJyAlIHJlY2VpdmVkKQorICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnQgJ1JlY3Y6ICVzJyAlIHJlY2VpdmVkWzE6LTFdLmRlY29kZSgndXRmLTgnKQorICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKKworICAgIGRlZiBfaGFu
ZHNoYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZCgKKyAgICAgICAgICAgICAg
ICAnR0VUICVzIEhUVFAvMS4xXHJcbicgJSBzZWxmLl9vcHRpb25zLnJlc291cmNlKQorICAgICAg
ICBzZWxmLl9zb2NrZXQuc2VuZCgnVXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgICAgIHNl
bGYuX3NvY2tldC5zZW5kKCdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicpCisgICAgICAgIHNlbGYu
X3NvY2tldC5zZW5kKHNlbGYuX2Zvcm1hdF9ob3N0X2hlYWRlcigpKQorICAgICAgICBzZWxmLl9z
b2NrZXQuc2VuZCgKKyAgICAgICAgICAgICAgICAnT3JpZ2luOiAlc1xyXG4nICUgc2VsZi5fb3B0
aW9ucy5vcmlnaW4pCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKCdcclxuJykKKworICAgICAg
ICBmb3IgZXhwZWN0ZWRfY2hhciBpbiAoCisgICAgICAgICAgICAgICAgJ0hUVFAvMS4xIDEwMSBX
ZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgICAgICAgICAgICAgJ1VwZ3Jh
ZGU6IFdlYlNvY2tldFxyXG4nCisgICAgICAgICAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJyk6CisgICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCisg
ICAgICAgICAgICBpZiBleHBlY3RlZF9jaGFyICE9IHJlY2VpdmVkOgorICAgICAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbignSGFuZHNoYWtlIGZhaWx1cmUnKQorICAgICAgICAjIFdlIGN1dCBj
b3JuZXJzIGFuZCBza2lwIG90aGVyIGhlYWRlcnMuCisgICAgICAgIHNlbGYuX3NraXBfaGVhZGVy
cygpCisKKyAgICBkZWYgX3NraXBfaGVhZGVycyhzZWxmKToKKyAgICAgICAgdGVybWluYXRvciA9
ICdcclxuXHJcbicKKyAgICAgICAgcG9zID0gMAorICAgICAgICB3aGlsZSBwb3MgPCBsZW4odGVy
bWluYXRvcik6CisgICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBd
CisgICAgICAgICAgICBpZiByZWNlaXZlZCA9PSB0ZXJtaW5hdG9yW3Bvc106CisgICAgICAgICAg
ICAgICAgcG9zICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG9zID0g
MAorCisgICAgZGVmIF9mb3JtYXRfaG9zdF9oZWFkZXIoc2VsZik6CisgICAgICAgIGhvc3QgPSAn
SG9zdDogJyArIHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QKKyAgICAgICAgaWYgKChub3Qgc2Vs
Zi5fb3B0aW9ucy51c2VfdGxzIGFuZAorICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVy
X3BvcnQgIT0gX0RFRkFVTFRfUE9SVCkgb3IKKyAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLnVz
ZV90bHMgYW5kCisgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCAhPSBfREVG
QVVMVF9TRUNVUkVfUE9SVCkpOgorICAgICAgICAgICAgaG9zdCArPSAnOicgKyBzdHIoc2VsZi5f
b3B0aW9ucy5zZXJ2ZXJfcG9ydCkKKyAgICAgICAgaG9zdCArPSAnXHJcbicKKyAgICAgICAgcmV0
dXJuIGhvc3QKKworCitkZWYgbWFpbigpOgorICAgIHN5cy5zdGRvdXQgPSBjb2RlY3MuZ2V0d3Jp
dGVyKCd1dGYtOCcpKHN5cy5zdGRvdXQpCisKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQor
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNlcnZlcl9ob3N0JywgZGVzdD0nc2VydmVy
X2hvc3QnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2xv
Y2FsaG9zdCcsIGhlbHA9J3NlcnZlciBob3N0JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXAn
LCAnLS1zZXJ2ZXJfcG9ydCcsIGRlc3Q9J3NlcnZlcl9wb3J0JywgdHlwZT0naW50JywKKyAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PV9VTkRFRklORURfUE9SVCwgaGVscD0nc2VydmVyIHBv
cnQnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW9yaWdpbicsIGRlc3Q9J29yaWdp
bicsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0naHR0cDov
L2xvY2FsaG9zdC8nLCBoZWxwPSdvcmlnaW4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcics
ICctLXJlc291cmNlJywgZGVzdD0ncmVzb3VyY2UnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Jy9lY2hvJywgaGVscD0ncmVzb3VyY2UgcGF0aCcpCisgICAg
cGFyc2VyLmFkZF9vcHRpb24oJy1tJywgJy0tbWVzc2FnZScsIGRlc3Q9J21lc3NhZ2UnLCB0eXBl
PSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NvbW1hLXNlcGFyYXRlZCBt
ZXNzYWdlcyB0byBzZW5kJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcs
IGRlc3Q9J3ZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PVRydWUsIGhlbHA9J3N1cHByZXNzIG1lc3NhZ2VzJykKKyAgICBwYXJzZXIu
YWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90
cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExT
ICh3c3M6Ly8pJykKKyAgICAob3B0aW9ucywgXykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAg
ICAjIERlZmF1bHQgcG9ydCBudW1iZXIgZGVwZW5kcyBvbiB3aGV0aGVyIFRMUyBpcyB1c2VkLgor
ICAgIGlmIG9wdGlvbnMuc2VydmVyX3BvcnQgPT0gX1VOREVGSU5FRF9QT1JUOgorICAgICAgICBp
ZiBvcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICBvcHRpb25zLnNlcnZlcl9wb3J0ID0gX0RF
RkFVTFRfU0VDVVJFX1BPUlQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMuc2Vy
dmVyX3BvcnQgPSBfREVGQVVMVF9QT1JUCisKKyAgICAjIG9wdHBhcnNlIGRvZXNuJ3Qgc2VlbSB0
byBoYW5kbGUgbm9uLWFzY2lpIGRlZmF1bHQgdmFsdWVzLgorICAgICMgU2V0IGRlZmF1bHQgbWVz
c2FnZSBoZXJlLgorICAgIGlmIG5vdCBvcHRpb25zLm1lc3NhZ2U6CisgICAgICAgIG9wdGlvbnMu
bWVzc2FnZSA9IHUnSGVsbG8sXHU2NWU1XHU2NzJjJyAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQor
CisgICAgRWNob0NsaWVudChvcHRpb25zKS5ydW4oKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgbWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5IGIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi5kMDU2OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAy
MDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorCisKK2RlZiB3ZWJf
c29ja2V0X3NoYWtlX2hhbmRzKHJlcXVlc3QpOgorICAgIHBhc3MgICMgYWx3YXlzIGFjY2VwdAor
CisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVjZWl2ZXIg
PSBtc2d1dGlsLk1lc3NhZ2VSZWNlaXZlcihyZXF1ZXN0KQorICAgIHNlbmRlciA9IG1zZ3V0aWwu
TWVzc2FnZVNlbmRlcihyZXF1ZXN0KQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGxpbmUgPSBy
ZWNlaXZlci5yZWNlaXZlKCkKKyAgICAgICAgc2VuZGVyLnNlbmQobGluZSkKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdl
YnNvY2tldC9fX2luaXRfXy5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOWNi
ODZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdv
b2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
KyIiIldlYiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIuCisKK21vZF9w
eXdlYnNvY2tldCBpcyBhIFdlYiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2
ZXIKK2ludGVuZGVkIGZvciB0ZXN0aW5nIG9yIGV4cGVyaW1lbnRhbCBwdXJwb3Nlcy4gbW9kX3B5
dGhvbiBpcyByZXF1aXJlZC4KKworSW5zdGFsbGF0aW9uOgorCiswLiBQcmVwYXJlIGFuIEFwYWNo
ZSBIVFRQIFNlcnZlciBmb3Igd2hpY2ggbW9kX3B5dGhvbiBpcyBlbmFibGVkLgorCisxLiBTcGVj
aWZ5IHRoZSBmb2xsb3dpbmcgQXBhY2hlIEhUVFAgU2VydmVyIGRpcmVjdGl2ZXMgdG8gc3VpdCB5
b3VyCisgICBjb25maWd1cmF0aW9uLgorCisgICBJZiBtb2RfcHl3ZWJzb2NrZXQgaXMgbm90IGlu
IHRoZSBQeXRob24gcGF0aCwgc3BlY2lmeSB0aGUgZm9sbG93aW5nLgorICAgPHdlYnNvY2tfbGli
PiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIG1vZF9weXdlYnNvY2tldCBpcyBpbnN0YWxsZWQuCisK
KyAgICAgICBQeXRob25QYXRoICJzeXMucGF0aCtbJzx3ZWJzb2NrX2xpYj4nXSIKKworICAgQWx3
YXlzIHNwZWNpZnkgdGhlIGZvbGxvd2luZy4gPHdlYnNvY2tfaGFuZGxlcnM+IGlzIHRoZSBkaXJl
Y3Rvcnkgd2hlcmUKKyAgIHVzZXItd3JpdHRlbiBXZWIgU29ja2V0IGhhbmRsZXJzIGFyZSBwbGFj
ZWQuCisKKyAgICAgICBQeXRob25PcHRpb24gbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCA8
d2Vic29ja19oYW5kbGVycz4KKyAgICAgICBQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVyIG1vZF9w
eXdlYnNvY2tldC5oZWFkZXJwYXJzZXJoYW5kbGVyCisKKyAgIEV4YW1wbGUgc25pcHBldCBvZiBo
dHRwZC5jb25mOgorICAgKG1vZF9weXdlYnNvY2tldCBpcyBpbiAvd2Vic29ja19saWIsIFdlYiBT
b2NrZXQgaGFuZGxlcnMgYXJlIGluCisgICAvd2Vic29ja19oYW5kbGVycywgcG9ydCBpcyA4MCBm
b3Igd3MsIDQ0MyBmb3Igd3NzLikKKworICAgICAgIDxJZk1vZHVsZSBweXRob25fbW9kdWxlPgor
ICAgICAgICAgUHl0aG9uUGF0aCAic3lzLnBhdGgrWycvd2Vic29ja19saWInXSIKKyAgICAgICAg
IFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuaGFuZGxlcl9yb290IC93ZWJzb2NrX2hhbmRs
ZXJzCisgICAgICAgICBQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVyIG1vZF9weXdlYnNvY2tldC5o
ZWFkZXJwYXJzZXJoYW5kbGVyCisgICAgICAgPC9JZk1vZHVsZT4KKworV3JpdGluZyBXZWIgU29j
a2V0IGhhbmRsZXJzOgorCitXaGVuIGEgV2ViIFNvY2tldCByZXF1ZXN0IGNvbWVzIGluLCB0aGUg
cmVzb3VyY2UgbmFtZQorc3BlY2lmaWVkIGluIHRoZSBoYW5kc2hha2UgaXMgY29uc2lkZXJlZCBh
cyBpZiBpdCBpcyBhIGZpbGUgcGF0aCB1bmRlcgorPHdlYnNvY2tfaGFuZGxlcnM+IGFuZCB0aGUg
aGFuZGxlciBkZWZpbmVkIGluCis8d2Vic29ja19oYW5kbGVycz4vPHJlc291cmNlX25hbWU+X3dz
aC5weSBpcyBpbnZva2VkLgorCitGb3IgZXhhbXBsZSwgaWYgdGhlIHJlc291cmNlIG5hbWUgaXMg
L2V4YW1wbGUvY2hhdCwgdGhlIGhhbmRsZXIgZGVmaW5lZCBpbgorPHdlYnNvY2tfaGFuZGxlcnM+
L2V4YW1wbGUvY2hhdF93c2gucHkgaXMgaW52b2tlZC4KKworQSBXZWIgU29ja2V0IGhhbmRsZXIg
aXMgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zOgorCisgICAgd2ViX3Nv
Y2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KQorICAgIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShy
ZXF1ZXN0KQorCit3aGVyZToKKyAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisKK3dl
Yl9zb2NrZXRfc2hha2VfaGFuZHMgaXMgY2FsbGVkIGR1cmluZyB0aGUgaGFuZHNoYWtlIGFmdGVy
IHRoZSBoZWFkZXJzCithcmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbmQgV2ViIFNvY2tldCBwcm9w
ZXJ0aWVzICh3c19sb2NhdGlvbiwKK3dzX29yaWdpbiwgd3NfcHJvdG9jb2wsIGFuZCB3c19yZXNv
dXJjZSkgYXJlIGFkZGVkIHRvIHJlcXVlc3QuCitBIGhhbmRsZXIgY2FuIHJlamVjdCB0aGUgcmVx
dWVzdCBieSByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKword2ViX3NvY2tldF90cmFuc2Zlcl9kYXRh
IGlzIGNhbGxlZCBhZnRlciB0aGUgaGFuZHNoYWtlIGNvbXBsZXRlZAorc3VjY2Vzc2Z1bGx5LiBB
IGhhbmRsZXIgY2FuIHJlY2VpdmUvc2VuZCBtZXNzYWdlcyBmcm9tL3RvIHRoZSBjbGllbnQKK3Vz
aW5nIHJlcXVlc3QuIG1vZF9weXdlYnNvY2tldC5tc2d1dGlsIG1vZHVsZSBwcm92aWRlcyB1dGls
aXRpZXMKK2ZvciBkYXRhIHRyYW5zZmVyLgorIiIiCisKKworIyB2aTpzdHM9NCBzdz00IGV0IHR3
PTcyCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQv
ZGlzcGF0Y2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlz
cGF0Y2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGNhOGM3MAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9k
aXNwYXRjaC5weQpAQCAtMCwwICsxLDE3NSBAQAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIElu
Yy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiRGlz
cGF0Y2ggV2ViIFNvY2tldCByZXF1ZXN0LgorIiIiCisKKworaW1wb3J0IG9zCitpbXBvcnQgcmUK
KworaW1wb3J0IHV0aWwKKworCitfU09VUkNFX1BBVEhfUEFUVEVSTiA9IHJlLmNvbXBpbGUocico
P2kpX3dzaFwucHkkJykKK19TT1VSQ0VfU1VGRklYID0gJ193c2gucHknCitfU0hBS0VfSEFORFNf
SEFORExFUl9OQU1FID0gJ3dlYl9zb2NrZXRfc2hha2VfaGFuZHMnCitfVFJBTlNGRVJfREFUQV9I
QU5ETEVSX05BTUUgPSAnd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhJworCisKK2NsYXNzIERpc3Bh
dGNoRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gaW4gZGlzcGF0Y2hpbmcgV2Vi
IFNvY2tldCByZXF1ZXN0LiIiIgorCisgICAgcGFzcworCisKK2RlZiBfcGF0aF90b19yZXNvdXJj
ZV9jb252ZXJ0ZXIoYmFzZV9kaXIpOgorICAgIGJhc2VfZGlyID0gb3MucGF0aC5ub3JtcGF0aChi
YXNlX2RpcikucmVwbGFjZSgnXFwnLCAnLycpCisgICAgYmFzZV9sZW4gPSBsZW4oYmFzZV9kaXIp
CisgICAgc3VmZml4X2xlbiA9IGxlbihfU09VUkNFX1NVRkZJWCkKKyAgICBkZWYgY29udmVydGVy
KHBhdGgpOgorICAgICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aChfU09VUkNFX1NVRkZJWCk6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChw
YXRoKS5yZXBsYWNlKCdcXCcsICcvJykKKyAgICAgICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aChi
YXNlX2Rpcik6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gcGF0aFti
YXNlX2xlbjotc3VmZml4X2xlbl0KKyAgICByZXR1cm4gY29udmVydGVyCisKKworZGVmIF9zb3Vy
Y2VfZmlsZV9wYXRocyhkaXJlY3RvcnkpOgorICAgICIiIllpZWxkIFdlYiBTb2NrZXQgSGFuZGxl
ciBzb3VyY2UgZmlsZSBuYW1lcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgorCisgICAgZm9y
IHJvb3QsIHVudXNlZF9kaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6CisgICAgICAg
IGZvciBiYXNlIGluIGZpbGVzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290
LCBiYXNlKQorICAgICAgICAgICAgaWYgX1NPVVJDRV9QQVRIX1BBVFRFUk4uc2VhcmNoKHBhdGgp
OgorICAgICAgICAgICAgICAgIHlpZWxkIHBhdGgKKworCitkZWYgX3NvdXJjZShzb3VyY2Vfc3Ry
KToKKyAgICAiIiJTb3VyY2UgYSBoYW5kbGVyIGRlZmluaXRpb24gc3RyaW5nLiIiIgorCisgICAg
Z2xvYmFsX2RpYyA9IHt9CisgICAgdHJ5OgorICAgICAgICBleGVjIHNvdXJjZV9zdHIgaW4gZ2xv
YmFsX2RpYworICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJhaXNlIERpc3BhdGNoRXJy
b3IoJ0Vycm9yIGluIHNvdXJjaW5nIGhhbmRsZXI6JyArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICByZXR1cm4gKF9leHRyYWN0X2hhbmRs
ZXIoZ2xvYmFsX2RpYywgX1NIQUtFX0hBTkRTX0hBTkRMRVJfTkFNRSksCisgICAgICAgICAgICBf
ZXh0cmFjdF9oYW5kbGVyKGdsb2JhbF9kaWMsIF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSkp
CisKKworZGVmIF9leHRyYWN0X2hhbmRsZXIoZGljLCBuYW1lKToKKyAgICBpZiBuYW1lIG5vdCBp
biBkaWM6CisgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBkZWZpbmVkLicg
JSBuYW1lKQorICAgIGhhbmRsZXIgPSBkaWNbbmFtZV0KKyAgICBpZiBub3QgY2FsbGFibGUoaGFu
ZGxlcik6CisgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBjYWxsYWJsZS4n
ICUgbmFtZSkKKyAgICByZXR1cm4gaGFuZGxlcgorCisKK2NsYXNzIERpc3BhdGNoZXIob2JqZWN0
KToKKyAgICAiIiJEaXNwYXRjaGVzIFdlYiBTb2NrZXQgcmVxdWVzdHMuCisKKyAgICBUaGlzIGNs
YXNzIG1haW50YWlucyBhIG1hcCBmcm9tIHJlc291cmNlIG5hbWUgdG8gaGFuZGxlcnMuCisgICAg
IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdF9kaXIpOgorICAgICAgICAiIiJDb25z
dHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJvb3RfZGly
OiBUaGUgZGlyZWN0b3J5IHdoZXJlIGhhbmRsZXIgZGVmaW5pdGlvbiBmaWxlcyBhcmUKKyAgICAg
ICAgICAgIHBsYWNlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5faGFuZGxlcnMgPSB7
fQorICAgICAgICBzZWxmLl9zb3VyY2Vfd2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLl9zb3Vy
Y2VfZmlsZXNfaW5fZGlyKHJvb3RfZGlyKQorCisgICAgZGVmIHNvdXJjZV93YXJuaW5ncyhzZWxm
KToKKyAgICAgICAgIiIiUmV0dXJuIHdhcm5pbmdzIGluIHNvdXJjaW5nIGhhbmRsZXJzLiIiIgor
CisgICAgICAgIHJldHVybiBzZWxmLl9zb3VyY2Vfd2FybmluZ3MKKworICAgIGRlZiBzaGFrZV9o
YW5kcyhzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiSG9vayBpbnRvIFdlYiBTb2NrZXQgaGFu
ZHNoYWtlLgorCisgICAgICAgIFNlbGVjdCBhIGhhbmRsZXIgYmFzZWQgb24gcmVxdWVzdC51cmkg
YW5kIGNhbGwgaXRzCisgICAgICAgIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMgZnVuY3Rpb24uCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4K
KyAgICAgICAgIiIiCisKKyAgICAgICAgc2hha2VfaGFuZHNfLCBfID0gc2VsZi5faGFuZGxlcihy
ZXF1ZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaGFrZV9oYW5kc18ocmVxdWVzdCkK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJy
b3IoJ3NoYWtlX2hhbmRzKCkgcmFpc2VkIGV4Y2VwdGlvbjogJyArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisKKyAgICBkZWYgdHJhbnNm
ZXJfZGF0YShzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiTGV0IGEgaGFuZGxlciB0cmFuc2Zl
cl9kYXRhIHdpdGggYSBXZWIgU29ja2V0IGNsaWVudC4KKworICAgICAgICBTZWxlY3QgYSBoYW5k
bGVyIGJhc2VkIG9uIHJlcXVlc3Qud3NfcmVzb3VyY2UgYW5kIGNhbGwgaXRzCisgICAgICAgIHdl
Yl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBmdW5jdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAiIiIKKworICAgICAg
ICBfLCB0cmFuc2Zlcl9kYXRhXyA9IHNlbGYuX2hhbmRsZXIocmVxdWVzdCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgdHJhbnNmZXJfZGF0YV8ocmVxdWVzdCkKKyAgICAgICAgZXhjZXB0IEV4
Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ3RyYW5zZmVyX2RhdGEo
KSByYWlzZWQgZXhjZXB0aW9uOiAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXRpbC5nZXRfc3RhY2tfdHJhY2UoKSkKKworICAgIGRlZiBfaGFuZGxlcihzZWxmLCByZXF1ZXN0
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZXJzW3JlcXVl
c3Qud3NfcmVzb3VyY2VdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJh
aXNlIERpc3BhdGNoRXJyb3IoJ05vIGhhbmRsZXIgZm9yOiAlcicgJSByZXF1ZXN0LndzX3Jlc291
cmNlKQorCisgICAgZGVmIF9zb3VyY2VfZmlsZXNfaW5fZGlyKHNlbGYsIHJvb3RfZGlyKToKKyAg
ICAgICAgIiIiU291cmNlIGFsbCB0aGUgaGFuZGxlciBzb3VyY2UgZmlsZXMgaW4gdGhlIGRpcmVj
dG9yeS4iIiIKKworICAgICAgICB0b19yZXNvdXJjZSA9IF9wYXRoX3RvX3Jlc291cmNlX2NvbnZl
cnRlcihyb290X2RpcikKKyAgICAgICAgZm9yIHBhdGggaW4gX3NvdXJjZV9maWxlX3BhdGhzKHJv
b3RfZGlyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBoYW5kbGVyID0gX3Nv
dXJjZShvcGVuKHBhdGgpLnJlYWQoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBEaXNwYXRjaEVycm9y
LCBlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvdXJjZV93YXJuaW5ncy5hcHBlbmQoJyVzOiAl
cycgJSAocGF0aCwgZSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNl
bGYuX2hhbmRsZXJzW3RvX3Jlc291cmNlKHBhdGgpXSA9IGhhbmRsZXIKKworCisjIHZpOnN0cz00
IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9oYW5kc2hha2UucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2Nr
ZXQvaGFuZHNoYWtlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxNWZl
MmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJz
b2NrZXQvaGFuZHNoYWtlLnB5CkBAIC0wLDAgKzEsMTc3IEBACisjIENvcHlyaWdodCAyMDA5LCBH
b29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CisiIiJXZWIgU29ja2V0IGhhbmRzaGFraW5nLgorCitOb3RlOiByZXF1ZXN0LmNvbm5lY3Rpb24u
d3JpdGUvcmVhZCBhcmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZlbiB0aG91Z2gKK21vZF9weXRo
b24gZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0
aW9uIGhhbmRsZXJzLgorVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBG
b3IgZXhhbXBsZSwgcmVxdWVzdC53cml0ZS9yZWFkIGFyZQorbm90IHN1aXRhYmxlIGJlY2F1c2Ug
dGhleSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRpbmcvcmVhZGluZy4KKyIiIgor
CisKK2ltcG9ydCByZQorCisKK19ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCA9IDgwCitfREVGQVVM
VF9XRUJfU09DS0VUX1NFQ1VSRV9QT1JUID0gNDQzCitfV0VCX1NPQ0tFVF9TQ0hFTUUgPSAnd3Mn
CitfV0VCX1NPQ0tFVF9TRUNVUkVfU0NIRU1FID0gJ3dzcycKKworX01FVEhPRF9MSU5FID0gcmUu
Y29tcGlsZShyJ15HRVQgKFteIF0rKSBIVFRQLzEuMVxyXG4kJykKKworX01BTkRBVE9SWV9IRUFE
RVJTID0gWworICAgICMga2V5LCBleHBlY3RlZCB2YWx1ZSBvciBOb25lCisgICAgWydVcGdyYWRl
JywgJ1dlYlNvY2tldCddLAorICAgIFsnQ29ubmVjdGlvbicsICdVcGdyYWRlJ10sCisgICAgWydI
b3N0JywgTm9uZV0sCisgICAgWydPcmlnaW4nLCBOb25lXSwKK10KKworCitjbGFzcyBIYW5kc2hh
a2VFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiBpbiBXZWIgU29ja2V0IEhhbmRz
aGFrZS4iIiIKKworICAgIHBhc3MKKworCitkZWYgX3ZhbGlkYXRlX3Byb3RvY29sKHByb3RvY29s
KToKKyAgICAiIiJWYWxpZGF0ZSBXZWJTb2NrZXQtUHJvdG9jb2wgc3RyaW5nLiIiIgorCisgICAg
aWYgbm90IHByb3RvY29sOgorICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSW52YWxpZCBX
ZWJTb2NrZXQtUHJvdG9jb2w6IGVtcHR5JykKKyAgICBmb3IgYyBpbiBwcm90b2NvbDoKKyAgICAg
ICAgaWYgbm90IDB4MjEgPD0gb3JkKGMpIDw9IDB4N2U6CisgICAgICAgICAgICByYWlzZSBIYW5k
c2hha2VFcnJvcignSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcHJvdG9jb2w6ICVyJyAlIGMpCisKKwor
Y2xhc3MgSGFuZHNoYWtlcihvYmplY3QpOgorICAgICIiIlRoaXMgY2xhc3MgcGVyZm9ybXMgV2Vi
IFNvY2tldCBoYW5kc2hha2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwg
ZGlzcGF0Y2hlcik6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAg
ICAgICAgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCisKKyAg
ICAgICAgSGFuZHNoYWtlciB3aWxsIGFkZCBhdHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2Ug
aW4gcGVyZm9ybWluZworICAgICAgICBoYW5kc2hha2UuCisgICAgICAgICIiIgorCisgICAgICAg
IHNlbGYuX3JlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNw
YXRjaGVyCisKKyAgICBkZWYgc2hha2VfaGFuZHMoc2VsZik6CisgICAgICAgICIiIlBlcmZvcm0g
V2ViIFNvY2tldCBIYW5kc2hha2UuIiIiCisKKyAgICAgICAgc2VsZi5fY2hlY2tfaGVhZGVyX2xp
bmVzKCkKKyAgICAgICAgc2VsZi5fc2V0X3Jlc291cmNlKCkKKyAgICAgICAgc2VsZi5fc2V0X29y
aWdpbigpCisgICAgICAgIHNlbGYuX3NldF9sb2NhdGlvbigpCisgICAgICAgIHNlbGYuX3NldF9w
cm90b2NvbCgpCisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIuc2hha2VfaGFuZHMoc2VsZi5fcmVx
dWVzdCkKKyAgICAgICAgc2VsZi5fc2VuZF9oYW5kc2hha2UoKQorCisgICAgZGVmIF9zZXRfcmVz
b3VyY2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVzb3VyY2UgPSBzZWxmLl9y
ZXF1ZXN0LnVyaQorCisgICAgZGVmIF9zZXRfb3JpZ2luKHNlbGYpOgorICAgICAgICBzZWxmLl9y
ZXF1ZXN0LndzX29yaWdpbiA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pblsnT3JpZ2luJ10KKwor
ICAgIGRlZiBfc2V0X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cyA9IFtd
CisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKToKKyAgICAgICAgICAgIGxvY2F0
aW9uX3BhcnRzLmFwcGVuZChfV0VCX1NPQ0tFVF9TRUNVUkVfU0NIRU1FKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKF9XRUJfU09DS0VUX1NDSEVNRSkK
KyAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKCc6Ly8nKQorICAgICAgICBob3N0LCBwb3J0
ID0gc2VsZi5fcGFyc2VfaG9zdF9oZWFkZXIoKQorICAgICAgICBjb25uX3BvcnQgPSBzZWxmLl9y
ZXF1ZXN0LmNvbm5lY3Rpb24ubG9jYWxfYWRkclsxXQorICAgICAgICBpZiBwb3J0ICE9IGNvbm5f
cG9ydDoKKyAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdIZWFkZXIvY29ubmVjdGlv
biBwb3J0IG1pc21hdGNoOiAlZC8lZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHBvcnQsIGNvbm5fcG9ydCkpCisgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChob3N0
KQorICAgICAgICBpZiAoKG5vdCBzZWxmLl9yZXF1ZXN0LmlzX2h0dHBzKCkgYW5kCisgICAgICAg
ICAgICAgcG9ydCAhPSBfREVGQVVMVF9XRUJfU09DS0VUX1BPUlQpIG9yCisgICAgICAgICAgICAo
c2VsZi5fcmVxdWVzdC5pc19odHRwcygpIGFuZAorICAgICAgICAgICAgIHBvcnQgIT0gX0RFRkFV
TFRfV0VCX1NPQ0tFVF9TRUNVUkVfUE9SVCkpOgorICAgICAgICAgICAgbG9jYXRpb25fcGFydHMu
YXBwZW5kKCc6JykKKyAgICAgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChzdHIocG9ydCkp
CisgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChzZWxmLl9yZXF1ZXN0LnVyaSkKKyAgICAg
ICAgc2VsZi5fcmVxdWVzdC53c19sb2NhdGlvbiA9ICcnLmpvaW4obG9jYXRpb25fcGFydHMpCisK
KyAgICBkZWYgX3BhcnNlX2hvc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICBmaWVsZHMgPSBzZWxm
Ll9yZXF1ZXN0LmhlYWRlcnNfaW5bJ0hvc3QnXS5zcGxpdCgnOicsIDEpCisgICAgICAgIGlmIGxl
bihmaWVsZHMpID09IDE6CisgICAgICAgICAgICBwb3J0ID0gX0RFRkFVTFRfV0VCX1NPQ0tFVF9Q
T1JUCisgICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LmlzX2h0dHBzKCk6CisgICAgICAgICAg
ICAgICAgcG9ydCA9IF9ERUZBVUxUX1dFQl9TT0NLRVRfU0VDVVJFX1BPUlQKKyAgICAgICAgICAg
IHJldHVybiBmaWVsZHNbMF0sIHBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJu
IGZpZWxkc1swXSwgaW50KGZpZWxkc1sxXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6
CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSW52YWxpZCBwb3J0IG51bWJlciBm
b3JtYXQ6ICVyJyAlIGUpCisKKyAgICBkZWYgX3NldF9wcm90b2NvbChzZWxmKToKKyAgICAgICAg
cHJvdG9jb2wgPSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNfaW4uZ2V0KCdXZWJTb2NrZXQtUHJvdG9j
b2wnKQorICAgICAgICBpZiBwcm90b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF92YWxp
ZGF0ZV9wcm90b2NvbChwcm90b2NvbCkKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19wcm90b2Nv
bCA9IHByb3RvY29sCisKKyAgICBkZWYgX3NlbmRfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBz
ZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCisgICAgICAgICAgICAgICAgJ0hUVFAvMS4x
IDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nKQorICAgICAgICBzZWxmLl9y
ZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nKQorICAgICAg
ICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxu
JykKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdXZWJTb2NrZXQtT3Jp
Z2luOiAnKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoc2VsZi5fcmVx
dWVzdC53c19vcmlnaW4pCisgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgn
XHJcbicpCisgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnV2ViU29ja2V0
LUxvY2F0aW9uOiAnKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoc2Vs
Zi5fcmVxdWVzdC53c19sb2NhdGlvbikKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9u
LndyaXRlKCdcclxuJykKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbDoKKyAg
ICAgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnV2ViU29ja2V0LVByb3Rv
Y29sOiAnKQorICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKHNlbGYu
X3JlcXVlc3Qud3NfcHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rp
b24ud3JpdGUoJ1xyXG4nKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUo
J1xyXG4nKQorCisgICAgZGVmIF9jaGVja19oZWFkZXJfbGluZXMoc2VsZik6CisgICAgICAgIGZv
ciBrZXksIGV4cGVjdGVkX3ZhbHVlIGluIF9NQU5EQVRPUllfSEVBREVSUzoKKyAgICAgICAgICAg
IGFjdHVhbF92YWx1ZSA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoa2V5KQorICAgICAg
ICAgICAgaWYgbm90IGFjdHVhbF92YWx1ZToKKyAgICAgICAgICAgICAgICByYWlzZSBIYW5kc2hh
a2VFcnJvcignSGVhZGVyICVzIG5vdCBkZWZpbmVkJyAlIGtleSkKKyAgICAgICAgICAgIGlmIGV4
cGVjdGVkX3ZhbHVlOgorICAgICAgICAgICAgICAgIGlmIGFjdHVhbF92YWx1ZSAhPSBleHBlY3Rl
ZF92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0lsbGVn
YWwgdmFsdWUgZm9yIGhlYWRlciAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGtleSwgYWN0dWFsX3ZhbHVlKSkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9o
ZWFkZXJwYXJzZXJoYW5kbGVyLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L2hlYWRlcnBhcnNlcmhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uZThmOWNhOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0L21vZF9weXdlYnNvY2tldC9oZWFkZXJwYXJzZXJoYW5kbGVyLnB5CkBAIC0wLDAgKzEsOTIg
QEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgZm9y
IG1vZF9weXdlYnNvY2tldC4KKworQXBhY2hlIEhUVFAgU2VydmVyIGFuZCBtb2RfcHl0aG9uIG11
c3QgYmUgY29uZmlndXJlZCBzdWNoIHRoYXQgdGhpcworZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGhh
bmRsZSBXZWIgU29ja2V0IHJlcXVlc3QuCisiIiIKKworCitmcm9tIG1vZF9weXRob24gaW1wb3J0
IGFwYWNoZQorCitpbXBvcnQgZGlzcGF0Y2gKK2ltcG9ydCBoYW5kc2hha2UKK2ltcG9ydCB1dGls
CisKKworIyBQeXRob25PcHRpb24gdG8gc3BlY2lmeSB0aGUgaGFuZGxlciByb290IGRpcmVjdG9y
eS4KK19QWU9QVF9IQU5ETEVSX1JPT1QgPSAnbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCcK
KworCitkZWYgX2NyZWF0ZV9kaXNwYXRjaGVyKCk6CisgICAgX0hBTkRMRVJfUk9PVCA9IGFwYWNo
ZS5tYWluX3NlcnZlci5nZXRfb3B0aW9ucygpLmdldCgKKyAgICAgICAgICAgIF9QWU9QVF9IQU5E
TEVSX1JPT1QsIE5vbmUpCisgICAgaWYgbm90IF9IQU5ETEVSX1JPT1Q6CisgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbignUHl0aG9uT3B0aW9uICVzIGlzIG5vdCBkZWZpbmVkJyAlIF9QWU9QVF9IQU5E
TEVSX1JPT1QsCisgICAgICAgICAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfRVJSKQorICAg
IGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9IQU5ETEVSX1JPT1QpCisgICAgZm9y
IHdhcm5pbmcgaW4gZGlzcGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKToKKyAgICAgICAgYXBhY2hl
LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nLCBhcGFjaGUuQVBMT0df
V0FSTklORykKKyAgICByZXR1cm4gZGlzcGF0Y2hlcgorCisKKyMgSW5pdGlhbGl6ZQorX2Rpc3Bh
dGNoZXIgPSBfY3JlYXRlX2Rpc3BhdGNoZXIoKQorCisKK2RlZiBoZWFkZXJwYXJzZXJoYW5kbGVy
KHJlcXVlc3QpOgorICAgICIiIkhhbmRsZSByZXF1ZXN0LgorCisgICAgQXJnczoKKyAgICAgICAg
cmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBuYW1l
ZCBoZWFkZXJwYXJzZXJoYW5kbGVyIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQgbmFtZQorICAg
IGZvciBhIFB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIuCisgICAgIiIiCisKKyAgICB0cnk6Cisg
ICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LCBfZGlzcGF0
Y2hlcikKKyAgICAgICAgaGFuZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAgICAgIHJlcXVlc3Qu
bG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6IHJlc291cmNlOiVyJyAlIHJlcXVlc3Qud3NfcmVz
b3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYWNoZS5BUExPR19ERUJVRykKKyAg
ICAgICAgX2Rpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorICAgIGV4Y2VwdCBoYW5k
c2hha2UuSGFuZHNoYWtlRXJyb3IsIGU6CisgICAgICAgICMgSGFuZHNoYWtlIGZvciB3cy93c3Mg
ZmFpbGVkLgorICAgICAgICAjIEJ1dCB0aGUgcmVxdWVzdCBjYW4gYmUgdmFsaWQgaHR0cC9odHRw
cyByZXF1ZXN0LgorICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAl
cycgJSBlLCBhcGFjaGUuQVBMT0dfSU5GTykKKyAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5F
RAorICAgIGV4Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBlOgorICAgICAgICByZXF1ZXN0
LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlLCBhcGFjaGUuQVBMT0dfV0FSTklO
RykKKyAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAorICAgIHJldHVybiBhcGFjaGUuRE9O
RSAgIyBSZXR1cm4gRE9ORSBzdWNoIHRoYXQgbm8gb3RoZXIgaGFuZGxlcnMgYXJlIGludm9rZWQu
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvbXNndXRpbC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0
L21vZF9weXdlYnNvY2tldC9tc2d1dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAuLjI2Y2Q1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC9tb2RfcHl3ZWJzb2NrZXQvbXNndXRpbC5weQpAQCAtMCwwICsxLDE5OSBAQAorIyBDb3B5cmln
aHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKworIiIiTWVzc2FnZSByZWxhdGVkIHV0aWxpdGllcy4KKworTm90ZTogcmVxdWVz
dC5jb25uZWN0aW9uLndyaXRlL3JlYWQgYXJlIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhv
dWdoCittb2RfcHl0aG9uIGRvY3VtZW50IHNheXMgdGhhdCB0aGV5IHNob3VsZCBiZSB1c2VkIG9u
bHkgaW4gY29ubmVjdGlvbiBoYW5kbGVycy4KK1VuZm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gb3Ro
ZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHJlcXVlc3Qud3JpdGUvcmVhZCBhcmUKK25vdCBzdWl0
YWJsZSBiZWNhdXNlIHRoZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRlcyB3cml0aW5nL3Jl
YWRpbmcuCisiIiIKKworCitpbXBvcnQgUXVldWUKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHRy
YWNlYmFjaworaW1wb3J0IHRocmVhZGluZworCisKK2RlZiBzZW5kX21lc3NhZ2UocmVxdWVzdCwg
bWVzc2FnZSk6CisgICAgIiIiU2VuZCBtZXNzYWdlLgorCisgICAgQXJnczoKKyAgICAgICAgcmVx
dWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICBtZXNzYWdlOiB1bmljb2RlIHN0cmlu
ZyB0byBzZW5kLgorICAgICIiIgorCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdceDAw
JyArIG1lc3NhZ2UuZW5jb2RlKCd1dGYtOCcpICsgJ1x4ZmYnKQorCisKK2RlZiByZWNlaXZlX21l
c3NhZ2UocmVxdWVzdCk6CisgICAgIiIiUmVjZWl2ZSBhIFdlYiBTb2NrZXQgZnJhbWUgYW5kIHJl
dHVybiBpdHMgcGF5bG9hZCBhcyB1bmljb2RlIHN0cmluZy4KKworICAgIEFyZ3M6CisgICAgICAg
IHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAiIiIKKworICAgIHdoaWxlIFRydWU6
CisgICAgICAgICMgUmVhZCAxIGJ5dGUuCisgICAgICAgICMgbXBfY29ubi5yZWFkIHdpbGwgYmxv
Y2sgaWYgbm8gYnl0ZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgIyBUaW1lb3V0IGlzIGNvbnRy
b2xsZWQgYnkgVGltZU91dCBkaXJlY3RpdmUgb2YgQXBhY2hlLgorICAgICAgICBmcmFtZV90eXBl
X3N0ciA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisgICAgICAgIGZyYW1lX3R5cGUgPSBv
cmQoZnJhbWVfdHlwZV9zdHJbMF0pCisgICAgICAgIGlmIChmcmFtZV90eXBlICYgMHg4MCkgPT0g
MHg4MDoKKyAgICAgICAgICAgICMgVGhlIHBheWxvYWQgbGVuZ3RoIGlzIHNwZWNpZmllZCBpbiB0
aGUgZnJhbWUuCisgICAgICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQuCisgICAgICAgICAgICBs
ZW5ndGggPSBfcGF5bG9hZF9sZW5ndGgocmVxdWVzdCkKKyAgICAgICAgICAgIF9yZWNlaXZlX2J5
dGVzKHJlcXVlc3QsIGxlbmd0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIHBh
eWxvYWQgaXMgZGVsaW1pdGVkIHdpdGggXHhmZi4KKyAgICAgICAgICAgIGJ5dGVzID0gX3JlYWRf
dW50aWwocmVxdWVzdCwgJ1x4ZmYnKQorICAgICAgICAgICAgbWVzc2FnZSA9IGJ5dGVzLmRlY29k
ZSgndXRmLTgnKQorICAgICAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAgICAgICAg
ICAgICAgIHJldHVybiBtZXNzYWdlCisgICAgICAgICAgICAjIERpc2NhcmQgZGF0YSBvZiBvdGhl
ciB0eXBlcy4KKworCitkZWYgX3BheWxvYWRfbGVuZ3RoKHJlcXVlc3QpOgorICAgIGxlbmd0aCA9
IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBiX3N0ciA9IHJlcXVlc3QuY29ubmVjdGlvbi5y
ZWFkKDEpCisgICAgICAgIGIgPSBvcmQoYl9zdHJbMF0pCisgICAgICAgIGxlbmd0aCA9IGxlbmd0
aCAqIDEyOCArIChiICYgMHg3ZikKKyAgICAgICAgaWYgKGIgJiAweDgwKSA9PSAwOgorICAgICAg
ICAgICAgYnJlYWsKKyAgICByZXR1cm4gbGVuZ3RoCisKKworZGVmIF9yZWNlaXZlX2J5dGVzKHJl
cXVlc3QsIGxlbmd0aCk6CisgICAgYnl0ZXMgPSAnJworICAgIHdoaWxlIGxlbmd0aCA+IDA6Cisg
ICAgICAgIG5ld19ieXRlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKGxlbmd0aCkKKyAgICAg
ICAgYnl0ZXMgKz0gbmV3X2J5dGVzCisgICAgICAgIGxlbmd0aCAtPSBsZW4obmV3X2J5dGVzKQor
ICAgIHJldHVybiBieXRlcworCisKK2RlZiBfcmVhZF91bnRpbChyZXF1ZXN0LCBkZWxpbV9jaGFy
KToKKyAgICBieXRlcyA9ICcnCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgY2ggPSByZXF1ZXN0
LmNvbm5lY3Rpb24ucmVhZCgxKQorICAgICAgICBpZiBjaCA9PSBkZWxpbV9jaGFyOgorICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgYnl0ZXMgKz0gY2gKKyAgICByZXR1cm4gYnl0ZXMKKworCitj
bGFzcyBNZXNzYWdlUmVjZWl2ZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiVGhpcyBjbGFz
cyByZWNlaXZlcyBtZXNzYWdlcyBmcm9tIHRoZSBjbGllbnQuCisKKyAgICBUaGlzIGNsYXNzIHBy
b3ZpZGVzIGJvdGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyB3YXlzIHRvIHJlY2VpdmUK
KyAgICBtZXNzYWdlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwg
b25tZXNzYWdlPU5vbmUpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAg
ICAgICAgICAgIG9ubWVzc2FnZTogYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIG1lc3Nh
Z2UgaXMgcmVjZWl2ZWQuCisgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBOb25lLgorICAg
ICAgICAiIiIKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAg
ICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLl9xdWV1ZSA9IFF1ZXVlLlF1
ZXVlKCkKKyAgICAgICAgc2VsZi5fb25tZXNzYWdlID0gb25tZXNzYWdlCisgICAgICAgIHNlbGYu
c2V0RGFlbW9uKFRydWUpCisgICAgICAgIHNlbGYuc3RhcnQoKQorCisgICAgZGVmIHJ1bihzZWxm
KToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlX21l
c3NhZ2Uoc2VsZi5fcmVxdWVzdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX29ubWVzc2FnZToKKyAg
ICAgICAgICAgICAgICBzZWxmLl9vbm1lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgc2VsZi5fcXVldWUucHV0KG1lc3NhZ2UpCisKKyAgICBkZWYgcmVj
ZWl2ZShzZWxmKToKKyAgICAgICAgIiIiIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIGNoYW5u
ZWwsIGJsb2NraW5nLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBtZXNzYWdlIGFz
IGEgdW5pY29kZSBzdHJpbmcuCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9x
dWV1ZS5nZXQoKQorCisgICAgZGVmIHJlY2VpdmVfbm93YWl0KHNlbGYpOgorICAgICAgICAiIiIg
UmVjZWl2ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgY2hhbm5lbCwgbm9uLWJsb2NraW5nLgorCisgICAg
ICAgIFJldHVybnM6CisgICAgICAgICAgICBtZXNzYWdlIGFzIGEgdW5pY29kZSBzdHJpbmcgaWYg
YXZhaWxhYmxlLiBOb25lIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9xdWV1ZS5nZXRfbm93YWl0KCkKKyAgICAgICAgZXhj
ZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgbWVzc2FnZSA9IE5vbmUKKyAgICAgICAgcmV0
dXJuIG1lc3NhZ2UKKworCitjbGFzcyBNZXNzYWdlU2VuZGVyKHRocmVhZGluZy5UaHJlYWQpOgor
ICAgICIiIlRoaXMgY2xhc3Mgc2VuZHMgbWVzc2FnZXMgdG8gdGhlIGNsaWVudC4KKworICAgIFRo
aXMgY2xhc3MgcHJvdmlkZXMgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHdheXMg
dG8gc2VuZAorICAgIG1lc3NhZ2VzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
ZXF1ZXN0KToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFy
Z3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICIi
IgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYu
X3JlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVldWUoKQor
ICAgICAgICBzZWxmLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnN0YXJ0KCkKKworICAg
IGRlZiBydW4oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBtZXNzYWdl
ID0gc2VsZi5fcXVldWUuZ2V0KCkKKyAgICAgICAgICAgIHNlbmRfbWVzc2FnZShzZWxmLl9yZXF1
ZXN0LCBtZXNzYWdlKQorCisgICAgZGVmIHNlbmQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIi
IlNlbmQgYSBtZXNzYWdlLCBibG9ja2luZy4iIiIKKworICAgICAgICBzZW5kX21lc3NhZ2Uoc2Vs
Zi5fcmVxdWVzdCwgbWVzc2FnZSkKKworICAgIGRlZiBzZW5kX25vd2FpdChzZWxmLCBtZXNzYWdl
KToKKyAgICAgICAgIiIiU2VuZCBhIG1lc3NhZ2UsIG5vbi1ibG9ja2luZy4iIiIKKworICAgICAg
ICBzZWxmLl9xdWV1ZS5wdXQobWVzc2FnZSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25l
LnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUu
cHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNiMWEyNgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFs
b25lLnB5CkBAIC0wLDAgKzEsMTc3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29w
eXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKKyIiIlN0YW5kYWxvbmUgV2ViIFNvY2tldCBzZXJ2ZXIuCisKK1VzZSB0
aGlzIHNlcnZlciB0byBydW4gbW9kX3B5d2Vic29ja2V0IHdpdGhvdXQgQXBhY2hlIEhUVFAgU2Vy
dmVyLgorIiIiCisKK2ltcG9ydCBCYXNlSFRUUFNlcnZlcgoraW1wb3J0IFNpbXBsZUhUVFBTZXJ2
ZXIKK2ltcG9ydCBTb2NrZXRTZXJ2ZXIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UK
K2ltcG9ydCBvcworaW1wb3J0IHVybHBhcnNlCisKK2ltcG9ydCBkaXNwYXRjaAoraW1wb3J0IGhh
bmRzaGFrZQorCisKK2NsYXNzIF9TdGFuZGFsb25lQ29ubmVjdGlvbihvYmplY3QpOgorICAgICIi
Ik1pbWljIG1vZF9weXRob24gbXBfY29ubi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBy
ZXF1ZXN0X2hhbmRsZXIpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAg
ICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlcjogQSBXZWJTb2NrZXRSZXF1
ZXN0SGFuZGxlciBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlcXVlc3Rf
aGFuZGxlciA9IHJlcXVlc3RfaGFuZGxlcgorCisgICAgZGVmIGdldF9sb2NhbF9hZGRyKHNlbGYp
OgorICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgbXBfY29ubi5sb2NhbF9hZGRyLiIiIgorICAg
ICAgICByZXR1cm4gKHNlbGYuX3JlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX25hbWUsCisg
ICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnNlcnZlci5zZXJ2ZXJfcG9ydCkK
KyAgICBsb2NhbF9hZGRyID0gcHJvcGVydHkoZ2V0X2xvY2FsX2FkZHIpCisKKyAgICBkZWYgd3Jp
dGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIk1pbWljIG1wX2Nvbm4ud3JpdGUoKS4iIiIKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci53ZmlsZS53cml0ZShkYXRhKQorCisg
ICAgZGVmIHJlYWQoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiTWltaWMgbXBfY29ubi5yZWFk
KCkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChs
ZW5ndGgpCisKKworY2xhc3MgX1N0YW5kYWxvbmVSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiTWlt
aWMgbW9kX3B5dGhvbiByZXF1ZXN0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVl
c3RfaGFuZGxlcik6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyOiBBIFdlYlNvY2tldFJlcXVlc3RI
YW5kbGVyIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5k
bGVyID0gcmVxdWVzdF9oYW5kbGVyCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IF9TdGFuZGFs
b25lQ29ubmVjdGlvbihyZXF1ZXN0X2hhbmRsZXIpCisKKyAgICBkZWYgZ2V0X3VyaShzZWxmKToK
KyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIHJlcXVlc3QudXJpLiIiIgorICAgICAgICByZXR1
cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnBhdGgKKyAgICB1cmkgPSBwcm9wZXJ0eShnZXRfdXJp
KQorCisgICAgZGVmIGdldF9oZWFkZXJzX2luKHNlbGYpOgorICAgICAgICAiIiJHZXR0ZXIgdG8g
bWltaWMgcmVxdWVzdC5oZWFkZXJzX2luLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVz
dF9oYW5kbGVyLmhlYWRlcnMKKyAgICBoZWFkZXJzX2luID0gcHJvcGVydHkoZ2V0X2hlYWRlcnNf
aW4pCisKKyAgICBkZWYgaXNfaHR0cHMoc2VsZik6CisgICAgICAgICIiIk1pbWljIHJlcXVlc3Qu
aXNfaHR0cHMoKS4iIiIKKyAgICAgICAgIyBUT0RPKHl1em8pOiBJbXBsZW1lbnQgdGhpcy4KKyAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgV2ViU29ja2V0U2VydmVyKFNvY2tldFNlcnZl
ci5UaHJlYWRpbmdNaXhJbiwgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgICAgIiIiSFRU
UFNlcnZlciBzcGVjaWFsaXplZCBmb3IgV2ViIFNvY2tldC4iIiIKKworICAgIGRhZW1vbl90aHJl
YWRzID0gVHJ1ZQorICAgIHBhc3MKKworCitjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihT
aW1wbGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiU2ltcGxl
SFRUUFJlcXVlc3RIYW5kbGVyIHNwZWNpYWxpemVkIGZvciBXZWIgU29ja2V0LiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAgc2VsZi5fcmVx
dWVzdCA9IF9TdGFuZGFsb25lUmVxdWVzdChzZWxmKQorICAgICAgICBzZWxmLl9kaXNwYXRjaGVy
ID0gZGlzcGF0Y2guRGlzcGF0Y2hlcigKKyAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0
SGFuZGxlci5vcHRpb25zLndlYnNvY2tfaGFuZGxlcnMpCisgICAgICAgIHNlbGYuX3ByaW50X3dh
cm5pbmdzX2lmX2FueSgpCisgICAgICAgIHNlbGYuX2hhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFu
ZHNoYWtlcihzZWxmLl9yZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hlcikKKyAgICAgICAgU2ltcGxlSFRUUFNlcnZl
ci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuX19pbml0X18oCisgICAgICAgICAgICAgICAgc2Vs
ZiwgKmFyZ3MsICoqa2V5d29yZHMpCisKKyAgICBkZWYgX3ByaW50X3dhcm5pbmdzX2lmX2FueShz
ZWxmKToKKyAgICAgICAgd2FybmluZ3MgPSBzZWxmLl9kaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5n
cygpCisgICAgICAgIGlmIHdhcm5pbmdzOgorICAgICAgICAgICAgZm9yIHdhcm5pbmcgaW4gd2Fy
bmluZ3M6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdtb2RfcHl3ZWJzb2NrZXQ6
ICVzJyAlIHdhcm5pbmcpCisKKyAgICBkZWYgcGFyc2VfcmVxdWVzdChzZWxmKToKKyAgICAgICAg
IiIiT3ZlcnJpZGUgQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5wYXJzZV9y
ZXF1ZXN0LgorCisgICAgICAgIFJldHVybiBUcnVlIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgZm9y
IEhUVFAoUyksIEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9
IFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qo
c2VsZikKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHNlbGYuX2hhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAgICAgICAgICAgIHNlbGYu
X2Rpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShzZWxmLl9yZXF1ZXN0KQorICAgICAgICAgICAgICAg
IHJldHVybiBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFcnJv
ciwgZToKKyAgICAgICAgICAgICAgICAjIEhhbmRzaGFrZSBmb3Igd3MocykgZmFpbGVkLiBBc3N1
bWUgaHR0cChzKS4KKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ21vZF9weXdlYnNvY2tl
dDogJXMnICUgZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhj
ZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53
YXJuaW5nKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitkZWYgX21haW4oKToKKyAgICBsb2dn
aW5nLmJhc2ljQ29uZmlnKCkKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigp
CisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLCB0eXBl
PSdpbnQnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9aGFuZHNoYWtlLl9ERUZBVUxU
X1dFQl9TT0NLRVRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwb3J0IHRvIGxp
c3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy13JywgJy0td2Vic29ja19oYW5kbGVy
cycsIGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1dlYiBTb2NrZXQgaGFuZGxlcnMg
cm9vdCBkaXJlY3RvcnkuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kb2N1bWVu
dF9yb290JywgZGVzdD0nZG9jdW1lbnRfcm9vdCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdD0nLicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRG9jdW1lbnQgcm9vdCBkaXJl
Y3RvcnkuJykKKyAgICAjIFRPRE8oeXV6byk6IEFkZCB3c3MtcmVsYXRlZCBvcHRpb25zLgorICAg
IFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyLm9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncygpWzBd
CisKKyAgICBvcy5jaGRpcihXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLmRvY3VtZW50
X3Jvb3QpCisKKyAgICBXZWJTb2NrZXRTZXJ2ZXIoKCcnLCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxl
ci5vcHRpb25zLnBvcnQpLAorICAgICAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFu
ZGxlcikuc2VydmVfZm9yZXZlcigpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAg
ICBfbWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weSBiL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L21vZF9weXdlYnNvY2tldC91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAuLjQ4MzUyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weQpAQCAtMCwwICsxLDUyIEBACisjIENvcHlyaWdo
dCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCisiIiJXZWIgU29ja2V0cyB1dGlsaXRpZXMuCisiIiIKKworCitpbXBvcnQgU3Ry
aW5nSU8KK2ltcG9ydCB0cmFjZWJhY2sKKworCitkZWYgZ2V0X3N0YWNrX3RyYWNlKCk6CisgICAg
IiIiR2V0IHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIHN0cmluZy4KKworICAgIFRoaXMgaXMg
bmVlZGVkIHRvIHN1cHBvcnQgUHl0aG9uIDIuMy4KKyAgICBUT0RPOiBSZW1vdmUgdGhpcyB3aGVu
IHdlIG9ubHkgc3VwcG9ydCBQeXRob24gMi40IGFuZCBhYm92ZS4KKyAgICAgICAgICBVc2UgdHJh
Y2ViYWNrLmZvcm1hdF9leGMgaW5zdGVhZC4KKyAgICAiIiIKKworICAgIG91dCA9IFN0cmluZ0lP
LlN0cmluZ0lPKCkKKyAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9b3V0KQorICAgIHJldHVy
biBvdXQuZ2V0dmFsdWUoKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvc2V0dXAucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9z
ZXR1cC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMzBlN2M0Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvc2V0dXAucHkKQEAgLTAsMCAr
MSw2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29n
bGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisi
IiJTZXQgdXAgc2NyaXB0IGZvciBtb2RfcHl3ZWJzb2NrZXQuCisiIiIKKworCitmcm9tIGRpc3R1
dGlscy5jb3JlIGltcG9ydCBzZXR1cAoraW1wb3J0IHN5cworCisKK19QQUNLQUdFX05BTUUgPSAn
bW9kX3B5d2Vic29ja2V0JworCitpZiBzeXMudmVyc2lvbiA8ICcyLjMnOgorICAgIHByaW50ID4+
c3lzLnN0ZGVyciwgJyVzIHJlcXVpcmVzIFB5dGhvbiAyLjMgb3IgbGF0ZXIuJyAlIF9QQUNLQUdF
X05BTUUKKyAgICBzeXMuZXhpdCgxKQorCitzZXR1cChhdXRob3I9J1l1em8gRnVqaXNoaW1hJywK
KyAgICAgIGF1dGhvcl9lbWFpbD0neXV6b0BjaHJvbWl1bS5vcmcnLAorICAgICAgZGVzY3JpcHRp
b249J1dlYiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIuJywKKyAgICAg
IGxvbmdfZGVzY3JpcHRpb249KAorICAgICAgICAgICAgICAnbW9kX3B5d2Vic29ja2V0IGlzIGFu
IEFwYWNoZSBIVFRQIFNlcnZlciBleHRlbnNpb24gZm9yICcKKyAgICAgICAgICAgICAgJ1dlYiBT
b2NrZXQgKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLycKKyAgICAgICAgICAgICAgJ2RyYWZ0
LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sKS4gJworICAgICAgICAgICAgICAnU2VlIG1vZF9w
eXdlYnNvY2tldC9fX2luaXRfXy5weSBmb3IgbW9yZSBkZXRhaWwuJyksCisgICAgICBsaWNlbnNl
PSdTZWUgQ09QWUlORycsCisgICAgICBuYW1lPV9QQUNLQUdFX05BTUUsCisgICAgICBwYWNrYWdl
cz1bX1BBQ0tBR0VfTkFNRV0sCisgICAgICB1cmw9J2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9w
eXdlYnNvY2tldC8nLAorICAgICAgdmVyc2lvbj0nMC4zLjAnLAorICAgICAgKQorCisKKyMgdmk6
c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9j
b25maWcucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L2NvbmZpZy5weQpuZXcgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YWFhYjhjCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9jb25maWcucHkKQEAgLTAsMCArMSw0NSBAQAor
IyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworIiIiQ29uZmlndXJhdGlvbiBmb3IgdGVzdGluZy4KKworVGVz
dCBmaWxlcyBzaG91bGQgaW1wb3J0IHRoaXMgbW9kdWxlIGJlZm9yZSBtb2RfcHl3ZWJzb2NrZXQu
CisiIiIKKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCisjIEFkZCB0aGUgcGFyZW50IGRp
cmVjdG9yeSB0byBzeXMucGF0aCB0byBlbmFibGUgaW1wb3J0aW5nIG1vZF9weXdlYnNvY2tldC4K
K3N5cy5wYXRoICs9IFtvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sICcu
LicpXQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC9tb2NrLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9tb2Nr
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4MWJmZDEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L21vY2sucHkKQEAgLTAsMCAr
MSwyMDMgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIk1vY2tzIGZvciB0ZXN0aW5nLgorIiIi
CisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdGhyZWFkaW5nCisKKworY2xhc3MgX01vY2tDb25u
QmFzZShvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3Mgb2YgbW9ja3MgZm9yIG1vZF9weXRob24u
YXBhY2hlLm1wX2Nvbm4uCisKKyAgICBUaGlzIGVuYWJsZXMgdGVzdHMgdG8gY2hlY2sgd2hhdCBp
cyB3cml0dGVuIHRvIGEgKG1vY2spIG1wX2Nvbm4uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0
X18oc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlX2RhdGEgPSBbXQorCisgICAgZGVmIHdyaXRl
KHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9j
b25uLndyaXRlLiIiIgorCisgICAgICAgIHNlbGYuX3dyaXRlX2RhdGEuYXBwZW5kKGRhdGEpCisK
KyAgICBkZWYgd3JpdHRlbl9kYXRhKHNlbGYpOgorICAgICAgICAiIiJHZXQgYnl0ZXMgd3JpdHRl
biB0byB0aGlzIG1vY2suIiIiCisKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oc2VsZi5fd3JpdGVf
ZGF0YSkKKworCitjbGFzcyBNb2NrQ29ubihfTW9ja0Nvbm5CYXNlKToKKyAgICAiIiJNb2NrIGZv
ciBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhpcyBlbmFibGVzIHRlc3RzIHRv
IHNwZWNpZnkgd2hhdCBzaG91bGQgYmUgcmVhZCBmcm9tIGEgKG1vY2spIG1wX2Nvbm4gYXMKKyAg
ICB3ZWxsIGFzIHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRlbiB0byBpdC4KKyAgICAiIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCByZWFkX2RhdGEpOgorICAgICAgICAiIiJDb25zdHJ1Y3RzIGFu
IGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZWFkX2RhdGE6IGJ5dGVz
IHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIHdoZW4gcmVhZCogbWV0aG9kcyBhcmUKKyAgICAgICAg
ICAgIGNhbGxlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgX01vY2tDb25uQmFzZS5fX2luaXRf
XyhzZWxmKQorICAgICAgICBzZWxmLl9yZWFkX2RhdGEgPSByZWFkX2RhdGEKKyAgICAgICAgc2Vs
Zi5fcmVhZF9wb3MgPSAwCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiIk92
ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZGxpbmUuIiIiCisKKyAgICAgICAg
aWYgc2VsZi5fcmVhZF9wb3MgPj0gbGVuKHNlbGYuX3JlYWRfZGF0YSk6CisgICAgICAgICAgICBy
ZXR1cm4gJycKKyAgICAgICAgZW5kX2luZGV4ID0gc2VsZi5fcmVhZF9kYXRhLmZpbmQoJ1xuJywg
c2VsZi5fcmVhZF9wb3MpICsgMQorICAgICAgICBpZiBlbmRfaW5kZXggPT0gMDoKKyAgICAgICAg
ICAgIGVuZF9pbmRleCA9IGxlbihzZWxmLl9yZWFkX2RhdGEpCisgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkX3VwX3RvKGVuZF9pbmRleCkKKworICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6Cisg
ICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZC4iIiIKKwor
ICAgICAgICBpZiBzZWxmLl9yZWFkX3BvcyA+PSBsZW4oc2VsZi5fcmVhZF9kYXRhKToKKyAgICAg
ICAgICAgIHJldHVybiAnJworICAgICAgICBlbmRfaW5kZXggPSBtaW4obGVuKHNlbGYuX3JlYWRf
ZGF0YSksIHNlbGYuX3JlYWRfcG9zICsgbGVuZ3RoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVh
ZF91cF90byhlbmRfaW5kZXgpCisKKyAgICBkZWYgX3JlYWRfdXBfdG8oc2VsZiwgZW5kX2luZGV4
KToKKyAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRfZGF0YVtzZWxmLl9yZWFkX3BvczplbmRfaW5k
ZXhdCisgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gZW5kX2luZGV4CisgICAgICAgIHJldHVybiBs
aW5lCisKKworY2xhc3MgTW9ja0Jsb2NraW5nQ29ubihfTW9ja0Nvbm5CYXNlKToKKyAgICAiIiJC
bG9ja2luZyBtb2NrIGZvciBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhpcyBl
bmFibGVzIHRlc3RzIHRvIHNwZWNpZnkgd2hhdCBzaG91bGQgYmUgcmVhZCBmcm9tIGEgKG1vY2sp
IG1wX2Nvbm4gYXMKKyAgICB3ZWxsIGFzIHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRlbiB0byBpdC4K
KyAgICBDYWxsZXJzIG9mIHJlYWQqIG1ldGhvZHMgd2lsbCBibG9jayBpZiB0aGVyZSBpcyBubyBi
eXRlcyBhdmFpbGFibGUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg
ICAgIF9Nb2NrQ29ubkJhc2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcXVldWUgPSBR
dWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiIk92ZXJy
aWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZGxpbmUuIiIiCisgICAgICAgIGxpbmUg
PSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY2ggPSBzZWxmLl9xdWV1ZS5n
ZXQoKQorICAgICAgICAgICAgbGluZSArPSBjaAorICAgICAgICAgICAgaWYgY2ggPT0gJ1xuJzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbGVuZ3Ro
KToKKyAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkLiIi
IgorCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICBmb3IgXyBpbiByYW5nZShsZW5ndGgpOgor
ICAgICAgICAgICAgZGF0YSArPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAgICAgICByZXR1cm4gZGF0
YQorCisgICAgZGVmIHB1dF9ieXRlcyhzZWxmLCBieXRlcyk6CisgICAgICAgICIiIlB1dCBieXRl
cyB0byBiZSByZWFkIGZyb20gdGhpcyBtb2NrLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAg
ICBieXRlczogYnl0ZXMgdG8gYmUgcmVhZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGJ5
dGUgaW4gYnl0ZXM6CisgICAgICAgICAgICBzZWxmLl9xdWV1ZS5wdXQoYnl0ZSkKKworCitjbGFz
cyBNb2NrVGFibGUoZGljdCk6CisgICAgIiIiTW9jayB0YWJsZS4KKworICAgIFRoaXMgbWltaWNr
cyBtb2RfcHl0aG9uIG1wX3RhYmxlLiBOb3RlIHRoYXQgb25seSB0aGUgbWV0aG9kcyB1c2VkIGJ5
CisgICAgdGVzdHMgYXJlIG92ZXJyaWRkZW4uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgY29weV9mcm9tPXt9KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb3B5X2Zyb20sIGRp
Y3QpOgorICAgICAgICAgICAgY29weV9mcm9tID0gY29weV9mcm9tLml0ZW1zKCkKKyAgICAgICAg
Zm9yIGtleSwgdmFsdWUgaW4gY29weV9mcm9tOgorICAgICAgICAgICAgc2VsZi5fX3NldGl0ZW1f
XyhrZXksIHZhbHVlKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAg
IHJldHVybiBzdXBlcihNb2NrVGFibGUsIHNlbGYpLl9fZ2V0aXRlbV9fKGtleS5sb3dlcigpKQor
CisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBzdXBlcihN
b2NrVGFibGUsIHNlbGYpLl9fc2V0aXRlbV9fKGtleS5sb3dlcigpLCB2YWx1ZSkKKworICAgIGRl
ZiBnZXQoc2VsZiwga2V5LCBkZWZfdmFsdWU9Tm9uZSk6CisgICAgICAgIHJldHVybiBzdXBlcihN
b2NrVGFibGUsIHNlbGYpLmdldChrZXkubG93ZXIoKSwgZGVmX3ZhbHVlKQorCisKK2NsYXNzIE1v
Y2tSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiTW9jayByZXF1ZXN0LgorCisgICAgVGhpcyBtaW1p
Y3MgbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHVyaT1Ob25lLCBoZWFkZXJzX2luPXt9LCBjb25uZWN0aW9uPU5vbmUsCisgICAgICAgICAgICAg
ICAgIGlzX2h0dHBzPUZhbHNlKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgor
CisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICAgIHVyaTogVVJJIG9mIHRoZSByZXF1ZXN0
LgorICAgICAgICAgICAgaGVhZGVyc19pbjogUmVxdWVzdCBoZWFkZXJzLgorICAgICAgICAgICAg
Y29ubmVjdGlvbjogQ29ubmVjdGlvbiB1c2VkIGZvciB0aGUgcmVxdWVzdC4KKyAgICAgICAgICAg
IGlzX2h0dHBzOiBXaGV0aGVyIHRoaXMgcmVxdWVzdCBpcyBvdmVyIFNTTC4KKworICAgICAgICBT
ZWUgdGhlIGRvY3VtZW50IG9mIG1vZF9weXRob24gbXBfY29ubiBmb3IgZGV0YWlscy4KKyAgICAg
ICAgIiIiCisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9
IGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5oZWFkZXJzX2luID0gTW9ja1RhYmxlKGhlYWRlcnNf
aW4pCisgICAgICAgIHNlbGYuaXNfaHR0cHNfID0gaXNfaHR0cHMKKworICAgIGRlZiBpc19odHRw
cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIg
U1NMLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5pc19odHRwc18KKworCitjbGFzcyBNb2NrRGlz
cGF0Y2hlcihvYmplY3QpOgorICAgICIiIk1vY2sgZm9yIGRpc3BhdGNoLkRpc3BhdGNoZXIuIiIi
CisKKyAgICBkZWYgc2hha2VfaGFuZHMoc2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgcGFz
cworCisgICAgZGVmIHRyYW5zZmVyX2RhdGEoc2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAg
cGFzcworCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9y
dW5fYWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ODU2MTgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3J1bl9hbGwucHkK
QEAgLTAsMCArMSw2NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAy
MDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCisiIiJSdW4gYWxsIHRlc3RzIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyIiIgorCisK
K2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgdW5pdHRlc3QKKworCitfVEVTVF9NT0RVTEVf
UEFUVEVSTiA9IHJlLmNvbXBpbGUocideKHRlc3RfLispXC5weSQnKQorCisKK2RlZiBfbGlzdF90
ZXN0X21vZHVsZXMoZGlyZWN0b3J5KToKKyAgICBtb2R1bGVfbmFtZXMgPSBbXQorICAgIGZvciBm
aWxlbmFtZSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAgICAgIG1hdGNoID0gX1RFU1Rf
TU9EVUxFX1BBVFRFUk4uc2VhcmNoKGZpbGVuYW1lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAg
ICAgICAgIG1vZHVsZV9uYW1lcy5hcHBlbmQobWF0Y2guZ3JvdXAoMSkpCisgICAgcmV0dXJuIG1v
ZHVsZV9uYW1lcworCisKK2RlZiBfc3VpdGUoKToKKyAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0
TG9hZGVyKCkKKyAgICByZXR1cm4gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygKKyAgICAgICAg
ICAgIF9saXN0X3Rlc3RfbW9kdWxlcyhvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVf
XylbMF0sICcuJykpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbihkZWZhdWx0VGVzdD0nX3N1aXRlJykKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weSBi
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZDY0ZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5CkBAIC0wLDAgKzEsMTcx
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJ
bmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRl
c3RzIGZvciBkaXNwYXRjaCBtb2R1bGUuIiIiCisKKworCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0
dGVzdAorCitpbXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9k
X3B5d2Vic29ja2V0LgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGRpc3BhdGNoCisKK2lt
cG9ydCBtb2NrCisKKworX1RFU1RfSEFORExFUlNfRElSID0gb3MucGF0aC5qb2luKAorICAgICAg
ICBvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwgJ3Rlc3RkYXRhJywgJ2hhbmRsZXJzJykKKwor
Y2xhc3MgRGlzcGF0Y2hlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Nv
bnZlcnRlcihzZWxmKToKKyAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhfdG9fcmVz
b3VyY2VfY29udmVydGVyKCcvYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBj
b252ZXJ0ZXIoJy9hL2IvaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2Mv
aCcsIGNvbnZlcnRlcignL2EvYi9jL2hfd3NoLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgY29udmVydGVyKCcvYS9iL2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChOb25lLCBjb252ZXJ0ZXIoJ2EvYi9oX3dzaC5weScpKQorCisgICAgICAgIGNvbnZlcnRlciA9
IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignYS9iJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoJ2EvYi9oX3dzaC5weScpKQorCisgICAgICAg
IGNvbnZlcnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignL2EvYi8v
LycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKCcvYS9iL2hfd3No
LnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKCcvYS9iLy4u
L2IvaF93c2gucHknKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90b19y
ZXNvdXJjZV9jb252ZXJ0ZXIoJy9hLy4uL2EvYi8uLi9iLycpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJy9oJywgY29udmVydGVyKCcvYS9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29udmVy
dGVyID0gZGlzcGF0Y2guX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKHInXGFcYicpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKHInXGFcYlxoX3dzaC5weScpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcihyJy9hL2IvaF93c2gucHkn
KSkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9maWxlX3BhdGhzKHNlbGYpOgorICAgICAgICBwYXRo
cyA9IGxpc3QoZGlzcGF0Y2guX3NvdXJjZV9maWxlX3BhdGhzKF9URVNUX0hBTkRMRVJTX0RJUikp
CisgICAgICAgIHBhdGhzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGxlbihw
YXRocykpCisgICAgICAgIGV4cGVjdGVkX3BhdGhzID0gWworICAgICAgICAgICAgICAgIG9zLnBh
dGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdhX3dzaC5weScpLAorICAgICAgICAgICAgICAg
IG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdiX3dzaC5weScpLAorICAgICAgICAg
ICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWIvY193c2gucHknKSwK
KyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViL2Vf
d3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJ
UiwgJ3N1Yi9mX3dzaC5weScpLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIGV4cGVj
dGVkLCBhY3R1YWwgaW4gemlwKGV4cGVjdGVkX3BhdGhzLCBwYXRocyk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCisKKyAgICBkZWYgdGVzdF9zb3VyY2Uo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3BhdGNoLkRpc3BhdGNoRXJyb3Is
IGRpc3BhdGNoLl9zb3VyY2UsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkaXNwYXRj
aC5EaXNwYXRjaEVycm9yLCBkaXNwYXRjaC5fc291cmNlLCAnZGVmJykKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZGlzcGF0Y2guX3NvdXJjZSwgJzEv
MCcpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyhkaXNwYXRjaC5fc291cmNlKAorICAgICAgICAg
ICAgICAgICdkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KTpwYXNzXG4nCisgICAg
ICAgICAgICAgICAgJ2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6cGFzc1xu
JykpCisKKyAgICBkZWYgdGVzdF9zb3VyY2Vfd2FybmluZ3Moc2VsZik6CisgICAgICAgIGRpc3Bh
dGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUikKKyAgICAgICAg
d2FybmluZ3MgPSBkaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5ncygpCisgICAgICAgIHdhcm5pbmdz
LnNvcnQoKQorICAgICAgICBleHBlY3RlZF93YXJuaW5ncyA9IFsKKyAgICAgICAgICAgICAgICAo
b3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ2Jfd3NoLnB5JykgKyAnOiAnCisgICAg
ICAgICAgICAgICAgICd3ZWJfc29ja2V0X3NoYWtlX2hhbmRzIGlzIG5vdCBkZWZpbmVkLicpLAor
ICAgICAgICAgICAgICAgIChvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywg
J2Nfd3NoLnB5JykgKyAnOiAnCisgICAgICAgICAgICAgICAgICd3ZWJfc29ja2V0X3NoYWtlX2hh
bmRzIGlzIG5vdCBjYWxsYWJsZS4nKSwKKyAgICAgICAgICAgICAgICAob3MucGF0aC5qb2luKF9U
RVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdnX3dzaC5weScpICsgJzogJworICAgICAgICAgICAg
ICAgICAnd2ViX3NvY2tldF9zaGFrZV9oYW5kcyBpcyBub3QgZGVmaW5lZC4nKSwKKyAgICAgICAg
ICAgICAgICAob3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdoX3dzaC5w
eScpICsgJzogJworICAgICAgICAgICAgICAgICAnd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhIGlz
IG5vdCBkZWZpbmVkLicpLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoNCwgbGVuKHdhcm5pbmdzKSkKKyAgICAgICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwgaW4g
emlwKGV4cGVjdGVkX3dhcm5pbmdzLCB3YXJuaW5ncyk6CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3Rfc2hha2VfaGFuZChzZWxm
KToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExF
UlNfRElSKQorICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdCgpCisgICAgICAgIHJl
cXVlc3Qud3NfcmVzb3VyY2UgPSAnL2EnCisgICAgICAgIHJlcXVlc3Qud3Nfb3JpZ2luID0gJ2h0
dHA6Ly9leGFtcGxlLmNvbScKKyAgICAgICAgZGlzcGF0Y2hlci5zaGFrZV9oYW5kcyhyZXF1ZXN0
KSAgIyBNdXN0IG5vdCByYWlzZSBleGNlcHRpb24uCisKKyAgICAgICAgcmVxdWVzdC53c19vcmln
aW4gPSAnaHR0cDovL2JhZC5leGFtcGxlLmNvbScKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
ZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0
Y2hlci5zaGFrZV9oYW5kcywgcmVxdWVzdCkKKworICAgIGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGEo
c2VsZik6CisgICAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hB
TkRMRVJTX0RJUikKKyAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlv
bj1tb2NrLk1vY2tDb25uKCcnKSkKKyAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvYScK
KyAgICAgICAgcmVxdWVzdC53c19wcm90b2NvbCA9ICdwMScKKworICAgICAgICBkaXNwYXRjaGVy
LnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYV93c2gu
cHkgaXMgY2FsbGVkIGZvciAvYSwgcDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgICAgICByZXF1ZXN0ID0gbW9jay5N
b2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAgICAgICByZXF1ZXN0
LndzX3Jlc291cmNlID0gJy9zdWIvZScKKyAgICAgICAgcmVxdWVzdC53c19wcm90b2NvbCA9IE5v
bmUKKyAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ3N1Yi9lX3dzaC5weSBpcyBjYWxsZWQgZm9yIC9zdWIvZSwgTm9uZScs
CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0
YSgpKQorCisgICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YV9ub19oYW5kbGVyKHNlbGYpOgorICAg
ICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19ESVIp
CisgICAgICAgIGZvciByZXNvdXJjZSBpbiBbJy9iJywgJy9zdWIvYycsICcvc3ViL2QnLCAnL2Rv
ZXMvbm90L2V4aXN0J106CisgICAgICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChj
b25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAgICAgICAgICAgcmVxdWVzdC53c19yZXNv
dXJjZSA9IHJlc291cmNlCisgICAgICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gJ3AyJwor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIudHJhbnNmZXJfZGF0
YShyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgICAgICBleGNl
cHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxV
bmxlc3Moc3RyKGUpLmZpbmQoJ05vIGhhbmRsZXInKSAhPSAtMSkKKyAgICAgICAgICAgIGV4Y2Vw
dCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworICAgIGRlZiB0ZXN0
X3RyYW5zZmVyX2RhdGFfaGFuZGxlcl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRpc3BhdGNo
ZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUikKKyAgICAgICAgcmVx
dWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkKKyAg
ICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL2YnCisgICAgICAgIHJlcXVlc3Qud3Nf
cHJvdG9jb2wgPSAncDMnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpc3BhdGNoZXIudHJh
bnNmZXJfZGF0YShyZXF1ZXN0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgZXhj
ZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxl
c3Moc3RyKGUpLmZpbmQoJ0ludGVudGlvbmFsJykgIT0gLTEpCisgICAgICAgIGV4Y2VwdCBFeGNl
cHRpb246CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5IGIv
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5weQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTRjYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5weQpAQCAtMCwwICsxLDMx
NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUg
SW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJU
ZXN0cyBmb3IgaGFuZHNoYWtlIG1vZHVsZS4iIiIKKworCitpbXBvcnQgdW5pdHRlc3QKKworaW1w
b3J0IGNvbmZpZyAgIyBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tl
dC4KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBoYW5kc2hha2UKKworaW1wb3J0IG1vY2sK
KworCitfR09PRF9SRVFVRVNUID0gKAorICAgIDgwLAorICAgICcvZGVtbycsCisgICAgeworICAg
ICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcsCisgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFk
ZScsCisgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAnT3JpZ2luJzonaHR0
cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScs
CisgICAgfQorKQorCitfR09PRF9SRVNQT05TRV9ERUZBVUxUX1BPUlQgPSAoCisgICAgJ0hUVFAv
MS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3JhZGU6
IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICdXZWJT
b2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJworICAgICdXZWJTb2NrZXQtTG9j
YXRpb246IHdzOi8vZXhhbXBsZS5jb20vZGVtb1xyXG4nCisgICAgJ1dlYlNvY2tldC1Qcm90b2Nv
bDogc2FtcGxlXHJcbicKKyAgICAnXHJcbicpCisKK19HT09EX1JFU1BPTlNFX1NFQ1VSRSA9ICgK
KyAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAg
ICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4n
CisgICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dl
YlNvY2tldC1Mb2NhdGlvbjogd3NzOi8vZXhhbXBsZS5jb20vZGVtb1xyXG4nCisgICAgJ1dlYlNv
Y2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicKKyAgICAnXHJcbicpCisKK19HT09EX1JFUVVFU1Rf
Tk9OREVGQVVMVF9QT1JUID0gKAorICAgIDgwODEsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAg
ICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRl
JywKKyAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbTo4MDgxJywKKyAgICAgICAgJ09yaWdpbic6
J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1w
bGUnLAorICAgIH0KKykKKworX0dPT0RfUkVTUE9OU0VfTk9OREVGQVVMVF9QT1JUID0gKAorICAg
ICdIVFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJworICAgICdV
cGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKyAg
ICAnV2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicKKyAgICAnV2ViU29j
a2V0LUxvY2F0aW9uOiB3czovL2V4YW1wbGUuY29tOjgwODEvZGVtb1xyXG4nCisgICAgJ1dlYlNv
Y2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicKKyAgICAnXHJcbicpCisKK19HT09EX1JFU1BPTlNF
X1NFQ1VSRV9OT05ERUYgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29s
IEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5l
Y3Rpb246IFVwZ3JhZGVcclxuJworICAgICdXZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBs
ZS5jb21cclxuJworICAgICdXZWJTb2NrZXQtTG9jYXRpb246IHdzczovL2V4YW1wbGUuY29tOjgw
ODEvZGVtb1xyXG4nCisgICAgJ1dlYlNvY2tldC1Qcm90b2NvbDogc2FtcGxlXHJcbicKKyAgICAn
XHJcbicpCisKK19HT09EX1JFUVVFU1RfTk9fUFJPVE9DT0wgPSAoCisgICAgODAsCisgICAgJy9k
ZW1vJywKKyAgICB7CisgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgJ0Nv
bm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAg
ICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAorICAgIH0KKykKKworX0dPT0RfUkVT
UE9OU0VfTk9fUFJPVE9DT0wgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3Rv
Y29sIEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nv
bm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICdXZWJTb2NrZXQtT3JpZ2luOiBodHRwOi8vZXhh
bXBsZS5jb21cclxuJworICAgICdXZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBsZS5jb20v
ZGVtb1xyXG4nCisgICAgJ1xyXG4nKQorCitfR09PRF9SRVFVRVNUX1dJVEhfT1BUSU9OQUxfSEVB
REVSUyA9ICgKKyAgICA4MCwKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUn
OidXZWJTb2NrZXQnLAorICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAn
SG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNv
bScsCisgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAorICAgICAgICAnQUtl
eSc6J0FWYWx1ZScsCisgICAgICAgICdFbXB0eVZhbHVlJzonJywKKyAgICB9CispCisKK19CQURf
UkVRVUVTVFMgPSAoCisgICAgKCAgIyBIVFRQIHJlcXVlc3QKKyAgICAgICAgODAsCisgICAgICAg
ICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdIb3N0Jzond3d3Lmdvb2dsZS5jb20n
LAorICAgICAgICAgICAgJ1VzZXItQWdlbnQnOidNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBJ
bnRlbCBNYWMgT1MgWCAxMC41OycKKyAgICAgICAgICAgICAgICAgICAgICAgICAnIGVuLVVTOyBy
djoxLjkuMS4zKSBHZWNrby8yMDA5MDgyNCBGaXJlZm94LzMuNS4zJworICAgICAgICAgICAgICAg
ICAgICAgICAgICcgR1RCNiBHVEJBJywKKyAgICAgICAgICAgICdBY2NlcHQnOid0ZXh0L2h0bWws
YXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwnCisgICAgICAgICAg
ICAgICAgICAgICAnKi8qO3E9MC44JywKKyAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOidl
bi11cyxlbjtxPTAuNScsCisgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nJzonZ3ppcCxkZWZs
YXRlJywKKyAgICAgICAgICAgICdBY2NlcHQtQ2hhcnNldCc6J0lTTy04ODU5LTEsdXRmLTg7cT0w
LjcsKjtxPTAuNycsCisgICAgICAgICAgICAnS2VlcC1BbGl2ZSc6JzMwMCcsCisgICAgICAgICAg
ICAnQ29ubmVjdGlvbic6J2tlZXAtYWxpdmUnLAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAj
IE1pc3NpbmcgVXBncmFkZQorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAg
eworICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0
JzonZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNv
bScsCisgICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKKyAgICAgICAg
fQorICAgICksCisgICAgKCAgIyBXcm9uZyBVcGdyYWRlCisgICAgICAgIDgwLAorICAgICAgICAn
L2RlbW8nLAorICAgICAgICB7CisgICAgICAgICAgICAnVXBncmFkZSc6J05vbldlYlNvY2tldCcs
CisgICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAgICAgJ0hvc3Qn
OidleGFtcGxlLmNvbScsCisgICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29t
JywKKyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAorICAgICAgICB9
CisgICAgKSwKKyAgICAoICAjIEVtcHR5IFdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICA4MCwK
KyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJT
b2NrZXQnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAg
ICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFt
cGxlLmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonJywKKyAgICAgICAg
fQorICAgICksCisgICAgKCAgIyBXcm9uZyBwb3J0IG51bWJlciBmb3JtYXQKKyAgICAgICAgODAs
CisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzonV2Vi
U29ja2V0JywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICAg
ICAnSG9zdCc6J2V4YW1wbGUuY29tOjB4NTAnLAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6
Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxl
JywKKyAgICAgICAgfQorICAgICksCisgICAgKCAgIyBIZWFkZXIvY29ubmVjdGlvbiBwb3J0IG1p
c21hdGNoCisgICAgICAgIDgwODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAg
ICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzon
VXBncmFkZScsCisgICAgICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAgICAg
ICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Q
cm90b2NvbCc6J3NhbXBsZScsCisgICAgICAgIH0KKyAgICApLAorICAgICggICMgSWxsZWdhbCBX
ZWJTb2NrZXQtUHJvdG9jb2wKKyAgICAgICAgODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAg
IHsKKyAgICAgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgICAgICdDb25u
ZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAg
ICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ1dl
YlNvY2tldC1Qcm90b2NvbCc6J2lsbGVnYWwgcHJvdG9jb2wnLAorICAgICAgICB9CisgICAgKSwK
KykKKworCitkZWYgX2NyZWF0ZV9yZXF1ZXN0KHJlcXVlc3RfZGVmKToKKyAgICBjb25uID0gbW9j
ay5Nb2NrQ29ubignJykKKyAgICBjb25uLmxvY2FsX2FkZHIgPSAoJzAuMC4wLjAnLCByZXF1ZXN0
X2RlZlswXSkKKyAgICByZXR1cm4gbW9jay5Nb2NrUmVxdWVzdCgKKyAgICAgICAgICAgIHVyaT1y
ZXF1ZXN0X2RlZlsxXSwKKyAgICAgICAgICAgIGhlYWRlcnNfaW49cmVxdWVzdF9kZWZbMl0sCisg
ICAgICAgICAgICBjb25uZWN0aW9uPWNvbm4pCisKKworY2xhc3MgSGFuZHNoYWtlclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3ZhbGlkYXRlX3Byb3RvY29sKHNlbGYpOgor
ICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sKCdzYW1wbGUnKSAgIyBzaG91bGQg
c3VjY2VlZC4KKyAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCgnU2FtcGxlJykg
ICMgc2hvdWxkIHN1Y2NlZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5I
YW5kc2hha2VFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlLl92YWxp
ZGF0ZV9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZSBwcm90b2Nv
bCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiSmFwYW4iIGluIEphcGFuZXNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHUnXHU2NWU1XHU2NzJjJykKKworICAgIGRlZiB0ZXN0X2dvb2Rf
cmVxdWVzdF9kZWZhdWx0X3BvcnQoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QoX0dPT0RfUkVRVUVTVCkKKyAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5k
c2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFrZXIuc2hha2VfaGFuZHMo
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRh
KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9kZW1vJywgcmVxdWVzdC53c19yZXNvdXJj
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaHR0cDovL2V4YW1wbGUuY29tJywgcmVxdWVz
dC53c19vcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3dzOi8vZXhhbXBsZS5jb20v
ZGVtbycsIHJlcXVlc3Qud3NfbG9jYXRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3Nh
bXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rf
c2VjdXJlX2RlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVx
dWVzdChfR09PRF9SRVFVRVNUKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ubG9jYWxfYWRk
ciA9ICgnMC4wLjAuMCcsIDQ0MykKKyAgICAgICAgcmVxdWVzdC5pc19odHRwc18gPSBUcnVlCisg
ICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigp
KQorICAgICAgICBoYW5kc2hha2VyLnNoYWtlX2hhbmRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChfR09PRF9SRVNQT05TRV9TRUNVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVx
dWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdzYW1wbGUnLCByZXF1ZXN0LndzX3Byb3RvY29sKQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1
ZXN0X25vbmRlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVx
dWVzdChfR09PRF9SRVFVRVNUX05PTkRFRkFVTFRfUE9SVCkKKyAgICAgICAgaGFuZHNoYWtlciA9
IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAgIGhhbmRzaGFr
ZXIuc2hha2VfaGFuZHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNF
X05PTkRFRkFVTFRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5l
Y3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScs
IHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfc2VjdXJl
X25vbl9kZWZhdWx0X3BvcnQoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVl
c3QoX0dPT0RfUkVRVUVTVF9OT05ERUZBVUxUX1BPUlQpCisgICAgICAgIHJlcXVlc3QuaXNfaHR0
cHNfID0gVHJ1ZQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVx
dWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9j
a0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfU0VDVVJFX05PTkRFRiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAg
ICBkZWYgdGVzdF9nb29kX3JlcXVlc3RfZGVmYXVsdF9ub19wcm90b2NvbChzZWxmKToKKyAgICAg
ICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX05PX1BST1RPQ09MKQor
ICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIo
KSkKKyAgICAgICAgaGFuZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoX0dPT0RfUkVTUE9OU0VfTk9fUFJPVE9DT0wsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3Jl
cXVlc3Rfb3B0aW9uYWxfaGVhZGVycyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdChfR09PRF9SRVFVRVNUX1dJVEhfT1BUSU9OQUxfSEVBREVSUykKKyAgICAgICAgaGFu
ZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAgICAg
IGhhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBVmFs
dWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVyc19pblsnQUtleSdd
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3QuaGVhZGVyc19pblsnRW1wdHlWYWx1ZSddKQorCisgICAgZGVmIHRlc3RfYmFkX3Jl
cXVlc3RzKHNlbGYpOgorICAgICAgICBmb3IgcmVxdWVzdCBpbiBtYXAoX2NyZWF0ZV9yZXF1ZXN0
LCBfQkFEX1JFUVVFU1RTKToKKyAgICAgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFu
ZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwgaGFuZHNoYWtlci5zaGFrZV9oYW5kcykKKwor
CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMg
dmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0X21vY2sucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5w
eQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YjEzN2QxCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21vY2sucHkKQEAgLTAs
MCArMSwxMjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOSwg
R29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworIiIiVGVzdHMgZm9yIG1vY2sgbW9kdWxlLiIiIgorCisKK2ltcG9ydCBRdWV1ZQoraW1wb3J0
IHRocmVhZGluZworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBtb2NrCisKKworY2xhc3MgTW9j
a0Nvbm5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAg
ICAgIHNlbGYuX2Nvbm4gPSBtb2NrLk1vY2tDb25uKCdBQkNcclxuREVGR1xyXG5cclxuSElKSycp
CisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnQUJDXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnREVGR1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ0hJSksnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJycsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0X3JlYWQo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FCQ1xyXG5EJywgc2VsZi5fY29ubi5y
ZWFkKDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdFRkdcclxuXHJcbkhJJywgc2VsZi5f
Y29ubi5yZWFkKDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdKSycsIHNlbGYuX2Nvbm4u
cmVhZCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuX2Nvbm4ucmVhZCgx
MCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FuZF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnQUJDXHJcbkQnLCBzZWxmLl9jb25uLnJlYWQoNikpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ0VGR1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ1xyXG5ISUpLJywgc2VsZi5fY29ubi5yZWFkKDkpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisKKyAgICBkZWYg
dGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fY29ubi53cml0ZSgnSGVsbG9cclxuJykK
KyAgICAgICAgc2VsZi5fY29ubi53cml0ZSgnV29ybGRcclxuJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnSGVsbG9cclxuV29ybGRcclxuJywgc2VsZi5fY29ubi53cml0dGVuX2RhdGEoKSkK
KworCitjbGFzcyBNb2NrQmxvY2tpbmdDb25uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAg
ZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgY2xhc3MgTGluZVJlYWRlcih0aHJlYWRpbmcu
VGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCBxdWV1ZSk6Cisg
ICAgICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAg
ICAgICAgIHNlbGYuX3F1ZXVlID0gcXVldWUKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uID0g
Y29ubgorICAgICAgICAgICAgICAgIHNlbGYuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICAg
ICAgc2VsZi5zdGFydCgpCisgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAg
ICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb25uLnJl
YWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcXVldWUucHV0KGRhdGEpCisgICAg
ICAgIGNvbm4gPSBtb2NrLk1vY2tCbG9ja2luZ0Nvbm4oKQorICAgICAgICBxdWV1ZSA9IFF1ZXVl
LlF1ZXVlKCkKKyAgICAgICAgcmVhZGVyID0gTGluZVJlYWRlcihjb25uLCBxdWV1ZSkKKyAgICAg
ICAgc2VsZi5mYWlsVW5sZXNzKHF1ZXVlLmVtcHR5KCkpCisgICAgICAgIGNvbm4ucHV0X2J5dGVz
KCdGb28gYmFyXHJcbicpCisgICAgICAgIHJlYWQgPSBxdWV1ZS5nZXQoKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdGb28gYmFyXHJcbicsIHJlYWQpCisKKworY2xhc3MgTW9ja1RhYmxlVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fZGljdChzZWxm
KToKKyAgICAgICAgdGFibGUgPSBtb2NrLk1vY2tUYWJsZSh7J0tleSc6J1ZhbHVlJ30pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLRVknKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsna2V5J10pCisKKyAgICBkZWYgdGVzdF9j
cmVhdGVfZnJvbV9saXN0KHNlbGYpOgorICAgICAgICB0YWJsZSA9IG1vY2suTW9ja1RhYmxlKFso
J0tleScsICdWYWx1ZScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJs
ZS5nZXQoJ0tFWScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydr
ZXknXSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX3R1cGxlKHNlbGYpOgorICAgICAgICB0
YWJsZSA9IG1vY2suTW9ja1RhYmxlKCgoJ0tleScsICdWYWx1ZScpLCkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLRVknKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsna2V5J10pCisKKyAgICBkZWYgdGVzdF9zZXRfYW5kX2dl
dChzZWxmKToKKyAgICAgICAgdGFibGUgPSBtb2NrLk1vY2tUYWJsZSgpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoTm9uZSwgdGFibGUuZ2V0KCdLZXknKSkKKyAgICAgICAgdGFibGVbJ0tleSdd
ID0gJ1ZhbHVlJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgn
S2V5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdrZXkn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydLZXknXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZVsna2V5J10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ0tFWSddKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbXNndXRpbC5weSBiL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzYmE1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbXNndXRpbC5weQpAQCAtMCwwICsxLDE0OSBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgor
IyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBm
b3IgbXNndXRpbCBtb2R1bGUuIiIiCisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdW5pdHRlc3QK
KworaW1wb3J0IGNvbmZpZyAgIyBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdl
YnNvY2tldC4KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKK2ltcG9ydCBt
b2NrCisKKworZGVmIF9jcmVhdGVfcmVxdWVzdChyZWFkX2RhdGEpOgorICAgIHJldHVybiBtb2Nr
Lk1vY2tSZXF1ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubihyZWFkX2RhdGEpKQorCitkZWYg
X2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCk6CisgICAgcmV0dXJuIG1vY2suTW9ja1JlcXVlc3Qo
Y29ubmVjdGlvbj1tb2NrLk1vY2tCbG9ja2luZ0Nvbm4oKSkKKworY2xhc3MgTWVzc2FnZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NlbmRfbWVzc2FnZShzZWxmKToKKyAg
ICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnJykKKyAgICAgICAgbXNndXRpbC5zZW5k
X21lc3NhZ2UocmVxdWVzdCwgJ0hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgw
MEhlbGxvXHhmZicsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRl
ZiB0ZXN0X3NlbmRfbWVzc2FnZV91bmljb2RlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2Ny
ZWF0ZV9yZXF1ZXN0KCcnKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCB1
J1x1NjVlNScpCisgICAgICAgICMgVSs2NWU1IGlzIGVuY29kZWQgYXMgZTYsOTcsYTUgaW4gVVRG
LTgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFx4ZTZceDk3XHhhNVx4ZmYnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkK
KworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9
IF9jcmVhdGVfcmVxdWVzdCgnXHgwMEhlbGxvXHhmZlx4MDBXb3JsZCFceGZmJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQhJywgbXNndXRpbC5yZWNlaXZlX21l
c3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3NhZ2VfdW5pY29kZShz
ZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnXHgwMFx4ZTZceDljXHhh
Y1x4ZmYnKQorICAgICAgICAjIFUrNjcyYyBpcyBlbmNvZGVkIGFzIGU2LDljLGFjIGluIFVURi04
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdTY3MmMnLCBtc2d1dGlsLnJlY2VpdmVfbWVz
c2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV9kaXNjYXJkKHNl
bGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdceDgwXHgwNklHTk9SRVx4
MDBIZWxsb1x4ZmYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdceDAxRElTUkVH
QVJEXHhmZlx4MDBXb3JsZCFceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8n
LCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnV29ybGQhJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBk
ZWYgdGVzdF9wYXlsb2FkX2xlbmd0aChzZWxmKToKKyAgICAgICAgZm9yIGxlbmd0aCwgYnl0ZXMg
aW4gKCgwLCAnXHgwMCcpLCAoMHg3ZiwgJ1x4N2YnKSwgKDB4ODAsICdceDgxXHgwMCcpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MTIzNCwgJ1x4ODBceGE0XHgzNCcpKToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtc2d1dGlsLl9wYXlsb2FkX2xlbmd0aChfY3JlYXRlX3JlcXVlc3QoYnl0ZXMpKSkK
KworICAgIGRlZiB0ZXN0X3JlY2VpdmVfYnl0ZXMoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBf
Y3JlYXRlX3JlcXVlc3QoJ2FiY2RlZmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMn
LCBtc2d1dGlsLl9yZWNlaXZlX2J5dGVzKHJlcXVlc3QsIDMpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdkZWZnJywgbXNndXRpbC5fcmVjZWl2ZV9ieXRlcyhyZXF1ZXN0LCA0KSkKKworICAg
IGRlZiB0ZXN0X3JlYWRfdW50aWwoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QoJ2FiY1hkZWZnWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycsIG1zZ3V0
aWwuX3JlYWRfdW50aWwocmVxdWVzdCwgJ1gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
ZGVmZycsIG1zZ3V0aWwuX3JlYWRfdW50aWwocmVxdWVzdCwgJ1gnKSkKKworCitjbGFzcyBNZXNz
YWdlUmVjZWl2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9xdWV1ZShz
ZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgpCisgICAg
ICAgIHJlY2VpdmVyID0gbXNndXRpbC5NZXNzYWdlUmVjZWl2ZXIocmVxdWVzdCkKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlY2VpdmVyLnJlY2VpdmVfbm93YWl0KCkpCisKKyAg
ICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLnB1dF9ieXRlcygnXHgwMEhlbGxvIVx4ZmYnKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbyEnLCByZWNlaXZlci5yZWNlaXZlKCkpCisKKyAg
ICBkZWYgdGVzdF9vbm1lc3NhZ2Uoc2VsZik6CisgICAgICAgIG9ubWVzc2FnZV9xdWV1ZSA9IFF1
ZXVlLlF1ZXVlKCkKKyAgICAgICAgZGVmIG9ubWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2UpOgorICAg
ICAgICAgICAgb25tZXNzYWdlX3F1ZXVlLnB1dChtZXNzYWdlKQorCisgICAgICAgIHJlcXVlc3Qg
PSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQorICAgICAgICByZWNlaXZlciA9IG1zZ3V0aWwu
TWVzc2FnZVJlY2VpdmVyKHJlcXVlc3QsIG9ubWVzc2FnZV9oYW5kbGVyKQorCisgICAgICAgIHJl
cXVlc3QuY29ubmVjdGlvbi5wdXRfYnl0ZXMoJ1x4MDBIZWxsbyFceGZmJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnSGVsbG8hJywgb25tZXNzYWdlX3F1ZXVlLmdldCgpKQorCisKK2NsYXNz
IE1lc3NhZ2VTZW5kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zZW5k
KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkKKyAg
ICAgICAgc2VuZGVyID0gbXNndXRpbC5NZXNzYWdlU2VuZGVyKHJlcXVlc3QpCisKKyAgICAgICAg
c2VuZGVyLnNlbmQoJ1dvcmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFdvcmxk
XHhmZicsIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0
X3NlbmRfbm93YWl0KHNlbGYpOgorICAgICAgICAjIFVzZSBhIHF1ZXVlIHRvIGNoZWNrIHRoZSBi
eXRlcyB3cml0dGVuIGJ5IE1lc3NhZ2VTZW5kZXIuCisgICAgICAgICMgcmVxdWVzdC5jb25uZWN0
aW9uLndyaXR0ZW5fZGF0YSgpIGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZQorICAgICAgICAj
IE1lc3NhZ2VTZW5kZXIgcnVucyBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgICAgc2VuZF9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgZGVmIHdyaXRlKGJ5dGVzKToKKyAgICAgICAg
ICAgIHNlbmRfcXVldWUucHV0KGJ5dGVzKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9j
a2luZ19yZXF1ZXN0KCkKKyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlID0gd3JpdGUK
KworICAgICAgICBzZW5kZXIgPSBtc2d1dGlsLk1lc3NhZ2VTZW5kZXIocmVxdWVzdCkKKworICAg
ICAgICBzZW5kZXIuc2VuZF9ub3dhaXQoJ0hlbGxvJykKKyAgICAgICAgc2VuZGVyLnNlbmRfbm93
YWl0KCdXb3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBIZWxsb1x4ZmYnLCBz
ZW5kX3F1ZXVlLmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwV29ybGRceGZm
Jywgc2VuZF9xdWV1ZS5nZXQoKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3V0aWwucHkgYi9XZWJLaXRUb29scy9weXdl
YnNvY2tldC90ZXN0L3Rlc3RfdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwLi4yZWU1YTVhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0X3V0aWwucHkKQEAgLTAsMCArMSw1NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3IgdXRpbCBtb2R1bGUuIiIiCisK
KworaW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBjb25maWcgICMgVGhpcyBtdXN0IGJlIGltcG9y
dGVkIGJlZm9yZSBtb2RfcHl3ZWJzb2NrZXQuCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQg
dXRpbAorCisKK2NsYXNzIFV0aWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVz
dF9nZXRfc3RhY2tfdHJhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ05vbmVc
bicsIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEg
PSAxIC8gMCAgIyBJbnRlbnRpb25hbGx5IHJhaXNlIGV4Y2VwdGlvbgorICAgICAgICBleGNlcHQg
RXhjZXB0aW9uOgorICAgICAgICAgICAgdHJhY2UgPSB1dGlsLmdldF9zdGFja190cmFjZSgpCisg
ICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHJhY2Uuc3RhcnRzd2l0aCgnVHJhY2ViYWNrJykp
CisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHJhY2UuZmluZCgnWmVyb0RpdmlzaW9uRXJy
b3InKSAhPSAtMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0
Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9hX3dzaC5weSBiL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYV93c2gucHkKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzU3YTU0MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYV93c2gucHkKQEAgLTAs
MCArMSw0MiBAQAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZGVmIHdlYl9zb2NrZXRfc2hha2VfaGFu
ZHMocmVxdWVzdCk6CisgICAgaWYgcmVxdWVzdC53c19vcmlnaW4gPT0gJ2h0dHA6Ly9leGFtcGxl
LmNvbSc6CisgICAgICAgIHJldHVybgorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWNjZXB0YWJs
ZSBvcmlnaW46ICVyJyAlIHJlcXVlc3Qud3Nfb3JpZ2luKQorCisKK2RlZiB3ZWJfc29ja2V0X3Ry
YW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdhX3dz
aC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkpCisKKworIyB2aTpz
dHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rl
c3RkYXRhL2hhbmRsZXJzL2Jfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90
ZXN0ZGF0YS9oYW5kbGVycy9iX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwLi43Zjg3YzZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9iX3dzaC5weQpAQCAtMCwwICsxLDMxIEBACisjIENvcHly
aWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisj
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCisjIGludGVudGlvbmFsbHkgbGVmdCBibGFuawpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvY193c2gucHkg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9jX3dz
aC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzJlMDI4Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVy
cy9zdWIvY193c2gucHkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xl
IEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIi
Tm9uLWNhbGxhYmxlIGhhbmRsZXJzLgorIiIiCisKKword2ViX3NvY2tldF9zaGFrZV9oYW5kcyA9
IFRydWUKK3dlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSA9IDEKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvc3ViL2QucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hh
bmRsZXJzL3N1Yi9kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2NGVi
ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzL3N1Yi9kLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IDIwMDks
IEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKKyIiIkNvcnJlY3Qgc2lnbmF0dXJlcywgd3JvbmcgZmlsZSBuYW1lLgorIiIiCisKKworZGVm
IHdlYl9zb2NrZXRfc2hha2VfaGFuZHMocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJf
c29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndy
aXRlKCdzdWIvZC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkpCisK
KworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9lX3dzaC5weSBiL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Vfd3NoLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2OTY4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9lX3dzaC5weQpAQCAt
MCwwICsxLDQwIEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitkZWYgd2ViX3NvY2tldF9zaGFrZV9o
YW5kcyhyZXF1ZXN0KToKKyAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5z
ZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdzdWIvZV93
c2gucHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQorCisKKyMgdmk6
c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90
ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZl93c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9mX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwLi4yODQxYWQwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZl93c2gucHkKQEAgLTAsMCArMSw0
NCBAQAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiRXhjZXB0aW9uIGluIHdlYl9zb2NrZXRfdHJh
bnNmZXJfZGF0YSgpLgorIiIiCisKKworZGVmIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMocmVxdWVz
dCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6
CisgICAgcmFpc2UgRXhjZXB0aW9uKCdJbnRlbnRpb25hbCBFeGNlcHRpb24gZm9yICVzLCAlcycg
JQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19w
cm90b2NvbCkpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9nX3dzaC5weSBiL1dlYktp
dFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2dfd3NoLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkN2ExMmMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9n
X3dzaC5weQpAQCAtMCwwICsxLDQ0IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgor
IyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJXcm9uZyB3
ZWJfc29ja2V0X3NoYWtlX2hhbmRzIHNpZ25hdHVyZS4KKyIiIgorCisKK2RlZiBub193ZWJfc29j
a2V0X3NoYWtlX2hhbmRzKHJlcXVlc3QpOgorICAgIHBhc3MKKworCitkZWYgd2ViX3NvY2tldF90
cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnc3Vi
L2dfd3NoLnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisj
IHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2hfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvaF93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggMDAwMDAwMC4uMjYzMmQwNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2hfd3NoLnB5CkBAIC0wLDAg
KzEsNDQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldyb25nIHdlYl9zb2NrZXRfdHJhbnNm
ZXJfZGF0YSgpIHNpZ25hdHVyZS4KKyIiIgorCisKK2RlZiB3ZWJfc29ja2V0X3NoYWtlX2hhbmRz
KHJlcXVlc3QpOgorICAgIHBhc3MKKworCitkZWYgbm9fd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRh
KHJlcXVlc3QpOgorICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnc3ViL2hfd3NoLnB5IGlz
IGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1
ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3
PTQgZXQ=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40705</attachid>
            <date>2009-10-06 02:50:55 -0700</date>
            <delta_ts>2009-10-15 22:14:45 -0700</delta_ts>
            <desc>add mod_pywebsocket to test Web Sockets</desc>
            <filename>bug-27490-20091006185052.patch</filename>
            <type>text/plain</type>
            <size>113029</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmOTkyOGQ3Li42NDVkMWFjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDktMTAt
MDEgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtb2RfcHl3ZWJzb2NrZXQgdG8gdGVz
dCBXZWIgU29ja2V0cy4KKyAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5d2Vic29j
a2V0LworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0
OTAKKworICAgICAgICAqIHB5d2Vic29ja2V0L0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAqIHB5
d2Vic29ja2V0L01BTklGRVNULmluOiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9SRUFE
TUU6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQucHk6
IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L2V4YW1wbGUvZWNob193c2gucHk6IEFkZGVk
LgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weTogQWRk
ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFy
c2VyaGFuZGxlci5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29j
a2V0L21zZ3V0aWwucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9zdGFuZGFsb25lLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3
ZWJzb2NrZXQvdXRpbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvc2V0dXAucHk6
IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBweXdlYnNvY2tldC90ZXN0L21vY2sucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vi
c29ja2V0L3Rlc3QvcnVuX2FsbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0X2Rpc3BhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rl
c3RfaGFuZHNoYWtlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3Rf
bW9jay5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwu
cHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF91dGlsLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2Ffd3NoLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2Jf
d3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRs
ZXJzL3N1Yi9jX3dzaC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
ZGF0YS9oYW5kbGVycy9zdWIvZC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZV93c2gucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vi
c29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Zfd3NoLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9nX3dzaC5weTogQWRk
ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvaF93
c2gucHk6IEFkZGVkLgorCiAyMDA5LTA5LTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSdWJiZXJzdGFtcGVkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9DT1BZSU5HIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlkNTJk
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvQ09QWUlORwpAQCAt
MCwwICsxLDI4IEBACitDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KK0FsbCByaWdodHMgcmVz
ZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC9NQU5JRkVTVC5pbiBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L01BTklG
RVNULmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MjU2ODgKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9NQU5JRkVTVC5pbgpAQCAtMCww
ICsxLDYgQEAKK2luY2x1ZGUgQ09QWUlORworaW5jbHVkZSBNQU5JRkVTVC5pbgoraW5jbHVkZSBS
RUFETUUKK3JlY3Vyc2l2ZS1pbmNsdWRlIGV4YW1wbGUgKi5weQorcmVjdXJzaXZlLWluY2x1ZGUg
bW9kX3B5d2Vic29ja2V0ICoucHkKK3JlY3Vyc2l2ZS1pbmNsdWRlIHRlc3QgKi5weQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVBRE1FIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWYwNWYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9SRUFETUUKQEAgLTAs
MCArMSw2IEBACitJbnN0YWxsIHRoaXMgcGFja2FnZSBieToKKyQgcHl0aG9uIHNldHVwLnB5IGJ1
aWxkCiskIHN1ZG8gcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKKworVGhlbiByZWFkIGRvY3VtZW50
IGJ5OgorJCBweWRvYyBtb2RfcHl3ZWJzb2NrZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC9leGFtcGxlL2VjaG9fY2xpZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAuLmE0MzhjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9l
eGFtcGxlL2VjaG9fY2xpZW50LnB5CkBAIC0wLDAgKzEsMTgzIEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldlYiBTb2NrZXQgRWNobyBjbGllbnQu
CisKK1RoaXMgaXMgYW4gZXhhbXBsZSBXZWIgU29ja2V0IGNsaWVudCB0aGF0IHRhbGtzIHdpdGgg
ZWNob193c2gucHkuCitUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIG1vZF9weXdlYnNv
Y2tldCBpbnN0YWxsYXRpb24uCisKK05vdGU6CitUaGlzIGNvZGUgaXMgZmFyIGZyb20gcm9idXN0
LCBlLmcuLCB3ZSBjdXQgY29ybmVycyBpbiBoYW5kc2hha2UuCisiIiIKKworCitpbXBvcnQgY29k
ZWNzCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2ltcG9ydCBzb2NrZXQKK2lt
cG9ydCBzeXMKKworCitfREVGQVVMVF9QT1JUID0gODAKK19ERUZBVUxUX1NFQ1VSRV9QT1JUID0g
NDQzCitfVU5ERUZJTkVEX1BPUlQgPSAtMQorCisKK2NsYXNzIF9UTFNTb2NrZXQob2JqZWN0KToK
KyAgICAiIiJXcmFwcGVyIGZvciBhIFRMUyBjb25uZWN0aW9uLiIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHJhd19zb2NrZXQpOgorICAgICAgICBzZWxmLl9zc2wgPSBzb2NrZXQuc3NsKHJh
d19zb2NrZXQpCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6CisgICAgICAgIHJldHVybiBz
ZWxmLl9zc2wud3JpdGUoYnl0ZXMpCisKKyAgICBkZWYgcmVjdihzZWxmLCBzaXplPS0xKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3NzbC5yZWFkKHNpemUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6
CisgICAgICAgICMgTm90aGluZyB0byBkby4KKyAgICAgICAgcGFzcworCisKK2NsYXNzIEVjaG9D
bGllbnQob2JqZWN0KToKKyAgICAiIiJXZWIgU29ja2V0IGVjaG8gY2xpZW50LiIiIgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0
aW9ucworICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCisKKyAgICBkZWYgcnVuKHNlbGYpOgor
ICAgICAgICAiIiJSdW4gdGhlIGNsaWVudC4KKworICAgICAgICBTaGFrZSBoYW5kcyBhbmQgdGhl
biByZXBlYXQgc2VuZGluZyBtZXNzYWdlIGFuZCByZWNlaXZpbmcgaXRzIGVjaG8uCisgICAgICAg
ICIiIgorICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNvbm5lY3QoKHNlbGYuX29wdGlvbnMuc2VydmVy
X2hvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5z
ZXJ2ZXJfcG9ydCkpCisgICAgICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnVzZV90bHM6CisgICAg
ICAgICAgICAgICAgc2VsZi5fc29ja2V0ID0gX1RMU1NvY2tldChzZWxmLl9zb2NrZXQpCisgICAg
ICAgICAgICBzZWxmLl9oYW5kc2hha2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5f
b3B0aW9ucy5tZXNzYWdlLnNwbGl0KCcsJyk6CisgICAgICAgICAgICAgICAgZnJhbWUgPSAnXHgw
MCcgKyBsaW5lLmVuY29kZSgndXRmLTgnKSArICdceGZmJworICAgICAgICAgICAgICAgIHNlbGYu
X3NvY2tldC5zZW5kKGZyYW1lKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVy
Ym9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ1NlbmQ6ICVzJyAlIGxpbmUKKyAgICAg
ICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KGxlbihmcmFtZSkpCisgICAg
ICAgICAgICAgICAgaWYgcmVjZWl2ZWQgIT0gZnJhbWU6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignSW5jb3JyZWN0IGVjaG86ICVyJyAlIHJlY2VpdmVkKQorICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJp
bnQgJ1JlY3Y6ICVzJyAlIHJlY2VpdmVkWzE6LTFdLmRlY29kZSgndXRmLTgnKQorICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKKworICAgIGRlZiBfaGFu
ZHNoYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZCgKKyAgICAgICAgICAgICAg
ICAnR0VUICVzIEhUVFAvMS4xXHJcbicgJSBzZWxmLl9vcHRpb25zLnJlc291cmNlKQorICAgICAg
ICBzZWxmLl9zb2NrZXQuc2VuZCgnVXBncmFkZTogV2ViU29ja2V0XHJcbicpCisgICAgICAgIHNl
bGYuX3NvY2tldC5zZW5kKCdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicpCisgICAgICAgIHNlbGYu
X3NvY2tldC5zZW5kKHNlbGYuX2Zvcm1hdF9ob3N0X2hlYWRlcigpKQorICAgICAgICBzZWxmLl9z
b2NrZXQuc2VuZCgKKyAgICAgICAgICAgICAgICAnT3JpZ2luOiAlc1xyXG4nICUgc2VsZi5fb3B0
aW9ucy5vcmlnaW4pCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKCdcclxuJykKKworICAgICAg
ICBmb3IgZXhwZWN0ZWRfY2hhciBpbiAoCisgICAgICAgICAgICAgICAgJ0hUVFAvMS4xIDEwMSBX
ZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgICAgICAgICAgICAgJ1VwZ3Jh
ZGU6IFdlYlNvY2tldFxyXG4nCisgICAgICAgICAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJyk6CisgICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCisg
ICAgICAgICAgICBpZiBleHBlY3RlZF9jaGFyICE9IHJlY2VpdmVkOgorICAgICAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbignSGFuZHNoYWtlIGZhaWx1cmUnKQorICAgICAgICAjIFdlIGN1dCBj
b3JuZXJzIGFuZCBza2lwIG90aGVyIGhlYWRlcnMuCisgICAgICAgIHNlbGYuX3NraXBfaGVhZGVy
cygpCisKKyAgICBkZWYgX3NraXBfaGVhZGVycyhzZWxmKToKKyAgICAgICAgdGVybWluYXRvciA9
ICdcclxuXHJcbicKKyAgICAgICAgcG9zID0gMAorICAgICAgICB3aGlsZSBwb3MgPCBsZW4odGVy
bWluYXRvcik6CisgICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBd
CisgICAgICAgICAgICBpZiByZWNlaXZlZCA9PSB0ZXJtaW5hdG9yW3Bvc106CisgICAgICAgICAg
ICAgICAgcG9zICs9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG9zID0g
MAorCisgICAgZGVmIF9mb3JtYXRfaG9zdF9oZWFkZXIoc2VsZik6CisgICAgICAgIGhvc3QgPSAn
SG9zdDogJyArIHNlbGYuX29wdGlvbnMuc2VydmVyX2hvc3QKKyAgICAgICAgaWYgKChub3Qgc2Vs
Zi5fb3B0aW9ucy51c2VfdGxzIGFuZAorICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVy
X3BvcnQgIT0gX0RFRkFVTFRfUE9SVCkgb3IKKyAgICAgICAgICAgIChzZWxmLl9vcHRpb25zLnVz
ZV90bHMgYW5kCisgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfcG9ydCAhPSBfREVG
QVVMVF9TRUNVUkVfUE9SVCkpOgorICAgICAgICAgICAgaG9zdCArPSAnOicgKyBzdHIoc2VsZi5f
b3B0aW9ucy5zZXJ2ZXJfcG9ydCkKKyAgICAgICAgaG9zdCArPSAnXHJcbicKKyAgICAgICAgcmV0
dXJuIGhvc3QKKworCitkZWYgbWFpbigpOgorICAgIHN5cy5zdGRvdXQgPSBjb2RlY3MuZ2V0d3Jp
dGVyKCd1dGYtOCcpKHN5cy5zdGRvdXQpCisKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQor
ICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNlcnZlcl9ob3N0JywgZGVzdD0nc2VydmVy
X2hvc3QnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J2xv
Y2FsaG9zdCcsIGhlbHA9J3NlcnZlciBob3N0JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXAn
LCAnLS1zZXJ2ZXJfcG9ydCcsIGRlc3Q9J3NlcnZlcl9wb3J0JywgdHlwZT0naW50JywKKyAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PV9VTkRFRklORURfUE9SVCwgaGVscD0nc2VydmVyIHBv
cnQnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbycsICctLW9yaWdpbicsIGRlc3Q9J29yaWdp
bicsIHR5cGU9J3N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0naHR0cDov
L2xvY2FsaG9zdC8nLCBoZWxwPSdvcmlnaW4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcics
ICctLXJlc291cmNlJywgZGVzdD0ncmVzb3VyY2UnLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ9Jy9lY2hvJywgaGVscD0ncmVzb3VyY2UgcGF0aCcpCisgICAg
cGFyc2VyLmFkZF9vcHRpb24oJy1tJywgJy0tbWVzc2FnZScsIGRlc3Q9J21lc3NhZ2UnLCB0eXBl
PSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NvbW1hLXNlcGFyYXRlZCBt
ZXNzYWdlcyB0byBzZW5kJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcs
IGRlc3Q9J3ZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PVRydWUsIGhlbHA9J3N1cHByZXNzIG1lc3NhZ2VzJykKKyAgICBwYXJzZXIu
YWRkX29wdGlvbignLXQnLCAnLS10bHMnLCBkZXN0PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90
cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExT
ICh3c3M6Ly8pJykKKyAgICAob3B0aW9ucywgXykgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAg
ICAjIERlZmF1bHQgcG9ydCBudW1iZXIgZGVwZW5kcyBvbiB3aGV0aGVyIFRMUyBpcyB1c2VkLgor
ICAgIGlmIG9wdGlvbnMuc2VydmVyX3BvcnQgPT0gX1VOREVGSU5FRF9QT1JUOgorICAgICAgICBp
ZiBvcHRpb25zLnVzZV90bHM6CisgICAgICAgICAgICBvcHRpb25zLnNlcnZlcl9wb3J0ID0gX0RF
RkFVTFRfU0VDVVJFX1BPUlQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wdGlvbnMuc2Vy
dmVyX3BvcnQgPSBfREVGQVVMVF9QT1JUCisKKyAgICAjIG9wdHBhcnNlIGRvZXNuJ3Qgc2VlbSB0
byBoYW5kbGUgbm9uLWFzY2lpIGRlZmF1bHQgdmFsdWVzLgorICAgICMgU2V0IGRlZmF1bHQgbWVz
c2FnZSBoZXJlLgorICAgIGlmIG5vdCBvcHRpb25zLm1lc3NhZ2U6CisgICAgICAgIG9wdGlvbnMu
bWVzc2FnZSA9IHUnSGVsbG8sXHU2NWU1XHU2NzJjJyAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQor
CisgICAgRWNob0NsaWVudChvcHRpb25zKS5ydW4oKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21h
aW5fXyc6CisgICAgbWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5IGIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi5kMDU2OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvZXhhbXBsZS9lY2hvX3dzaC5weQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAy
MDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorCisKK2RlZiB3ZWJf
c29ja2V0X3NoYWtlX2hhbmRzKHJlcXVlc3QpOgorICAgIHBhc3MgICMgYWx3YXlzIGFjY2VwdAor
CisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVjZWl2ZXIg
PSBtc2d1dGlsLk1lc3NhZ2VSZWNlaXZlcihyZXF1ZXN0KQorICAgIHNlbmRlciA9IG1zZ3V0aWwu
TWVzc2FnZVNlbmRlcihyZXF1ZXN0KQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGxpbmUgPSBy
ZWNlaXZlci5yZWNlaXZlKCkKKyAgICAgICAgc2VuZGVyLnNlbmQobGluZSkKKworCisjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdl
YnNvY2tldC9fX2luaXRfXy5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOWNi
ODZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vi
c29ja2V0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdv
b2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
KyIiIldlYiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIuCisKK21vZF9w
eXdlYnNvY2tldCBpcyBhIFdlYiBTb2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2
ZXIKK2ludGVuZGVkIGZvciB0ZXN0aW5nIG9yIGV4cGVyaW1lbnRhbCBwdXJwb3Nlcy4gbW9kX3B5
dGhvbiBpcyByZXF1aXJlZC4KKworSW5zdGFsbGF0aW9uOgorCiswLiBQcmVwYXJlIGFuIEFwYWNo
ZSBIVFRQIFNlcnZlciBmb3Igd2hpY2ggbW9kX3B5dGhvbiBpcyBlbmFibGVkLgorCisxLiBTcGVj
aWZ5IHRoZSBmb2xsb3dpbmcgQXBhY2hlIEhUVFAgU2VydmVyIGRpcmVjdGl2ZXMgdG8gc3VpdCB5
b3VyCisgICBjb25maWd1cmF0aW9uLgorCisgICBJZiBtb2RfcHl3ZWJzb2NrZXQgaXMgbm90IGlu
IHRoZSBQeXRob24gcGF0aCwgc3BlY2lmeSB0aGUgZm9sbG93aW5nLgorICAgPHdlYnNvY2tfbGli
PiBpcyB0aGUgZGlyZWN0b3J5IHdoZXJlIG1vZF9weXdlYnNvY2tldCBpcyBpbnN0YWxsZWQuCisK
KyAgICAgICBQeXRob25QYXRoICJzeXMucGF0aCtbJzx3ZWJzb2NrX2xpYj4nXSIKKworICAgQWx3
YXlzIHNwZWNpZnkgdGhlIGZvbGxvd2luZy4gPHdlYnNvY2tfaGFuZGxlcnM+IGlzIHRoZSBkaXJl
Y3Rvcnkgd2hlcmUKKyAgIHVzZXItd3JpdHRlbiBXZWIgU29ja2V0IGhhbmRsZXJzIGFyZSBwbGFj
ZWQuCisKKyAgICAgICBQeXRob25PcHRpb24gbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCA8
d2Vic29ja19oYW5kbGVycz4KKyAgICAgICBQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVyIG1vZF9w
eXdlYnNvY2tldC5oZWFkZXJwYXJzZXJoYW5kbGVyCisKKyAgIEV4YW1wbGUgc25pcHBldCBvZiBo
dHRwZC5jb25mOgorICAgKG1vZF9weXdlYnNvY2tldCBpcyBpbiAvd2Vic29ja19saWIsIFdlYiBT
b2NrZXQgaGFuZGxlcnMgYXJlIGluCisgICAvd2Vic29ja19oYW5kbGVycywgcG9ydCBpcyA4MCBm
b3Igd3MsIDQ0MyBmb3Igd3NzLikKKworICAgICAgIDxJZk1vZHVsZSBweXRob25fbW9kdWxlPgor
ICAgICAgICAgUHl0aG9uUGF0aCAic3lzLnBhdGgrWycvd2Vic29ja19saWInXSIKKyAgICAgICAg
IFB5dGhvbk9wdGlvbiBtb2RfcHl3ZWJzb2NrZXQuaGFuZGxlcl9yb290IC93ZWJzb2NrX2hhbmRs
ZXJzCisgICAgICAgICBQeXRob25IZWFkZXJQYXJzZXJIYW5kbGVyIG1vZF9weXdlYnNvY2tldC5o
ZWFkZXJwYXJzZXJoYW5kbGVyCisgICAgICAgPC9JZk1vZHVsZT4KKworV3JpdGluZyBXZWIgU29j
a2V0IGhhbmRsZXJzOgorCitXaGVuIGEgV2ViIFNvY2tldCByZXF1ZXN0IGNvbWVzIGluLCB0aGUg
cmVzb3VyY2UgbmFtZQorc3BlY2lmaWVkIGluIHRoZSBoYW5kc2hha2UgaXMgY29uc2lkZXJlZCBh
cyBpZiBpdCBpcyBhIGZpbGUgcGF0aCB1bmRlcgorPHdlYnNvY2tfaGFuZGxlcnM+IGFuZCB0aGUg
aGFuZGxlciBkZWZpbmVkIGluCis8d2Vic29ja19oYW5kbGVycz4vPHJlc291cmNlX25hbWU+X3dz
aC5weSBpcyBpbnZva2VkLgorCitGb3IgZXhhbXBsZSwgaWYgdGhlIHJlc291cmNlIG5hbWUgaXMg
L2V4YW1wbGUvY2hhdCwgdGhlIGhhbmRsZXIgZGVmaW5lZCBpbgorPHdlYnNvY2tfaGFuZGxlcnM+
L2V4YW1wbGUvY2hhdF93c2gucHkgaXMgaW52b2tlZC4KKworQSBXZWIgU29ja2V0IGhhbmRsZXIg
aXMgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zOgorCisgICAgd2ViX3Nv
Y2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KQorICAgIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShy
ZXF1ZXN0KQorCit3aGVyZToKKyAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisKK3dl
Yl9zb2NrZXRfc2hha2VfaGFuZHMgaXMgY2FsbGVkIGR1cmluZyB0aGUgaGFuZHNoYWtlIGFmdGVy
IHRoZSBoZWFkZXJzCithcmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbmQgV2ViIFNvY2tldCBwcm9w
ZXJ0aWVzICh3c19sb2NhdGlvbiwKK3dzX29yaWdpbiwgd3NfcHJvdG9jb2wsIGFuZCB3c19yZXNv
dXJjZSkgYXJlIGFkZGVkIHRvIHJlcXVlc3QuCitBIGhhbmRsZXIgY2FuIHJlamVjdCB0aGUgcmVx
dWVzdCBieSByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKword2ViX3NvY2tldF90cmFuc2Zlcl9kYXRh
IGlzIGNhbGxlZCBhZnRlciB0aGUgaGFuZHNoYWtlIGNvbXBsZXRlZAorc3VjY2Vzc2Z1bGx5LiBB
IGhhbmRsZXIgY2FuIHJlY2VpdmUvc2VuZCBtZXNzYWdlcyBmcm9tL3RvIHRoZSBjbGllbnQKK3Vz
aW5nIHJlcXVlc3QuIG1vZF9weXdlYnNvY2tldC5tc2d1dGlsIG1vZHVsZSBwcm92aWRlcyB1dGls
aXRpZXMKK2ZvciBkYXRhIHRyYW5zZmVyLgorIiIiCisKKworIyB2aTpzdHM9NCBzdz00IGV0IHR3
PTcyCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQv
ZGlzcGF0Y2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlz
cGF0Y2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmRlOTU0ZgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9k
aXNwYXRjaC5weQpAQCAtMCwwICsxLDE5MiBAQAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIElu
Yy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiRGlz
cGF0Y2ggV2ViIFNvY2tldCByZXF1ZXN0LgorIiIiCisKKworaW1wb3J0IG9zCitpbXBvcnQgcmUK
KworaW1wb3J0IHV0aWwKKworCitfU09VUkNFX1BBVEhfUEFUVEVSTiA9IHJlLmNvbXBpbGUocico
P2kpX3dzaFwucHkkJykKK19TT1VSQ0VfU1VGRklYID0gJ193c2gucHknCitfU0hBS0VfSEFORFNf
SEFORExFUl9OQU1FID0gJ3dlYl9zb2NrZXRfc2hha2VfaGFuZHMnCitfVFJBTlNGRVJfREFUQV9I
QU5ETEVSX05BTUUgPSAnd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhJworCisKK2NsYXNzIERpc3Bh
dGNoRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gaW4gZGlzcGF0Y2hpbmcgV2Vi
IFNvY2tldCByZXF1ZXN0LiIiIgorCisgICAgcGFzcworCisKK2RlZiBfbm9ybWFsaXplX3BhdGgo
cGF0aCk6CisgICAgIiIiTm9ybWFsaXplIHBhdGguCisKKyAgICBBcmdzOgorICAgICAgICBwYXRo
OiB0aGUgcGF0aCB0byBub3JtYWxpemUuCisKKyAgICBQYXRoIGlzIGNvbnZlcnRlZCB0byB0aGUg
YWJzb2x1dGUgcGF0aC4KKyAgICBUaGUgaW5wdXQgcGF0aCBjYW4gdXNlIGVpdGhlciAnXFwnIG9y
ICcvJyBhcyB0aGUgc2VwYXJhdG9yLgorICAgIFRoZSBub3JtYWxpemVkIHBhdGggYWx3YXlzIHVz
ZXMgJy8nIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsYXRmb3JtLgorICAgICIiIgorCisgICAgcGF0aCA9
IHBhdGgucmVwbGFjZSgnXFwnLCBvcy5wYXRoLnNlcCkKKyAgICBwYXRoID0gb3MucGF0aC5hYnNw
YXRoKHBhdGgpCisgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisgICAgcmV0dXJu
IHBhdGgKKworCitkZWYgX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKGJhc2VfZGlyKToKKyAg
ICBiYXNlX2RpciA9IF9ub3JtYWxpemVfcGF0aChiYXNlX2RpcikKKyAgICBiYXNlX2xlbiA9IGxl
bihiYXNlX2RpcikKKyAgICBzdWZmaXhfbGVuID0gbGVuKF9TT1VSQ0VfU1VGRklYKQorICAgIGRl
ZiBjb252ZXJ0ZXIocGF0aCk6CisgICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKF9TT1VSQ0Vf
U1VGRklYKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHBhdGggPSBfbm9ybWFs
aXplX3BhdGgocGF0aCkKKyAgICAgICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aChiYXNlX2Rpcik6
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gcGF0aFtiYXNlX2xlbjot
c3VmZml4X2xlbl0KKyAgICByZXR1cm4gY29udmVydGVyCisKKworZGVmIF9zb3VyY2VfZmlsZV9w
YXRocyhkaXJlY3RvcnkpOgorICAgICIiIllpZWxkIFdlYiBTb2NrZXQgSGFuZGxlciBzb3VyY2Ug
ZmlsZSBuYW1lcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgorCisgICAgZm9yIHJvb3QsIHVu
dXNlZF9kaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6CisgICAgICAgIGZvciBiYXNl
IGluIGZpbGVzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBiYXNlKQor
ICAgICAgICAgICAgaWYgX1NPVVJDRV9QQVRIX1BBVFRFUk4uc2VhcmNoKHBhdGgpOgorICAgICAg
ICAgICAgICAgIHlpZWxkIHBhdGgKKworCitkZWYgX3NvdXJjZShzb3VyY2Vfc3RyKToKKyAgICAi
IiJTb3VyY2UgYSBoYW5kbGVyIGRlZmluaXRpb24gc3RyaW5nLiIiIgorCisgICAgZ2xvYmFsX2Rp
YyA9IHt9CisgICAgdHJ5OgorICAgICAgICBleGVjIHNvdXJjZV9zdHIgaW4gZ2xvYmFsX2RpYwor
ICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ0Vycm9y
IGluIHNvdXJjaW5nIGhhbmRsZXI6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRp
bC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICByZXR1cm4gKF9leHRyYWN0X2hhbmRsZXIoZ2xvYmFs
X2RpYywgX1NIQUtFX0hBTkRTX0hBTkRMRVJfTkFNRSksCisgICAgICAgICAgICBfZXh0cmFjdF9o
YW5kbGVyKGdsb2JhbF9kaWMsIF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSkpCisKKworZGVm
IF9leHRyYWN0X2hhbmRsZXIoZGljLCBuYW1lKToKKyAgICBpZiBuYW1lIG5vdCBpbiBkaWM6Cisg
ICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBkZWZpbmVkLicgJSBuYW1lKQor
ICAgIGhhbmRsZXIgPSBkaWNbbmFtZV0KKyAgICBpZiBub3QgY2FsbGFibGUoaGFuZGxlcik6Cisg
ICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJyVzIGlzIG5vdCBjYWxsYWJsZS4nICUgbmFtZSkK
KyAgICByZXR1cm4gaGFuZGxlcgorCisKK2NsYXNzIERpc3BhdGNoZXIob2JqZWN0KToKKyAgICAi
IiJEaXNwYXRjaGVzIFdlYiBTb2NrZXQgcmVxdWVzdHMuCisKKyAgICBUaGlzIGNsYXNzIG1haW50
YWlucyBhIG1hcCBmcm9tIHJlc291cmNlIG5hbWUgdG8gaGFuZGxlcnMuCisgICAgIiIiCisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcm9vdF9kaXIpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4g
aW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJvb3RfZGlyOiBUaGUgZGly
ZWN0b3J5IHdoZXJlIGhhbmRsZXIgZGVmaW5pdGlvbiBmaWxlcyBhcmUKKyAgICAgICAgICAgIHBs
YWNlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5faGFuZGxlcnMgPSB7fQorICAgICAg
ICBzZWxmLl9zb3VyY2Vfd2FybmluZ3MgPSBbXQorICAgICAgICBzZWxmLl9zb3VyY2VfZmlsZXNf
aW5fZGlyKHJvb3RfZGlyKQorCisgICAgZGVmIHNvdXJjZV93YXJuaW5ncyhzZWxmKToKKyAgICAg
ICAgIiIiUmV0dXJuIHdhcm5pbmdzIGluIHNvdXJjaW5nIGhhbmRsZXJzLiIiIgorCisgICAgICAg
IHJldHVybiBzZWxmLl9zb3VyY2Vfd2FybmluZ3MKKworICAgIGRlZiBzaGFrZV9oYW5kcyhzZWxm
LCByZXF1ZXN0KToKKyAgICAgICAgIiIiSG9vayBpbnRvIFdlYiBTb2NrZXQgaGFuZHNoYWtlLgor
CisgICAgICAgIFNlbGVjdCBhIGhhbmRsZXIgYmFzZWQgb24gcmVxdWVzdC51cmkgYW5kIGNhbGwg
aXRzCisgICAgICAgIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMgZnVuY3Rpb24uCisKKyAgICAgICAg
QXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAg
IiIiCisKKyAgICAgICAgc2hha2VfaGFuZHNfLCBfID0gc2VsZi5faGFuZGxlcihyZXF1ZXN0KQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBzaGFrZV9oYW5kc18ocmVxdWVzdCkKKyAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ3NoYWtl
X2hhbmRzKCkgcmFpc2VkIGV4Y2VwdGlvbjogJyArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkpCisKKyAgICBkZWYgdHJhbnNmZXJfZGF0YShz
ZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiTGV0IGEgaGFuZGxlciB0cmFuc2Zlcl9kYXRhIHdp
dGggYSBXZWIgU29ja2V0IGNsaWVudC4KKworICAgICAgICBTZWxlY3QgYSBoYW5kbGVyIGJhc2Vk
IG9uIHJlcXVlc3Qud3NfcmVzb3VyY2UgYW5kIGNhbGwgaXRzCisgICAgICAgIHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YSBmdW5jdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVx
dWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICBfLCB0cmFu
c2Zlcl9kYXRhXyA9IHNlbGYuX2hhbmRsZXIocmVxdWVzdCkKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgdHJhbnNmZXJfZGF0YV8ocmVxdWVzdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK
KyAgICAgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ3RyYW5zZmVyX2RhdGEoKSByYWlzZWQg
ZXhjZXB0aW9uOiAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5nZXRf
c3RhY2tfdHJhY2UoKSkKKworICAgIGRlZiBfaGFuZGxlcihzZWxmLCByZXF1ZXN0KToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZXJzW3JlcXVlc3Qud3NfcmVz
b3VyY2VdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIERpc3Bh
dGNoRXJyb3IoJ05vIGhhbmRsZXIgZm9yOiAlcicgJSByZXF1ZXN0LndzX3Jlc291cmNlKQorCisg
ICAgZGVmIF9zb3VyY2VfZmlsZXNfaW5fZGlyKHNlbGYsIHJvb3RfZGlyKToKKyAgICAgICAgIiIi
U291cmNlIGFsbCB0aGUgaGFuZGxlciBzb3VyY2UgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4iIiIK
KworICAgICAgICB0b19yZXNvdXJjZSA9IF9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcihyb290
X2RpcikKKyAgICAgICAgZm9yIHBhdGggaW4gX3NvdXJjZV9maWxlX3BhdGhzKHJvb3RfZGlyKToK
KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBoYW5kbGVyID0gX3NvdXJjZShvcGVu
KHBhdGgpLnJlYWQoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBEaXNwYXRjaEVycm9yLCBlOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3NvdXJjZV93YXJuaW5ncy5hcHBlbmQoJyVzOiAlcycgJSAocGF0
aCwgZSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuX2hhbmRs
ZXJzW3RvX3Jlc291cmNlKHBhdGgpXSA9IGhhbmRsZXIKKworCisjIHZpOnN0cz00IHN3PTQgZXQK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5k
c2hha2UucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNo
YWtlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxNWZlMmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFu
ZHNoYWtlLnB5CkBAIC0wLDAgKzEsMTc3IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5j
LgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJXZWIg
U29ja2V0IGhhbmRzaGFraW5nLgorCitOb3RlOiByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVh
ZCBhcmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZlbiB0aG91Z2gKK21vZF9weXRob24gZG9jdW1l
bnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uIGhhbmRs
ZXJzLgorVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBs
ZSwgcmVxdWVzdC53cml0ZS9yZWFkIGFyZQorbm90IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24n
dCBhbGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRpbmcvcmVhZGluZy4KKyIiIgorCisKK2ltcG9y
dCByZQorCisKK19ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCA9IDgwCitfREVGQVVMVF9XRUJfU09D
S0VUX1NFQ1VSRV9QT1JUID0gNDQzCitfV0VCX1NPQ0tFVF9TQ0hFTUUgPSAnd3MnCitfV0VCX1NP
Q0tFVF9TRUNVUkVfU0NIRU1FID0gJ3dzcycKKworX01FVEhPRF9MSU5FID0gcmUuY29tcGlsZShy
J15HRVQgKFteIF0rKSBIVFRQLzEuMVxyXG4kJykKKworX01BTkRBVE9SWV9IRUFERVJTID0gWwor
ICAgICMga2V5LCBleHBlY3RlZCB2YWx1ZSBvciBOb25lCisgICAgWydVcGdyYWRlJywgJ1dlYlNv
Y2tldCddLAorICAgIFsnQ29ubmVjdGlvbicsICdVcGdyYWRlJ10sCisgICAgWydIb3N0JywgTm9u
ZV0sCisgICAgWydPcmlnaW4nLCBOb25lXSwKK10KKworCitjbGFzcyBIYW5kc2hha2VFcnJvcihF
eGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiBpbiBXZWIgU29ja2V0IEhhbmRzaGFrZS4iIiIK
KworICAgIHBhc3MKKworCitkZWYgX3ZhbGlkYXRlX3Byb3RvY29sKHByb3RvY29sKToKKyAgICAi
IiJWYWxpZGF0ZSBXZWJTb2NrZXQtUHJvdG9jb2wgc3RyaW5nLiIiIgorCisgICAgaWYgbm90IHBy
b3RvY29sOgorICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSW52YWxpZCBXZWJTb2NrZXQt
UHJvdG9jb2w6IGVtcHR5JykKKyAgICBmb3IgYyBpbiBwcm90b2NvbDoKKyAgICAgICAgaWYgbm90
IDB4MjEgPD0gb3JkKGMpIDw9IDB4N2U6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJv
cignSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcHJvdG9jb2w6ICVyJyAlIGMpCisKKworY2xhc3MgSGFu
ZHNoYWtlcihvYmplY3QpOgorICAgICIiIlRoaXMgY2xhc3MgcGVyZm9ybXMgV2ViIFNvY2tldCBo
YW5kc2hha2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgZGlzcGF0Y2hl
cik6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAgICAgZGlz
cGF0Y2hlcjogRGlzcGF0Y2hlciAoZGlzcGF0Y2guRGlzcGF0Y2hlcikuCisKKyAgICAgICAgSGFu
ZHNoYWtlciB3aWxsIGFkZCBhdHRyaWJ1dGVzIHN1Y2ggYXMgd3NfcmVzb3VyY2UgaW4gcGVyZm9y
bWluZworICAgICAgICBoYW5kc2hha2UuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX3Jl
cXVlc3QgPSByZXF1ZXN0CisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBkaXNwYXRjaGVyCisK
KyAgICBkZWYgc2hha2VfaGFuZHMoc2VsZik6CisgICAgICAgICIiIlBlcmZvcm0gV2ViIFNvY2tl
dCBIYW5kc2hha2UuIiIiCisKKyAgICAgICAgc2VsZi5fY2hlY2tfaGVhZGVyX2xpbmVzKCkKKyAg
ICAgICAgc2VsZi5fc2V0X3Jlc291cmNlKCkKKyAgICAgICAgc2VsZi5fc2V0X29yaWdpbigpCisg
ICAgICAgIHNlbGYuX3NldF9sb2NhdGlvbigpCisgICAgICAgIHNlbGYuX3NldF9wcm90b2NvbCgp
CisgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIuc2hha2VfaGFuZHMoc2VsZi5fcmVxdWVzdCkKKyAg
ICAgICAgc2VsZi5fc2VuZF9oYW5kc2hha2UoKQorCisgICAgZGVmIF9zZXRfcmVzb3VyY2Uoc2Vs
Zik6CisgICAgICAgIHNlbGYuX3JlcXVlc3Qud3NfcmVzb3VyY2UgPSBzZWxmLl9yZXF1ZXN0LnVy
aQorCisgICAgZGVmIF9zZXRfb3JpZ2luKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0Lndz
X29yaWdpbiA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pblsnT3JpZ2luJ10KKworICAgIGRlZiBf
c2V0X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cyA9IFtdCisgICAgICAg
IGlmIHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKToKKyAgICAgICAgICAgIGxvY2F0aW9uX3BhcnRz
LmFwcGVuZChfV0VCX1NPQ0tFVF9TRUNVUkVfU0NIRU1FKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKF9XRUJfU09DS0VUX1NDSEVNRSkKKyAgICAgICAg
bG9jYXRpb25fcGFydHMuYXBwZW5kKCc6Ly8nKQorICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5f
cGFyc2VfaG9zdF9oZWFkZXIoKQorICAgICAgICBjb25uX3BvcnQgPSBzZWxmLl9yZXF1ZXN0LmNv
bm5lY3Rpb24ubG9jYWxfYWRkclsxXQorICAgICAgICBpZiBwb3J0ICE9IGNvbm5fcG9ydDoKKyAg
ICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdIZWFkZXIvY29ubmVjdGlvbiBwb3J0IG1p
c21hdGNoOiAlZC8lZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcnQs
IGNvbm5fcG9ydCkpCisgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChob3N0KQorICAgICAg
ICBpZiAoKG5vdCBzZWxmLl9yZXF1ZXN0LmlzX2h0dHBzKCkgYW5kCisgICAgICAgICAgICAgcG9y
dCAhPSBfREVGQVVMVF9XRUJfU09DS0VUX1BPUlQpIG9yCisgICAgICAgICAgICAoc2VsZi5fcmVx
dWVzdC5pc19odHRwcygpIGFuZAorICAgICAgICAgICAgIHBvcnQgIT0gX0RFRkFVTFRfV0VCX1NP
Q0tFVF9TRUNVUkVfUE9SVCkpOgorICAgICAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKCc6
JykKKyAgICAgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChzdHIocG9ydCkpCisgICAgICAg
IGxvY2F0aW9uX3BhcnRzLmFwcGVuZChzZWxmLl9yZXF1ZXN0LnVyaSkKKyAgICAgICAgc2VsZi5f
cmVxdWVzdC53c19sb2NhdGlvbiA9ICcnLmpvaW4obG9jYXRpb25fcGFydHMpCisKKyAgICBkZWYg
X3BhcnNlX2hvc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICBmaWVsZHMgPSBzZWxmLl9yZXF1ZXN0
LmhlYWRlcnNfaW5bJ0hvc3QnXS5zcGxpdCgnOicsIDEpCisgICAgICAgIGlmIGxlbihmaWVsZHMp
ID09IDE6CisgICAgICAgICAgICBwb3J0ID0gX0RFRkFVTFRfV0VCX1NPQ0tFVF9QT1JUCisgICAg
ICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0LmlzX2h0dHBzKCk6CisgICAgICAgICAgICAgICAgcG9y
dCA9IF9ERUZBVUxUX1dFQl9TT0NLRVRfU0VDVVJFX1BPUlQKKyAgICAgICAgICAgIHJldHVybiBm
aWVsZHNbMF0sIHBvcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1sw
XSwgaW50KGZpZWxkc1sxXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAg
ICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSW52YWxpZCBwb3J0IG51bWJlciBmb3JtYXQ6ICVy
JyAlIGUpCisKKyAgICBkZWYgX3NldF9wcm90b2NvbChzZWxmKToKKyAgICAgICAgcHJvdG9jb2wg
PSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNfaW4uZ2V0KCdXZWJTb2NrZXQtUHJvdG9jb2wnKQorICAg
ICAgICBpZiBwcm90b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF92YWxpZGF0ZV9wcm90
b2NvbChwcm90b2NvbCkKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCA9IHByb3Rv
Y29sCisKKyAgICBkZWYgX3NlbmRfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCisgICAgICAgICAgICAgICAgJ0hUVFAvMS4xIDEwMSBXZWIg
U29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNv
bm5lY3Rpb24ud3JpdGUoJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nKQorICAgICAgICBzZWxmLl9y
ZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJykKKyAgICAg
ICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdXZWJTb2NrZXQtT3JpZ2luOiAnKQor
ICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoc2VsZi5fcmVxdWVzdC53c19v
cmlnaW4pCisgICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnXHJcbicpCisg
ICAgICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnV2ViU29ja2V0LUxvY2F0aW9u
OiAnKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoc2VsZi5fcmVxdWVz
dC53c19sb2NhdGlvbikKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdc
clxuJykKKyAgICAgICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbDoKKyAgICAgICAgICAg
IHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnV2ViU29ja2V0LVByb3RvY29sOiAnKQor
ICAgICAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKHNlbGYuX3JlcXVlc3Qu
d3NfcHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUo
J1xyXG4nKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1xyXG4nKQor
CisgICAgZGVmIF9jaGVja19oZWFkZXJfbGluZXMoc2VsZik6CisgICAgICAgIGZvciBrZXksIGV4
cGVjdGVkX3ZhbHVlIGluIF9NQU5EQVRPUllfSEVBREVSUzoKKyAgICAgICAgICAgIGFjdHVhbF92
YWx1ZSA9IHNlbGYuX3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoa2V5KQorICAgICAgICAgICAgaWYg
bm90IGFjdHVhbF92YWx1ZToKKyAgICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcign
SGVhZGVyICVzIG5vdCBkZWZpbmVkJyAlIGtleSkKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3Zh
bHVlOgorICAgICAgICAgICAgICAgIGlmIGFjdHVhbF92YWx1ZSAhPSBleHBlY3RlZF92YWx1ZToK
KyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0lsbGVnYWwgdmFsdWUg
Zm9yIGhlYWRlciAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGtleSwgYWN0dWFsX3ZhbHVlKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oZWFkZXJwYXJz
ZXJoYW5kbGVyLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hl
YWRlcnBhcnNlcmhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
ZThmOWNhOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9w
eXdlYnNvY2tldC9oZWFkZXJwYXJzZXJoYW5kbGVyLnB5CkBAIC0wLDAgKzEsOTIgQEAKKyMgQ29w
eXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKKyIiIlB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgZm9yIG1vZF9weXdl
YnNvY2tldC4KKworQXBhY2hlIEhUVFAgU2VydmVyIGFuZCBtb2RfcHl0aG9uIG11c3QgYmUgY29u
ZmlndXJlZCBzdWNoIHRoYXQgdGhpcworZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGhhbmRsZSBXZWIg
U29ja2V0IHJlcXVlc3QuCisiIiIKKworCitmcm9tIG1vZF9weXRob24gaW1wb3J0IGFwYWNoZQor
CitpbXBvcnQgZGlzcGF0Y2gKK2ltcG9ydCBoYW5kc2hha2UKK2ltcG9ydCB1dGlsCisKKworIyBQ
eXRob25PcHRpb24gdG8gc3BlY2lmeSB0aGUgaGFuZGxlciByb290IGRpcmVjdG9yeS4KK19QWU9Q
VF9IQU5ETEVSX1JPT1QgPSAnbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCcKKworCitkZWYg
X2NyZWF0ZV9kaXNwYXRjaGVyKCk6CisgICAgX0hBTkRMRVJfUk9PVCA9IGFwYWNoZS5tYWluX3Nl
cnZlci5nZXRfb3B0aW9ucygpLmdldCgKKyAgICAgICAgICAgIF9QWU9QVF9IQU5ETEVSX1JPT1Qs
IE5vbmUpCisgICAgaWYgbm90IF9IQU5ETEVSX1JPT1Q6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bignUHl0aG9uT3B0aW9uICVzIGlzIG5vdCBkZWZpbmVkJyAlIF9QWU9QVF9IQU5ETEVSX1JPT1Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfRVJSKQorICAgIGRpc3BhdGNo
ZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9IQU5ETEVSX1JPT1QpCisgICAgZm9yIHdhcm5pbmcg
aW4gZGlzcGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKToKKyAgICAgICAgYXBhY2hlLmxvZ19lcnJv
cignbW9kX3B5d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nLCBhcGFjaGUuQVBMT0dfV0FSTklORykK
KyAgICByZXR1cm4gZGlzcGF0Y2hlcgorCisKKyMgSW5pdGlhbGl6ZQorX2Rpc3BhdGNoZXIgPSBf
Y3JlYXRlX2Rpc3BhdGNoZXIoKQorCisKK2RlZiBoZWFkZXJwYXJzZXJoYW5kbGVyKHJlcXVlc3Qp
OgorICAgICIiIkhhbmRsZSByZXF1ZXN0LgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDog
bW9kX3B5dGhvbiByZXF1ZXN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBuYW1lZCBoZWFkZXJw
YXJzZXJoYW5kbGVyIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQgbmFtZQorICAgIGZvciBhIFB5
dGhvbkhlYWRlclBhcnNlckhhbmRsZXIuCisgICAgIiIiCisKKyAgICB0cnk6CisgICAgICAgIGhh
bmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LCBfZGlzcGF0Y2hlcikKKyAg
ICAgICAgaGFuZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAgICAgIHJlcXVlc3QubG9nX2Vycm9y
KCdtb2RfcHl3ZWJzb2NrZXQ6IHJlc291cmNlOiVyJyAlIHJlcXVlc3Qud3NfcmVzb3VyY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwYWNoZS5BUExPR19ERUJVRykKKyAgICAgICAgX2Rp
c3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorICAgIGV4Y2VwdCBoYW5kc2hha2UuSGFu
ZHNoYWtlRXJyb3IsIGU6CisgICAgICAgICMgSGFuZHNoYWtlIGZvciB3cy93c3MgZmFpbGVkLgor
ICAgICAgICAjIEJ1dCB0aGUgcmVxdWVzdCBjYW4gYmUgdmFsaWQgaHR0cC9odHRwcyByZXF1ZXN0
LgorICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlLCBh
cGFjaGUuQVBMT0dfSU5GTykKKyAgICAgICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAorICAgIGV4
Y2VwdCBkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBlOgorICAgICAgICByZXF1ZXN0LmxvZ19lcnJv
cignbW9kX3B5d2Vic29ja2V0OiAlcycgJSBlLCBhcGFjaGUuQVBMT0dfV0FSTklORykKKyAgICAg
ICAgcmV0dXJuIGFwYWNoZS5ERUNMSU5FRAorICAgIHJldHVybiBhcGFjaGUuRE9ORSAgIyBSZXR1
cm4gRE9ORSBzdWNoIHRoYXQgbm8gb3RoZXIgaGFuZGxlcnMgYXJlIGludm9rZWQuCisKKworIyB2
aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2Rf
cHl3ZWJzb2NrZXQvbXNndXRpbC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdl
YnNvY2tldC9tc2d1dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2
Y2Q1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3
ZWJzb2NrZXQvbXNndXRpbC5weQpAQCAtMCwwICsxLDE5OSBAQAorIyBDb3B5cmlnaHQgMjAwOSwg
R29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworIiIiTWVzc2FnZSByZWxhdGVkIHV0aWxpdGllcy4KKworTm90ZTogcmVxdWVzdC5jb25uZWN0
aW9uLndyaXRlL3JlYWQgYXJlIHVzZWQgaW4gdGhpcyBtb2R1bGUsIGV2ZW4gdGhvdWdoCittb2Rf
cHl0aG9uIGRvY3VtZW50IHNheXMgdGhhdCB0aGV5IHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gY29u
bmVjdGlvbiBoYW5kbGVycy4KK1VuZm9ydHVuYXRlbHksIHdlIGhhdmUgbm8gb3RoZXIgb3B0aW9u
cy4gRm9yIGV4YW1wbGUsIHJlcXVlc3Qud3JpdGUvcmVhZCBhcmUKK25vdCBzdWl0YWJsZSBiZWNh
dXNlIHRoZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRlcyB3cml0aW5nL3JlYWRpbmcuCisi
IiIKKworCitpbXBvcnQgUXVldWUKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHRyYWNlYmFjawor
aW1wb3J0IHRocmVhZGluZworCisKK2RlZiBzZW5kX21lc3NhZ2UocmVxdWVzdCwgbWVzc2FnZSk6
CisgICAgIiIiU2VuZCBtZXNzYWdlLgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9k
X3B5dGhvbiByZXF1ZXN0LgorICAgICAgICBtZXNzYWdlOiB1bmljb2RlIHN0cmluZyB0byBzZW5k
LgorICAgICIiIgorCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdceDAwJyArIG1lc3Nh
Z2UuZW5jb2RlKCd1dGYtOCcpICsgJ1x4ZmYnKQorCisKK2RlZiByZWNlaXZlX21lc3NhZ2UocmVx
dWVzdCk6CisgICAgIiIiUmVjZWl2ZSBhIFdlYiBTb2NrZXQgZnJhbWUgYW5kIHJldHVybiBpdHMg
cGF5bG9hZCBhcyB1bmljb2RlIHN0cmluZy4KKworICAgIEFyZ3M6CisgICAgICAgIHJlcXVlc3Q6
IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAiIiIKKworICAgIHdoaWxlIFRydWU6CisgICAgICAg
ICMgUmVhZCAxIGJ5dGUuCisgICAgICAgICMgbXBfY29ubi5yZWFkIHdpbGwgYmxvY2sgaWYgbm8g
Ynl0ZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgIyBUaW1lb3V0IGlzIGNvbnRyb2xsZWQgYnkg
VGltZU91dCBkaXJlY3RpdmUgb2YgQXBhY2hlLgorICAgICAgICBmcmFtZV90eXBlX3N0ciA9IHJl
cXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisgICAgICAgIGZyYW1lX3R5cGUgPSBvcmQoZnJhbWVf
dHlwZV9zdHJbMF0pCisgICAgICAgIGlmIChmcmFtZV90eXBlICYgMHg4MCkgPT0gMHg4MDoKKyAg
ICAgICAgICAgICMgVGhlIHBheWxvYWQgbGVuZ3RoIGlzIHNwZWNpZmllZCBpbiB0aGUgZnJhbWUu
CisgICAgICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQuCisgICAgICAgICAgICBsZW5ndGggPSBf
cGF5bG9hZF9sZW5ndGgocmVxdWVzdCkKKyAgICAgICAgICAgIF9yZWNlaXZlX2J5dGVzKHJlcXVl
c3QsIGxlbmd0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIHBheWxvYWQgaXMg
ZGVsaW1pdGVkIHdpdGggXHhmZi4KKyAgICAgICAgICAgIGJ5dGVzID0gX3JlYWRfdW50aWwocmVx
dWVzdCwgJ1x4ZmYnKQorICAgICAgICAgICAgbWVzc2FnZSA9IGJ5dGVzLmRlY29kZSgndXRmLTgn
KQorICAgICAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAgICAgICAgICAgICAgIHJl
dHVybiBtZXNzYWdlCisgICAgICAgICAgICAjIERpc2NhcmQgZGF0YSBvZiBvdGhlciB0eXBlcy4K
KworCitkZWYgX3BheWxvYWRfbGVuZ3RoKHJlcXVlc3QpOgorICAgIGxlbmd0aCA9IDAKKyAgICB3
aGlsZSBUcnVlOgorICAgICAgICBiX3N0ciA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisg
ICAgICAgIGIgPSBvcmQoYl9zdHJbMF0pCisgICAgICAgIGxlbmd0aCA9IGxlbmd0aCAqIDEyOCAr
IChiICYgMHg3ZikKKyAgICAgICAgaWYgKGIgJiAweDgwKSA9PSAwOgorICAgICAgICAgICAgYnJl
YWsKKyAgICByZXR1cm4gbGVuZ3RoCisKKworZGVmIF9yZWNlaXZlX2J5dGVzKHJlcXVlc3QsIGxl
bmd0aCk6CisgICAgYnl0ZXMgPSAnJworICAgIHdoaWxlIGxlbmd0aCA+IDA6CisgICAgICAgIG5l
d19ieXRlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKGxlbmd0aCkKKyAgICAgICAgYnl0ZXMg
Kz0gbmV3X2J5dGVzCisgICAgICAgIGxlbmd0aCAtPSBsZW4obmV3X2J5dGVzKQorICAgIHJldHVy
biBieXRlcworCisKK2RlZiBfcmVhZF91bnRpbChyZXF1ZXN0LCBkZWxpbV9jaGFyKToKKyAgICBi
eXRlcyA9ICcnCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgY2ggPSByZXF1ZXN0LmNvbm5lY3Rp
b24ucmVhZCgxKQorICAgICAgICBpZiBjaCA9PSBkZWxpbV9jaGFyOgorICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgYnl0ZXMgKz0gY2gKKyAgICByZXR1cm4gYnl0ZXMKKworCitjbGFzcyBNZXNz
YWdlUmVjZWl2ZXIodGhyZWFkaW5nLlRocmVhZCk6CisgICAgIiIiVGhpcyBjbGFzcyByZWNlaXZl
cyBtZXNzYWdlcyBmcm9tIHRoZSBjbGllbnQuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGJv
dGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyB3YXlzIHRvIHJlY2VpdmUKKyAgICBtZXNz
YWdlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwgb25tZXNzYWdl
PU5vbmUpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgICAg
IG9ubWVzc2FnZTogYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIG1lc3NhZ2UgaXMgcmVj
ZWl2ZWQuCisgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBOb25lLgorICAgICAgICAiIiIK
KyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9y
ZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAg
ICAgICAgc2VsZi5fb25tZXNzYWdlID0gb25tZXNzYWdlCisgICAgICAgIHNlbGYuc2V0RGFlbW9u
KFRydWUpCisgICAgICAgIHNlbGYuc3RhcnQoKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZWNlaXZlX21lc3NhZ2Uoc2Vs
Zi5fcmVxdWVzdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX29ubWVzc2FnZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9vbm1lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgc2VsZi5fcXVldWUucHV0KG1lc3NhZ2UpCisKKyAgICBkZWYgcmVjZWl2ZShzZWxm
KToKKyAgICAgICAgIiIiIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIGNoYW5uZWwsIGJsb2Nr
aW5nLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBtZXNzYWdlIGFzIGEgdW5pY29k
ZSBzdHJpbmcuCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9xdWV1ZS5nZXQo
KQorCisgICAgZGVmIHJlY2VpdmVfbm93YWl0KHNlbGYpOgorICAgICAgICAiIiIgUmVjZWl2ZSBh
IG1lc3NhZ2UgZnJvbSB0aGUgY2hhbm5lbCwgbm9uLWJsb2NraW5nLgorCisgICAgICAgIFJldHVy
bnM6CisgICAgICAgICAgICBtZXNzYWdlIGFzIGEgdW5pY29kZSBzdHJpbmcgaWYgYXZhaWxhYmxl
LiBOb25lIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IG1lc3NhZ2UgPSBzZWxmLl9xdWV1ZS5nZXRfbm93YWl0KCkKKyAgICAgICAgZXhjZXB0IFF1ZXVl
LkVtcHR5OgorICAgICAgICAgICAgbWVzc2FnZSA9IE5vbmUKKyAgICAgICAgcmV0dXJuIG1lc3Nh
Z2UKKworCitjbGFzcyBNZXNzYWdlU2VuZGVyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICIiIlRo
aXMgY2xhc3Mgc2VuZHMgbWVzc2FnZXMgdG8gdGhlIGNsaWVudC4KKworICAgIFRoaXMgY2xhc3Mg
cHJvdmlkZXMgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHdheXMgdG8gc2VuZAor
ICAgIG1lc3NhZ2VzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToK
KyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICIiIgorICAgICAg
ICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3JlcXVlc3Qg
PSByZXF1ZXN0CisgICAgICAgIHNlbGYuX3F1ZXVlID0gUXVldWUuUXVldWUoKQorICAgICAgICBz
ZWxmLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnN0YXJ0KCkKKworICAgIGRlZiBydW4o
c2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5f
cXVldWUuZ2V0KCkKKyAgICAgICAgICAgIHNlbmRfbWVzc2FnZShzZWxmLl9yZXF1ZXN0LCBtZXNz
YWdlKQorCisgICAgZGVmIHNlbmQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICIiIlNlbmQgYSBt
ZXNzYWdlLCBibG9ja2luZy4iIiIKKworICAgICAgICBzZW5kX21lc3NhZ2Uoc2VsZi5fcmVxdWVz
dCwgbWVzc2FnZSkKKworICAgIGRlZiBzZW5kX25vd2FpdChzZWxmLCBtZXNzYWdlKToKKyAgICAg
ICAgIiIiU2VuZCBhIG1lc3NhZ2UsIG5vbi1ibG9ja2luZy4iIiIKKworICAgICAgICBzZWxmLl9x
dWV1ZS5wdXQobWVzc2FnZSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IGIvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNiMWEyNgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5CkBA
IC0wLDAgKzEsMTc3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKKyIiIlN0YW5kYWxvbmUgV2ViIFNvY2tldCBzZXJ2ZXIuCisKK1VzZSB0aGlzIHNlcnZl
ciB0byBydW4gbW9kX3B5d2Vic29ja2V0IHdpdGhvdXQgQXBhY2hlIEhUVFAgU2VydmVyLgorIiIi
CisKK2ltcG9ydCBCYXNlSFRUUFNlcnZlcgoraW1wb3J0IFNpbXBsZUhUVFBTZXJ2ZXIKK2ltcG9y
dCBTb2NrZXRTZXJ2ZXIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBv
cworaW1wb3J0IHVybHBhcnNlCisKK2ltcG9ydCBkaXNwYXRjaAoraW1wb3J0IGhhbmRzaGFrZQor
CisKK2NsYXNzIF9TdGFuZGFsb25lQ29ubmVjdGlvbihvYmplY3QpOgorICAgICIiIk1pbWljIG1v
ZF9weXRob24gbXBfY29ubi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0X2hh
bmRsZXIpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJn
czoKKyAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlcjogQSBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxl
ciBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlcXVlc3RfaGFuZGxlciA9
IHJlcXVlc3RfaGFuZGxlcgorCisgICAgZGVmIGdldF9sb2NhbF9hZGRyKHNlbGYpOgorICAgICAg
ICAiIiJHZXR0ZXIgdG8gbWltaWMgbXBfY29ubi5sb2NhbF9hZGRyLiIiIgorICAgICAgICByZXR1
cm4gKHNlbGYuX3JlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX25hbWUsCisgICAgICAgICAg
ICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnNlcnZlci5zZXJ2ZXJfcG9ydCkKKyAgICBsb2Nh
bF9hZGRyID0gcHJvcGVydHkoZ2V0X2xvY2FsX2FkZHIpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwg
ZGF0YSk6CisgICAgICAgICIiIk1pbWljIG1wX2Nvbm4ud3JpdGUoKS4iIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci53ZmlsZS53cml0ZShkYXRhKQorCisgICAgZGVmIHJl
YWQoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiTWltaWMgbXBfY29ubi5yZWFkKCkuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChsZW5ndGgpCisK
KworY2xhc3MgX1N0YW5kYWxvbmVSZXF1ZXN0KG9iamVjdCk6CisgICAgIiIiTWltaWMgbW9kX3B5
dGhvbiByZXF1ZXN0LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3RfaGFuZGxl
cik6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgor
ICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyOiBBIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyIGlu
c3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVxdWVzdF9oYW5kbGVyID0gcmVx
dWVzdF9oYW5kbGVyCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IF9TdGFuZGFsb25lQ29ubmVj
dGlvbihyZXF1ZXN0X2hhbmRsZXIpCisKKyAgICBkZWYgZ2V0X3VyaShzZWxmKToKKyAgICAgICAg
IiIiR2V0dGVyIHRvIG1pbWljIHJlcXVlc3QudXJpLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5f
cmVxdWVzdF9oYW5kbGVyLnBhdGgKKyAgICB1cmkgPSBwcm9wZXJ0eShnZXRfdXJpKQorCisgICAg
ZGVmIGdldF9oZWFkZXJzX2luKHNlbGYpOgorICAgICAgICAiIiJHZXR0ZXIgdG8gbWltaWMgcmVx
dWVzdC5oZWFkZXJzX2luLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVy
LmhlYWRlcnMKKyAgICBoZWFkZXJzX2luID0gcHJvcGVydHkoZ2V0X2hlYWRlcnNfaW4pCisKKyAg
ICBkZWYgaXNfaHR0cHMoc2VsZik6CisgICAgICAgICIiIk1pbWljIHJlcXVlc3QuaXNfaHR0cHMo
KS4iIiIKKyAgICAgICAgIyBUT0RPKHl1em8pOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgcmV0
dXJuIEZhbHNlCisKKworY2xhc3MgV2ViU29ja2V0U2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRp
bmdNaXhJbiwgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6CisgICAgIiIiSFRUUFNlcnZlciBz
cGVjaWFsaXplZCBmb3IgV2ViIFNvY2tldC4iIiIKKworICAgIGRhZW1vbl90aHJlYWRzID0gVHJ1
ZQorICAgIHBhc3MKKworCitjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQ
U2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiU2ltcGxlSFRUUFJlcXVl
c3RIYW5kbGVyIHNwZWNpYWxpemVkIGZvciBXZWIgU29ja2V0LiIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdCA9IF9T
dGFuZGFsb25lUmVxdWVzdChzZWxmKQorICAgICAgICBzZWxmLl9kaXNwYXRjaGVyID0gZGlzcGF0
Y2guRGlzcGF0Y2hlcigKKyAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5v
cHRpb25zLndlYnNvY2tfaGFuZGxlcnMpCisgICAgICAgIHNlbGYuX3ByaW50X3dhcm5pbmdzX2lm
X2FueSgpCisgICAgICAgIHNlbGYuX2hhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihz
ZWxmLl9yZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fZGlzcGF0Y2hlcikKKyAgICAgICAgU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVI
VFRQUmVxdWVzdEhhbmRsZXIuX19pbml0X18oCisgICAgICAgICAgICAgICAgc2VsZiwgKmFyZ3Ms
ICoqa2V5d29yZHMpCisKKyAgICBkZWYgX3ByaW50X3dhcm5pbmdzX2lmX2FueShzZWxmKToKKyAg
ICAgICAgd2FybmluZ3MgPSBzZWxmLl9kaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5ncygpCisgICAg
ICAgIGlmIHdhcm5pbmdzOgorICAgICAgICAgICAgZm9yIHdhcm5pbmcgaW4gd2FybmluZ3M6Cisg
ICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIHdh
cm5pbmcpCisKKyAgICBkZWYgcGFyc2VfcmVxdWVzdChzZWxmKToKKyAgICAgICAgIiIiT3ZlcnJp
ZGUgQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5wYXJzZV9yZXF1ZXN0Lgor
CisgICAgICAgIFJldHVybiBUcnVlIHRvIGNvbnRpbnVlIHByb2Nlc3NpbmcgZm9yIEhUVFAoUyks
IEZhbHNlIG90aGVyd2lzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IFNpbXBsZUhU
VFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLnBhcnNlX3JlcXVlc3Qoc2VsZikKKyAg
ICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYu
X2hhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAgICAgICAgICAgIHNlbGYuX2Rpc3BhdGNo
ZXIudHJhbnNmZXJfZGF0YShzZWxmLl9yZXF1ZXN0KQorICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwgZToKKyAg
ICAgICAgICAgICAgICAjIEhhbmRzaGFrZSBmb3Igd3MocykgZmFpbGVkLiBBc3N1bWUgaHR0cChz
KS4KKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ21vZF9weXdlYnNvY2tldDogJXMnICUg
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IGRpc3Bh
dGNoLkRpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdt
b2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIHJldHVybiByZXN1bHQKKworCitkZWYgX21haW4oKToKKyAgICBsb2dnaW5nLmJhc2lj
Q29uZmlnKCkKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCisgICAgcGFy
c2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9J3BvcnQnLCB0eXBlPSdpbnQnLAor
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9aGFuZHNoYWtlLl9ERUZBVUxUX1dFQl9TT0NL
RVRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwb3J0IHRvIGxpc3RlbiB0bycp
CisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy13JywgJy0td2Vic29ja19oYW5kbGVycycsIGRlc3Q9
J3dlYnNvY2tfaGFuZGxlcnMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Jy4nLAor
ICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1dlYiBTb2NrZXQgaGFuZGxlcnMgcm9vdCBkaXJl
Y3RvcnkuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kb2N1bWVudF9yb290Jywg
ZGVzdD0nZG9jdW1lbnRfcm9vdCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0nLics
CisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRG9jdW1lbnQgcm9vdCBkaXJlY3RvcnkuJykK
KyAgICAjIFRPRE8oeXV6byk6IEFkZCB3c3MtcmVsYXRlZCBvcHRpb25zLgorICAgIFdlYlNvY2tl
dFJlcXVlc3RIYW5kbGVyLm9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncygpWzBdCisKKyAgICBv
cy5jaGRpcihXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLmRvY3VtZW50X3Jvb3QpCisK
KyAgICBXZWJTb2NrZXRTZXJ2ZXIoKCcnLCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25z
LnBvcnQpLAorICAgICAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlcikuc2Vy
dmVfZm9yZXZlcigpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBfbWFpbigp
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21v
ZF9weXdlYnNvY2tldC91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAu
LjQ4MzUyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2Rf
cHl3ZWJzb2NrZXQvdXRpbC5weQpAQCAtMCwwICsxLDUyIEBACisjIENvcHlyaWdodCAyMDA5LCBH
b29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CisiIiJXZWIgU29ja2V0cyB1dGlsaXRpZXMuCisiIiIKKworCitpbXBvcnQgU3RyaW5nSU8KK2lt
cG9ydCB0cmFjZWJhY2sKKworCitkZWYgZ2V0X3N0YWNrX3RyYWNlKCk6CisgICAgIiIiR2V0IHRo
ZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIHN0cmluZy4KKworICAgIFRoaXMgaXMgbmVlZGVkIHRv
IHN1cHBvcnQgUHl0aG9uIDIuMy4KKyAgICBUT0RPOiBSZW1vdmUgdGhpcyB3aGVuIHdlIG9ubHkg
c3VwcG9ydCBQeXRob24gMi40IGFuZCBhYm92ZS4KKyAgICAgICAgICBVc2UgdHJhY2ViYWNrLmZv
cm1hdF9leGMgaW5zdGVhZC4KKyAgICAiIiIKKworICAgIG91dCA9IFN0cmluZ0lPLlN0cmluZ0lP
KCkKKyAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9b3V0KQorICAgIHJldHVybiBvdXQuZ2V0
dmFsdWUoKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvc2V0dXAucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMzBlN2M0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvc2V0dXAucHkKQEAgLTAsMCArMSw2MyBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgor
IyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJTZXQgdXAg
c2NyaXB0IGZvciBtb2RfcHl3ZWJzb2NrZXQuCisiIiIKKworCitmcm9tIGRpc3R1dGlscy5jb3Jl
IGltcG9ydCBzZXR1cAoraW1wb3J0IHN5cworCisKK19QQUNLQUdFX05BTUUgPSAnbW9kX3B5d2Vi
c29ja2V0JworCitpZiBzeXMudmVyc2lvbiA8ICcyLjMnOgorICAgIHByaW50ID4+c3lzLnN0ZGVy
ciwgJyVzIHJlcXVpcmVzIFB5dGhvbiAyLjMgb3IgbGF0ZXIuJyAlIF9QQUNLQUdFX05BTUUKKyAg
ICBzeXMuZXhpdCgxKQorCitzZXR1cChhdXRob3I9J1l1em8gRnVqaXNoaW1hJywKKyAgICAgIGF1
dGhvcl9lbWFpbD0neXV6b0BjaHJvbWl1bS5vcmcnLAorICAgICAgZGVzY3JpcHRpb249J1dlYiBT
b2NrZXQgZXh0ZW5zaW9uIGZvciBBcGFjaGUgSFRUUCBTZXJ2ZXIuJywKKyAgICAgIGxvbmdfZGVz
Y3JpcHRpb249KAorICAgICAgICAgICAgICAnbW9kX3B5d2Vic29ja2V0IGlzIGFuIEFwYWNoZSBI
VFRQIFNlcnZlciBleHRlbnNpb24gZm9yICcKKyAgICAgICAgICAgICAgJ1dlYiBTb2NrZXQgKGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLycKKyAgICAgICAgICAgICAgJ2RyYWZ0LWhpeGllLXRo
ZXdlYnNvY2tldHByb3RvY29sKS4gJworICAgICAgICAgICAgICAnU2VlIG1vZF9weXdlYnNvY2tl
dC9fX2luaXRfXy5weSBmb3IgbW9yZSBkZXRhaWwuJyksCisgICAgICBsaWNlbnNlPSdTZWUgQ09Q
WUlORycsCisgICAgICBuYW1lPV9QQUNLQUdFX05BTUUsCisgICAgICBwYWNrYWdlcz1bX1BBQ0tB
R0VfTkFNRV0sCisgICAgICB1cmw9J2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXdlYnNvY2tl
dC8nLAorICAgICAgdmVyc2lvbj0nMC4zLjAnLAorICAgICAgKQorCisKKyMgdmk6c3RzPTQgc3c9
NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9jb25maWcucHkg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L2NvbmZpZy5weQpuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwLi41YWFhYjhjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC9jb25maWcucHkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmln
aHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKworIiIiQ29uZmlndXJhdGlvbiBmb3IgdGVzdGluZy4KKworVGVzdCBmaWxlcyBz
aG91bGQgaW1wb3J0IHRoaXMgbW9kdWxlIGJlZm9yZSBtb2RfcHl3ZWJzb2NrZXQuCisiIiIKKwor
CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworCisjIEFkZCB0aGUgcGFyZW50IGRpcmVjdG9yeSB0
byBzeXMucGF0aCB0byBlbmFibGUgaW1wb3J0aW5nIG1vZF9weXdlYnNvY2tldC4KK3N5cy5wYXRo
ICs9IFtvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sICcuLicpXQorCisK
KyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC9tb2NrLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4MWJmZDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L21vY2sucHkKQEAgLTAsMCArMSwyMDMgQEAK
KyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIk1vY2tzIGZvciB0ZXN0aW5nLgorIiIiCisKKworaW1w
b3J0IFF1ZXVlCitpbXBvcnQgdGhyZWFkaW5nCisKKworY2xhc3MgX01vY2tDb25uQmFzZShvYmpl
Y3QpOgorICAgICIiIkJhc2UgY2xhc3Mgb2YgbW9ja3MgZm9yIG1vZF9weXRob24uYXBhY2hlLm1w
X2Nvbm4uCisKKyAgICBUaGlzIGVuYWJsZXMgdGVzdHMgdG8gY2hlY2sgd2hhdCBpcyB3cml0dGVu
IHRvIGEgKG1vY2spIG1wX2Nvbm4uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6
CisgICAgICAgIHNlbGYuX3dyaXRlX2RhdGEgPSBbXQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRh
dGEpOgorICAgICAgICAiIiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLndyaXRl
LiIiIgorCisgICAgICAgIHNlbGYuX3dyaXRlX2RhdGEuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYg
d3JpdHRlbl9kYXRhKHNlbGYpOgorICAgICAgICAiIiJHZXQgYnl0ZXMgd3JpdHRlbiB0byB0aGlz
IG1vY2suIiIiCisKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oc2VsZi5fd3JpdGVfZGF0YSkKKwor
CitjbGFzcyBNb2NrQ29ubihfTW9ja0Nvbm5CYXNlKToKKyAgICAiIiJNb2NrIGZvciBtb2RfcHl0
aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhpcyBlbmFibGVzIHRlc3RzIHRvIHNwZWNpZnkg
d2hhdCBzaG91bGQgYmUgcmVhZCBmcm9tIGEgKG1vY2spIG1wX2Nvbm4gYXMKKyAgICB3ZWxsIGFz
IHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRlbiB0byBpdC4KKyAgICAiIiIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCByZWFkX2RhdGEpOgorICAgICAgICAiIiJDb25zdHJ1Y3RzIGFuIGluc3RhbmNl
LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZWFkX2RhdGE6IGJ5dGVzIHRoYXQgc2hv
dWxkIGJlIHJldHVybmVkIHdoZW4gcmVhZCogbWV0aG9kcyBhcmUKKyAgICAgICAgICAgIGNhbGxl
ZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgX01vY2tDb25uQmFzZS5fX2luaXRfXyhzZWxmKQor
ICAgICAgICBzZWxmLl9yZWFkX2RhdGEgPSByZWFkX2RhdGEKKyAgICAgICAgc2VsZi5fcmVhZF9w
b3MgPSAwCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIG1v
ZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZGxpbmUuIiIiCisKKyAgICAgICAgaWYgc2VsZi5f
cmVhZF9wb3MgPj0gbGVuKHNlbGYuX3JlYWRfZGF0YSk6CisgICAgICAgICAgICByZXR1cm4gJycK
KyAgICAgICAgZW5kX2luZGV4ID0gc2VsZi5fcmVhZF9kYXRhLmZpbmQoJ1xuJywgc2VsZi5fcmVh
ZF9wb3MpICsgMQorICAgICAgICBpZiBlbmRfaW5kZXggPT0gMDoKKyAgICAgICAgICAgIGVuZF9p
bmRleCA9IGxlbihzZWxmLl9yZWFkX2RhdGEpCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3Vw
X3RvKGVuZF9pbmRleCkKKworICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6CisgICAgICAgICIi
Ik92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZC4iIiIKKworICAgICAgICBp
ZiBzZWxmLl9yZWFkX3BvcyA+PSBsZW4oc2VsZi5fcmVhZF9kYXRhKToKKyAgICAgICAgICAgIHJl
dHVybiAnJworICAgICAgICBlbmRfaW5kZXggPSBtaW4obGVuKHNlbGYuX3JlYWRfZGF0YSksIHNl
bGYuX3JlYWRfcG9zICsgbGVuZ3RoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91cF90byhl
bmRfaW5kZXgpCisKKyAgICBkZWYgX3JlYWRfdXBfdG8oc2VsZiwgZW5kX2luZGV4KToKKyAgICAg
ICAgbGluZSA9IHNlbGYuX3JlYWRfZGF0YVtzZWxmLl9yZWFkX3BvczplbmRfaW5kZXhdCisgICAg
ICAgIHNlbGYuX3JlYWRfcG9zID0gZW5kX2luZGV4CisgICAgICAgIHJldHVybiBsaW5lCisKKwor
Y2xhc3MgTW9ja0Jsb2NraW5nQ29ubihfTW9ja0Nvbm5CYXNlKToKKyAgICAiIiJCbG9ja2luZyBt
b2NrIGZvciBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhpcyBlbmFibGVzIHRl
c3RzIHRvIHNwZWNpZnkgd2hhdCBzaG91bGQgYmUgcmVhZCBmcm9tIGEgKG1vY2spIG1wX2Nvbm4g
YXMKKyAgICB3ZWxsIGFzIHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRlbiB0byBpdC4KKyAgICBDYWxs
ZXJzIG9mIHJlYWQqIG1ldGhvZHMgd2lsbCBibG9jayBpZiB0aGVyZSBpcyBubyBieXRlcyBhdmFp
bGFibGUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIF9Nb2Nr
Q29ubkJhc2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcXVldWUgPSBRdWV1ZS5RdWV1
ZSgpCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9w
eXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZGxpbmUuIiIiCisgICAgICAgIGxpbmUgPSAnJworICAg
ICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgY2ggPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAg
ICAgICAgICAgbGluZSArPSBjaAorICAgICAgICAgICAgaWYgY2ggPT0gJ1xuJzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbGVuZ3RoKToKKyAgICAg
ICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkLiIiIgorCisgICAg
ICAgIGRhdGEgPSAnJworICAgICAgICBmb3IgXyBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICAg
ICAgZGF0YSArPSBzZWxmLl9xdWV1ZS5nZXQoKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAg
ZGVmIHB1dF9ieXRlcyhzZWxmLCBieXRlcyk6CisgICAgICAgICIiIlB1dCBieXRlcyB0byBiZSBy
ZWFkIGZyb20gdGhpcyBtb2NrLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBieXRlczog
Ynl0ZXMgdG8gYmUgcmVhZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZm9yIGJ5dGUgaW4gYnl0
ZXM6CisgICAgICAgICAgICBzZWxmLl9xdWV1ZS5wdXQoYnl0ZSkKKworCitjbGFzcyBNb2NrVGFi
bGUoZGljdCk6CisgICAgIiIiTW9jayB0YWJsZS4KKworICAgIFRoaXMgbWltaWNrcyBtb2RfcHl0
aG9uIG1wX3RhYmxlLiBOb3RlIHRoYXQgb25seSB0aGUgbWV0aG9kcyB1c2VkIGJ5CisgICAgdGVz
dHMgYXJlIG92ZXJyaWRkZW4uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29w
eV9mcm9tPXt9KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb3B5X2Zyb20sIGRpY3QpOgorICAg
ICAgICAgICAgY29weV9mcm9tID0gY29weV9mcm9tLml0ZW1zKCkKKyAgICAgICAgZm9yIGtleSwg
dmFsdWUgaW4gY29weV9mcm9tOgorICAgICAgICAgICAgc2VsZi5fX3NldGl0ZW1fXyhrZXksIHZh
bHVlKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBz
dXBlcihNb2NrVGFibGUsIHNlbGYpLl9fZ2V0aXRlbV9fKGtleS5sb3dlcigpKQorCisgICAgZGVm
IF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICBzdXBlcihNb2NrVGFibGUs
IHNlbGYpLl9fc2V0aXRlbV9fKGtleS5sb3dlcigpLCB2YWx1ZSkKKworICAgIGRlZiBnZXQoc2Vs
Ziwga2V5LCBkZWZfdmFsdWU9Tm9uZSk6CisgICAgICAgIHJldHVybiBzdXBlcihNb2NrVGFibGUs
IHNlbGYpLmdldChrZXkubG93ZXIoKSwgZGVmX3ZhbHVlKQorCisKK2NsYXNzIE1vY2tSZXF1ZXN0
KG9iamVjdCk6CisgICAgIiIiTW9jayByZXF1ZXN0LgorCisgICAgVGhpcyBtaW1pY3MgbW9kX3B5
dGhvbiByZXF1ZXN0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVyaT1Ob25l
LCBoZWFkZXJzX2luPXt9LCBjb25uZWN0aW9uPU5vbmUsCisgICAgICAgICAgICAgICAgIGlzX2h0
dHBzPUZhbHNlKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAg
IEFyZ3VtZW50czoKKyAgICAgICAgICAgIHVyaTogVVJJIG9mIHRoZSByZXF1ZXN0LgorICAgICAg
ICAgICAgaGVhZGVyc19pbjogUmVxdWVzdCBoZWFkZXJzLgorICAgICAgICAgICAgY29ubmVjdGlv
bjogQ29ubmVjdGlvbiB1c2VkIGZvciB0aGUgcmVxdWVzdC4KKyAgICAgICAgICAgIGlzX2h0dHBz
OiBXaGV0aGVyIHRoaXMgcmVxdWVzdCBpcyBvdmVyIFNTTC4KKworICAgICAgICBTZWUgdGhlIGRv
Y3VtZW50IG9mIG1vZF9weXRob24gbXBfY29ubiBmb3IgZGV0YWlscy4KKyAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IGNvbm5lY3Rp
b24KKyAgICAgICAgc2VsZi5oZWFkZXJzX2luID0gTW9ja1RhYmxlKGhlYWRlcnNfaW4pCisgICAg
ICAgIHNlbGYuaXNfaHR0cHNfID0gaXNfaHR0cHMKKworICAgIGRlZiBpc19odHRwcyhzZWxmKToK
KyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhpcyByZXF1ZXN0IGlzIG92ZXIgU1NMLiIiIgor
ICAgICAgICByZXR1cm4gc2VsZi5pc19odHRwc18KKworCitjbGFzcyBNb2NrRGlzcGF0Y2hlcihv
YmplY3QpOgorICAgICIiIk1vY2sgZm9yIGRpc3BhdGNoLkRpc3BhdGNoZXIuIiIiCisKKyAgICBk
ZWYgc2hha2VfaGFuZHMoc2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIHRyYW5zZmVyX2RhdGEoc2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisK
KyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC9ydW5fYWxsLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ODU2MTgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3J1bl9hbGwucHkKQEAgLTAsMCAr
MSw2NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29n
bGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisj
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisi
IiJSdW4gYWxsIHRlc3RzIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyIiIgorCisKK2ltcG9ydCBv
cworaW1wb3J0IHJlCitpbXBvcnQgdW5pdHRlc3QKKworCitfVEVTVF9NT0RVTEVfUEFUVEVSTiA9
IHJlLmNvbXBpbGUocideKHRlc3RfLispXC5weSQnKQorCisKK2RlZiBfbGlzdF90ZXN0X21vZHVs
ZXMoZGlyZWN0b3J5KToKKyAgICBtb2R1bGVfbmFtZXMgPSBbXQorICAgIGZvciBmaWxlbmFtZSBp
biBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6CisgICAgICAgIG1hdGNoID0gX1RFU1RfTU9EVUxFX1BB
VFRFUk4uc2VhcmNoKGZpbGVuYW1lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIG1v
ZHVsZV9uYW1lcy5hcHBlbmQobWF0Y2guZ3JvdXAoMSkpCisgICAgcmV0dXJuIG1vZHVsZV9uYW1l
cworCisKK2RlZiBfc3VpdGUoKToKKyAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkK
KyAgICByZXR1cm4gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygKKyAgICAgICAgICAgIF9saXN0
X3Rlc3RfbW9kdWxlcyhvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sICcu
JykpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihk
ZWZhdWx0VGVzdD0nX3N1aXRlJykKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weSBiL1dlYktpdFRv
b2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwLi44MDQ5YzUzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2Rpc3BhdGNoLnB5CkBAIC0wLDAgKzEsMTgxIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBk
aXNwYXRjaCBtb2R1bGUuIiIiCisKKworCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCitp
bXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5d2Vic29j
a2V0LgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGRpc3BhdGNoCisKK2ltcG9ydCBtb2Nr
CisKKworX1RFU1RfSEFORExFUlNfRElSID0gb3MucGF0aC5qb2luKAorICAgICAgICBvcy5wYXRo
LnNwbGl0KF9fZmlsZV9fKVswXSwgJ3Rlc3RkYXRhJywgJ2hhbmRsZXJzJykKKworY2xhc3MgRGlz
cGF0Y2hlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X25vcm1hbGl6ZV9w
YXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnL2Ev
YicpLnJlcGxhY2UoJ1xcJywgJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRj
aC5fbm9ybWFsaXplX3BhdGgoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5w
YXRoLmFic3BhdGgoJy9hL2InKS5yZXBsYWNlKCdcXCcsICcvJyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlzcGF0Y2guX25vcm1hbGl6ZV9wYXRoKCdcXGFcXGInKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgoJy9hL2InKS5yZXBsYWNlKCdcXCcsICcvJyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2guX25vcm1hbGl6ZV9wYXRoKCcvYS9j
Ly4uL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgoJ2FiYycp
LnJlcGxhY2UoJ1xcJywgJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5f
bm9ybWFsaXplX3BhdGgoJ2FiYycpKQorCisgICAgZGVmIHRlc3RfY29udmVydGVyKHNlbGYpOgor
ICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIo
Jy9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi9o
X3dzaC5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvYy9oJywgY29udmVydGVyKCcv
YS9iL2MvaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjb252ZXJ0
ZXIoJy9hL2IvaC5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGNvbnZlcnRl
cignYS9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhf
dG9fcmVzb3VyY2VfY29udmVydGVyKCdhL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcv
aCcsIGNvbnZlcnRlcignYS9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29udmVydGVyID0gZGlz
cGF0Y2guX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKCcvYS9iLy8vJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoJy9hL2IvaF93c2gucHknKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoJy9hL2IvLi4vYi9oX3dzaC5weScpKQor
CisgICAgICAgIGNvbnZlcnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRl
cignL2EvLi4vYS9iLy4uL2IvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252
ZXJ0ZXIoJy9hL2IvaF93c2gucHknKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5f
cGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIocidcYVxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnL2gnLCBjb252ZXJ0ZXIocidcYVxiXGhfd3NoLnB5JykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJy9oJywgY29udmVydGVyKHInL2EvYi9oX3dzaC5weScpKQorCisgICAgZGVmIHRl
c3Rfc291cmNlX2ZpbGVfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gbGlzdChkaXNwYXRj
aC5fc291cmNlX2ZpbGVfcGF0aHMoX1RFU1RfSEFORExFUlNfRElSKSkKKyAgICAgICAgcGF0aHMu
c29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgbGVuKHBhdGhzKSkKKyAgICAgICAg
ZXhwZWN0ZWRfcGF0aHMgPSBbCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hB
TkRMRVJTX0RJUiwgJ2Ffd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9U
RVNUX0hBTkRMRVJTX0RJUiwgJ2Jfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5q
b2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdjX3dzaC5weScpLAorICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWInLCAnZV93c2gucHknKSwK
KyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywg
J2Zfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgZXhwZWN0ZWQsIGFj
dHVhbCBpbiB6aXAoZXhwZWN0ZWRfcGF0aHMsIHBhdGhzKToKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZShzZWxmKToK
KyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZGlzcGF0
Y2guX3NvdXJjZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRpc3BhdGNoLkRpc3Bh
dGNoRXJyb3IsIGRpc3BhdGNoLl9zb3VyY2UsICdkZWYnKQorICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBkaXNwYXRjaC5fc291cmNlLCAnMS8wJykKKyAg
ICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3BhdGNoLl9zb3VyY2UoCisgICAgICAgICAgICAgICAg
J2RlZiB3ZWJfc29ja2V0X3NoYWtlX2hhbmRzKHJlcXVlc3QpOnBhc3NcbicKKyAgICAgICAgICAg
ICAgICAnZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KTpwYXNzXG4nKSkKKwor
ICAgIGRlZiB0ZXN0X3NvdXJjZV93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9
IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSKQorICAgICAgICB3YXJuaW5n
cyA9IGRpc3BhdGNoZXIuc291cmNlX3dhcm5pbmdzKCkKKyAgICAgICAgd2FybmluZ3Muc29ydCgp
CisgICAgICAgIGV4cGVjdGVkX3dhcm5pbmdzID0gWworICAgICAgICAgICAgICAgIChvcy5wYXRo
LmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnYl93c2gucHknKSArICc6ICcKKyAgICAgICAgICAg
ICAgICAgJ3dlYl9zb2NrZXRfc2hha2VfaGFuZHMgaXMgbm90IGRlZmluZWQuJyksCisgICAgICAg
ICAgICAgICAgKG9zLnBhdGguam9pbihfVEVTVF9IQU5ETEVSU19ESVIsICdzdWInLCAnY193c2gu
cHknKSArICc6ICcKKyAgICAgICAgICAgICAgICAgJ3dlYl9zb2NrZXRfc2hha2VfaGFuZHMgaXMg
bm90IGNhbGxhYmxlLicpLAorICAgICAgICAgICAgICAgIChvcy5wYXRoLmpvaW4oX1RFU1RfSEFO
RExFUlNfRElSLCAnc3ViJywgJ2dfd3NoLnB5JykgKyAnOiAnCisgICAgICAgICAgICAgICAgICd3
ZWJfc29ja2V0X3NoYWtlX2hhbmRzIGlzIG5vdCBkZWZpbmVkLicpLAorICAgICAgICAgICAgICAg
IChvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3ViJywgJ2hfd3NoLnB5JykgKyAn
OiAnCisgICAgICAgICAgICAgICAgICd3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgaXMgbm90IGRl
ZmluZWQuJyksCisgICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg0
LCBsZW4od2FybmluZ3MpKQorICAgICAgICBmb3IgZXhwZWN0ZWQsIGFjdHVhbCBpbiB6aXAoZXhw
ZWN0ZWRfd2FybmluZ3MsIHdhcm5pbmdzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGV4cGVjdGVkLCBhY3R1YWwpCisKKyAgICBkZWYgdGVzdF9zaGFrZV9oYW5kKHNlbGYpOgorICAg
ICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVSU19ESVIp
CisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KCkKKyAgICAgICAgcmVxdWVzdC53
c19yZXNvdXJjZSA9ICcvYScKKyAgICAgICAgcmVxdWVzdC53c19vcmlnaW4gPSAnaHR0cDovL2V4
YW1wbGUuY29tJworICAgICAgICBkaXNwYXRjaGVyLnNoYWtlX2hhbmRzKHJlcXVlc3QpICAjIE11
c3Qgbm90IHJhaXNlIGV4Y2VwdGlvbi4KKworICAgICAgICByZXF1ZXN0LndzX29yaWdpbiA9ICdo
dHRwOi8vYmFkLmV4YW1wbGUuY29tJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkaXNwYXRj
aC5EaXNwYXRjaEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyLnNo
YWtlX2hhbmRzLCByZXF1ZXN0KQorCisgICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YShzZWxmKToK
KyAgICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNf
RElSKQorICAgICAgICByZXF1ZXN0ID0gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2su
TW9ja0Nvbm4oJycpKQorICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0gJy9hJworICAgICAg
ICByZXF1ZXN0LndzX3Byb3RvY29sID0gJ3AxJworCisgICAgICAgIGRpc3BhdGNoZXIudHJhbnNm
ZXJfZGF0YShyZXF1ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhX3dzaC5weSBpcyBj
YWxsZWQgZm9yIC9hLCBwMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25u
ZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1
ZXN0KGNvbm5lY3Rpb249bW9jay5Nb2NrQ29ubignJykpCisgICAgICAgIHJlcXVlc3Qud3NfcmVz
b3VyY2UgPSAnL3N1Yi9lJworICAgICAgICByZXF1ZXN0LndzX3Byb3RvY29sID0gTm9uZQorICAg
ICAgICBkaXNwYXRjaGVyLnRyYW5zZmVyX2RhdGEocmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnc3ViL2Vfd3NoLnB5IGlzIGNhbGxlZCBmb3IgL3N1Yi9lLCBOb25lJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisK
KyAgICBkZWYgdGVzdF90cmFuc2Zlcl9kYXRhX25vX2hhbmRsZXIoc2VsZik6CisgICAgICAgIGRp
c3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUikKKyAgICAg
ICAgZm9yIHJlc291cmNlIGluIFsnL2InLCAnL3N1Yi9jJywgJy9zdWIvZCcsICcvZG9lcy9ub3Qv
ZXhpc3QnXToKKyAgICAgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5lY3Rp
b249bW9jay5Nb2NrQ29ubignJykpCisgICAgICAgICAgICByZXF1ZXN0LndzX3Jlc291cmNlID0g
cmVzb3VyY2UKKyAgICAgICAgICAgIHJlcXVlc3Qud3NfcHJvdG9jb2wgPSAncDInCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVl
c3QpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgICAgIGV4Y2VwdCBkaXNw
YXRjaC5EaXNwYXRjaEVycm9yLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhz
dHIoZSkuZmluZCgnTm8gaGFuZGxlcicpICE9IC0xKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2Vw
dGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfdHJhbnNm
ZXJfZGF0YV9oYW5kbGVyX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZGlzcGF0Y2hlciA9IGRp
c3BhdGNoLkRpc3BhdGNoZXIoX1RFU1RfSEFORExFUlNfRElSKQorICAgICAgICByZXF1ZXN0ID0g
bW9jay5Nb2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAgICAgICBy
ZXF1ZXN0LndzX3Jlc291cmNlID0gJy9zdWIvZicKKyAgICAgICAgcmVxdWVzdC53c19wcm90b2Nv
bCA9ICdwMycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9k
YXRhKHJlcXVlc3QpCisgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgZGlz
cGF0Y2guRGlzcGF0Y2hFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIo
ZSkuZmluZCgnSW50ZW50aW9uYWwnKSAhPSAtMSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK
KyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9oYW5kc2hha2UucHkgYi9XZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLmIxNGNhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5CkBAIC0wLDAgKzEsMzE2IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisj
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZv
ciBoYW5kc2hha2UgbW9kdWxlLiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29u
ZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0LgorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGhhbmRzaGFrZQorCitpbXBvcnQgbW9jaworCisKK19H
T09EX1JFUVVFU1QgPSAoCisgICAgODAsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAgICdV
cGdyYWRlJzonV2ViU29ja2V0JywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAg
ICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhh
bXBsZS5jb20nLAorICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKKyAgICB9
CispCisKK19HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCA9ICgKKyAgICAnSFRUUC8xLjEgMTAx
IFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29j
a2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1P
cmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjog
d3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1w
bGVcclxuJworICAgICdcclxuJykKKworX0dPT0RfUkVTUE9OU0VfU0VDVVJFID0gKAorICAgICdI
VFRQLzEuMSAxMDEgV2ViIFNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJworICAgICdVcGdy
YWRlOiBXZWJTb2NrZXRcclxuJworICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKyAgICAn
V2ViU29ja2V0LU9yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicKKyAgICAnV2ViU29ja2V0
LUxvY2F0aW9uOiB3c3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicKKyAgICAnV2ViU29ja2V0LVBy
b3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJykKKworX0dPT0RfUkVRVUVTVF9OT05ERUZB
VUxUX1BPUlQgPSAoCisgICAgODA4MSwKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ1Vw
Z3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAg
ICAgICAnSG9zdCc6J2V4YW1wbGUuY29tOjgwODEnLAorICAgICAgICAnT3JpZ2luJzonaHR0cDov
L2V4YW1wbGUuY29tJywKKyAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCisg
ICAgfQorKQorCitfR09PRF9SRVNQT05TRV9OT05ERUZBVUxUX1BPUlQgPSAoCisgICAgJ0hUVFAv
MS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3JhZGU6
IFdlYlNvY2tldFxyXG4nCisgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICdXZWJT
b2NrZXQtT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJworICAgICdXZWJTb2NrZXQtTG9j
YXRpb246IHdzOi8vZXhhbXBsZS5jb206ODA4MS9kZW1vXHJcbicKKyAgICAnV2ViU29ja2V0LVBy
b3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJykKKworX0dPT0RfUkVTUE9OU0VfU0VDVVJF
X05PTkRFRiA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNo
YWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjog
VXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxy
XG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3NzOi8vZXhhbXBsZS5jb206ODA4MS9kZW1v
XHJcbicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJykK
KworX0dPT0RfUkVRVUVTVF9OT19QUk9UT0NPTCA9ICgKKyAgICA4MCwKKyAgICAnL2RlbW8nLAor
ICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAnQ29ubmVjdGlv
bic6J1VwZ3JhZGUnLAorICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAgJ09y
aWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgfQorKQorCitfR09PRF9SRVNQT05TRV9O
T19QUk9UT0NPTCA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFu
ZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlv
bjogVXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNv
bVxyXG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJc
bicKKyAgICAnXHJcbicpCisKK19HT09EX1JFUVVFU1RfV0lUSF9PUFRJT05BTF9IRUFERVJTID0g
KAorICAgIDgwLAorICAgICcvZGVtbycsCisgICAgeworICAgICAgICAnVXBncmFkZSc6J1dlYlNv
Y2tldCcsCisgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICdIb3N0Jzon
ZXhhbXBsZS5jb20nLAorICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAg
ICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCisgICAgICAgICdBS2V5JzonQVZh
bHVlJywKKyAgICAgICAgJ0VtcHR5VmFsdWUnOicnLAorICAgIH0KKykKKworX0JBRF9SRVFVRVNU
UyA9ICgKKyAgICAoICAjIEhUVFAgcmVxdWVzdAorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1v
JywKKyAgICAgICAgeworICAgICAgICAgICAgJ0hvc3QnOid3d3cuZ29vZ2xlLmNvbScsCisgICAg
ICAgICAgICAnVXNlci1BZ2VudCc6J01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IEludGVsIE1h
YyBPUyBYIDEwLjU7JworICAgICAgICAgICAgICAgICAgICAgICAgICcgZW4tVVM7IHJ2OjEuOS4x
LjMpIEdlY2tvLzIwMDkwODI0IEZpcmVmb3gvMy41LjMnCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJyBHVEI2IEdUQkEnLAorICAgICAgICAgICAgJ0FjY2VwdCc6J3RleHQvaHRtbCxhcHBsaWNh
dGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCcKKyAgICAgICAgICAgICAgICAg
ICAgICcqLyo7cT0wLjgnLAorICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6J2VuLXVzLGVu
O3E9MC41JywKKyAgICAgICAgICAgICdBY2NlcHQtRW5jb2RpbmcnOidnemlwLGRlZmxhdGUnLAor
ICAgICAgICAgICAgJ0FjY2VwdC1DaGFyc2V0JzonSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9
MC43JywKKyAgICAgICAgICAgICdLZWVwLUFsaXZlJzonMzAwJywKKyAgICAgICAgICAgICdDb25u
ZWN0aW9uJzona2VlcC1hbGl2ZScsCisgICAgICAgIH0KKyAgICApLAorICAgICggICMgTWlzc2lu
ZyBVcGdyYWRlCisgICAgICAgIDgwLAorICAgICAgICAnL2RlbW8nLAorICAgICAgICB7CisgICAg
ICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAgICAgJ0hvc3QnOidleGFt
cGxlLmNvbScsCisgICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAg
ICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAorICAgICAgICB9CisgICAg
KSwKKyAgICAoICAjIFdyb25nIFVwZ3JhZGUKKyAgICAgICAgODAsCisgICAgICAgICcvZGVtbycs
CisgICAgICAgIHsKKyAgICAgICAgICAgICdVcGdyYWRlJzonTm9uV2ViU29ja2V0JywKKyAgICAg
ICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICAgICAnSG9zdCc6J2V4YW1w
bGUuY29tJywKKyAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAorICAg
ICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCisgICAgICAgIH0KKyAgICAp
LAorICAgICggICMgRW1wdHkgV2ViU29ja2V0LVByb3RvY29sCisgICAgICAgIDgwLAorICAgICAg
ICAnL2RlbW8nLAorICAgICAgICB7CisgICAgICAgICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcs
CisgICAgICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAgICAgJ0hvc3Qn
OidleGFtcGxlLmNvbScsCisgICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29t
JywKKyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOicnLAorICAgICAgICB9CisgICAg
KSwKKyAgICAoICAjIFdyb25nIHBvcnQgbnVtYmVyIGZvcm1hdAorICAgICAgICA4MCwKKyAgICAg
ICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQn
LAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0
JzonZXhhbXBsZS5jb206MHg1MCcsCisgICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1w
bGUuY29tJywKKyAgICAgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAorICAg
ICAgICB9CisgICAgKSwKKyAgICAoICAjIEhlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0Y2gK
KyAgICAgICAgODA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAg
J1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRl
JywKKyAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdp
bic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29s
Jzonc2FtcGxlJywKKyAgICAgICAgfQorICAgICksCisgICAgKCAgIyBJbGxlZ2FsIFdlYlNvY2tl
dC1Qcm90b2NvbAorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAg
ICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24n
OidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAg
ICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0
LVByb3RvY29sJzonaWxsZWdhbCBwcm90b2NvbCcsCisgICAgICAgIH0KKyAgICApLAorKQorCisK
K2RlZiBfY3JlYXRlX3JlcXVlc3QocmVxdWVzdF9kZWYpOgorICAgIGNvbm4gPSBtb2NrLk1vY2tD
b25uKCcnKQorICAgIGNvbm4ubG9jYWxfYWRkciA9ICgnMC4wLjAuMCcsIHJlcXVlc3RfZGVmWzBd
KQorICAgIHJldHVybiBtb2NrLk1vY2tSZXF1ZXN0KAorICAgICAgICAgICAgdXJpPXJlcXVlc3Rf
ZGVmWzFdLAorICAgICAgICAgICAgaGVhZGVyc19pbj1yZXF1ZXN0X2RlZlsyXSwKKyAgICAgICAg
ICAgIGNvbm5lY3Rpb249Y29ubikKKworCitjbGFzcyBIYW5kc2hha2VyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdmFsaWRhdGVfcHJvdG9jb2woc2VsZik6CisgICAgICAg
IGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2woJ3NhbXBsZScpICAjIHNob3VsZCBzdWNjZWVk
LgorICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sKCdTYW1wbGUnKSAgIyBzaG91
bGQgc3VjY2VlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtlLkhhbmRzaGFr
ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3By
b3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FtcGxlIHByb3RvY29sJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAjICJKYXBhbiIgaW4gSmFwYW5lc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgdSdcdTY1ZTVcdTY3MmMnKQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0
X2RlZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChf
R09PRF9SRVFVRVNUKQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIo
cmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2su
TW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5zaGFrZV9oYW5kcygpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfREVGQVVMVF9QT1JULAorICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2RlbW8nLCByZXF1ZXN0LndzX3Jlc291cmNlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vZXhhbXBsZS5jb20nLCByZXF1ZXN0LndzX29y
aWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnd3M6Ly9leGFtcGxlLmNvbS9kZW1vJywg
cmVxdWVzdC53c19sb2NhdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywg
cmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9zZWN1cmVf
ZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9H
T09EX1JFUVVFU1QpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5sb2NhbF9hZGRyID0gKCcw
LjAuMC4wJywgNDQzKQorICAgICAgICByZXF1ZXN0LmlzX2h0dHBzXyA9IFRydWUKKyAgICAgICAg
aGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCkpCisgICAg
ICAgIGhhbmRzaGFrZXIuc2hha2VfaGFuZHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9H
T09EX1JFU1BPTlNFX1NFQ1VSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNv
bm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBs
ZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfbm9u
ZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9H
T09EX1JFUVVFU1RfTk9OREVGQVVMVF9QT1JUKQorICAgICAgICBoYW5kc2hha2VyID0gaGFuZHNo
YWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtlci5zaGFr
ZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfTk9OREVG
QVVMVF9QT1JULAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53
cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVz
dC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9zZWN1cmVfbm9uX2Rl
ZmF1bHRfcG9ydChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09P
RF9SRVFVRVNUX05PTkRFRkFVTFRfUE9SVCkKKyAgICAgICAgcmVxdWVzdC5pc19odHRwc18gPSBU
cnVlCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0
Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLnNoYWtlX2hhbmRzKCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChfR09PRF9SRVNQT05TRV9TRUNVUkVfTk9OREVGLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0
ZXN0X2dvb2RfcmVxdWVzdF9kZWZhdWx0X25vX3Byb3RvY29sKHNlbGYpOgorICAgICAgICByZXF1
ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KF9HT09EX1JFUVVFU1RfTk9fUFJPVE9DT0wpCisgICAgICAg
IGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAg
ICAgICBoYW5kc2hha2VyLnNoYWtlX2hhbmRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChf
R09PRF9SRVNQT05TRV9OT19QUk9UT0NPTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
Tm9uZSwgcmVxdWVzdC53c19wcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9v
cHRpb25hbF9oZWFkZXJzKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0
KF9HT09EX1JFUVVFU1RfV0lUSF9PUFRJT05BTF9IRUFERVJTKQorICAgICAgICBoYW5kc2hha2Vy
ID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNo
YWtlci5zaGFrZV9oYW5kcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FWYWx1ZScsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzX2luWydBS2V5J10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC5oZWFkZXJzX2luWydFbXB0eVZhbHVlJ10pCisKKyAgICBkZWYgdGVzdF9iYWRfcmVxdWVzdHMo
c2VsZik6CisgICAgICAgIGZvciByZXF1ZXN0IGluIG1hcChfY3JlYXRlX3JlcXVlc3QsIF9CQURf
UkVRVUVTVFMpOgorICAgICAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2Vy
KHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFu
ZHNoYWtlLkhhbmRzaGFrZUVycm9yLCBoYW5kc2hha2VyLnNoYWtlX2hhbmRzKQorCisKK2lmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCisKKworIyB2aTpzdHM9
NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rf
bW9jay5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tb2NrLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMTM3ZDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weQpAQCAtMCwwICsxLDEy
NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUg
SW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJU
ZXN0cyBmb3IgbW9jayBtb2R1bGUuIiIiCisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdGhyZWFk
aW5nCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IG1vY2sKKworCitjbGFzcyBNb2NrQ29ublRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2Vs
Zi5fY29ubiA9IG1vY2suTW9ja0Nvbm4oJ0FCQ1xyXG5ERUZHXHJcblxyXG5ISUpLJykKKworICAg
IGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBQkNc
clxuJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdE
RUZHXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnSElKSycsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnJywgc2VsZi5fY29ubi5yZWFkbGluZSgpKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQUJDXHJcbkQnLCBzZWxmLl9jb25uLnJlYWQoNikp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VGR1xyXG5cclxuSEknLCBzZWxmLl9jb25uLnJl
YWQoOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0pLJywgc2VsZi5fY29ubi5yZWFkKDEw
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5fY29ubi5yZWFkKDEwKSkKKwor
ICAgIGRlZiB0ZXN0X3JlYWRfYW5kX3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdBQkNcclxuRCcsIHNlbGYuX2Nvbm4ucmVhZCg2KSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnRUZHXHJcbicsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnXHJcbkhJSksnLCBzZWxmLl9jb25uLnJlYWQoOSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJycsIHNlbGYuX2Nvbm4ucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0X3dy
aXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9jb25uLndyaXRlKCdIZWxsb1xyXG4nKQorICAgICAg
ICBzZWxmLl9jb25uLndyaXRlKCdXb3JsZFxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdIZWxsb1xyXG5Xb3JsZFxyXG4nLCBzZWxmLl9jb25uLndyaXR0ZW5fZGF0YSgpKQorCisKK2Ns
YXNzIE1vY2tCbG9ja2luZ0Nvbm5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVz
dF9yZWFkKHNlbGYpOgorICAgICAgICBjbGFzcyBMaW5lUmVhZGVyKHRocmVhZGluZy5UaHJlYWQp
OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4sIHF1ZXVlKToKKyAgICAgICAg
ICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAg
c2VsZi5fcXVldWUgPSBxdWV1ZQorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm4gPSBjb25uCisg
ICAgICAgICAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxm
LnN0YXJ0KCkKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2Nvbm4ucmVhZGxpbmUo
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9xdWV1ZS5wdXQoZGF0YSkKKyAgICAgICAgY29u
biA9IG1vY2suTW9ja0Jsb2NraW5nQ29ubigpCisgICAgICAgIHF1ZXVlID0gUXVldWUuUXVldWUo
KQorICAgICAgICByZWFkZXIgPSBMaW5lUmVhZGVyKGNvbm4sIHF1ZXVlKQorICAgICAgICBzZWxm
LmZhaWxVbmxlc3MocXVldWUuZW1wdHkoKSkKKyAgICAgICAgY29ubi5wdXRfYnl0ZXMoJ0ZvbyBi
YXJcclxuJykKKyAgICAgICAgcmVhZCA9IHF1ZXVlLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJ0ZvbyBiYXJcclxuJywgcmVhZCkKKworCitjbGFzcyBNb2NrVGFibGVUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9kaWN0KHNlbGYpOgorICAg
ICAgICB0YWJsZSA9IG1vY2suTW9ja1RhYmxlKHsnS2V5JzonVmFsdWUnfSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9m
cm9tX2xpc3Qoc2VsZik6CisgICAgICAgIHRhYmxlID0gbW9jay5Nb2NrVGFibGUoWygnS2V5Jywg
J1ZhbHVlJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgn
S0VZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ2tleSddKQor
CisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fdHVwbGUoc2VsZik6CisgICAgICAgIHRhYmxlID0g
bW9jay5Nb2NrVGFibGUoKCgnS2V5JywgJ1ZhbHVlJyksKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCdWYWx1ZScsIHRhYmxlWydrZXknXSkKKworICAgIGRlZiB0ZXN0X3NldF9hbmRfZ2V0KHNlbGYp
OgorICAgICAgICB0YWJsZSA9IG1vY2suTW9ja1RhYmxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChOb25lLCB0YWJsZS5nZXQoJ0tleScpKQorICAgICAgICB0YWJsZVsnS2V5J10gPSAnVmFs
dWUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLZXknKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ2tleScpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS0VZJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGVbJ0tleSddKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnVmFsdWUnLCB0YWJsZVsnS0VZJ10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5IGIvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uYjNiYTUzOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5CkBAIC0wLDAgKzEsMTQ5IEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBtc2d1
dGlsIG1vZHVsZS4iIiIKKworCitpbXBvcnQgUXVldWUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBv
cnQgY29uZmlnICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0
LgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworaW1wb3J0IG1vY2sKKwor
CitkZWYgX2NyZWF0ZV9yZXF1ZXN0KHJlYWRfZGF0YSk6CisgICAgcmV0dXJuIG1vY2suTW9ja1Jl
cXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKHJlYWRfZGF0YSkpCisKK2RlZiBfY3JlYXRl
X2Jsb2NraW5nX3JlcXVlc3QoKToKKyAgICByZXR1cm4gbW9jay5Nb2NrUmVxdWVzdChjb25uZWN0
aW9uPW1vY2suTW9ja0Jsb2NraW5nQ29ubigpKQorCitjbGFzcyBNZXNzYWdlVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCcnKQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2Fn
ZShyZXF1ZXN0LCAnSGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwSGVsbG9c
eGZmJywgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rf
c2VuZF9tZXNzYWdlX3VuaWNvZGUoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3Jl
cXVlc3QoJycpCisgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHUnXHU2NWU1
JykKKyAgICAgICAgIyBVKzY1ZTUgaXMgZW5jb2RlZCBhcyBlNiw5NyxhNSBpbiBVVEYtOAorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwXHhlNlx4OTdceGE1XHhmZicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAg
ZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0
ZV9yZXF1ZXN0KCdceDAwSGVsbG9ceGZmXHgwMFdvcmxkIVx4ZmYnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCdIZWxsbycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdXb3JsZCEnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShy
ZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV91bmljb2RlKHNlbGYpOgor
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdceDAwXHhlNlx4OWNceGFjXHhmZicp
CisgICAgICAgICMgVSs2NzJjIGlzIGVuY29kZWQgYXMgZTYsOWMsYWMgaW4gVVRGLTgKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1NjcyYycsIG1zZ3V0aWwucmVjZWl2ZV9tZXNzYWdlKHJl
cXVlc3QpKQorCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9tZXNzYWdlX2Rpc2NhcmQoc2VsZik6Cisg
ICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ1x4ODBceDA2SUdOT1JFXHgwMEhlbGxv
XHhmZicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4MDFESVNSRUdBUkRceGZm
XHgwMFdvcmxkIVx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdIZWxsbycsIG1zZ3V0
aWwucmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdX
b3JsZCEnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKworICAgIGRlZiB0ZXN0
X3BheWxvYWRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBmb3IgbGVuZ3RoLCBieXRlcyBpbiAoKDAs
ICdceDAwJyksICgweDdmLCAnXHg3ZicpLCAoMHg4MCwgJ1x4ODFceDAwJyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoMHgxMjM0LCAnXHg4MFx4YTRceDM0JykpOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1zZ3V0aWwuX3BheWxvYWRfbGVuZ3RoKF9jcmVhdGVfcmVxdWVzdChieXRlcykpKQorCisgICAg
ZGVmIHRlc3RfcmVjZWl2ZV9ieXRlcyhzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdCgnYWJjZGVmZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycsIG1zZ3V0
aWwuX3JlY2VpdmVfYnl0ZXMocmVxdWVzdCwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J2RlZmcnLCBtc2d1dGlsLl9yZWNlaXZlX2J5dGVzKHJlcXVlc3QsIDQpKQorCisgICAgZGVmIHRl
c3RfcmVhZF91bnRpbChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgn
YWJjWGRlZmdYJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgbXNndXRpbC5fcmVh
ZF91bnRpbChyZXF1ZXN0LCAnWCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdkZWZnJywg
bXNndXRpbC5fcmVhZF91bnRpbChyZXF1ZXN0LCAnWCcpKQorCisKK2NsYXNzIE1lc3NhZ2VSZWNl
aXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3F1ZXVlKHNlbGYpOgor
ICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkKKyAgICAgICAgcmVj
ZWl2ZXIgPSBtc2d1dGlsLk1lc3NhZ2VSZWNlaXZlcihyZXF1ZXN0KQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoTm9uZSwgcmVjZWl2ZXIucmVjZWl2ZV9ub3dhaXQoKSkKKworICAgICAgICBy
ZXF1ZXN0LmNvbm5lY3Rpb24ucHV0X2J5dGVzKCdceDAwSGVsbG8hXHhmZicpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ0hlbGxvIScsIHJlY2VpdmVyLnJlY2VpdmUoKSkKKworICAgIGRlZiB0
ZXN0X29ubWVzc2FnZShzZWxmKToKKyAgICAgICAgb25tZXNzYWdlX3F1ZXVlID0gUXVldWUuUXVl
dWUoKQorICAgICAgICBkZWYgb25tZXNzYWdlX2hhbmRsZXIobWVzc2FnZSk6CisgICAgICAgICAg
ICBvbm1lc3NhZ2VfcXVldWUucHV0KG1lc3NhZ2UpCisKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVh
dGVfYmxvY2tpbmdfcmVxdWVzdCgpCisgICAgICAgIHJlY2VpdmVyID0gbXNndXRpbC5NZXNzYWdl
UmVjZWl2ZXIocmVxdWVzdCwgb25tZXNzYWdlX2hhbmRsZXIpCisKKyAgICAgICAgcmVxdWVzdC5j
b25uZWN0aW9uLnB1dF9ieXRlcygnXHgwMEhlbGxvIVx4ZmYnKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdIZWxsbyEnLCBvbm1lc3NhZ2VfcXVldWUuZ2V0KCkpCisKKworY2xhc3MgTWVzc2Fn
ZVNlbmRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6
CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3JlcXVlc3QoKQorICAgICAgICBz
ZW5kZXIgPSBtc2d1dGlsLk1lc3NhZ2VTZW5kZXIocmVxdWVzdCkKKworICAgICAgICBzZW5kZXIu
c2VuZCgnV29ybGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwV29ybGRceGZmJywg
cmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3Rfc2VuZF9u
b3dhaXQoc2VsZik6CisgICAgICAgICMgVXNlIGEgcXVldWUgdG8gY2hlY2sgdGhlIGJ5dGVzIHdy
aXR0ZW4gYnkgTWVzc2FnZVNlbmRlci4KKyAgICAgICAgIyByZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dHRlbl9kYXRhKCkgY2Fubm90IGJlIHVzZWQgaGVyZSBiZWNhdXNlCisgICAgICAgICMgTWVzc2Fn
ZVNlbmRlciBydW5zIGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAgICBzZW5kX3F1ZXVlID0g
UXVldWUuUXVldWUoKQorICAgICAgICBkZWYgd3JpdGUoYnl0ZXMpOgorICAgICAgICAgICAgc2Vu
ZF9xdWV1ZS5wdXQoYnl0ZXMpCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5nX3Jl
cXVlc3QoKQorICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUgPSB3cml0ZQorCisgICAg
ICAgIHNlbmRlciA9IG1zZ3V0aWwuTWVzc2FnZVNlbmRlcihyZXF1ZXN0KQorCisgICAgICAgIHNl
bmRlci5zZW5kX25vd2FpdCgnSGVsbG8nKQorICAgICAgICBzZW5kZXIuc2VuZF9ub3dhaXQoJ1dv
cmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMEhlbGxvXHhmZicsIHNlbmRfcXVl
dWUuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBXb3JsZFx4ZmYnLCBzZW5k
X3F1ZXVlLmdldCgpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfdXRpbC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0
L3Rlc3QvdGVzdF91dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJl
ZTVhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rl
c3RfdXRpbC5weQpAQCAtMCwwICsxLDU3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMg
Q29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciB1dGlsIG1vZHVsZS4iIiIKKworCitpbXBv
cnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZyAgIyBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYmVm
b3JlIG1vZF9weXdlYnNvY2tldC4KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCB1dGlsCisK
KworY2xhc3MgVXRpbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldF9z
dGFja190cmFjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnTm9uZVxuJywgdXRp
bC5nZXRfc3RhY2tfdHJhY2UoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYSA9IDEgLyAw
ICAjIEludGVudGlvbmFsbHkgcmFpc2UgZXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRp
b246CisgICAgICAgICAgICB0cmFjZSA9IHV0aWwuZ2V0X3N0YWNrX3RyYWNlKCkKKyAgICAgICAg
ICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5zdGFydHN3aXRoKCdUcmFjZWJhY2snKSkKKyAgICAg
ICAgICAgIHNlbGYuZmFpbFVubGVzcyh0cmFjZS5maW5kKCdaZXJvRGl2aXNpb25FcnJvcicpICE9
IC0xKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigp
CisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2Ffd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9hX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwLi43NTdhNTQxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9hX3dzaC5weQpAQCAtMCwwICsxLDQy
IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCitkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1
ZXN0KToKKyAgICBpZiByZXF1ZXN0LndzX29yaWdpbiA9PSAnaHR0cDovL2V4YW1wbGUuY29tJzoK
KyAgICAgICAgcmV0dXJuCisgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hY2NlcHRhYmxlIG9yaWdp
bjogJXInICUgcmVxdWVzdC53c19vcmlnaW4pCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJf
ZGF0YShyZXF1ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ2Ffd3NoLnB5IGlz
IGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1
ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3
PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEv
aGFuZGxlcnMvYl93c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRh
L2hhbmRsZXJzL2Jfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdm
ODdjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rl
c3RkYXRhL2hhbmRsZXJzL2Jfd3NoLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMgQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKKyMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9jX3dzaC5weSBiL1dlYktp
dFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Nfd3NoLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzMmUwMjgKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9j
X3dzaC5weQpAQCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgor
IyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJOb24tY2Fs
bGFibGUgaGFuZGxlcnMuCisiIiIKKworCit3ZWJfc29ja2V0X3NoYWtlX2hhbmRzID0gVHJ1ZQor
d2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhID0gMQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9z
dWIvZC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMv
c3ViL2QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTY0ZWJkMwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvc3ViL2QucHkKQEAgLTAsMCArMSw0NCBAQAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xl
IEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIi
Q29ycmVjdCBzaWduYXR1cmVzLCB3cm9uZyBmaWxlIG5hbWUuCisiIiIKKworCitkZWYgd2ViX3Nv
Y2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIHdlYl9zb2NrZXRf
dHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ3N1
Yi9kLnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3Qv
dGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Vfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZV93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uZjY5Njg0YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2Vfd3NoLnB5CkBAIC0wLDAgKzEs
NDAgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2RlZiB3ZWJfc29ja2V0X3NoYWtlX2hhbmRzKHJl
cXVlc3QpOgorICAgIHJldHVybiBUcnVlCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0
YShyZXF1ZXN0KToKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ3N1Yi9lX3dzaC5weSBp
cyBjYWxsZWQgZm9yICVzLCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVx
dWVzdC53c19yZXNvdXJjZSwgcmVxdWVzdC53c19wcm90b2NvbCkpCisKKworIyB2aTpzdHM9NCBz
dz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRh
L2hhbmRsZXJzL3N1Yi9mX3dzaC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVz
dGRhdGEvaGFuZGxlcnMvc3ViL2Zfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw
MDAwMDAuLjI4NDFhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tl
dC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9mX3dzaC5weQpAQCAtMCwwICsxLDQ0IEBACisj
IENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCisiIiJFeGNlcHRpb24gaW4gd2ViX3NvY2tldF90cmFuc2Zlcl9k
YXRhKCkuCisiIiIKKworCitkZWYgd2ViX3NvY2tldF9zaGFrZV9oYW5kcyhyZXF1ZXN0KToKKyAg
ICBwYXNzCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBy
YWlzZSBFeGNlcHRpb24oJ0ludGVudGlvbmFsIEV4Y2VwdGlvbiBmb3IgJXMsICVzJyAlCisgICAg
ICAgICAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29s
KSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2dfd3NoLnB5IGIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvZ193c2gucHkKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ3YTEyYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2dfd3NoLnB5
CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIldyb25nIHdlYl9zb2Nr
ZXRfc2hha2VfaGFuZHMgc2lnbmF0dXJlLgorIiIiCisKKworZGVmIG5vX3dlYl9zb2NrZXRfc2hh
a2VfaGFuZHMocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVy
X2RhdGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdzdWIvZ193c2gu
cHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHJlcXVlc3Qud3NfcmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQorCisKKyMgdmk6c3Rz
PTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
ZGF0YS9oYW5kbGVycy9zdWIvaF93c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0
L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9oX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwLi4yNjMyZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvaF93c2gucHkKQEAgLTAsMCArMSw0NCBA
QAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiV3Jvbmcgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRh
KCkgc2lnbmF0dXJlLgorIiIiCisKKworZGVmIHdlYl9zb2NrZXRfc2hha2VfaGFuZHMocmVxdWVz
dCk6CisgICAgcGFzcworCisKK2RlZiBub193ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVz
dCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdzdWIvaF93c2gucHkgaXMgY2FsbGVk
IGZvciAlcywgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3Qud3Nf
cmVzb3VyY2UsIHJlcXVlc3Qud3NfcHJvdG9jb2wpKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41268</attachid>
            <date>2009-10-15 22:14:54 -0700</date>
            <delta_ts>2009-10-15 23:42:44 -0700</delta_ts>
            <desc>add mod_pywebsocket to test Web Sockets</desc>
            <filename>bug-27490-20091016141451.patch</filename>
            <type>text/plain</type>
            <size>118502</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1ZjkxZjk3Li44MzdkMzI1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDktMTAt
MTUgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtb2RfcHl3ZWJzb2NrZXQgdG8gdGVz
dCBXZWIgU29ja2V0cy4KKyAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5d2Vic29j
a2V0LworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0
OTAKKworICAgICAgICAqIHB5d2Vic29ja2V0L0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAqIHB5
d2Vic29ja2V0L01BTklGRVNULmluOiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9SRUFE
TUU6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L2V4YW1wbGUvZWNob19jbGllbnQucHk6
IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L2V4YW1wbGUvZWNob193c2gucHk6IEFkZGVk
LgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9fX2luaXRfXy5weTogQWRk
ZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5OiBB
ZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGVhZGVycGFy
c2VyaGFuZGxlci5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29j
a2V0L21zZ3V0aWwucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9zdGFuZGFsb25lLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3
ZWJzb2NrZXQvdXRpbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvc2V0dXAucHk6
IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBweXdlYnNvY2tldC90ZXN0L21vY2sucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vi
c29ja2V0L3Rlc3QvcnVuX2FsbC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0X2Rpc3BhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rl
c3RfaGFuZHNoYWtlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3Rf
bW9jay5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21zZ3V0aWwu
cHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF91dGlsLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL2JsYW5rX3dz
aC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVy
cy9vcmlnaW5fY2hlY2tfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0
L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXJfd3NoLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9ub193
c2hfYXRfdGhlX2VuZC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVzdC90ZXN0
ZGF0YS9oYW5kbGVycy9zdWIvbm9uX2NhbGxhYmxlX3dzaC5weTogQWRkZWQuCisgICAgICAgICog
cHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvcGxhaW5fd3NoLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBweXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9u
Z19oYW5kc2hha2Vfc2lnX3dzaC5weTogQWRkZWQuCisgICAgICAgICogcHl3ZWJzb2NrZXQvdGVz
dC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvd3JvbmdfdHJhbnNmZXJfc2lnX3dzaC5weTogQWRkZWQu
CisKIDIwMDktMTAtMTUgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC9DT1BZSU5HIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvQ09QWUlORwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjlkNTJkCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvQ09QWUlORwpAQCAtMCwwICsxLDI4IEBACitD
b3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgoraW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
K1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9N
QU5JRkVTVC5pbiBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L01BTklGRVNULmluCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MjU2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC9NQU5JRkVTVC5pbgpAQCAtMCwwICsxLDYgQEAKK2luY2x1
ZGUgQ09QWUlORworaW5jbHVkZSBNQU5JRkVTVC5pbgoraW5jbHVkZSBSRUFETUUKK3JlY3Vyc2l2
ZS1pbmNsdWRlIGV4YW1wbGUgKi5weQorcmVjdXJzaXZlLWluY2x1ZGUgbW9kX3B5d2Vic29ja2V0
ICoucHkKK3JlY3Vyc2l2ZS1pbmNsdWRlIHRlc3QgKi5weQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvUkVBRE1FIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvUkVBRE1FCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWYwNWYKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9SRUFETUUKQEAgLTAsMCArMSw2IEBACitJbnN0
YWxsIHRoaXMgcGFja2FnZSBieToKKyQgcHl0aG9uIHNldHVwLnB5IGJ1aWxkCiskIHN1ZG8gcHl0
aG9uIHNldHVwLnB5IGluc3RhbGwKKworVGhlbiByZWFkIGRvY3VtZW50IGJ5OgorJCBweWRvYyBt
b2RfcHl3ZWJzb2NrZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L2V4YW1w
bGUvZWNob19jbGllbnQucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9f
Y2xpZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxYjEyOWMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fY2xp
ZW50LnB5CkBAIC0wLDAgKzEsMTk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29w
eXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKKyIiIldlYiBTb2NrZXQgRWNobyBjbGllbnQuCisKK1RoaXMgaXMgYW4g
ZXhhbXBsZSBXZWIgU29ja2V0IGNsaWVudCB0aGF0IHRhbGtzIHdpdGggZWNob193c2gucHkuCitU
aGlzIG1heSBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIG1vZF9weXdlYnNvY2tldCBpbnN0YWxsYXRp
b24uCisKK05vdGU6CitUaGlzIGNvZGUgaXMgZmFyIGZyb20gcm9idXN0LCBlLmcuLCB3ZSBjdXQg
Y29ybmVycyBpbiBoYW5kc2hha2UuCisiIiIKKworCitpbXBvcnQgY29kZWNzCitmcm9tIG9wdHBh
cnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKKworCitf
REVGQVVMVF9QT1JUID0gODAKK19ERUZBVUxUX1NFQ1VSRV9QT1JUID0gNDQzCitfVU5ERUZJTkVE
X1BPUlQgPSAtMQorCitfVVBHUkFERV9IRUFERVIgPSAnVXBncmFkZTogV2ViU29ja2V0XHJcbicK
K19DT05ORUNUSU9OX0hFQURFUiA9ICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKK19FWFBFQ1RF
RF9SRVNQT05TRSA9ICgKKyAgICAgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29s
IEhhbmRzaGFrZVxyXG4nICsKKyAgICAgICAgX1VQR1JBREVfSEVBREVSICsKKyAgICAgICAgX0NP
Tk5FQ1RJT05fSEVBREVSKQorCisKK2RlZiBfbWV0aG9kX2xpbmUocmVzb3VyY2UpOgorICAgIHJl
dHVybiAnR0VUICVzIEhUVFAvMS4xXHJcbicgJSByZXNvdXJjZQorCisKK2RlZiBfb3JpZ2luX2hl
YWRlcihvcmlnaW4pOgorICAgIHJldHVybiAnT3JpZ2luOiAlc1xyXG4nICUgb3JpZ2luCisKKwor
Y2xhc3MgX1RMU1NvY2tldChvYmplY3QpOgorICAgICIiIldyYXBwZXIgZm9yIGEgVExTIGNvbm5l
Y3Rpb24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3X3NvY2tldCk6CisgICAgICAg
IHNlbGYuX3NzbCA9IHNvY2tldC5zc2wocmF3X3NvY2tldCkKKworICAgIGRlZiBzZW5kKHNlbGYs
IGJ5dGVzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbC53cml0ZShieXRlcykKKworICAgIGRl
ZiByZWN2KHNlbGYsIHNpemU9LTEpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3NsLnJlYWQoc2l6
ZSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvLgorICAg
ICAgICBwYXNzCisKKworY2xhc3MgRWNob0NsaWVudChvYmplY3QpOgorICAgICIiIldlYiBTb2Nr
ZXQgZWNobyBjbGllbnQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucyk6Cisg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3NvY2tldCA9IE5v
bmUKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgY2xpZW50LgorCisg
ICAgICAgIFNoYWtlIGhhbmRzIGFuZCB0aGVuIHJlcGVhdCBzZW5kaW5nIG1lc3NhZ2UgYW5kIHJl
Y2VpdmluZyBpdHMgZWNoby4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNv
Y2tldC5zb2NrZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXQuY29u
bmVjdCgoc2VsZi5fb3B0aW9ucy5zZXJ2ZXJfaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnNlcnZlcl9wb3J0KSkKKyAgICAgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrZXQgPSBfVExT
U29ja2V0KHNlbGYuX3NvY2tldCkKKyAgICAgICAgICAgIHNlbGYuX2hhbmRzaGFrZSgpCisgICAg
ICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9vcHRpb25zLm1lc3NhZ2Uuc3BsaXQoJywnKToKKyAg
ICAgICAgICAgICAgICBmcmFtZSA9ICdceDAwJyArIGxpbmUuZW5jb2RlKCd1dGYtOCcpICsgJ1x4
ZmYnCisgICAgICAgICAgICAgICAgc2VsZi5fc29ja2V0LnNlbmQoZnJhbWUpCisgICAgICAgICAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmlu
dCAnU2VuZDogJXMnICUgbGluZQorICAgICAgICAgICAgICAgIHJlY2VpdmVkID0gc2VsZi5fc29j
a2V0LnJlY3YobGVuKGZyYW1lKSkKKyAgICAgICAgICAgICAgICBpZiByZWNlaXZlZCAhPSBmcmFt
ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJbmNvcnJlY3QgZWNobzog
JXInICUgcmVjZWl2ZWQpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3Nl
OgorICAgICAgICAgICAgICAgICAgICBwcmludCAnUmVjdjogJXMnICUgcmVjZWl2ZWRbMTotMV0u
ZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zb2Nr
ZXQuY2xvc2UoKQorCisgICAgZGVmIF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3Nv
Y2tldC5zZW5kKF9tZXRob2RfbGluZShzZWxmLl9vcHRpb25zLnJlc291cmNlKSkKKyAgICAgICAg
c2VsZi5fc29ja2V0LnNlbmQoX1VQR1JBREVfSEVBREVSKQorICAgICAgICBzZWxmLl9zb2NrZXQu
c2VuZChfQ09OTkVDVElPTl9IRUFERVIpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5kKHNlbGYu
X2Zvcm1hdF9ob3N0X2hlYWRlcigpKQorICAgICAgICBzZWxmLl9zb2NrZXQuc2VuZChfb3JpZ2lu
X2hlYWRlcihzZWxmLl9vcHRpb25zLm9yaWdpbikpCisgICAgICAgIHNlbGYuX3NvY2tldC5zZW5k
KCdcclxuJykKKworICAgICAgICBmb3IgZXhwZWN0ZWRfY2hhciBpbiBfRVhQRUNURURfUkVTUE9O
U0U6CisgICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCisgICAg
ICAgICAgICBpZiBleHBlY3RlZF9jaGFyICE9IHJlY2VpdmVkOgorICAgICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbignSGFuZHNoYWtlIGZhaWx1cmUnKQorICAgICAgICAjIFdlIGN1dCBjb3Ju
ZXJzIGFuZCBza2lwIG90aGVyIGhlYWRlcnMuCisgICAgICAgIHNlbGYuX3NraXBfaGVhZGVycygp
CisKKyAgICBkZWYgX3NraXBfaGVhZGVycyhzZWxmKToKKyAgICAgICAgdGVybWluYXRvciA9ICdc
clxuXHJcbicKKyAgICAgICAgcG9zID0gMAorICAgICAgICB3aGlsZSBwb3MgPCBsZW4odGVybWlu
YXRvcik6CisgICAgICAgICAgICByZWNlaXZlZCA9IHNlbGYuX3NvY2tldC5yZWN2KDEpWzBdCisg
ICAgICAgICAgICBpZiByZWNlaXZlZCA9PSB0ZXJtaW5hdG9yW3Bvc106CisgICAgICAgICAgICAg
ICAgcG9zICs9IDEKKyAgICAgICAgICAgIGVsaWYgcmVjZWl2ZWQgPT0gdGVybWluYXRvclswXToK
KyAgICAgICAgICAgICAgICBwb3MgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHBvcyA9IDAKKworICAgIGRlZiBfZm9ybWF0X2hvc3RfaGVhZGVyKHNlbGYpOgorICAgICAg
ICBob3N0ID0gJ0hvc3Q6ICcgKyBzZWxmLl9vcHRpb25zLnNlcnZlcl9ob3N0CisgICAgICAgIGlm
ICgobm90IHNlbGYuX29wdGlvbnMudXNlX3RscyBhbmQKKyAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLnNlcnZlcl9wb3J0ICE9IF9ERUZBVUxUX1BPUlQpIG9yCisgICAgICAgICAgICAoc2VsZi5f
b3B0aW9ucy51c2VfdGxzIGFuZAorICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuc2VydmVyX3Bv
cnQgIT0gX0RFRkFVTFRfU0VDVVJFX1BPUlQpKToKKyAgICAgICAgICAgIGhvc3QgKz0gJzonICsg
c3RyKHNlbGYuX29wdGlvbnMuc2VydmVyX3BvcnQpCisgICAgICAgIGhvc3QgKz0gJ1xyXG4nCisg
ICAgICAgIHJldHVybiBob3N0CisKKworZGVmIG1haW4oKToKKyAgICBzeXMuc3Rkb3V0ID0gY29k
ZWNzLmdldHdyaXRlcigndXRmLTgnKShzeXMuc3Rkb3V0KQorCisgICAgcGFyc2VyID0gT3B0aW9u
UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZXJ2ZXJfaG9zdCcsIGRl
c3Q9J3NlcnZlcl9ob3N0JywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0PSdsb2NhbGhvc3QnLCBoZWxwPSdzZXJ2ZXIgaG9zdCcpCisgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1wJywgJy0tc2VydmVyX3BvcnQnLCBkZXN0PSdzZXJ2ZXJfcG9ydCcsIHR5cGU9J2lu
dCcsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1fVU5ERUZJTkVEX1BPUlQsIGhlbHA9
J3NlcnZlciBwb3J0JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vcmlnaW4nLCBk
ZXN0PSdvcmlnaW4nLCB0eXBlPSdzdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9J2h0dHA6Ly9sb2NhbGhvc3QvJywgaGVscD0nb3JpZ2luJykKKyAgICBwYXJzZXIuYWRkX29w
dGlvbignLXInLCAnLS1yZXNvdXJjZScsIGRlc3Q9J3Jlc291cmNlJywgdHlwZT0nc3RyaW5nJywK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScvZWNobycsIGhlbHA9J3Jlc291cmNlIHBh
dGgnKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctbScsICctLW1lc3NhZ2UnLCBkZXN0PSdtZXNz
YWdlJywgdHlwZT0nc3RyaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdjb21tYS1z
ZXBhcmF0ZWQgbWVzc2FnZXMgdG8gc2VuZCcpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywg
Jy0tcXVpZXQnLCBkZXN0PSd2ZXJib3NlJywgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBoZWxwPSdzdXBwcmVzcyBtZXNzYWdlcycpCisg
ICAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdGxzJywgZGVzdD0ndXNlX3RscycsIGFjdGlv
bj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVs
cD0ndXNlIFRMUyAod3NzOi8vKScpCisgICAgKG9wdGlvbnMsIHVudXNlZF9hcmdzKSA9IHBhcnNl
ci5wYXJzZV9hcmdzKCkKKworICAgICMgRGVmYXVsdCBwb3J0IG51bWJlciBkZXBlbmRzIG9uIHdo
ZXRoZXIgVExTIGlzIHVzZWQuCisgICAgaWYgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9PSBfVU5ERUZJ
TkVEX1BPUlQ6CisgICAgICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAgICAgIG9wdGlv
bnMuc2VydmVyX3BvcnQgPSBfREVGQVVMVF9TRUNVUkVfUE9SVAorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgb3B0aW9ucy5zZXJ2ZXJfcG9ydCA9IF9ERUZBVUxUX1BPUlQKKworICAgICMgb3B0
cGFyc2UgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBub24tYXNjaWkgZGVmYXVsdCB2YWx1ZXMuCisg
ICAgIyBTZXQgZGVmYXVsdCBtZXNzYWdlIGhlcmUuCisgICAgaWYgbm90IG9wdGlvbnMubWVzc2Fn
ZToKKyAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gdSdIZWxsbyxcdTY1ZTVcdTY3MmMnICAgIyAi
SmFwYW4iIGluIEphcGFuZXNlCisKKyAgICBFY2hvQ2xpZW50KG9wdGlvbnMpLnJ1bigpCisKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKKworCisjIHZpOnN0cz00IHN3
PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L2V4YW1wbGUvZWNob193
c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2ODBmYTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9leGFtcGxlL2VjaG9fd3NoLnB5CkBAIC0wLDAgKzEs
NDQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBt
c2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgor
ICAgIHBhc3MgICMgQWx3YXlzIGFjY2VwdC4KKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9k
YXRhKHJlcXVlc3QpOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGxpbmUgPSBtc2d1dGlsLnJl
Y2VpdmVfbWVzc2FnZShyZXF1ZXN0KQorICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1
ZXN0LCBsaW5lKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L19faW5pdF9fLnB5IGIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLjhhY2QxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkKQEAgLTAsMCArMSw5NCBA
QAorIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiV2ViIFNvY2tldCBleHRlbnNpb24gZm9yIEFwYWNo
ZSBIVFRQIFNlcnZlci4KKworbW9kX3B5d2Vic29ja2V0IGlzIGEgV2ViIFNvY2tldCBleHRlbnNp
b24gZm9yIEFwYWNoZSBIVFRQIFNlcnZlcgoraW50ZW5kZWQgZm9yIHRlc3Rpbmcgb3IgZXhwZXJp
bWVudGFsIHB1cnBvc2VzLiBtb2RfcHl0aG9uIGlzIHJlcXVpcmVkLgorCitJbnN0YWxsYXRpb246
CisKKzAuIFByZXBhcmUgYW4gQXBhY2hlIEhUVFAgU2VydmVyIGZvciB3aGljaCBtb2RfcHl0aG9u
IGlzIGVuYWJsZWQuCisKKzEuIFNwZWNpZnkgdGhlIGZvbGxvd2luZyBBcGFjaGUgSFRUUCBTZXJ2
ZXIgZGlyZWN0aXZlcyB0byBzdWl0IHlvdXIKKyAgIGNvbmZpZ3VyYXRpb24uCisKKyAgIElmIG1v
ZF9weXdlYnNvY2tldCBpcyBub3QgaW4gdGhlIFB5dGhvbiBwYXRoLCBzcGVjaWZ5IHRoZSBmb2xs
b3dpbmcuCisgICA8d2Vic29ja19saWI+IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgbW9kX3B5d2Vi
c29ja2V0IGlzIGluc3RhbGxlZC4KKworICAgICAgIFB5dGhvblBhdGggInN5cy5wYXRoK1snPHdl
YnNvY2tfbGliPiddIgorCisgICBBbHdheXMgc3BlY2lmeSB0aGUgZm9sbG93aW5nLiA8d2Vic29j
a19oYW5kbGVycz4gaXMgdGhlIGRpcmVjdG9yeSB3aGVyZQorICAgdXNlci13cml0dGVuIFdlYiBT
b2NrZXQgaGFuZGxlcnMgYXJlIHBsYWNlZC4KKworICAgICAgIFB5dGhvbk9wdGlvbiBtb2RfcHl3
ZWJzb2NrZXQuaGFuZGxlcl9yb290IDx3ZWJzb2NrX2hhbmRsZXJzPgorICAgICAgIFB5dGhvbkhl
YWRlclBhcnNlckhhbmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBhcnNlcmhhbmRsZXIKKwor
ICAgRXhhbXBsZSBzbmlwcGV0IG9mIGh0dHBkLmNvbmY6CisgICAobW9kX3B5d2Vic29ja2V0IGlz
IGluIC93ZWJzb2NrX2xpYiwgV2ViIFNvY2tldCBoYW5kbGVycyBhcmUgaW4KKyAgIC93ZWJzb2Nr
X2hhbmRsZXJzLCBwb3J0IGlzIDgwIGZvciB3cywgNDQzIGZvciB3c3MuKQorCisgICAgICAgPElm
TW9kdWxlIHB5dGhvbl9tb2R1bGU+CisgICAgICAgICBQeXRob25QYXRoICJzeXMucGF0aCtbJy93
ZWJzb2NrX2xpYiddIgorICAgICAgICAgUHl0aG9uT3B0aW9uIG1vZF9weXdlYnNvY2tldC5oYW5k
bGVyX3Jvb3QgL3dlYnNvY2tfaGFuZGxlcnMKKyAgICAgICAgIFB5dGhvbkhlYWRlclBhcnNlckhh
bmRsZXIgbW9kX3B5d2Vic29ja2V0LmhlYWRlcnBhcnNlcmhhbmRsZXIKKyAgICAgICA8L0lmTW9k
dWxlPgorCitXcml0aW5nIFdlYiBTb2NrZXQgaGFuZGxlcnM6CisKK1doZW4gYSBXZWIgU29ja2V0
IHJlcXVlc3QgY29tZXMgaW4sIHRoZSByZXNvdXJjZSBuYW1lCitzcGVjaWZpZWQgaW4gdGhlIGhh
bmRzaGFrZSBpcyBjb25zaWRlcmVkIGFzIGlmIGl0IGlzIGEgZmlsZSBwYXRoIHVuZGVyCis8d2Vi
c29ja19oYW5kbGVycz4gYW5kIHRoZSBoYW5kbGVyIGRlZmluZWQgaW4KKzx3ZWJzb2NrX2hhbmRs
ZXJzPi88cmVzb3VyY2VfbmFtZT5fd3NoLnB5IGlzIGludm9rZWQuCisKK0ZvciBleGFtcGxlLCBp
ZiB0aGUgcmVzb3VyY2UgbmFtZSBpcyAvZXhhbXBsZS9jaGF0LCB0aGUgaGFuZGxlciBkZWZpbmVk
IGluCis8d2Vic29ja19oYW5kbGVycz4vZXhhbXBsZS9jaGF0X3dzaC5weSBpcyBpbnZva2VkLgor
CitBIFdlYiBTb2NrZXQgaGFuZGxlciBpcyBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIHR3byBm
dW5jdGlvbnM6CisKKyAgICB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KQor
ICAgIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorCit3aGVyZToKKyAgICByZXF1
ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisKK3dlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtl
IGlzIGNhbGxlZCBkdXJpbmcgdGhlIGhhbmRzaGFrZSBhZnRlciB0aGUKK2hlYWRlcnMgYXJlIHN1
Y2Nlc3NmdWxseSBwYXJzZWQgYW5kIFdlYiBTb2NrZXQgcHJvcGVydGllcyAod3NfbG9jYXRpb24s
Cit3c19vcmlnaW4sIHdzX3Byb3RvY29sLCBhbmQgd3NfcmVzb3VyY2UpIGFyZSBhZGRlZCB0byBy
ZXF1ZXN0LiBBIGhhbmRsZXIKK2NhbiByZWplY3QgdGhlIHJlcXVlc3QgYnkgcmFpc2luZyBhbiBl
eGNlcHRpb24uCisKK3dlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSBpcyBjYWxsZWQgYWZ0ZXIgdGhl
IGhhbmRzaGFrZSBjb21wbGV0ZWQKK3N1Y2Nlc3NmdWxseS4gQSBoYW5kbGVyIGNhbiByZWNlaXZl
L3NlbmQgbWVzc2FnZXMgZnJvbS90byB0aGUgY2xpZW50Cit1c2luZyByZXF1ZXN0LiBtb2RfcHl3
ZWJzb2NrZXQubXNndXRpbCBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0aWVzCitmb3IgZGF0YSB0cmFu
c2Zlci4KKyIiIgorCisKKyMgdmk6c3RzPTQgc3c9NCBldCB0dz03MgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5IGIvV2ViS2l0
VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2Rpc3BhdGNoLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwOGIwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvZGlzcGF0Y2gucHkKQEAgLTAsMCAr
MSwxOTIgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkRpc3BhdGNoIFdlYiBTb2NrZXQgcmVx
dWVzdC4KKyIiIgorCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2ltcG9ydCB1dGlsCisKKwor
X1NPVVJDRV9QQVRIX1BBVFRFUk4gPSByZS5jb21waWxlKHInKD9pKV93c2hcLnB5JCcpCitfU09V
UkNFX1NVRkZJWCA9ICdfd3NoLnB5JworX0RPX0VYVFJBX0hBTkRTSEFLRV9IQU5ETEVSX05BTUUg
PSAnd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UnCitfVFJBTlNGRVJfREFUQV9IQU5ETEVS
X05BTUUgPSAnd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhJworCisKK2NsYXNzIERpc3BhdGNoRXJy
b3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNlcHRpb24gaW4gZGlzcGF0Y2hpbmcgV2ViIFNvY2tl
dCByZXF1ZXN0LiIiIgorCisgICAgcGFzcworCisKK2RlZiBfbm9ybWFsaXplX3BhdGgocGF0aCk6
CisgICAgIiIiTm9ybWFsaXplIHBhdGguCisKKyAgICBBcmdzOgorICAgICAgICBwYXRoOiB0aGUg
cGF0aCB0byBub3JtYWxpemUuCisKKyAgICBQYXRoIGlzIGNvbnZlcnRlZCB0byB0aGUgYWJzb2x1
dGUgcGF0aC4KKyAgICBUaGUgaW5wdXQgcGF0aCBjYW4gdXNlIGVpdGhlciAnXFwnIG9yICcvJyBh
cyB0aGUgc2VwYXJhdG9yLgorICAgIFRoZSBub3JtYWxpemVkIHBhdGggYWx3YXlzIHVzZXMgJy8n
IHJlZ2FyZGxlc3Mgb2YgdGhlIHBsYXRmb3JtLgorICAgICIiIgorCisgICAgcGF0aCA9IHBhdGgu
cmVwbGFjZSgnXFwnLCBvcy5wYXRoLnNlcCkKKyAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHBh
dGgpCisgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisgICAgcmV0dXJuIHBhdGgK
KworCitkZWYgX3BhdGhfdG9fcmVzb3VyY2VfY29udmVydGVyKGJhc2VfZGlyKToKKyAgICBiYXNl
X2RpciA9IF9ub3JtYWxpemVfcGF0aChiYXNlX2RpcikKKyAgICBiYXNlX2xlbiA9IGxlbihiYXNl
X2RpcikKKyAgICBzdWZmaXhfbGVuID0gbGVuKF9TT1VSQ0VfU1VGRklYKQorICAgIGRlZiBjb252
ZXJ0ZXIocGF0aCk6CisgICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKF9TT1VSQ0VfU1VGRklY
KToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHBhdGggPSBfbm9ybWFsaXplX3Bh
dGgocGF0aCkKKyAgICAgICAgaWYgbm90IHBhdGguc3RhcnRzd2l0aChiYXNlX2Rpcik6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gcGF0aFtiYXNlX2xlbjotc3VmZml4
X2xlbl0KKyAgICByZXR1cm4gY29udmVydGVyCisKKworZGVmIF9zb3VyY2VfZmlsZV9wYXRocyhk
aXJlY3RvcnkpOgorICAgICIiIllpZWxkIFdlYiBTb2NrZXQgSGFuZGxlciBzb3VyY2UgZmlsZSBu
YW1lcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiIiIgorCisgICAgZm9yIHJvb3QsIHVudXNlZF9k
aXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcmVjdG9yeSk6CisgICAgICAgIGZvciBiYXNlIGluIGZp
bGVzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBiYXNlKQorICAgICAg
ICAgICAgaWYgX1NPVVJDRV9QQVRIX1BBVFRFUk4uc2VhcmNoKHBhdGgpOgorICAgICAgICAgICAg
ICAgIHlpZWxkIHBhdGgKKworCitkZWYgX3NvdXJjZShzb3VyY2Vfc3RyKToKKyAgICAiIiJTb3Vy
Y2UgYSBoYW5kbGVyIGRlZmluaXRpb24gc3RyaW5nLiIiIgorCisgICAgZ2xvYmFsX2RpYyA9IHt9
CisgICAgdHJ5OgorICAgICAgICBleGVjIHNvdXJjZV9zdHIgaW4gZ2xvYmFsX2RpYworICAgIGV4
Y2VwdCBFeGNlcHRpb246CisgICAgICAgIHJhaXNlIERpc3BhdGNoRXJyb3IoJ0Vycm9yIGluIHNv
dXJjaW5nIGhhbmRsZXI6JyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5nZXRf
c3RhY2tfdHJhY2UoKSkKKyAgICByZXR1cm4gKF9leHRyYWN0X2hhbmRsZXIoZ2xvYmFsX2RpYywg
X0RPX0VYVFJBX0hBTkRTSEFLRV9IQU5ETEVSX05BTUUpLAorICAgICAgICAgICAgX2V4dHJhY3Rf
aGFuZGxlcihnbG9iYWxfZGljLCBfVFJBTlNGRVJfREFUQV9IQU5ETEVSX05BTUUpKQorCisKK2Rl
ZiBfZXh0cmFjdF9oYW5kbGVyKGRpYywgbmFtZSk6CisgICAgaWYgbmFtZSBub3QgaW4gZGljOgor
ICAgICAgICByYWlzZSBEaXNwYXRjaEVycm9yKCclcyBpcyBub3QgZGVmaW5lZC4nICUgbmFtZSkK
KyAgICBoYW5kbGVyID0gZGljW25hbWVdCisgICAgaWYgbm90IGNhbGxhYmxlKGhhbmRsZXIpOgor
ICAgICAgICByYWlzZSBEaXNwYXRjaEVycm9yKCclcyBpcyBub3QgY2FsbGFibGUuJyAlIG5hbWUp
CisgICAgcmV0dXJuIGhhbmRsZXIKKworCitjbGFzcyBEaXNwYXRjaGVyKG9iamVjdCk6CisgICAg
IiIiRGlzcGF0Y2hlcyBXZWIgU29ja2V0IHJlcXVlc3RzLgorCisgICAgVGhpcyBjbGFzcyBtYWlu
dGFpbnMgYSBtYXAgZnJvbSByZXNvdXJjZSBuYW1lIHRvIGhhbmRsZXJzLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RfZGlyKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFu
IGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByb290X2RpcjogVGhlIGRp
cmVjdG9yeSB3aGVyZSBoYW5kbGVyIGRlZmluaXRpb24gZmlsZXMgYXJlCisgICAgICAgICAgICBw
bGFjZWQuCisgICAgICAgICIiIgorCisgICAgICAgIHNlbGYuX2hhbmRsZXJzID0ge30KKyAgICAg
ICAgc2VsZi5fc291cmNlX3dhcm5pbmdzID0gW10KKyAgICAgICAgc2VsZi5fc291cmNlX2ZpbGVz
X2luX2Rpcihyb290X2RpcikKKworICAgIGRlZiBzb3VyY2Vfd2FybmluZ3Moc2VsZik6CisgICAg
ICAgICIiIlJldHVybiB3YXJuaW5ncyBpbiBzb3VyY2luZyBoYW5kbGVycy4iIiIKKworICAgICAg
ICByZXR1cm4gc2VsZi5fc291cmNlX3dhcm5pbmdzCisKKyAgICBkZWYgZG9fZXh0cmFfaGFuZHNo
YWtlKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJEbyBleHRyYSBjaGVja2luZyBpbiBXZWIg
U29ja2V0IGhhbmRzaGFrZS4KKworICAgICAgICBTZWxlY3QgYSBoYW5kbGVyIGJhc2VkIG9uIHJl
cXVlc3QudXJpIGFuZCBjYWxsIGl0cworICAgICAgICB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRz
aGFrZSBmdW5jdGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9k
X3B5dGhvbiByZXF1ZXN0LgorICAgICAgICAiIiIKKworICAgICAgICBkb19leHRyYV9oYW5kc2hh
a2VfLCB1bnVzZWRfdHJhbnNmZXJfZGF0YSA9IHNlbGYuX2hhbmRsZXIocmVxdWVzdCkKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgZG9fZXh0cmFfaGFuZHNoYWtlXyhyZXF1ZXN0KQorICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgRGlzcGF0Y2hFcnJvcignJXMg
cmFpc2VkIGV4Y2VwdGlvbjogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgKF9ET19FWFRSQV9I
QU5EU0hBS0VfSEFORExFUl9OQU1FLCB1dGlsLmdldF9zdGFja190cmFjZSgpKSkKKworICAgIGRl
ZiB0cmFuc2Zlcl9kYXRhKHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJMZXQgYSBoYW5kbGVy
IHRyYW5zZmVyX2RhdGEgd2l0aCBhIFdlYiBTb2NrZXQgY2xpZW50LgorCisgICAgICAgIFNlbGVj
dCBhIGhhbmRsZXIgYmFzZWQgb24gcmVxdWVzdC53c19yZXNvdXJjZSBhbmQgY2FsbCBpdHMKKyAg
ICAgICAgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhIGZ1bmN0aW9uLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAgICIiIgor
CisgICAgICAgIHVudXNlZF9kb19leHRyYV9oYW5kc2hha2UsIHRyYW5zZmVyX2RhdGFfID0gc2Vs
Zi5faGFuZGxlcihyZXF1ZXN0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cmFuc2Zlcl9k
YXRhXyhyZXF1ZXN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFp
c2UgRGlzcGF0Y2hFcnJvcignJXMgcmFpc2VkIGV4Y2VwdGlvbjogJXMnICUKKyAgICAgICAgICAg
ICAgICAgICAgKF9UUkFOU0ZFUl9EQVRBX0hBTkRMRVJfTkFNRSwgdXRpbC5nZXRfc3RhY2tfdHJh
Y2UoKSkpCisKKyAgICBkZWYgX2hhbmRsZXIoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGVyc1tyZXF1ZXN0LndzX3Jlc291cmNlXQor
ICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBEaXNwYXRjaEVycm9y
KCdObyBoYW5kbGVyIGZvcjogJXInICUgcmVxdWVzdC53c19yZXNvdXJjZSkKKworICAgIGRlZiBf
c291cmNlX2ZpbGVzX2luX2RpcihzZWxmLCByb290X2Rpcik6CisgICAgICAgICIiIlNvdXJjZSBh
bGwgdGhlIGhhbmRsZXIgc291cmNlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuIiIiCisKKyAgICAg
ICAgdG9fcmVzb3VyY2UgPSBfcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIocm9vdF9kaXIpCisg
ICAgICAgIGZvciBwYXRoIGluIF9zb3VyY2VfZmlsZV9wYXRocyhyb290X2Rpcik6CisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBfc291cmNlKG9wZW4ocGF0aCku
cmVhZCgpKQorICAgICAgICAgICAgZXhjZXB0IERpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgICAg
ICAgICAgc2VsZi5fc291cmNlX3dhcm5pbmdzLmFwcGVuZCgnJXM6ICVzJyAlIChwYXRoLCBlKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5faGFuZGxlcnNbdG9f
cmVzb3VyY2UocGF0aCldID0gaGFuZGxlcnMKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2Uu
cHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2N2FhZGQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtl
LnB5CkBAIC0wLDAgKzEsMTc4IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJXZWIgU29ja2V0
IGhhbmRzaGFraW5nLgorCitOb3RlOiByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUvcmVhZCBhcmUg
dXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZlbiB0aG91Z2gKK21vZF9weXRob24gZG9jdW1lbnQgc2F5
cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9uIGhhbmRsZXJzLgor
VW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwgcmVx
dWVzdC53cml0ZS9yZWFkIGFyZQorbm90IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxv
dyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRpbmcvcmVhZGluZy4KKyIiIgorCisKK2ltcG9ydCByZQor
CisKK19ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCA9IDgwCitfREVGQVVMVF9XRUJfU09DS0VUX1NF
Q1VSRV9QT1JUID0gNDQzCitfV0VCX1NPQ0tFVF9TQ0hFTUUgPSAnd3MnCitfV0VCX1NPQ0tFVF9T
RUNVUkVfU0NIRU1FID0gJ3dzcycKKworX01FVEhPRF9MSU5FID0gcmUuY29tcGlsZShyJ15HRVQg
KFteIF0rKSBIVFRQLzEuMVxyXG4kJykKKworX01BTkRBVE9SWV9IRUFERVJTID0gWworICAgICMg
a2V5LCBleHBlY3RlZCB2YWx1ZSBvciBOb25lCisgICAgWydVcGdyYWRlJywgJ1dlYlNvY2tldCdd
LAorICAgIFsnQ29ubmVjdGlvbicsICdVcGdyYWRlJ10sCisgICAgWydIb3N0JywgTm9uZV0sCisg
ICAgWydPcmlnaW4nLCBOb25lXSwKK10KKworCitkZWYgX2RlZmF1bHRfcG9ydChpc19zZWN1cmUp
OgorICAgIGlmIGlzX3NlY3VyZToKKyAgICAgICAgcmV0dXJuIF9ERUZBVUxUX1dFQl9TT0NLRVRf
U0VDVVJFX1BPUlQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX0RFRkFVTFRfV0VCX1NPQ0tF
VF9QT1JUCisKKworY2xhc3MgSGFuZHNoYWtlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFeGNl
cHRpb24gaW4gV2ViIFNvY2tldCBIYW5kc2hha2UuIiIiCisKKyAgICBwYXNzCisKKworZGVmIF92
YWxpZGF0ZV9wcm90b2NvbChwcm90b2NvbCk6CisgICAgIiIiVmFsaWRhdGUgV2ViU29ja2V0LVBy
b3RvY29sIHN0cmluZy4iIiIKKworICAgIGlmIG5vdCBwcm90b2NvbDoKKyAgICAgICAgcmFpc2Ug
SGFuZHNoYWtlRXJyb3IoJ0ludmFsaWQgV2ViU29ja2V0LVByb3RvY29sOiBlbXB0eScpCisgICAg
Zm9yIGMgaW4gcHJvdG9jb2w6CisgICAgICAgIGlmIG5vdCAweDIxIDw9IG9yZChjKSA8PSAweDdl
OgorICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0lsbGVnYWwgY2hhcmFjdGVyIGlu
IHByb3RvY29sOiAlcicgJSBjKQorCisKK2NsYXNzIEhhbmRzaGFrZXIob2JqZWN0KToKKyAgICAi
IiJUaGlzIGNsYXNzIHBlcmZvcm1zIFdlYiBTb2NrZXQgaGFuZHNoYWtlLiIiIgorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIGRpc3BhdGNoZXIpOgorICAgICAgICAiIiJDb25zdHJ1
Y3QgYW4gaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3Q6IG1v
ZF9weXRob24gcmVxdWVzdC4KKyAgICAgICAgICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIgKGRp
c3BhdGNoLkRpc3BhdGNoZXIpLgorCisgICAgICAgIEhhbmRzaGFrZXIgd2lsbCBhZGQgYXR0cmli
dXRlcyBzdWNoIGFzIHdzX3Jlc291cmNlIGluIHBlcmZvcm1pbmcKKyAgICAgICAgaGFuZHNoYWtl
LgorICAgICAgICAiIiIKKworICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAg
ICBzZWxmLl9kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcgorCisgICAgZGVmIGRvX2hhbmRzaGFrZShz
ZWxmKToKKyAgICAgICAgIiIiUGVyZm9ybSBXZWIgU29ja2V0IEhhbmRzaGFrZS4iIiIKKworICAg
ICAgICBzZWxmLl9jaGVja19oZWFkZXJfbGluZXMoKQorICAgICAgICBzZWxmLl9zZXRfcmVzb3Vy
Y2UoKQorICAgICAgICBzZWxmLl9zZXRfb3JpZ2luKCkKKyAgICAgICAgc2VsZi5fc2V0X2xvY2F0
aW9uKCkKKyAgICAgICAgc2VsZi5fc2V0X3Byb3RvY29sKCkKKyAgICAgICAgc2VsZi5fZGlzcGF0
Y2hlci5kb19leHRyYV9oYW5kc2hha2Uoc2VsZi5fcmVxdWVzdCkKKyAgICAgICAgc2VsZi5fc2Vu
ZF9oYW5kc2hha2UoKQorCisgICAgZGVmIF9zZXRfcmVzb3VyY2Uoc2VsZik6CisgICAgICAgIHNl
bGYuX3JlcXVlc3Qud3NfcmVzb3VyY2UgPSBzZWxmLl9yZXF1ZXN0LnVyaQorCisgICAgZGVmIF9z
ZXRfb3JpZ2luKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0LndzX29yaWdpbiA9IHNlbGYu
X3JlcXVlc3QuaGVhZGVyc19pblsnT3JpZ2luJ10KKworICAgIGRlZiBfc2V0X2xvY2F0aW9uKHNl
bGYpOgorICAgICAgICBsb2NhdGlvbl9wYXJ0cyA9IFtdCisgICAgICAgIGlmIHNlbGYuX3JlcXVl
c3QuaXNfaHR0cHMoKToKKyAgICAgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChfV0VCX1NP
Q0tFVF9TRUNVUkVfU0NIRU1FKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9jYXRpb25f
cGFydHMuYXBwZW5kKF9XRUJfU09DS0VUX1NDSEVNRSkKKyAgICAgICAgbG9jYXRpb25fcGFydHMu
YXBwZW5kKCc6Ly8nKQorICAgICAgICBob3N0LCBwb3J0ID0gc2VsZi5fcGFyc2VfaG9zdF9oZWFk
ZXIoKQorICAgICAgICBjb25uZWN0aW9uX3BvcnQgPSBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24u
bG9jYWxfYWRkclsxXQorICAgICAgICBpZiBwb3J0ICE9IGNvbm5lY3Rpb25fcG9ydDoKKyAgICAg
ICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdIZWFkZXIvY29ubmVjdGlvbiBwb3J0IG1pc21h
dGNoOiAlZC8lZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcnQsIGNv
bm5lY3Rpb25fcG9ydCkpCisgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFwcGVuZChob3N0KQorICAg
ICAgICBpZiAocG9ydCAhPSBfZGVmYXVsdF9wb3J0KHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMoKSkp
OgorICAgICAgICAgICAgbG9jYXRpb25fcGFydHMuYXBwZW5kKCc6JykKKyAgICAgICAgICAgIGxv
Y2F0aW9uX3BhcnRzLmFwcGVuZChzdHIocG9ydCkpCisgICAgICAgIGxvY2F0aW9uX3BhcnRzLmFw
cGVuZChzZWxmLl9yZXF1ZXN0LnVyaSkKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19sb2NhdGlv
biA9ICcnLmpvaW4obG9jYXRpb25fcGFydHMpCisKKyAgICBkZWYgX3BhcnNlX2hvc3RfaGVhZGVy
KHNlbGYpOgorICAgICAgICBmaWVsZHMgPSBzZWxmLl9yZXF1ZXN0LmhlYWRlcnNfaW5bJ0hvc3Qn
XS5zcGxpdCgnOicsIDEpCisgICAgICAgIGlmIGxlbihmaWVsZHMpID09IDE6CisgICAgICAgICAg
ICByZXR1cm4gZmllbGRzWzBdLCBfZGVmYXVsdF9wb3J0KHNlbGYuX3JlcXVlc3QuaXNfaHR0cHMo
KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGZpZWxkc1swXSwgaW50KGZpZWxk
c1sxXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBI
YW5kc2hha2VFcnJvcignSW52YWxpZCBwb3J0IG51bWJlciBmb3JtYXQ6ICVyJyAlIGUpCisKKyAg
ICBkZWYgX3NldF9wcm90b2NvbChzZWxmKToKKyAgICAgICAgcHJvdG9jb2wgPSBzZWxmLl9yZXF1
ZXN0LmhlYWRlcnNfaW4uZ2V0KCdXZWJTb2NrZXQtUHJvdG9jb2wnKQorICAgICAgICBpZiBwcm90
b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF92YWxpZGF0ZV9wcm90b2NvbChwcm90b2Nv
bCkKKyAgICAgICAgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbCA9IHByb3RvY29sCisKKyAgICBk
ZWYgX3NlbmRfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rp
b24ud3JpdGUoCisgICAgICAgICAgICAgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3Rv
Y29sIEhhbmRzaGFrZVxyXG4nKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dGUoJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nKQorICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5l
Y3Rpb24ud3JpdGUoJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJykKKyAgICAgICAgc2VsZi5fcmVx
dWVzdC5jb25uZWN0aW9uLndyaXRlKCdXZWJTb2NrZXQtT3JpZ2luOiAnKQorICAgICAgICBzZWxm
Ll9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoc2VsZi5fcmVxdWVzdC53c19vcmlnaW4pCisgICAg
ICAgIHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnXHJcbicpCisgICAgICAgIHNlbGYu
X3JlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgnV2ViU29ja2V0LUxvY2F0aW9uOiAnKQorICAgICAg
ICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoc2VsZi5fcmVxdWVzdC53c19sb2NhdGlv
bikKKyAgICAgICAgc2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdcclxuJykKKyAgICAg
ICAgaWYgc2VsZi5fcmVxdWVzdC53c19wcm90b2NvbDoKKyAgICAgICAgICAgIHNlbGYuX3JlcXVl
c3QuY29ubmVjdGlvbi53cml0ZSgnV2ViU29ja2V0LVByb3RvY29sOiAnKQorICAgICAgICAgICAg
c2VsZi5fcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKHNlbGYuX3JlcXVlc3Qud3NfcHJvdG9jb2wp
CisgICAgICAgICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1xyXG4nKQorICAg
ICAgICBzZWxmLl9yZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1xyXG4nKQorCisgICAgZGVmIF9j
aGVja19oZWFkZXJfbGluZXMoc2VsZik6CisgICAgICAgIGZvciBrZXksIGV4cGVjdGVkX3ZhbHVl
IGluIF9NQU5EQVRPUllfSEVBREVSUzoKKyAgICAgICAgICAgIGFjdHVhbF92YWx1ZSA9IHNlbGYu
X3JlcXVlc3QuaGVhZGVyc19pbi5nZXQoa2V5KQorICAgICAgICAgICAgaWYgbm90IGFjdHVhbF92
YWx1ZToKKyAgICAgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcignSGVhZGVyICVzIGlz
IG5vdCBkZWZpbmVkJyAlIGtleSkKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3ZhbHVlOgorICAg
ICAgICAgICAgICAgIGlmIGFjdHVhbF92YWx1ZSAhPSBleHBlY3RlZF92YWx1ZToKKyAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0lsbGVnYWwgdmFsdWUgZm9yIGhlYWRl
ciAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtl
eSwgYWN0dWFsX3ZhbHVlKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oZWFkZXJwYXJzZXJoYW5kbGVy
LnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hlYWRlcnBhcnNl
cmhhbmRsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzM4YTFkZQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC9oZWFkZXJwYXJzZXJoYW5kbGVyLnB5CkBAIC0wLDAgKzEsOTIgQEAKKyMgQ29weXJpZ2h0IDIw
MDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKKyIiIlB5dGhvbkhlYWRlclBhcnNlckhhbmRsZXIgZm9yIG1vZF9weXdlYnNvY2tldC4K
KworQXBhY2hlIEhUVFAgU2VydmVyIGFuZCBtb2RfcHl0aG9uIG11c3QgYmUgY29uZmlndXJlZCBz
dWNoIHRoYXQgdGhpcworZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGhhbmRsZSBXZWIgU29ja2V0IHJl
cXVlc3QuCisiIiIKKworCitmcm9tIG1vZF9weXRob24gaW1wb3J0IGFwYWNoZQorCitpbXBvcnQg
ZGlzcGF0Y2gKK2ltcG9ydCBoYW5kc2hha2UKK2ltcG9ydCB1dGlsCisKKworIyBQeXRob25PcHRp
b24gdG8gc3BlY2lmeSB0aGUgaGFuZGxlciByb290IGRpcmVjdG9yeS4KK19QWU9QVF9IQU5ETEVS
X1JPT1QgPSAnbW9kX3B5d2Vic29ja2V0LmhhbmRsZXJfcm9vdCcKKworCitkZWYgX2NyZWF0ZV9k
aXNwYXRjaGVyKCk6CisgICAgX0hBTkRMRVJfUk9PVCA9IGFwYWNoZS5tYWluX3NlcnZlci5nZXRf
b3B0aW9ucygpLmdldCgKKyAgICAgICAgICAgIF9QWU9QVF9IQU5ETEVSX1JPT1QsIE5vbmUpCisg
ICAgaWYgbm90IF9IQU5ETEVSX1JPT1Q6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignUHl0aG9u
T3B0aW9uICVzIGlzIG5vdCBkZWZpbmVkJyAlIF9QWU9QVF9IQU5ETEVSX1JPT1QsCisgICAgICAg
ICAgICAgICAgICAgICAgICBhcGFjaGUuQVBMT0dfRVJSKQorICAgIGRpc3BhdGNoZXIgPSBkaXNw
YXRjaC5EaXNwYXRjaGVyKF9IQU5ETEVSX1JPT1QpCisgICAgZm9yIHdhcm5pbmcgaW4gZGlzcGF0
Y2hlci5zb3VyY2Vfd2FybmluZ3MoKToKKyAgICAgICAgYXBhY2hlLmxvZ19lcnJvcignbW9kX3B5
d2Vic29ja2V0OiAlcycgJSB3YXJuaW5nLCBhcGFjaGUuQVBMT0dfV0FSTklORykKKyAgICByZXR1
cm4gZGlzcGF0Y2hlcgorCisKKyMgSW5pdGlhbGl6ZQorX2Rpc3BhdGNoZXIgPSBfY3JlYXRlX2Rp
c3BhdGNoZXIoKQorCisKK2RlZiBoZWFkZXJwYXJzZXJoYW5kbGVyKHJlcXVlc3QpOgorICAgICIi
IkhhbmRsZSByZXF1ZXN0LgorCisgICAgQXJnczoKKyAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhv
biByZXF1ZXN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBuYW1lZCBoZWFkZXJwYXJzZXJoYW5k
bGVyIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQgbmFtZQorICAgIGZvciBhIFB5dGhvbkhlYWRl
clBhcnNlckhhbmRsZXIuCisgICAgIiIiCisKKyAgICB0cnk6CisgICAgICAgIGhhbmRzaGFrZXIg
PSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LCBfZGlzcGF0Y2hlcikKKyAgICAgICAgaGFu
ZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICByZXF1ZXN0LmxvZ19lcnJvcignbW9kX3B5
d2Vic29ja2V0OiByZXNvdXJjZTogJXInICUgcmVxdWVzdC53c19yZXNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBhY2hlLkFQTE9HX0RFQlVHKQorICAgICAgICBfZGlzcGF0Y2hl
ci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCisgICAgZXhjZXB0IGhhbmRzaGFrZS5IYW5kc2hha2VF
cnJvciwgZToKKyAgICAgICAgIyBIYW5kc2hha2UgZm9yIHdzL3dzcyBmYWlsZWQuCisgICAgICAg
ICMgQnV0IHRoZSByZXF1ZXN0IGNhbiBiZSB2YWxpZCBodHRwL2h0dHBzIHJlcXVlc3QuCisgICAg
ICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUsIGFwYWNoZS5B
UExPR19JTkZPKQorICAgICAgICByZXR1cm4gYXBhY2hlLkRFQ0xJTkVECisgICAgZXhjZXB0IGRp
c3BhdGNoLkRpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgIHJlcXVlc3QubG9nX2Vycm9yKCdtb2Rf
cHl3ZWJzb2NrZXQ6ICVzJyAlIGUsIGFwYWNoZS5BUExPR19XQVJOSU5HKQorICAgICAgICByZXR1
cm4gYXBhY2hlLkRFQ0xJTkVECisgICAgcmV0dXJuIGFwYWNoZS5ET05FICAjIFJldHVybiBET05F
IHN1Y2ggdGhhdCBubyBvdGhlciBoYW5kbGVycyBhcmUgaW52b2tlZC4KKworCisjIHZpOnN0cz00
IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9tc2d1dGlsLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0
L21zZ3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmRiNTU0ZAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tl
dC9tc2d1dGlsLnB5CkBAIC0wLDAgKzEsMjIzIEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUg
SW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJN
ZXNzYWdlIHJlbGF0ZWQgdXRpbGl0aWVzLgorCitOb3RlOiByZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dGUvcmVhZCBhcmUgdXNlZCBpbiB0aGlzIG1vZHVsZSwgZXZlbiB0aG91Z2gKK21vZF9weXRob24g
ZG9jdW1lbnQgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBjb25uZWN0aW9u
IGhhbmRsZXJzLgorVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSBubyBvdGhlciBvcHRpb25zLiBGb3Ig
ZXhhbXBsZSwgcmVxdWVzdC53cml0ZS9yZWFkIGFyZQorbm90IHN1aXRhYmxlIGJlY2F1c2UgdGhl
eSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRpbmcvcmVhZGluZy4KKyIiIgorCisK
K2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZGluZworCisKK2RlZiBzZW5kX21lc3NhZ2UocmVx
dWVzdCwgbWVzc2FnZSk6CisgICAgIiIiU2VuZCBtZXNzYWdlLgorCisgICAgQXJnczoKKyAgICAg
ICAgcmVxdWVzdDogbW9kX3B5dGhvbiByZXF1ZXN0LgorICAgICAgICBtZXNzYWdlOiB1bmljb2Rl
IHN0cmluZyB0byBzZW5kLgorICAgICIiIgorCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRl
KCdceDAwJyArIG1lc3NhZ2UuZW5jb2RlKCd1dGYtOCcpICsgJ1x4ZmYnKQorCisKK2RlZiByZWNl
aXZlX21lc3NhZ2UocmVxdWVzdCk6CisgICAgIiIiUmVjZWl2ZSBhIFdlYiBTb2NrZXQgZnJhbWUg
YW5kIHJldHVybiBpdHMgcGF5bG9hZCBhcyB1bmljb2RlIHN0cmluZy4KKworICAgIEFyZ3M6Cisg
ICAgICAgIHJlcXVlc3Q6IG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAiIiIKKworICAgIHdoaWxl
IFRydWU6CisgICAgICAgICMgUmVhZCAxIGJ5dGUuCisgICAgICAgICMgbXBfY29ubi5yZWFkIHdp
bGwgYmxvY2sgaWYgbm8gYnl0ZXMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgIyBUaW1lb3V0IGlz
IGNvbnRyb2xsZWQgYnkgVGltZU91dCBkaXJlY3RpdmUgb2YgQXBhY2hlLgorICAgICAgICBmcmFt
ZV90eXBlX3N0ciA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisgICAgICAgIGZyYW1lX3R5
cGUgPSBvcmQoZnJhbWVfdHlwZV9zdHJbMF0pCisgICAgICAgIGlmIChmcmFtZV90eXBlICYgMHg4
MCkgPT0gMHg4MDoKKyAgICAgICAgICAgICMgVGhlIHBheWxvYWQgbGVuZ3RoIGlzIHNwZWNpZmll
ZCBpbiB0aGUgZnJhbWUuCisgICAgICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQuCisgICAgICAg
ICAgICBsZW5ndGggPSBfcGF5bG9hZF9sZW5ndGgocmVxdWVzdCkKKyAgICAgICAgICAgIF9yZWNl
aXZlX2J5dGVzKHJlcXVlc3QsIGxlbmd0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMg
VGhlIHBheWxvYWQgaXMgZGVsaW1pdGVkIHdpdGggXHhmZi4KKyAgICAgICAgICAgIGJ5dGVzID0g
X3JlYWRfdW50aWwocmVxdWVzdCwgJ1x4ZmYnKQorICAgICAgICAgICAgbWVzc2FnZSA9IGJ5dGVz
LmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgaWYgZnJhbWVfdHlwZSA9PSAweDAwOgorICAg
ICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlCisgICAgICAgICAgICAjIERpc2NhcmQgZGF0YSBv
ZiBvdGhlciB0eXBlcy4KKworCitkZWYgX3BheWxvYWRfbGVuZ3RoKHJlcXVlc3QpOgorICAgIGxl
bmd0aCA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBiX3N0ciA9IHJlcXVlc3QuY29ubmVj
dGlvbi5yZWFkKDEpCisgICAgICAgIGIgPSBvcmQoYl9zdHJbMF0pCisgICAgICAgIGxlbmd0aCA9
IGxlbmd0aCAqIDEyOCArIChiICYgMHg3ZikKKyAgICAgICAgaWYgKGIgJiAweDgwKSA9PSAwOgor
ICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gbGVuZ3RoCisKKworZGVmIF9yZWNlaXZlX2J5
dGVzKHJlcXVlc3QsIGxlbmd0aCk6CisgICAgYnl0ZXMgPSBbXQorICAgIHdoaWxlIGxlbmd0aCA+
IDA6CisgICAgICAgIG5ld19ieXRlcyA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKGxlbmd0aCkK
KyAgICAgICAgYnl0ZXMuYXBwZW5kKG5ld19ieXRlcykKKyAgICAgICAgbGVuZ3RoIC09IGxlbihu
ZXdfYnl0ZXMpCisgICAgcmV0dXJuICcnLmpvaW4oYnl0ZXMpCisKKworZGVmIF9yZWFkX3VudGls
KHJlcXVlc3QsIGRlbGltX2NoYXIpOgorICAgIGJ5dGVzID0gW10KKyAgICB3aGlsZSBUcnVlOgor
ICAgICAgICBjaCA9IHJlcXVlc3QuY29ubmVjdGlvbi5yZWFkKDEpCisgICAgICAgIGlmIGNoID09
IGRlbGltX2NoYXI6CisgICAgICAgICAgICBicmVhaworICAgICAgICBieXRlcy5hcHBlbmQoY2gp
CisgICAgcmV0dXJuICcnLmpvaW4oYnl0ZXMpCisKKworY2xhc3MgTWVzc2FnZVJlY2VpdmVyKHRo
cmVhZGluZy5UaHJlYWQpOgorICAgICIiIlRoaXMgY2xhc3MgcmVjZWl2ZXMgbWVzc2FnZXMgZnJv
bSB0aGUgY2xpZW50LgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyB0aHJlZSB3YXlzIHRvIHJl
Y2VpdmUgbWVzc2FnZXM6IGJsb2NraW5nLCBub24tYmxvY2tpbmcsCisgICAgYW5kIHZpYSBjYWxs
YmFjay4gQ2FsbGJhY2sgaGFzIHRoZSBoaWdoZXN0IHByZWNlZGVuY2UuCisKKyAgICBOb3RlOiBU
aGlzIGNsYXNzIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIHRoZSBzdGFuZGFsb25lIHNlcnZlciBm
b3Igd3NzCisgICAgYmVjYXVzZSBweU9wZW5TU0wgdXNlZCBieSB0aGUgc2VydmVyIHJhaXNlcyBh
IGZhdGFsIGVycm9yIGlmIHRoZSBzb2NrZXQKKyAgICBpcyBhY2Nlc3NlZCBmcm9tIG11bHRpcGxl
IHRocmVhZHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIG9ubWVz
c2FnZT1Ob25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisgICAgICAg
IEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCisgICAgICAg
ICAgICBvbm1lc3NhZ2U6IGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBtZXNzYWdlIGlz
IHJlY2VpdmVkLgorICAgICAgICAgICAgICAgICAgICAgICBNYXkgYmUgTm9uZS4gSWYgbm90IE5v
bmUsIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgYW5v
dGhlciB0aHJlYWQuIEluIHRoYXQgY2FzZSwgTWVzc2FnZVJlY2VpdmVyLnJlY2VpdmUKKyAgICAg
ICAgICAgICAgICAgICAgICAgYW5kIE1lc3NhZ2VSZWNlaXZlci5yZWNlaXZlX25vd2FpdCBhcmUg
dXNlbGVzcyBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICAgIHRoZXkgd2lsbCBuZXZlciBy
ZXR1cm4gYW55IG1lc3NhZ2VzLgorICAgICAgICAiIiIKKyAgICAgICAgdGhyZWFkaW5nLlRocmVh
ZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAg
ICBzZWxmLl9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5fb25tZXNzYWdlID0g
b25tZXNzYWdlCisgICAgICAgIHNlbGYuX3N0b3BfcmVxdWVzdGVkID0gRmFsc2UKKyAgICAgICAg
c2VsZi5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi5zdGFydCgpCisKKyAgICBkZWYgcnVu
KHNlbGYpOgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5fc3RvcF9yZXF1ZXN0ZWQ6CisgICAgICAg
ICAgICBtZXNzYWdlID0gcmVjZWl2ZV9tZXNzYWdlKHNlbGYuX3JlcXVlc3QpCisgICAgICAgICAg
ICBpZiBzZWxmLl9vbm1lc3NhZ2U6CisgICAgICAgICAgICAgICAgc2VsZi5fb25tZXNzYWdlKG1l
c3NhZ2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnB1
dChtZXNzYWdlKQorCisgICAgZGVmIHJlY2VpdmUoc2VsZik6CisgICAgICAgICIiIiBSZWNlaXZl
IGEgbWVzc2FnZSBmcm9tIHRoZSBjaGFubmVsLCBibG9ja2luZy4KKworICAgICAgICBSZXR1cm5z
OgorICAgICAgICAgICAgbWVzc2FnZSBhcyBhIHVuaWNvZGUgc3RyaW5nLgorICAgICAgICAiIiIK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3F1ZXVlLmdldCgpCisKKyAgICBkZWYgcmVjZWl2ZV9ub3dh
aXQoc2VsZik6CisgICAgICAgICIiIiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIHRoZSBjaGFubmVs
LCBub24tYmxvY2tpbmcuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIG1lc3NhZ2Ug
YXMgYSB1bmljb2RlIHN0cmluZyBpZiBhdmFpbGFibGUuIE5vbmUgb3RoZXJ3aXNlLgorICAgICAg
ICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3F1ZXVlLmdl
dF9ub3dhaXQoKQorICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBtZXNz
YWdlID0gTm9uZQorICAgICAgICByZXR1cm4gbWVzc2FnZQorCisgICAgZGVmIHN0b3Aoc2VsZik6
CisgICAgICAgICIiIlJlcXVlc3QgdG8gc3RvcCB0aGlzIGluc3RhbmNlLgorCisgICAgICAgIFRo
ZSBpbnN0YW5jZSB3aWxsIGJlIHN0b3BwZWQgYWZ0ZXIgcmVjZWl2aW5nIHRoZSBuZXh0IG1lc3Nh
Z2UuCisgICAgICAgIFRoaXMgbWV0aG9kIG1heSBub3QgYmUgdmVyeSB1c2VmdWwsIGJ1dCB0aGVy
ZSBpcyBubyBjbGVhbiB3YXkKKyAgICAgICAgaW4gUHl0aG9uIHRvIGZvcmNlZnVsbHkgc3RvcCBh
IHJ1bm5pbmcgdGhyZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3RvcF9yZXF1ZXN0
ZWQgPSBUcnVlCisKKworY2xhc3MgTWVzc2FnZVNlbmRlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAg
ICAiIiJUaGlzIGNsYXNzIHNlbmRzIG1lc3NhZ2VzIHRvIHRoZSBjbGllbnQuCisKKyAgICBUaGlz
IGNsYXNzIHByb3ZpZGVzIGJvdGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyB3YXlzIHRv
IHNlbmQKKyAgICBtZXNzYWdlcy4KKworICAgIE5vdGU6IFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBi
ZSB1c2VkIHdpdGggdGhlIHN0YW5kYWxvbmUgc2VydmVyIGZvciB3c3MKKyAgICBiZWNhdXNlIHB5
T3BlblNTTCB1c2VkIGJ5IHRoZSBzZXJ2ZXIgcmFpc2VzIGEgZmF0YWwgZXJyb3IgaWYgdGhlIHNv
Y2tldAorICAgIGlzIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKyAgICAiIiIKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBp
bnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVxdWVzdDogbW9kX3B5dGhv
biByZXF1ZXN0LgorICAgICAgICAiIiIKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRf
XyhzZWxmKQorICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAorICAgICAgICBzZWxmLl9x
dWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5zZXREYWVtb24oVHJ1ZSkKKyAgICAg
ICAgc2VsZi5zdGFydCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgbWVzc2FnZSwgY29uZGl0aW9uID0gc2VsZi5fcXVldWUuZ2V0KCkKKyAg
ICAgICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlKCkKKyAgICAgICAgICAgIHNlbmRfbWVzc2FnZShz
ZWxmLl9yZXF1ZXN0LCBtZXNzYWdlKQorICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeSgpCisg
ICAgICAgICAgICBjb25kaXRpb24ucmVsZWFzZSgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBtZXNz
YWdlKToKKyAgICAgICAgIiIiU2VuZCBhIG1lc3NhZ2UsIGJsb2NraW5nLiIiIgorCisgICAgICAg
IGNvbmRpdGlvbiA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgICAgICBjb25kaXRpb24uYWNx
dWlyZSgpCisgICAgICAgIHNlbGYuX3F1ZXVlLnB1dCgobWVzc2FnZSwgY29uZGl0aW9uKSkKKyAg
ICAgICAgY29uZGl0aW9uLndhaXQoKQorCisgICAgZGVmIHNlbmRfbm93YWl0KHNlbGYsIG1lc3Nh
Z2UpOgorICAgICAgICAiIiJTZW5kIGEgbWVzc2FnZSwgbm9uLWJsb2NraW5nLiIiIgorCisgICAg
ICAgIHNlbGYuX3F1ZXVlLnB1dCgobWVzc2FnZSwgdGhyZWFkaW5nLkNvbmRpdGlvbigpKSkKKwor
CisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0
L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uYjc4NzRmYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5CkBAIC0wLDAgKzEsMjQyIEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlN0YW5kYWxvbmUg
V2ViIFNvY2tldCBzZXJ2ZXIuCisKK1VzZSB0aGlzIHNlcnZlciB0byBydW4gbW9kX3B5d2Vic29j
a2V0IHdpdGhvdXQgQXBhY2hlIEhUVFAgU2VydmVyLgorCitVc2FnZToKKyAgICBweXRob24gc3Rh
bmRhbG9uZS5weSBbLXAgPHdzX3BvcnQ+XSBbLXcgPHdlYnNvY2tfaGFuZGxlcnM+XQorICAgICAg
ICAgICAgICAgICAgICAgICAgIFstZCA8ZG9jdW1lbnRfcm9vdD5dCisKKzx3c19wb3J0PiBpcyB0
aGUgcG9ydCBudW1iZXIgdG8gdXNlIGZvciB3czovLyBjb25uZWN0aW9uLgorCis8ZG9jdW1lbnRf
cm9vdD4gaXMgdGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIEhUTUwgZmlsZXMuCisK
Kzx3ZWJzb2NrX2hhbmRsZXJzPiBpcyB0aGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
V2ViIFNvY2tldCBoYW5kbGVycy4KK1NlZSBfX2luaXRfXy5weSBmb3IgZGV0YWlscyBvZiA8d2Vi
c29ja19oYW5kbGVycz4gYW5kIGhvdyB0byB3cml0ZSBXZWIgU29ja2V0CitoYW5kbGVycy4gSWYg
dGhpcyBwYXRoIGlzIHJlbGF0aXZlLCA8ZG9jdW1lbnRfcm9vdD4gaXMgdXNlZCBhcyB0aGUgYmFz
ZS4KKworTm90ZToKK1RoaXMgc2VydmVyIGlzIGRlcml2ZWQgZnJvbSBTb2NrZXRTZXJ2ZXIuVGhy
ZWFkaW5nTWl4SW4uIEhlbmNlIGEgdGhyZWFkIGlzCit1c2VkIGZvciBlYWNoIHJlcXVlc3QuCisi
IiIKKworaW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBvcnQgU2ltcGxlSFRUUFNlcnZlcgoraW1w
b3J0IFNvY2tldFNlcnZlcgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0
IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCisKK19IQVNfT1BFTl9TU0wgPSBGYWxzZQor
dHJ5OgorICAgIGltcG9ydCBPcGVuU1NMLlNTTAorICAgIF9IQVNfT1BFTl9TU0wgPSBUcnVlCitl
eGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCitpbXBvcnQgZGlzcGF0Y2gKK2ltcG9ydCBo
YW5kc2hha2UKKworCitjbGFzcyBfU3RhbmRhbG9uZUNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICAi
IiJNaW1pYyBtb2RfcHl0aG9uIG1wX2Nvbm4uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cmVxdWVzdF9oYW5kbGVyKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgorCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXF1ZXN0X2hhbmRsZXI6IEEgV2ViU29ja2V0UmVx
dWVzdEhhbmRsZXIgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9yZXF1ZXN0
X2hhbmRsZXIgPSByZXF1ZXN0X2hhbmRsZXIKKworICAgIGRlZiBnZXRfbG9jYWxfYWRkcihzZWxm
KToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIG1wX2Nvbm4ubG9jYWxfYWRkci4iIiIKKyAg
ICAgICAgcmV0dXJuIChzZWxmLl9yZXF1ZXN0X2hhbmRsZXIuc2VydmVyLnNlcnZlcl9uYW1lLAor
ICAgICAgICAgICAgICAgIHNlbGYuX3JlcXVlc3RfaGFuZGxlci5zZXJ2ZXIuc2VydmVyX3BvcnQp
CisgICAgbG9jYWxfYWRkciA9IHByb3BlcnR5KGdldF9sb2NhbF9hZGRyKQorCisgICAgZGVmIHdy
aXRlKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJNaW1pYyBtcF9jb25uLndyaXRlKCkuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIud2ZpbGUud3JpdGUoZGF0YSkKKwor
ICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6CisgICAgICAgICIiIk1pbWljIG1wX2Nvbm4ucmVh
ZCgpLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVxdWVzdF9oYW5kbGVyLnJmaWxlLnJlYWQo
bGVuZ3RoKQorCisKK2NsYXNzIF9TdGFuZGFsb25lUmVxdWVzdChvYmplY3QpOgorICAgICIiIk1p
bWljIG1vZF9weXRob24gcmVxdWVzdC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1
ZXN0X2hhbmRsZXIsIHVzZV90bHMpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaW5zdGFuY2Uu
CisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlcjogQSBXZWJTb2Nr
ZXRSZXF1ZXN0SGFuZGxlciBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3Jl
cXVlc3RfaGFuZGxlciA9IHJlcXVlc3RfaGFuZGxlcgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24g
PSBfU3RhbmRhbG9uZUNvbm5lY3Rpb24ocmVxdWVzdF9oYW5kbGVyKQorICAgICAgICBzZWxmLl91
c2VfdGxzID0gdXNlX3RscworCisgICAgZGVmIGdldF91cmkoc2VsZik6CisgICAgICAgICIiIkdl
dHRlciB0byBtaW1pYyByZXF1ZXN0LnVyaS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVl
c3RfaGFuZGxlci5wYXRoCisgICAgdXJpID0gcHJvcGVydHkoZ2V0X3VyaSkKKworICAgIGRlZiBn
ZXRfaGVhZGVyc19pbihzZWxmKToKKyAgICAgICAgIiIiR2V0dGVyIHRvIG1pbWljIHJlcXVlc3Qu
aGVhZGVyc19pbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci5oZWFk
ZXJzCisgICAgaGVhZGVyc19pbiA9IHByb3BlcnR5KGdldF9oZWFkZXJzX2luKQorCisgICAgZGVm
IGlzX2h0dHBzKHNlbGYpOgorICAgICAgICAiIiJNaW1pYyByZXF1ZXN0LmlzX2h0dHBzKCkuIiIi
CisgICAgICAgIHJldHVybiBzZWxmLl91c2VfdGxzCisKKworY2xhc3MgV2ViU29ja2V0U2VydmVy
KFNvY2tldFNlcnZlci5UaHJlYWRpbmdNaXhJbiwgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlcik6
CisgICAgIiIiSFRUUFNlcnZlciBzcGVjaWFsaXplZCBmb3IgV2ViIFNvY2tldC4iIiIKKworICAg
IFNvY2tldFNlcnZlci5UaHJlYWRpbmdNaXhJbi5kYWVtb25fdGhyZWFkcyA9IFRydWUKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJfYWRkcmVzcywgUmVxdWVzdEhhbmRsZXJDbGFzcyk6
CisgICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNlcnZlci5CYXNlU2VydmVyLl9faW5pdF9fLiIi
IgorCisgICAgICAgIFNvY2tldFNlcnZlci5CYXNlU2VydmVyLl9faW5pdF9fKAorICAgICAgICAg
ICAgICAgIHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKQorICAgICAg
ICBzZWxmLnNvY2tldCA9IHNlbGYuX2NyZWF0ZV9zb2NrZXQoKQorICAgICAgICBzZWxmLnNlcnZl
cl9iaW5kKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfYWN0aXZhdGUoKQorCisgICAgZGVmIF9jcmVh
dGVfc29ja2V0KHNlbGYpOgorICAgICAgICBzb2NrZXRfID0gc29ja2V0LnNvY2tldChzZWxmLmFk
ZHJlc3NfZmFtaWx5LCBzZWxmLnNvY2tldF90eXBlKQorICAgICAgICBpZiBXZWJTb2NrZXRTZXJ2
ZXIub3B0aW9ucy51c2VfdGxzOgorICAgICAgICAgICAgY3R4ID0gT3BlblNTTC5TU0wuQ29udGV4
dChPcGVuU1NMLlNTTC5TU0x2MjNfTUVUSE9EKQorICAgICAgICAgICAgY3R4LnVzZV9wcml2YXRl
a2V5X2ZpbGUoV2ViU29ja2V0U2VydmVyLm9wdGlvbnMucHJpdmF0ZV9rZXkpCisgICAgICAgICAg
ICBjdHgudXNlX2NlcnRpZmljYXRlX2ZpbGUoV2ViU29ja2V0U2VydmVyLm9wdGlvbnMuY2VydGlm
aWNhdGUpCisgICAgICAgICAgICBzb2NrZXRfID0gT3BlblNTTC5TU0wuQ29ubmVjdGlvbihjdHgs
IHNvY2tldF8pCisgICAgICAgIHJldHVybiBzb2NrZXRfCisKK2NsYXNzIFdlYlNvY2tldFJlcXVl
c3RIYW5kbGVyKFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAg
ICAiIiJTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIgc3BlY2lhbGl6ZWQgZm9yIFdlYiBTb2NrZXQu
IiIiCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIFNvY2tldFNl
cnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlci5zZXR1cC4iIiIKKworICAgICAgICBzZWxmLmNvbm5l
Y3Rpb24gPSBzZWxmLnJlcXVlc3QKKyAgICAgICAgc2VsZi5yZmlsZSA9IHNvY2tldC5fZmlsZW9i
amVjdChzZWxmLnJlcXVlc3QsICJyYiIsIHNlbGYucmJ1ZnNpemUpCisgICAgICAgIHNlbGYud2Zp
bGUgPSBzb2NrZXQuX2ZpbGVvYmplY3Qoc2VsZi5yZXF1ZXN0LCAid2IiLCBzZWxmLndidWZzaXpl
KQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAg
c2VsZi5fcmVxdWVzdCA9IF9TdGFuZGFsb25lUmVxdWVzdCgKKyAgICAgICAgICAgICAgICBzZWxm
LCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLnVzZV90bHMpCisgICAgICAgIHNlbGYu
X2Rpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKAorICAgICAgICAgICAgICAgIFdlYlNv
Y2tldFJlcXVlc3RIYW5kbGVyLm9wdGlvbnMud2Vic29ja19oYW5kbGVycykKKyAgICAgICAgc2Vs
Zi5fcHJpbnRfd2FybmluZ3NfaWZfYW55KCkKKyAgICAgICAgc2VsZi5faGFuZHNoYWtlciA9IGhh
bmRzaGFrZS5IYW5kc2hha2VyKHNlbGYuX3JlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaXNwYXRjaGVyKQorICAgICAgICBTaW1w
bGVIVFRQU2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlci5fX2luaXRfXygKKyAgICAgICAg
ICAgICAgICBzZWxmLCAqYXJncywgKiprZXl3b3JkcykKKworICAgIGRlZiBfcHJpbnRfd2Fybmlu
Z3NfaWZfYW55KHNlbGYpOgorICAgICAgICB3YXJuaW5ncyA9IHNlbGYuX2Rpc3BhdGNoZXIuc291
cmNlX3dhcm5pbmdzKCkKKyAgICAgICAgaWYgd2FybmluZ3M6CisgICAgICAgICAgICBmb3Igd2Fy
bmluZyBpbiB3YXJuaW5nczoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ21vZF9w
eXdlYnNvY2tldDogJXMnICUgd2FybmluZykKKworICAgIGRlZiBwYXJzZV9yZXF1ZXN0KHNlbGYp
OgorICAgICAgICAiIiJPdmVycmlkZSBCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5k
bGVyLnBhcnNlX3JlcXVlc3QuCisKKyAgICAgICAgUmV0dXJuIFRydWUgdG8gY29udGludWUgcHJv
Y2Vzc2luZyBmb3IgSFRUUChTKSwgRmFsc2Ugb3RoZXJ3aXNlLgorICAgICAgICAiIiIKKyAgICAg
ICAgcmVzdWx0ID0gU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIucGFy
c2VfcmVxdWVzdChzZWxmKQorICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICAg
ICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShzZWxmLl9yZXF1ZXN0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IGhhbmRzaGFrZS5I
YW5kc2hha2VFcnJvciwgZToKKyAgICAgICAgICAgICAgICAjIEhhbmRzaGFrZSBmb3Igd3Mocykg
ZmFpbGVkLiBBc3N1bWUgaHR0cChzKS4KKyAgICAgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ21v
ZF9weXdlYnNvY2tldDogJXMnICUgZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAg
ICAgICAgICAgZXhjZXB0IGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsIGU6CisgICAgICAgICAgICAg
ICAgbG9nZ2luZy53YXJuaW5nKCdtb2RfcHl3ZWJzb2NrZXQ6ICVzJyAlIGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitkZWYgX21haW4o
KToKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKCkKKworICAgIHBhcnNlciA9IG9wdHBhcnNlLk9w
dGlvblBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcG9ydCcsIGRlc3Q9
J3BvcnQnLCB0eXBlPSdpbnQnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9aGFuZHNo
YWtlLl9ERUZBVUxUX1dFQl9TT0NLRVRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdwb3J0IHRvIGxpc3RlbiB0bycpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy13JywgJy0td2Vi
c29ja19oYW5kbGVycycsIGRlc3Q9J3dlYnNvY2tfaGFuZGxlcnMnLAorICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ9Jy4nLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1dlYiBTb2Nr
ZXQgaGFuZGxlcnMgcm9vdCBkaXJlY3RvcnkuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLWQn
LCAnLS1kb2N1bWVudF9yb290JywgZGVzdD0nZG9jdW1lbnRfcm9vdCcsCisgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdD0nLicsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRG9jdW1l
bnQgcm9vdCBkaXJlY3RvcnkuJykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10bHMn
LCBkZXN0PSd1c2VfdGxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSd1c2UgVExTICh3c3M6Ly8pJykKKyAgICBwYXJzZXIu
YWRkX29wdGlvbignLWsnLCAnLS1wcml2YXRlX2tleScsIGRlc3Q9J3ByaXZhdGVfa2V5JywKKyAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnLCBoZWxwPSdUTFMgcHJpdmF0ZSBrZXkgZmls
ZS4nKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYycsICctLWNlcnRpZmljYXRlJywgZGVzdD0n
Y2VydGlmaWNhdGUnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9JycsIGhlbHA9J1RM
UyBjZXJ0aWZpY2F0ZSBmaWxlLicpCisgICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKClb
MF0KKworICAgIGlmIG9wdGlvbnMudXNlX3RsczoKKyAgICAgICAgaWYgbm90IF9IQVNfT1BFTl9T
U0w6CisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICdUbyB1c2UgVExTLCBpbnN0YWxs
IHB5T3BlblNTTC4nCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBpZiBub3Qgb3B0
aW9ucy5wcml2YXRlX2tleSBvciBub3Qgb3B0aW9ucy5jZXJ0aWZpY2F0ZToKKyAgICAgICAgICAg
IHByaW50ID4+c3lzLnN0ZGVyciwgKCdUbyB1c2UgVExTLCBzcGVjaWZ5IHByaXZhdGVfa2V5IGFu
ZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VydGlmaWNhdGUuJykKKyAg
ICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRp
b25zID0gb3B0aW9ucworICAgIFdlYlNvY2tldFNlcnZlci5vcHRpb25zID0gb3B0aW9ucworCisg
ICAgb3MuY2hkaXIob3B0aW9ucy5kb2N1bWVudF9yb290KQorCisgICAgc2VydmVyID0gV2ViU29j
a2V0U2VydmVyKCgnJywgb3B0aW9ucy5wb3J0KSwgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIpCisg
ICAgc2VydmVyLnNlcnZlX2ZvcmV2ZXIoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6
CisgICAgX21haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkgYi9XZWJLaXRUb29scy9w
eXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwLi40ODM1Mjk4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3V0aWwucHkKQEAgLTAsMCArMSw1MiBAQAorIyBDb3B5
cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
IyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworIiIiV2ViIFNvY2tldHMgdXRpbGl0aWVzLgorIiIiCisKKworaW1wb3J0
IFN0cmluZ0lPCitpbXBvcnQgdHJhY2ViYWNrCisKKworZGVmIGdldF9zdGFja190cmFjZSgpOgor
ICAgICIiIkdldCB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBzdHJpbmcuCisKKyAgICBUaGlz
IGlzIG5lZWRlZCB0byBzdXBwb3J0IFB5dGhvbiAyLjMuCisgICAgVE9ETzogUmVtb3ZlIHRoaXMg
d2hlbiB3ZSBvbmx5IHN1cHBvcnQgUHl0aG9uIDIuNCBhbmQgYWJvdmUuCisgICAgICAgICAgVXNl
IHRyYWNlYmFjay5mb3JtYXRfZXhjIGluc3RlYWQuCisgICAgIiIiCisKKyAgICBvdXQgPSBTdHJp
bmdJTy5TdHJpbmdJTygpCisgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPW91dCkKKyAgICBy
ZXR1cm4gb3V0LmdldHZhbHVlKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3NldHVwLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvc2V0dXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMwOWVlYwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3NldHVwLnB5CkBAIC0w
LDAgKzEsNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOSwg
R29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworIiIiU2V0IHVwIHNjcmlwdCBmb3IgbW9kX3B5d2Vic29ja2V0LgorIiIiCisKKworZnJvbSBk
aXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKK2ltcG9ydCBzeXMKKworCitfUEFDS0FHRV9OQU1F
ID0gJ21vZF9weXdlYnNvY2tldCcKKworaWYgc3lzLnZlcnNpb24gPCAnMi4zJzoKKyAgICBwcmlu
dCA+PnN5cy5zdGRlcnIsICclcyByZXF1aXJlcyBQeXRob24gMi4zIG9yIGxhdGVyLicgJSBfUEFD
S0FHRV9OQU1FCisgICAgc3lzLmV4aXQoMSkKKworc2V0dXAoYXV0aG9yPSdZdXpvIEZ1amlzaGlt
YScsCisgICAgICBhdXRob3JfZW1haWw9J3l1em9AY2hyb21pdW0ub3JnJywKKyAgICAgIGRlc2Ny
aXB0aW9uPSdXZWIgU29ja2V0IGV4dGVuc2lvbiBmb3IgQXBhY2hlIEhUVFAgU2VydmVyLicsCisg
ICAgICBsb25nX2Rlc2NyaXB0aW9uPSgKKyAgICAgICAgICAgICAgJ21vZF9weXdlYnNvY2tldCBp
cyBhbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgZXh0ZW5zaW9uIGZvciAnCisgICAgICAgICAgICAgICdX
ZWIgU29ja2V0IChodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC8nCisgICAgICAgICAgICAgICdk
cmFmdC1oaXhpZS10aGV3ZWJzb2NrZXRwcm90b2NvbCkuICcKKyAgICAgICAgICAgICAgJ1NlZSBt
b2RfcHl3ZWJzb2NrZXQvX19pbml0X18ucHkgZm9yIG1vcmUgZGV0YWlsLicpLAorICAgICAgbGlj
ZW5zZT0nU2VlIENPUFlJTkcnLAorICAgICAgbmFtZT1fUEFDS0FHRV9OQU1FLAorICAgICAgcGFj
a2FnZXM9W19QQUNLQUdFX05BTUVdLAorICAgICAgdXJsPSdodHRwOi8vY29kZS5nb29nbGUuY29t
L3AvcHl3ZWJzb2NrZXQvJywKKyAgICAgIHZlcnNpb249JzAuNC4wJywKKyAgICAgICkKKworCisj
IHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvY29uZmlnLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9jb25maWcucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWFhYWI4YwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvY29uZmlnLnB5CkBAIC0wLDAgKzEsNDUg
QEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkNvbmZpZ3VyYXRpb24gZm9yIHRlc3RpbmcuCisK
K1Rlc3QgZmlsZXMgc2hvdWxkIGltcG9ydCB0aGlzIG1vZHVsZSBiZWZvcmUgbW9kX3B5d2Vic29j
a2V0LgorIiIiCisKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCisKKworIyBBZGQgdGhlIHBhcmVu
dCBkaXJlY3RvcnkgdG8gc3lzLnBhdGggdG8gZW5hYmxlIGltcG9ydGluZyBtb2RfcHl3ZWJzb2Nr
ZXQuCitzeXMucGF0aCArPSBbb3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBd
LCAnLi4nKV0KKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvbW9jay5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3Qv
bW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjg1ZDY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9tb2NrLnB5CkBAIC0w
LDAgKzEsMjA1IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJNb2NrcyBmb3IgdGVzdGluZy4K
KyIiIgorCisKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZGluZworCisKK2NsYXNzIF9Nb2Nr
Q29ubkJhc2Uob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIG9mIG1vY2tzIGZvciBtb2RfcHl0
aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhpcyBlbmFibGVzIHRlc3RzIHRvIGNoZWNrIHdo
YXQgaXMgd3JpdHRlbiB0byBhIChtb2NrKSBtcF9jb25uLgorICAgICIiIgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl93cml0ZV9kYXRhID0gW10KKworICAgIGRlZiB3
cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUu
bXBfY29ubi53cml0ZS4iIiIKKworICAgICAgICBzZWxmLl93cml0ZV9kYXRhLmFwcGVuZChkYXRh
KQorCisgICAgZGVmIHdyaXR0ZW5fZGF0YShzZWxmKToKKyAgICAgICAgIiIiR2V0IGJ5dGVzIHdy
aXR0ZW4gdG8gdGhpcyBtb2NrLiIiIgorCisgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuX3dy
aXRlX2RhdGEpCisKKworY2xhc3MgTW9ja0Nvbm4oX01vY2tDb25uQmFzZSk6CisgICAgIiIiTW9j
ayBmb3IgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi4KKworICAgIFRoaXMgZW5hYmxlcyB0ZXN0
cyB0byBzcGVjaWZ5IHdoYXQgc2hvdWxkIGJlIHJlYWQgZnJvbSBhIChtb2NrKSBtcF9jb25uIGFz
CisgICAgd2VsbCBhcyB0byBjaGVjayB3aGF0IGlzIHdyaXR0ZW4gdG8gaXQuCisgICAgIiIiCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZF9kYXRhKToKKyAgICAgICAgIiIiQ29uc3RydWN0
cyBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcmVhZF9kYXRhOiBi
eXRlcyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCB3aGVuIHJlYWQqIG1ldGhvZHMgYXJlCisgICAg
ICAgICAgICBjYWxsZWQuCisgICAgICAgICIiIgorCisgICAgICAgIF9Nb2NrQ29ubkJhc2UuX19p
bml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcmVhZF9kYXRhID0gcmVhZF9kYXRhCisgICAgICAg
IHNlbGYuX3JlYWRfcG9zID0gMAorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICAi
IiJPdmVycmlkZSBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLnJlYWRsaW5lLiIiIgorCisgICAg
ICAgIGlmIHNlbGYuX3JlYWRfcG9zID49IGxlbihzZWxmLl9yZWFkX2RhdGEpOgorICAgICAgICAg
ICAgcmV0dXJuICcnCisgICAgICAgIGVuZF9pbmRleCA9IHNlbGYuX3JlYWRfZGF0YS5maW5kKCdc
bicsIHNlbGYuX3JlYWRfcG9zKSArIDEKKyAgICAgICAgaWYgbm90IGVuZF9pbmRleDoKKyAgICAg
ICAgICAgIGVuZF9pbmRleCA9IGxlbihzZWxmLl9yZWFkX2RhdGEpCisgICAgICAgIHJldHVybiBz
ZWxmLl9yZWFkX3VwX3RvKGVuZF9pbmRleCkKKworICAgIGRlZiByZWFkKHNlbGYsIGxlbmd0aCk6
CisgICAgICAgICIiIk92ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZC4iIiIK
KworICAgICAgICBpZiBzZWxmLl9yZWFkX3BvcyA+PSBsZW4oc2VsZi5fcmVhZF9kYXRhKToKKyAg
ICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbmRfaW5kZXggPSBtaW4obGVuKHNlbGYuX3Jl
YWRfZGF0YSksIHNlbGYuX3JlYWRfcG9zICsgbGVuZ3RoKQorICAgICAgICByZXR1cm4gc2VsZi5f
cmVhZF91cF90byhlbmRfaW5kZXgpCisKKyAgICBkZWYgX3JlYWRfdXBfdG8oc2VsZiwgZW5kX2lu
ZGV4KToKKyAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRfZGF0YVtzZWxmLl9yZWFkX3BvczplbmRf
aW5kZXhdCisgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gZW5kX2luZGV4CisgICAgICAgIHJldHVy
biBsaW5lCisKKworY2xhc3MgTW9ja0Jsb2NraW5nQ29ubihfTW9ja0Nvbm5CYXNlKToKKyAgICAi
IiJCbG9ja2luZyBtb2NrIGZvciBtb2RfcHl0aG9uLmFwYWNoZS5tcF9jb25uLgorCisgICAgVGhp
cyBlbmFibGVzIHRlc3RzIHRvIHNwZWNpZnkgd2hhdCBzaG91bGQgYmUgcmVhZCBmcm9tIGEgKG1v
Y2spIG1wX2Nvbm4gYXMKKyAgICB3ZWxsIGFzIHRvIGNoZWNrIHdoYXQgaXMgd3JpdHRlbiB0byBp
dC4KKyAgICBDYWxsZXJzIG9mIHJlYWQqIG1ldGhvZHMgd2lsbCBibG9jayBpZiB0aGVyZSBpcyBu
byBieXRlcyBhdmFpbGFibGUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisg
ICAgICAgIF9Nb2NrQ29ubkJhc2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcXVldWUg
PSBRdWV1ZS5RdWV1ZSgpCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiIk92
ZXJyaWRlIG1vZF9weXRob24uYXBhY2hlLm1wX2Nvbm4ucmVhZGxpbmUuIiIiCisgICAgICAgIGxp
bmUgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHNlbGYuX3F1ZXVl
LmdldCgpCisgICAgICAgICAgICBsaW5lICs9IGMKKyAgICAgICAgICAgIGlmIGMgPT0gJ1xuJzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbGVuZ3Ro
KToKKyAgICAgICAgIiIiT3ZlcnJpZGUgbW9kX3B5dGhvbi5hcGFjaGUubXBfY29ubi5yZWFkLiIi
IgorCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICBmb3IgdW51c2VkIGluIHJhbmdlKGxlbmd0
aCk6CisgICAgICAgICAgICBkYXRhICs9IHNlbGYuX3F1ZXVlLmdldCgpCisgICAgICAgIHJldHVy
biBkYXRhCisKKyAgICBkZWYgcHV0X2J5dGVzKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgIiIiUHV0
IGJ5dGVzIHRvIGJlIHJlYWQgZnJvbSB0aGlzIG1vY2suCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIGJ5dGVzOiBieXRlcyB0byBiZSByZWFkLgorICAgICAgICAiIiIKKworICAgICAgICBm
b3IgYnl0ZSBpbiBieXRlczoKKyAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnB1dChieXRlKQorCisK
K2NsYXNzIE1vY2tUYWJsZShkaWN0KToKKyAgICAiIiJNb2NrIHRhYmxlLgorCisgICAgVGhpcyBt
aW1pY3MgbW9kX3B5dGhvbiBtcF90YWJsZS4gTm90ZSB0aGF0IG9ubHkgdGhlIG1ldGhvZHMgdXNl
ZCBieQorICAgIHRlc3RzIGFyZSBvdmVycmlkZGVuLgorICAgICIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGNvcHlfZnJvbT17fSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29weV9mcm9t
LCBkaWN0KToKKyAgICAgICAgICAgIGNvcHlfZnJvbSA9IGNvcHlfZnJvbS5pdGVtcygpCisgICAg
ICAgIGZvciBrZXksIHZhbHVlIGluIGNvcHlfZnJvbToKKyAgICAgICAgICAgIHNlbGYuX19zZXRp
dGVtX18oa2V5LCB2YWx1ZSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAg
ICAgICByZXR1cm4gc3VwZXIoTW9ja1RhYmxlLCBzZWxmKS5fX2dldGl0ZW1fXyhrZXkubG93ZXIo
KSkKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgc3Vw
ZXIoTW9ja1RhYmxlLCBzZWxmKS5fX3NldGl0ZW1fXyhrZXkubG93ZXIoKSwgdmFsdWUpCisKKyAg
ICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmX3ZhbHVlPU5vbmUpOgorICAgICAgICByZXR1cm4gc3Vw
ZXIoTW9ja1RhYmxlLCBzZWxmKS5nZXQoa2V5Lmxvd2VyKCksIGRlZl92YWx1ZSkKKworCitjbGFz
cyBNb2NrUmVxdWVzdChvYmplY3QpOgorICAgICIiIk1vY2sgcmVxdWVzdC4KKworICAgIFRoaXMg
bWltaWNzIG1vZF9weXRob24gcmVxdWVzdC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB1cmk9Tm9uZSwgaGVhZGVyc19pbj17fSwgY29ubmVjdGlvbj1Ob25lLAorICAgICAgICAg
ICAgICAgICBpc19odHRwcz1GYWxzZSk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5j
ZS4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgICB1cmk6IFVSSSBvZiB0aGUgcmVx
dWVzdC4KKyAgICAgICAgICAgIGhlYWRlcnNfaW46IFJlcXVlc3QgaGVhZGVycy4KKyAgICAgICAg
ICAgIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gdXNlZCBmb3IgdGhlIHJlcXVlc3QuCisgICAgICAg
ICAgICBpc19odHRwczogV2hldGhlciB0aGlzIHJlcXVlc3QgaXMgb3ZlciBTU0wuCisKKyAgICAg
ICAgU2VlIHRoZSBkb2N1bWVudCBvZiBtb2RfcHl0aG9uIFJlcXVlc3QgZm9yIGRldGFpbHMuCisg
ICAgICAgICIiIgorICAgICAgICBzZWxmLnVyaSA9IHVyaQorICAgICAgICBzZWxmLmNvbm5lY3Rp
b24gPSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuaGVhZGVyc19pbiA9IE1vY2tUYWJsZShoZWFk
ZXJzX2luKQorICAgICAgICAjIHNlbGYuaXNfaHR0cHNfIG5lZWRzIHRvIGJlIGFjY2Vzc2libGUg
ZnJvbSB0ZXN0cy4gIFRvIGF2b2lkIG5hbWUKKyAgICAgICAgIyBjb25mbGljdCB3aXRoIHNlbGYu
aXNfaHR0cHMoKSwgaXQgaXMgbmFtZWQgYXMgc3VjaC4KKyAgICAgICAgc2VsZi5pc19odHRwc18g
PSBpc19odHRwcworCisgICAgZGVmIGlzX2h0dHBzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4g
d2hldGhlciB0aGlzIHJlcXVlc3QgaXMgb3ZlciBTU0wuIiIiCisgICAgICAgIHJldHVybiBzZWxm
LmlzX2h0dHBzXworCisKK2NsYXNzIE1vY2tEaXNwYXRjaGVyKG9iamVjdCk6CisgICAgIiIiTW9j
ayBmb3IgZGlzcGF0Y2guRGlzcGF0Y2hlci4iIiIKKworICAgIGRlZiBkb19leHRyYV9oYW5kc2hh
a2Uoc2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRyYW5zZmVy
X2RhdGEoc2VsZiwgY29ubl9jb250ZXh0KToKKyAgICAgICAgcGFzcworCisKKyMgdmk6c3RzPTQg
c3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxs
LnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC9ydW5fYWxsLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM4ODU2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9weXdlYnNvY2tldC90ZXN0L3J1bl9hbGwucHkKQEAgLTAsMCArMSw2NCBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJSdW4gYWxsIHRl
c3RzIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyIiIgorCisKK2ltcG9ydCBvcworaW1wb3J0IHJl
CitpbXBvcnQgdW5pdHRlc3QKKworCitfVEVTVF9NT0RVTEVfUEFUVEVSTiA9IHJlLmNvbXBpbGUo
cideKHRlc3RfLispXC5weSQnKQorCisKK2RlZiBfbGlzdF90ZXN0X21vZHVsZXMoZGlyZWN0b3J5
KToKKyAgICBtb2R1bGVfbmFtZXMgPSBbXQorICAgIGZvciBmaWxlbmFtZSBpbiBvcy5saXN0ZGly
KGRpcmVjdG9yeSk6CisgICAgICAgIG1hdGNoID0gX1RFU1RfTU9EVUxFX1BBVFRFUk4uc2VhcmNo
KGZpbGVuYW1lKQorICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgIG1vZHVsZV9uYW1lcy5h
cHBlbmQobWF0Y2guZ3JvdXAoMSkpCisgICAgcmV0dXJuIG1vZHVsZV9uYW1lcworCisKK2RlZiBf
c3VpdGUoKToKKyAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICByZXR1cm4g
bG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygKKyAgICAgICAgICAgIF9saXN0X3Rlc3RfbW9kdWxl
cyhvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sICcuJykpKQorCisKK2lm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0n
X3N1aXRlJykKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0L3Rlc3QvdGVzdF9kaXNwYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAw
MDAwLi5lMjU4NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0X2Rpc3BhdGNoLnB5CkBAIC0wLDAgKzEsMTkwIEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBkaXNwYXRjaCBtb2R1
bGUuIiIiCisKKworCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmln
ICAjIFRoaXMgbXVzdCBiZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0LgorZnJvbSBt
b2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGRpc3BhdGNoCisKK2ltcG9ydCBtb2NrCisKKworX1RFU1Rf
SEFORExFUlNfRElSID0gb3MucGF0aC5qb2luKAorICAgICAgICBvcy5wYXRoLnNwbGl0KF9fZmls
ZV9fKVswXSwgJ3Rlc3RkYXRhJywgJ2hhbmRsZXJzJykKKworY2xhc3MgRGlzcGF0Y2hlclRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X25vcm1hbGl6ZV9wYXRoKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aCgnL2EvYicpLnJlcGxhY2Uo
J1xcJywgJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXpl
X3BhdGgoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgo
Jy9hL2InKS5yZXBsYWNlKCdcXCcsICcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZGlz
cGF0Y2guX25vcm1hbGl6ZV9wYXRoKCdcXGFcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChvcy5wYXRoLmFic3BhdGgoJy9hL2InKS5yZXBsYWNlKCdcXCcsICcvJyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgZGlzcGF0Y2guX25vcm1hbGl6ZV9wYXRoKCcvYS9jLy4uL2InKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgoJ2FiYycpLnJlcGxhY2UoJ1xc
JywgJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaC5fbm9ybWFsaXplX3Bh
dGgoJ2FiYycpKQorCisgICAgZGVmIHRlc3RfY29udmVydGVyKHNlbGYpOgorICAgICAgICBjb252
ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90b19yZXNvdXJjZV9jb252ZXJ0ZXIoJy9hL2InKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRlcignL2EvYi9oX3dzaC5weScpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvYy9oJywgY29udmVydGVyKCcvYS9iL2MvaF93c2gu
cHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjb252ZXJ0ZXIoJy9hL2IvaC5w
eScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGNvbnZlcnRlcignYS9iL2hfd3No
LnB5JykpCisKKyAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhfdG9fcmVzb3VyY2Vf
Y29udmVydGVyKCdhL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcvaCcsIGNvbnZlcnRl
cignYS9iL2hfd3NoLnB5JykpCisKKyAgICAgICAgY29udmVydGVyID0gZGlzcGF0Y2guX3BhdGhf
dG9fcmVzb3VyY2VfY29udmVydGVyKCcvYS9iLy8vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnL2gnLCBjb252ZXJ0ZXIoJy9hL2IvaF93c2gucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnL2gnLCBjb252ZXJ0ZXIoJy9hL2IvLi4vYi9oX3dzaC5weScpKQorCisgICAgICAgIGNv
bnZlcnRlciA9IGRpc3BhdGNoLl9wYXRoX3RvX3Jlc291cmNlX2NvbnZlcnRlcignL2EvLi4vYS9i
Ly4uL2IvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBjb252ZXJ0ZXIoJy9hL2Iv
aF93c2gucHknKSkKKworICAgICAgICBjb252ZXJ0ZXIgPSBkaXNwYXRjaC5fcGF0aF90b19yZXNv
dXJjZV9jb252ZXJ0ZXIocidcYVxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnL2gnLCBj
b252ZXJ0ZXIocidcYVxiXGhfd3NoLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy9o
JywgY29udmVydGVyKHInL2EvYi9oX3dzaC5weScpKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zp
bGVfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gbGlzdChkaXNwYXRjaC5fc291cmNlX2Zp
bGVfcGF0aHMoX1RFU1RfSEFORExFUlNfRElSKSkKKyAgICAgICAgcGF0aHMuc29ydCgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgbGVuKHBhdGhzKSkKKyAgICAgICAgZXhwZWN0ZWRfcGF0
aHMgPSBbCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwg
J2JsYW5rX3dzaC5weScpLAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihfVEVTVF9IQU5E
TEVSU19ESVIsICdvcmlnaW5fY2hlY2tfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0
aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdleGNlcHRpb25faW5fdHJhbnNmZXJfd3NoLnB5JyksCisgICAgICAgICAgICAgICAg
b3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsICdub25fY2FsbGFibGVfd3No
LnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwg
J3N1YicsICdwbGFpbl93c2gucHknKSwKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oX1RF
U1RfSEFORExFUlNfRElSLCAnc3ViJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dy
b25nX2hhbmRzaGFrZV9zaWdfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2lu
KF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd3cm9uZ190cmFuc2Zlcl9zaWdfd3NoLnB5JyksCisgICAgICAgICAgICAgICAgXQorICAgICAg
ICBmb3IgZXhwZWN0ZWQsIGFjdHVhbCBpbiB6aXAoZXhwZWN0ZWRfcGF0aHMsIHBhdGhzKToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0
ZXN0X3NvdXJjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGlzcGF0Y2guRGlz
cGF0Y2hFcnJvciwgZGlzcGF0Y2guX3NvdXJjZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKGRpc3BhdGNoLkRpc3BhdGNoRXJyb3IsIGRpc3BhdGNoLl9zb3VyY2UsICdkZWYnKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLCBkaXNwYXRjaC5f
c291cmNlLCAnMS8wJykKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKGRpc3BhdGNoLl9zb3VyY2Uo
CisgICAgICAgICAgICAgICAgJ2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1
ZXN0KTpwYXNzXG4nCisgICAgICAgICAgICAgICAgJ2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2Rh
dGEocmVxdWVzdCk6cGFzc1xuJykpCisKKyAgICBkZWYgdGVzdF9zb3VyY2Vfd2FybmluZ3Moc2Vs
Zik6CisgICAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRM
RVJTX0RJUikKKyAgICAgICAgd2FybmluZ3MgPSBkaXNwYXRjaGVyLnNvdXJjZV93YXJuaW5ncygp
CisgICAgICAgIHdhcm5pbmdzLnNvcnQoKQorICAgICAgICBleHBlY3RlZF93YXJuaW5ncyA9IFsK
KyAgICAgICAgICAgICAgICAob3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ2JsYW5r
X3dzaC5weScpICsKKyAgICAgICAgICAgICAgICAgJzogd2ViX3NvY2tldF9kb19leHRyYV9oYW5k
c2hha2UgaXMgbm90IGRlZmluZWQuJyksCisgICAgICAgICAgICAgICAgKG9zLnBhdGguam9pbihf
VEVTVF9IQU5ETEVSU19ESVIsICdzdWInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J25vbl9jYWxsYWJsZV93c2gucHknKSArCisgICAgICAgICAgICAgICAgICc6IHdlYl9zb2NrZXRf
ZG9fZXh0cmFfaGFuZHNoYWtlIGlzIG5vdCBjYWxsYWJsZS4nKSwKKyAgICAgICAgICAgICAgICAo
b3MucGF0aC5qb2luKF9URVNUX0hBTkRMRVJTX0RJUiwgJ3N1YicsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnd3JvbmdfaGFuZHNoYWtlX3NpZ193c2gucHknKSArCisgICAgICAgICAg
ICAgICAgICc6IHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlIGlzIG5vdCBkZWZpbmVkLicp
LAorICAgICAgICAgICAgICAgIChvcy5wYXRoLmpvaW4oX1RFU1RfSEFORExFUlNfRElSLCAnc3Vi
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3cm9uZ190cmFuc2Zlcl9zaWdfd3No
LnB5JykgKworICAgICAgICAgICAgICAgICAnOiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEgaXMg
bm90IGRlZmluZWQuJyksCisgICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyg0LCBsZW4od2FybmluZ3MpKQorICAgICAgICBmb3IgZXhwZWN0ZWQsIGFjdHVhbCBpbiB6
aXAoZXhwZWN0ZWRfd2FybmluZ3MsIHdhcm5pbmdzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpCisKKyAgICBkZWYgdGVzdF9zaGFrZV9oYW5kKHNlbGYp
OgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9IQU5ETEVS
U19ESVIpCisgICAgICAgIHJlcXVlc3QgPSBtb2NrLk1vY2tSZXF1ZXN0KCkKKyAgICAgICAgcmVx
dWVzdC53c19yZXNvdXJjZSA9ICcvb3JpZ2luX2NoZWNrJworICAgICAgICByZXF1ZXN0LndzX29y
aWdpbiA9ICdodHRwOi8vZXhhbXBsZS5jb20nCisgICAgICAgIGRpc3BhdGNoZXIuZG9fZXh0cmFf
aGFuZHNoYWtlKHJlcXVlc3QpICAjIE11c3Qgbm90IHJhaXNlIGV4Y2VwdGlvbi4KKworICAgICAg
ICByZXF1ZXN0LndzX29yaWdpbiA9ICdodHRwOi8vYmFkLmV4YW1wbGUuY29tJworICAgICAgICBz
ZWxmLmFzc2VydFJhaXNlcyhkaXNwYXRjaC5EaXNwYXRjaEVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwYXRjaGVyLmRvX2V4dHJhX2hhbmRzaGFrZSwgcmVxdWVzdCkKKworICAg
IGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGEoc2VsZik6CisgICAgICAgIGRpc3BhdGNoZXIgPSBkaXNw
YXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUikKKyAgICAgICAgcmVxdWVzdCA9IG1v
Y2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tDb25uKCcnKSkKKyAgICAgICAgcmVx
dWVzdC53c19yZXNvdXJjZSA9ICcvb3JpZ2luX2NoZWNrJworICAgICAgICByZXF1ZXN0LndzX3By
b3RvY29sID0gJ3AxJworCisgICAgICAgIGRpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdvcmlnaW5fY2hlY2tfd3NoLnB5IGlzIGNhbGxl
ZCBmb3IgL29yaWdpbl9jaGVjaywgcDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgICAgICByZXF1ZXN0ID0gbW9jay5N
b2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAgICAgICByZXF1ZXN0
LndzX3Jlc291cmNlID0gJy9zdWIvcGxhaW4nCisgICAgICAgIHJlcXVlc3Qud3NfcHJvdG9jb2wg
PSBOb25lCisgICAgICAgIGRpc3BhdGNoZXIudHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdzdWIvcGxhaW5fd3NoLnB5IGlzIGNhbGxlZCBmb3IgL3N1Yi9w
bGFpbiwgTm9uZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9u
LndyaXR0ZW5fZGF0YSgpKQorCisgICAgZGVmIHRlc3RfdHJhbnNmZXJfZGF0YV9ub19oYW5kbGVy
KHNlbGYpOgorICAgICAgICBkaXNwYXRjaGVyID0gZGlzcGF0Y2guRGlzcGF0Y2hlcihfVEVTVF9I
QU5ETEVSU19ESVIpCisgICAgICAgIGZvciByZXNvdXJjZSBpbiBbJy9ibGFuaycsICcvc3ViL25v
bl9jYWxsYWJsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJy9zdWIvbm9fd3NoX2F0X3Ro
ZV9lbmQnLCAnL2RvZXMvbm90L2V4aXN0J106CisgICAgICAgICAgICByZXF1ZXN0ID0gbW9jay5N
b2NrUmVxdWVzdChjb25uZWN0aW9uPW1vY2suTW9ja0Nvbm4oJycpKQorICAgICAgICAgICAgcmVx
dWVzdC53c19yZXNvdXJjZSA9IHJlc291cmNlCisgICAgICAgICAgICByZXF1ZXN0LndzX3Byb3Rv
Y29sID0gJ3AyJworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpc3BhdGNoZXIu
dHJhbnNmZXJfZGF0YShyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAg
ICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJvciwgZToKKyAgICAgICAgICAgICAg
ICBzZWxmLmZhaWxVbmxlc3Moc3RyKGUpLmZpbmQoJ05vIGhhbmRsZXInKSAhPSAtMSkKKyAgICAg
ICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKKwor
ICAgIGRlZiB0ZXN0X3RyYW5zZmVyX2RhdGFfaGFuZGxlcl9leGNlcHRpb24oc2VsZik6CisgICAg
ICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaC5EaXNwYXRjaGVyKF9URVNUX0hBTkRMRVJTX0RJUikK
KyAgICAgICAgcmVxdWVzdCA9IG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1vY2tD
b25uKCcnKSkKKyAgICAgICAgcmVxdWVzdC53c19yZXNvdXJjZSA9ICcvc3ViL2V4Y2VwdGlvbl9p
bl90cmFuc2ZlcicKKyAgICAgICAgcmVxdWVzdC53c19wcm90b2NvbCA9ICdwMycKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgZGlzcGF0Y2hlci50cmFuc2Zlcl9kYXRhKHJlcXVlc3QpCisgICAg
ICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgZGlzcGF0Y2guRGlzcGF0Y2hFcnJv
ciwgZToKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhzdHIoZSkuZmluZCgnSW50ZW50aW9u
YWwnKSAhPSAtMSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYu
ZmFpbCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWlu
KCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdF9oYW5kc2hha2UucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90
ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAu
LmRkMWY2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0
L3Rlc3RfaGFuZHNoYWtlLnB5CkBAIC0wLDAgKzEsMzE2IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBoYW5kc2hha2UgbW9kdWxl
LiIiIgorCisKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgY29uZmlnICAjIFRoaXMgbXVzdCBi
ZSBpbXBvcnRlZCBiZWZvcmUgbW9kX3B5d2Vic29ja2V0LgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQg
aW1wb3J0IGhhbmRzaGFrZQorCitpbXBvcnQgbW9jaworCisKK19HT09EX1JFUVVFU1QgPSAoCisg
ICAgODAsCisgICAgJy9kZW1vJywKKyAgICB7CisgICAgICAgICdVcGdyYWRlJzonV2ViU29ja2V0
JywKKyAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgJ0hvc3QnOidleGFt
cGxlLmNvbScsCisgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAg
ICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKKyAgICB9CispCisKK19HT09EX1JFU1BP
TlNFX0RFRkFVTFRfUE9SVCA9ICgKKyAgICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9j
b2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29u
bmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFt
cGxlLmNvbVxyXG4nCisgICAgJ1dlYlNvY2tldC1Mb2NhdGlvbjogd3M6Ly9leGFtcGxlLmNvbS9k
ZW1vXHJcbicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxu
JykKKworX0dPT0RfUkVTUE9OU0VfU0VDVVJFID0gKAorICAgICdIVFRQLzEuMSAxMDEgV2ViIFNv
Y2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJworICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxu
JworICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicKKyAgICAnV2ViU29ja2V0LU9yaWdpbjog
aHR0cDovL2V4YW1wbGUuY29tXHJcbicKKyAgICAnV2ViU29ja2V0LUxvY2F0aW9uOiB3c3M6Ly9l
eGFtcGxlLmNvbS9kZW1vXHJcbicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxu
JworICAgICdcclxuJykKKworX0dPT0RfUkVRVUVTVF9OT05ERUZBVUxUX1BPUlQgPSAoCisgICAg
ODA4MSwKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQn
LAorICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAnSG9zdCc6J2V4YW1w
bGUuY29tOjgwODEnLAorICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAg
ICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J3NhbXBsZScsCisgICAgfQorKQorCitfR09PRF9S
RVNQT05TRV9OT05ERUZBVUxUX1BPUlQgPSAoCisgICAgJ0hUVFAvMS4xIDEwMSBXZWIgU29ja2V0
IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nCisg
ICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgICdXZWJTb2NrZXQtT3JpZ2luOiBodHRw
Oi8vZXhhbXBsZS5jb21cclxuJworICAgICdXZWJTb2NrZXQtTG9jYXRpb246IHdzOi8vZXhhbXBs
ZS5jb206ODA4MS9kZW1vXHJcbicKKyAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxu
JworICAgICdcclxuJykKKworX0dPT0RfUkVTUE9OU0VfU0VDVVJFX05PTkRFRiA9ICgKKyAgICAn
SFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAnVXBn
cmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAg
J1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dlYlNvY2tl
dC1Mb2NhdGlvbjogd3NzOi8vZXhhbXBsZS5jb206ODA4MS9kZW1vXHJcbicKKyAgICAnV2ViU29j
a2V0LVByb3RvY29sOiBzYW1wbGVcclxuJworICAgICdcclxuJykKKworX0dPT0RfUkVRVUVTVF9O
T19QUk9UT0NPTCA9ICgKKyAgICA4MCwKKyAgICAnL2RlbW8nLAorICAgIHsKKyAgICAgICAgJ1Vw
Z3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAnQ29ubmVjdGlvbic6J1VwZ3JhZGUnLAorICAg
ICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFt
cGxlLmNvbScsCisgICAgfQorKQorCitfR09PRF9SRVNQT05TRV9OT19QUk9UT0NPTCA9ICgKKyAg
ICAnSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbicKKyAgICAn
VXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisg
ICAgJ1dlYlNvY2tldC1PcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nCisgICAgJ1dlYlNv
Y2tldC1Mb2NhdGlvbjogd3M6Ly9leGFtcGxlLmNvbS9kZW1vXHJcbicKKyAgICAnXHJcbicpCisK
K19HT09EX1JFUVVFU1RfV0lUSF9PUFRJT05BTF9IRUFERVJTID0gKAorICAgIDgwLAorICAgICcv
ZGVtbycsCisgICAgeworICAgICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcsCisgICAgICAgICdD
b25uZWN0aW9uJzonVXBncmFkZScsCisgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAg
ICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgJ1dlYlNvY2tldC1Q
cm90b2NvbCc6J3NhbXBsZScsCisgICAgICAgICdBS2V5JzonQVZhbHVlJywKKyAgICAgICAgJ0Vt
cHR5VmFsdWUnOicnLAorICAgIH0KKykKKworX0JBRF9SRVFVRVNUUyA9ICgKKyAgICAoICAjIEhU
VFAgcmVxdWVzdAorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAg
ICAgICAgICAgJ0hvc3QnOid3d3cuZ29vZ2xlLmNvbScsCisgICAgICAgICAgICAnVXNlci1BZ2Vu
dCc6J01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYIDEwLjU7JworICAg
ICAgICAgICAgICAgICAgICAgICAgICcgZW4tVVM7IHJ2OjEuOS4xLjMpIEdlY2tvLzIwMDkwODI0
IEZpcmVmb3gvMy41LjMnCisgICAgICAgICAgICAgICAgICAgICAgICAgJyBHVEI2IEdUQkEnLAor
ICAgICAgICAgICAgJ0FjY2VwdCc6J3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBw
bGljYXRpb24veG1sO3E9MC45LCcKKyAgICAgICAgICAgICAgICAgICAgICcqLyo7cT0wLjgnLAor
ICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6J2VuLXVzLGVuO3E9MC41JywKKyAgICAgICAg
ICAgICdBY2NlcHQtRW5jb2RpbmcnOidnemlwLGRlZmxhdGUnLAorICAgICAgICAgICAgJ0FjY2Vw
dC1DaGFyc2V0JzonSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9MC43JywKKyAgICAgICAgICAg
ICdLZWVwLUFsaXZlJzonMzAwJywKKyAgICAgICAgICAgICdDb25uZWN0aW9uJzona2VlcC1hbGl2
ZScsCisgICAgICAgIH0KKyAgICApLAorICAgICggICMgTWlzc2luZyBVcGdyYWRlCisgICAgICAg
IDgwLAorICAgICAgICAnL2RlbW8nLAorICAgICAgICB7CisgICAgICAgICAgICAnQ29ubmVjdGlv
bic6J1VwZ3JhZGUnLAorICAgICAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisgICAgICAg
ICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdXZWJTb2Nr
ZXQtUHJvdG9jb2wnOidzYW1wbGUnLAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAjIFdyb25n
IFVwZ3JhZGUKKyAgICAgICAgODAsCisgICAgICAgICcvZGVtbycsCisgICAgICAgIHsKKyAgICAg
ICAgICAgICdVcGdyYWRlJzonTm9uV2ViU29ja2V0JywKKyAgICAgICAgICAgICdDb25uZWN0aW9u
JzonVXBncmFkZScsCisgICAgICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKKyAgICAgICAg
ICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ1dlYlNvY2tl
dC1Qcm90b2NvbCc6J3NhbXBsZScsCisgICAgICAgIH0KKyAgICApLAorICAgICggICMgRW1wdHkg
V2ViU29ja2V0LVByb3RvY29sCisgICAgICAgIDgwLAorICAgICAgICAnL2RlbW8nLAorICAgICAg
ICB7CisgICAgICAgICAgICAnVXBncmFkZSc6J1dlYlNvY2tldCcsCisgICAgICAgICAgICAnQ29u
bmVjdGlvbic6J1VwZ3JhZGUnLAorICAgICAgICAgICAgJ0hvc3QnOidleGFtcGxlLmNvbScsCisg
ICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdX
ZWJTb2NrZXQtUHJvdG9jb2wnOicnLAorICAgICAgICB9CisgICAgKSwKKyAgICAoICAjIFdyb25n
IHBvcnQgbnVtYmVyIGZvcm1hdAorICAgICAgICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAg
ICAgeworICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ0Nv
bm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAgICdIb3N0JzonZXhhbXBsZS5jb206MHg1
MCcsCisgICAgICAgICAgICAnT3JpZ2luJzonaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAg
ICAgICdXZWJTb2NrZXQtUHJvdG9jb2wnOidzYW1wbGUnLAorICAgICAgICB9CisgICAgKSwKKyAg
ICAoICAjIEhlYWRlci9jb25uZWN0aW9uIHBvcnQgbWlzbWF0Y2gKKyAgICAgICAgODA4MCwKKyAg
ICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ1VwZ3JhZGUnOidXZWJTb2Nr
ZXQnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAgICAgICAgICdI
b3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6Ly9leGFtcGxl
LmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonc2FtcGxlJywKKyAgICAg
ICAgfQorICAgICksCisgICAgKCAgIyBJbGxlZ2FsIFdlYlNvY2tldC1Qcm90b2NvbAorICAgICAg
ICA4MCwKKyAgICAgICAgJy9kZW1vJywKKyAgICAgICAgeworICAgICAgICAgICAgJ1VwZ3JhZGUn
OidXZWJTb2NrZXQnLAorICAgICAgICAgICAgJ0Nvbm5lY3Rpb24nOidVcGdyYWRlJywKKyAgICAg
ICAgICAgICdIb3N0JzonZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ09yaWdpbic6J2h0dHA6
Ly9leGFtcGxlLmNvbScsCisgICAgICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sJzonaWxsZWdh
bCBwcm90b2NvbCcsCisgICAgICAgIH0KKyAgICApLAorKQorCisKK2RlZiBfY3JlYXRlX3JlcXVl
c3QocmVxdWVzdF9kZWYpOgorICAgIGNvbm4gPSBtb2NrLk1vY2tDb25uKCcnKQorICAgIGNvbm4u
bG9jYWxfYWRkciA9ICgnMC4wLjAuMCcsIHJlcXVlc3RfZGVmWzBdKQorICAgIHJldHVybiBtb2Nr
Lk1vY2tSZXF1ZXN0KAorICAgICAgICAgICAgdXJpPXJlcXVlc3RfZGVmWzFdLAorICAgICAgICAg
ICAgaGVhZGVyc19pbj1yZXF1ZXN0X2RlZlsyXSwKKyAgICAgICAgICAgIGNvbm5lY3Rpb249Y29u
bikKKworCitjbGFzcyBIYW5kc2hha2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVm
IHRlc3RfdmFsaWRhdGVfcHJvdG9jb2woc2VsZik6CisgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRh
dGVfcHJvdG9jb2woJ3NhbXBsZScpICAjIHNob3VsZCBzdWNjZWVkLgorICAgICAgICBoYW5kc2hh
a2UuX3ZhbGlkYXRlX3Byb3RvY29sKCdTYW1wbGUnKSAgIyBzaG91bGQgc3VjY2VlZC4KKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAnc2FtcGxlIHByb3RvY29sJykKKyAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoaGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAjICJKYXBhbiIgaW4gSmFwYW5lc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdcdTY1
ZTVcdTY3MmMnKQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X2RlZmF1bHRfcG9ydChzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAg
ICAgICBoYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkK
KyAgICAgICAgaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKF9HT09EX1JFU1BPTlNFX0RFRkFVTFRfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJy9kZW1vJywgcmVxdWVzdC53c19yZXNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnaHR0cDovL2V4YW1wbGUuY29tJywgcmVxdWVzdC53c19vcmlnaW4pCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ3dzOi8vZXhhbXBsZS5jb20vZGVtbycsIHJlcXVlc3Qud3NfbG9jYXRp
b24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9j
b2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVlc3Rfc2VjdXJlX2RlZmF1bHRfcG9ydChzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUKQorICAg
ICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ubG9jYWxfYWRkciA9ICgnMC4wLjAuMCcsIDQ0MykKKyAg
ICAgICAgcmVxdWVzdC5pc19odHRwc18gPSBUcnVlCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5k
c2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLmRv
X2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfU0VD
VVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVu
X2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19w
cm90b2NvbCkKKworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9ub25kZWZhdWx0X3BvcnQoc2Vs
Zik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVF9OT05E
RUZBVUxUX1BPUlQpCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihy
ZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5N
b2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dPT0RfUkVTUE9OU0VfTk9OREVGQVVMVF9QT1JULAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc2FtcGxlJywgcmVxdWVzdC53c19wcm90b2NvbCkK
KworICAgIGRlZiB0ZXN0X2dvb2RfcmVxdWVzdF9zZWN1cmVfbm9uX2RlZmF1bHRfcG9ydChzZWxm
KToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdChfR09PRF9SRVFVRVNUX05PTkRF
RkFVTFRfUE9SVCkKKyAgICAgICAgcmVxdWVzdC5pc19odHRwc18gPSBUcnVlCisgICAgICAgIGhh
bmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAg
ICBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX0dP
T0RfUkVTUE9OU0VfU0VDVVJFX05PTkRFRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdHRlbl9kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J3NhbXBsZScsIHJlcXVlc3Qud3NfcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9nb29kX3JlcXVl
c3RfZGVmYXVsdF9ub19wcm90b2NvbChzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVf
cmVxdWVzdChfR09PRF9SRVFVRVNUX05PX1BST1RPQ09MKQorICAgICAgICBoYW5kc2hha2VyID0g
aGFuZHNoYWtlLkhhbmRzaGFrZXIocmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgaGFuZHNoYWtl
ci5kb19oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9HT09EX1JFU1BPTlNF
X05PX1BST1RPQ09MLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlv
bi53cml0dGVuX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0
LndzX3Byb3RvY29sKQorCisgICAgZGVmIHRlc3RfZ29vZF9yZXF1ZXN0X29wdGlvbmFsX2hlYWRl
cnMoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVT
VF9XSVRIX09QVElPTkFMX0hFQURFUlMpCisgICAgICAgIGhhbmRzaGFrZXIgPSBoYW5kc2hha2Uu
SGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbW9jay5Nb2NrRGlzcGF0Y2hlcigpKQorICAgICAgICBoYW5kc2hha2VyLmRvX2hhbmRz
aGFrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FWYWx1ZScsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzX2luWydBS2V5J10pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXJzX2lu
WydFbXB0eVZhbHVlJ10pCisKKyAgICBkZWYgdGVzdF9iYWRfcmVxdWVzdHMoc2VsZik6CisgICAg
ICAgIGZvciByZXF1ZXN0IGluIG1hcChfY3JlYXRlX3JlcXVlc3QsIF9CQURfUkVRVUVTVFMpOgor
ICAgICAgICAgICAgaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5Nb2NrRGlz
cGF0Y2hlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtlLkhhbmRz
aGFrZUVycm9yLCBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSkKKworCitpZiBfX25hbWVfXyA9PSAn
X19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21vY2sucHkgYi9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwLi44YjEzN2QxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X21vY2sucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0
OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiVGVzdHMgZm9yIG1v
Y2sgbW9kdWxlLiIiIgorCisKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHRocmVhZGluZworaW1wb3J0
IHVuaXR0ZXN0CisKK2ltcG9ydCBtb2NrCisKKworY2xhc3MgTW9ja0Nvbm5UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX2Nvbm4gPSBt
b2NrLk1vY2tDb25uKCdBQkNcclxuREVGR1xyXG5cclxuSElKSycpCisKKyAgICBkZWYgdGVzdF9y
ZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQUJDXHJcbicsIHNlbGYu
X2Nvbm4ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnREVGR1xyXG4nLCBz
ZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1xyXG4nLCBz
ZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0hJSksnLCBz
ZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYu
X2Nvbm4ucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ0FCQ1xyXG5EJywgc2VsZi5fY29ubi5yZWFkKDYpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCdFRkdcclxuXHJcbkhJJywgc2VsZi5fY29ubi5yZWFkKDkpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdKSycsIHNlbGYuX2Nvbm4ucmVhZCgxMCkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJycsIHNlbGYuX2Nvbm4ucmVhZCgxMCkpCisKKyAgICBkZWYgdGVz
dF9yZWFkX2FuZF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQUJD
XHJcbkQnLCBzZWxmLl9jb25uLnJlYWQoNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0VG
R1xyXG4nLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
J1xyXG5ISUpLJywgc2VsZi5fY29ubi5yZWFkKDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcnLCBzZWxmLl9jb25uLnJlYWRsaW5lKCkpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToK
KyAgICAgICAgc2VsZi5fY29ubi53cml0ZSgnSGVsbG9cclxuJykKKyAgICAgICAgc2VsZi5fY29u
bi53cml0ZSgnV29ybGRcclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG9cclxu
V29ybGRcclxuJywgc2VsZi5fY29ubi53cml0dGVuX2RhdGEoKSkKKworCitjbGFzcyBNb2NrQmxv
Y2tpbmdDb25uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVhZChzZWxm
KToKKyAgICAgICAgY2xhc3MgTGluZVJlYWRlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAg
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCBxdWV1ZSk6CisgICAgICAgICAgICAgICAgdGhy
ZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVl
ID0gcXVldWUKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uID0gY29ubgorICAgICAgICAgICAg
ICAgIHNlbGYuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5zdGFydCgpCisg
ICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb25uLnJlYWRsaW5lKCkKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fcXVldWUucHV0KGRhdGEpCisgICAgICAgIGNvbm4gPSBtb2NrLk1v
Y2tCbG9ja2luZ0Nvbm4oKQorICAgICAgICBxdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAg
cmVhZGVyID0gTGluZVJlYWRlcihjb25uLCBxdWV1ZSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNz
KHF1ZXVlLmVtcHR5KCkpCisgICAgICAgIGNvbm4ucHV0X2J5dGVzKCdGb28gYmFyXHJcbicpCisg
ICAgICAgIHJlYWQgPSBxdWV1ZS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb28g
YmFyXHJcbicsIHJlYWQpCisKKworY2xhc3MgTW9ja1RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fZGljdChzZWxmKToKKyAgICAgICAgdGFibGUg
PSBtb2NrLk1vY2tUYWJsZSh7J0tleSc6J1ZhbHVlJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdLRVknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
VmFsdWUnLCB0YWJsZVsna2V5J10pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9saXN0KHNl
bGYpOgorICAgICAgICB0YWJsZSA9IG1vY2suTW9ja1RhYmxlKFsoJ0tleScsICdWYWx1ZScpXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlWydrZXknXSkKKworICAgIGRlZiB0
ZXN0X2NyZWF0ZV9mcm9tX3R1cGxlKHNlbGYpOgorICAgICAgICB0YWJsZSA9IG1vY2suTW9ja1Rh
YmxlKCgoJ0tleScsICdWYWx1ZScpLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVl
JywgdGFibGUuZ2V0KCdLRVknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnVmFsdWUnLCB0
YWJsZVsna2V5J10pCisKKyAgICBkZWYgdGVzdF9zZXRfYW5kX2dldChzZWxmKToKKyAgICAgICAg
dGFibGUgPSBtb2NrLk1vY2tUYWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwg
dGFibGUuZ2V0KCdLZXknKSkKKyAgICAgICAgdGFibGVbJ0tleSddID0gJ1ZhbHVlJworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCdWYWx1ZScsIHRhYmxlLmdldCgnS2V5JykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywgdGFibGUuZ2V0KCdrZXknKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnVmFsdWUnLCB0YWJsZS5nZXQoJ0tFWScpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCdWYWx1ZScsIHRhYmxlWydLZXknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
VmFsdWUnLCB0YWJsZVsna2V5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1ZhbHVlJywg
dGFibGVbJ0tFWSddKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRl
c3QubWFpbigpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbXNndXRpbC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29j
a2V0L3Rlc3QvdGVzdF9tc2d1dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAw
MDAuLmIzYmE1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90
ZXN0L3Rlc3RfbXNndXRpbC5weQpAQCAtMCwwICsxLDE0OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3IgbXNndXRpbCBtb2R1bGUu
IiIiCisKKworaW1wb3J0IFF1ZXVlCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZpZyAg
IyBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KK2Zyb20gbW9k
X3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKK2ltcG9ydCBtb2NrCisKKworZGVmIF9jcmVh
dGVfcmVxdWVzdChyZWFkX2RhdGEpOgorICAgIHJldHVybiBtb2NrLk1vY2tSZXF1ZXN0KGNvbm5l
Y3Rpb249bW9jay5Nb2NrQ29ubihyZWFkX2RhdGEpKQorCitkZWYgX2NyZWF0ZV9ibG9ja2luZ19y
ZXF1ZXN0KCk6CisgICAgcmV0dXJuIG1vY2suTW9ja1JlcXVlc3QoY29ubmVjdGlvbj1tb2NrLk1v
Y2tCbG9ja2luZ0Nvbm4oKSkKKworY2xhc3MgTWVzc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorICAgIGRlZiB0ZXN0X3NlbmRfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9j
cmVhdGVfcmVxdWVzdCgnJykKKyAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwg
J0hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMEhlbGxvXHhmZicsIHJlcXVl
c3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3NlbmRfbWVzc2Fn
ZV91bmljb2RlKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCcnKQor
ICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCB1J1x1NjVlNScpCisgICAgICAg
ICMgVSs2NWU1IGlzIGVuY29kZWQgYXMgZTYsOTcsYTUgaW4gVVRGLTgKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnXHgwMFx4ZTZceDk3XHhhNVx4ZmYnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3Jl
Y2VpdmVfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgn
XHgwMEhlbGxvXHhmZlx4MDBXb3JsZCFceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
SGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnV29ybGQhJywgbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisK
KyAgICBkZWYgdGVzdF9yZWNlaXZlX21lc3NhZ2VfdW5pY29kZShzZWxmKToKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfcmVxdWVzdCgnXHgwMFx4ZTZceDljXHhhY1x4ZmYnKQorICAgICAgICAj
IFUrNjcyYyBpcyBlbmNvZGVkIGFzIGU2LDljLGFjIGluIFVURi04CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwodSdcdTY3MmMnLCBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KSkKKwor
ICAgIGRlZiB0ZXN0X3JlY2VpdmVfbWVzc2FnZV9kaXNjYXJkKHNlbGYpOgorICAgICAgICByZXF1
ZXN0ID0gX2NyZWF0ZV9yZXF1ZXN0KCdceDgwXHgwNklHTk9SRVx4MDBIZWxsb1x4ZmYnCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdceDAxRElTUkVHQVJEXHhmZlx4MDBXb3JsZCFc
eGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVsbG8nLCBtc2d1dGlsLnJlY2VpdmVf
bWVzc2FnZShyZXF1ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnV29ybGQhJywgbXNn
dXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkpCisKKyAgICBkZWYgdGVzdF9wYXlsb2FkX2xl
bmd0aChzZWxmKToKKyAgICAgICAgZm9yIGxlbmd0aCwgYnl0ZXMgaW4gKCgwLCAnXHgwMCcpLCAo
MHg3ZiwgJ1x4N2YnKSwgKDB4ODAsICdceDgxXHgwMCcpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKDB4MTIzNCwgJ1x4ODBceGE0XHgzNCcpKToKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwobGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d1dGlsLl9w
YXlsb2FkX2xlbmd0aChfY3JlYXRlX3JlcXVlc3QoYnl0ZXMpKSkKKworICAgIGRlZiB0ZXN0X3Jl
Y2VpdmVfYnl0ZXMoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ2Fi
Y2RlZmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnLCBtc2d1dGlsLl9yZWNlaXZl
X2J5dGVzKHJlcXVlc3QsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdkZWZnJywgbXNn
dXRpbC5fcmVjZWl2ZV9ieXRlcyhyZXF1ZXN0LCA0KSkKKworICAgIGRlZiB0ZXN0X3JlYWRfdW50
aWwoc2VsZik6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoJ2FiY1hkZWZnWCcp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycsIG1zZ3V0aWwuX3JlYWRfdW50aWwocmVx
dWVzdCwgJ1gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZGVmZycsIG1zZ3V0aWwuX3Jl
YWRfdW50aWwocmVxdWVzdCwgJ1gnKSkKKworCitjbGFzcyBNZXNzYWdlUmVjZWl2ZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9xdWV1ZShzZWxmKToKKyAgICAgICAgcmVx
dWVzdCA9IF9jcmVhdGVfYmxvY2tpbmdfcmVxdWVzdCgpCisgICAgICAgIHJlY2VpdmVyID0gbXNn
dXRpbC5NZXNzYWdlUmVjZWl2ZXIocmVxdWVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KE5vbmUsIHJlY2VpdmVyLnJlY2VpdmVfbm93YWl0KCkpCisKKyAgICAgICAgcmVxdWVzdC5jb25u
ZWN0aW9uLnB1dF9ieXRlcygnXHgwMEhlbGxvIVx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCdIZWxsbyEnLCByZWNlaXZlci5yZWNlaXZlKCkpCisKKyAgICBkZWYgdGVzdF9vbm1lc3Nh
Z2Uoc2VsZik6CisgICAgICAgIG9ubWVzc2FnZV9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAg
ICAgZGVmIG9ubWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2UpOgorICAgICAgICAgICAgb25tZXNzYWdl
X3F1ZXVlLnB1dChtZXNzYWdlKQorCisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX2Jsb2NraW5n
X3JlcXVlc3QoKQorICAgICAgICByZWNlaXZlciA9IG1zZ3V0aWwuTWVzc2FnZVJlY2VpdmVyKHJl
cXVlc3QsIG9ubWVzc2FnZV9oYW5kbGVyKQorCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5w
dXRfYnl0ZXMoJ1x4MDBIZWxsbyFceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSGVs
bG8hJywgb25tZXNzYWdlX3F1ZXVlLmdldCgpKQorCisKK2NsYXNzIE1lc3NhZ2VTZW5kZXJUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgorICAgICAgICBy
ZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkKKyAgICAgICAgc2VuZGVyID0gbXNn
dXRpbC5NZXNzYWdlU2VuZGVyKHJlcXVlc3QpCisKKyAgICAgICAgc2VuZGVyLnNlbmQoJ1dvcmxk
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFdvcmxkXHhmZicsIHJlcXVlc3QuY29u
bmVjdGlvbi53cml0dGVuX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X3NlbmRfbm93YWl0KHNlbGYp
OgorICAgICAgICAjIFVzZSBhIHF1ZXVlIHRvIGNoZWNrIHRoZSBieXRlcyB3cml0dGVuIGJ5IE1l
c3NhZ2VTZW5kZXIuCisgICAgICAgICMgcmVxdWVzdC5jb25uZWN0aW9uLndyaXR0ZW5fZGF0YSgp
IGNhbm5vdCBiZSB1c2VkIGhlcmUgYmVjYXVzZQorICAgICAgICAjIE1lc3NhZ2VTZW5kZXIgcnVu
cyBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgICAgc2VuZF9xdWV1ZSA9IFF1ZXVlLlF1ZXVl
KCkKKyAgICAgICAgZGVmIHdyaXRlKGJ5dGVzKToKKyAgICAgICAgICAgIHNlbmRfcXVldWUucHV0
KGJ5dGVzKQorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9ibG9ja2luZ19yZXF1ZXN0KCkKKyAg
ICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlID0gd3JpdGUKKworICAgICAgICBzZW5kZXIg
PSBtc2d1dGlsLk1lc3NhZ2VTZW5kZXIocmVxdWVzdCkKKworICAgICAgICBzZW5kZXIuc2VuZF9u
b3dhaXQoJ0hlbGxvJykKKyAgICAgICAgc2VuZGVyLnNlbmRfbm93YWl0KCdXb3JsZCcpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBIZWxsb1x4ZmYnLCBzZW5kX3F1ZXVlLmdldCgpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwV29ybGRceGZmJywgc2VuZF9xdWV1ZS5nZXQo
KSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQor
CisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvdGVzdC90ZXN0X3V0aWwucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rf
dXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MDU4YjZkCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X3V0aWwucHkK
QEAgLTAsMCArMSw1NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAy
MDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCisiIiJUZXN0cyBmb3IgdXRpbCBtb2R1bGUuIiIiCisKKworaW1wb3J0IHVuaXR0ZXN0
CisKK2ltcG9ydCBjb25maWcgICMgVGhpcyBtdXN0IGJlIGltcG9ydGVkIGJlZm9yZSBtb2RfcHl3
ZWJzb2NrZXQuCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgdXRpbAorCisKK2NsYXNzIFV0
aWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZXRfc3RhY2tfdHJhY2Uo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ05vbmVcbicsIHV0aWwuZ2V0X3N0YWNr
X3RyYWNlKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEgPSAxIC8gMCAgIyBJbnRlbnRp
b25hbGx5IHJhaXNlIGV4Y2VwdGlvbi4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAg
ICAgICAgIHRyYWNlID0gdXRpbC5nZXRfc3RhY2tfdHJhY2UoKQorICAgICAgICAgICAgc2VsZi5m
YWlsVW5sZXNzKHRyYWNlLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQorICAgICAgICAgICAgc2Vs
Zi5mYWlsVW5sZXNzKHRyYWNlLmZpbmQoJ1plcm9EaXZpc2lvbkVycm9yJykgIT0gLTEpCisKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZp
OnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3Qv
dGVzdGRhdGEvaGFuZGxlcnMvYmxhbmtfd3NoLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9ibGFua193c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uN2Y4N2M2YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvYmxhbmtfd3NoLnB5CkBAIC0wLDAgKzEs
MzEgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L29yaWdpbl9jaGVja193c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3Rk
YXRhL2hhbmRsZXJzL29yaWdpbl9jaGVja193c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5k
ZXggMDAwMDAwMC4uMmMxMzlmYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vi
c29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvb3JpZ2luX2NoZWNrX3dzaC5weQpAQCAtMCww
ICsxLDQyIEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9o
YW5kc2hha2UocmVxdWVzdCk6CisgICAgaWYgcmVxdWVzdC53c19vcmlnaW4gPT0gJ2h0dHA6Ly9l
eGFtcGxlLmNvbSc6CisgICAgICAgIHJldHVybgorICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWNj
ZXB0YWJsZSBvcmlnaW46ICVyJyAlIHJlcXVlc3Qud3Nfb3JpZ2luKQorCisKK2RlZiB3ZWJfc29j
a2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRl
KCdvcmlnaW5fY2hlY2tfd3NoLnB5IGlzIGNhbGxlZCBmb3IgJXMsICVzJyAlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3Rv
Y29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5
d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL2V4Y2VwdGlvbl9pbl90cmFuc2Zl
cl93c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJz
L3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXJfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAuLmI5ODJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdl
YnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9leGNlcHRpb25faW5fdHJhbnNmZXJf
d3NoLnB5CkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisj
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisj
IG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkV4Y2VwdGlv
biBpbiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEoKS4KKyIiIgorCisKK2RlZiB3ZWJfc29ja2V0
X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIHdlYl9zb2Nr
ZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByYWlzZSBFeGNlcHRpb24oJ0ludGVudGlv
bmFsIEV4Y2VwdGlvbiBmb3IgJXMsICVzJyAlCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0
LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFu
ZGxlcnMvc3ViL25vX3dzaF9hdF90aGVfZW5kLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvbm9fd3NoX2F0X3RoZV9lbmQucHkKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTdlN2JlMQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL25vX3dzaF9h
dF90aGVfZW5kLnB5CkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJ
bmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIkNv
cnJlY3Qgc2lnbmF0dXJlcywgd3JvbmcgZmlsZSBuYW1lLgorIiIiCisKKworZGVmIHdlYl9zb2Nr
ZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MKKworCitkZWYgd2ViX3Nv
Y2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0
ZSgKKyAgICAgICAgICAgICdzdWIvbm9fd3NoX2F0X3RoZV9lbmQucHkgaXMgY2FsbGVkIGZvciAl
cywgJXMnICUKKyAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jlc291cmNlLCByZXF1ZXN0LndzX3By
b3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMvc3ViL25vbl9jYWxsYWJsZV93c2gu
cHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi9u
b25fY2FsbGFibGVfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2
MzUyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rl
c3RkYXRhL2hhbmRsZXJzL3N1Yi9ub25fY2FsbGFibGVfd3NoLnB5CkBAIC0wLDAgKzEsMzkgQEAK
KyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIk5vbi1jYWxsYWJsZSBoYW5kbGVycy4KKyIiIgorCisK
K3dlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlID0gVHJ1ZQord2ViX3NvY2tldF90cmFuc2Zl
cl9kYXRhID0gMQorCisKKyMgdmk6c3RzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvcGxhaW5fd3NoLnB5IGIv
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0ZGF0YS9oYW5kbGVycy9zdWIvcGxhaW5f
d3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiM2ZmNjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRs
ZXJzL3N1Yi9wbGFpbl93c2gucHkKQEAgLTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgMjAwOSwg
R29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MK
KworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi53cml0ZSgnc3ViL3BsYWluX3dzaC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycg
JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC53c19yZXNvdXJjZSwgcmVx
dWVzdC53c19wcm90b2NvbCkpCisKKworIyB2aTpzdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ19o
YW5kc2hha2Vfc2lnX3dzaC5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRh
dGEvaGFuZGxlcnMvc3ViL3dyb25nX2hhbmRzaGFrZV9zaWdfd3NoLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLjZiZjY1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ19oYW5kc2hh
a2Vfc2lnX3dzaC5weQpAQCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUg
SW5jLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJX
cm9uZyB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZSBzaWduYXR1cmUuCisiIiIKKworCitk
ZWYgbm9fd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcwor
CisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcmVxdWVzdC5j
b25uZWN0aW9uLndyaXRlKAorICAgICAgICAgICAgJ3N1Yi93cm9uZ19oYW5kc2hha2Vfc2lnX3dz
aC5weSBpcyBjYWxsZWQgZm9yICVzLCAlcycgJQorICAgICAgICAgICAgIChyZXF1ZXN0LndzX3Jl
c291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdGRhdGEvaGFuZGxlcnMv
c3ViL3dyb25nX3RyYW5zZmVyX3NpZ193c2gucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90
ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9uZ190cmFuc2Zlcl9zaWdfd3NoLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwZTJlNTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RkYXRhL2hhbmRsZXJzL3N1Yi93cm9u
Z190cmFuc2Zlcl9zaWdfd3NoLnB5CkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IDIwMDks
IEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKKyIiIldyb25nIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YSgpIHNpZ25hdHVyZS4KKyIiIgor
CisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNz
CisKKworZGVmIG5vX3dlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdGUoCisgICAgICAgICAgICAnc3ViL3dyb25nX3RyYW5zZmVyX3Np
Z193c2gucHkgaXMgY2FsbGVkIGZvciAlcywgJXMnICUKKyAgICAgICAgICAgIChyZXF1ZXN0Lndz
X3Jlc291cmNlLCByZXF1ZXN0LndzX3Byb3RvY29sKSkKKworCisjIHZpOnN0cz00IHN3PTQgZXQ=
</data>

          </attachment>
      

    </bug>

</bugzilla>