<?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>136722</bug_id>
          
          <creation_ts>2014-09-10 16:25:06 -0700</creation_ts>
          <short_desc>Blink Merge: Remove &apos;http_lock&apos; code from webkitpy</short_desc>
          <delta_ts>2014-12-09 11:32:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=139264</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>136711</dependson>
          <blocked>138958</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034454</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-09-10 16:25:06 -0700</bug_when>
    <thetext>Merge this webkitpy change into our repository: &lt;https://chromium.googlesource.com/chromium/blink/+/196f8146a948275c2f1594b13e30ab19a6e6fd66&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034591</commentid>
    <comment_count>1</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-11 05:46:41 -0700</bug_when>
    <thetext>Why? Did it caused any problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034615</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-09-11 09:19:49 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Why? Did it caused any problem?

From the original Blink comments:

&quot;We used to allow running run-webkit-tests concurrently and they would
coordinate amongst themselves when running the http tests using file
locks. This was used by the Qt port on their buildbots, but it&apos;s not
clear that this was needed anywhere else.

This patch removes all of that code, and deletes the generic file lock
module we had as it was now only being used when parsing ASAN logs,
which is only needed on mac and linux (where we can just use flock).

This patch also moves starting and stopping the servers from the
layout_test_runner to the manager, where we can wait to stop the servers
until after retrying any tests. This keeps us from having to start the
servers twice if we need to retry an HTTP test. This will speed up
HTTP retries a tiny bit, but slow down the overall run-webkit-tests
execution a bit in the normal case (no HTTP retries). This tradeoff
seems worth it in order to simplify the logic overall.&quot;

Since we no longer support the Qt port, it make sense to get rid of this complexity if it&apos;s not actively being used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050109</commentid>
    <comment_count>3</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-20 04:24:51 -0800</bug_when>
    <thetext>I know it was introduced for Qt buildbots to be able more run-webkit-tests
on the same machine. Know there is no Qt port, and it seems there is no
real need to be able to do it.

I still think it can be useful if you have only one shared tester 
machine to be able run tests on a WebKit port you don&apos;t work primarily.
Or if you work on two different bugs parallely, and you might would
like to run a test until you wait a full test run in the background.
Without this mechanism, the second RWT would kill/restart the apache
started by the first RWT and tests would fail.

If this useful mechanism causes problems anywhere, I prefer fixing it.
If it isn&apos;t possible easily, it&apos;s OK for me to get rid of it. But in
this case we would need some mechanism to warn or prevent the user
to try to run more than one RWT in the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050150</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-20 09:39:01 -0800</bug_when>
    <thetext>This code is quite complicated and confusing. Even if it doesn&apos;t actively break things, it definitely makes hacking run-webkit-tests harder.

Also, I&apos;m not really sure what the benefit of running multiple run-webkit-test instances in parallel is. Why not just run them serially?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050156</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-20 09:54:49 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This code is quite complicated and confusing. Even if it doesn&apos;t actively
&gt; break things, it definitely makes hacking run-webkit-tests harder.
Is there a concrete issue which can be solved harder because of the 
existance of httpd locking?
 
&gt; Also, I&apos;m not really sure what the benefit of running multiple
&gt; run-webkit-test instances in parallel is. Why not just run them serially?

Here is a simple use case for it: I think that I fixed a huge bug, but I
want to make sure if all tests pass. Run all tests can take at least 15-30
minutes in release more, more in debug mode. Until the tests run in the
background, I&apos;m working an other bug, maybe I would like to run
some (1-2-10) tests too during debugging.

Without this httpd locking mechanism, a newly started run-webkit-tests simply
kills the running apache and breaks the first test run. It isn&apos;t good at all.

If we stated that running more run-webkit-tests paralelly isn&apos;t supported
anymore, we should prevent killing the previously started apache accidentally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050167</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-20 10:17:34 -0800</bug_when>
    <thetext>&gt; Is there a concrete issue which can be solved harder because of the 
existance of httpd locking?

I wasted 10 minutes yesterday trying to figure out how this affects what I&apos;m doing to run http tests in parallel. And this all turned out to be unused code.

&gt; Here is a simple use case for it

This case doesn&apos;t work now, because the second instance will be simply blocked waiting for the lock.

&gt; we should prevent killing the previously started apache accidentally

Do you have a suggestion for how to achieve this? We need to kill runaway httpd processes (most notably when there is a forgotten run-webkit-httpd script in one of the tabs, but also for any other possible problems).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050181</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-20 10:45:00 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Is there a concrete issue which can be solved harder because of the 
&gt; existance of httpd locking?
&gt; 
&gt; I wasted 10 minutes yesterday trying to figure out how this affects what I&apos;m
&gt; doing to run http tests in parallel. And this all turned out to be unused
&gt; code.

As for me, I run http tests parallel long ago on EFL port and they are quit
stable. It is hard coded to 1 thread in base.py, I don&apos;t know the reason,
maybe there were/are issues on other ports.

Running parrallel normal and locked (http + svg-perf) threads can be
configured with:
WEBKIT_TEST_CHILD_PROCESSES env and --child-processes
WEBKIT_TEST_MAX_LOCK_SHARDS env and --max-locked-shards

It is very good to fine tune parallelism or debug issues related
to parallel test running. Or simple set the best and fastest setting
locally. (On Linux WEBKIT_TEST_CHILD_PROCESSES is necessary for users
who build with icecc on 30 threads, but run tests only on 4-8 threads)

&gt; This case doesn&apos;t work now, because the second instance will be simply
&gt; blocked waiting for the lock.
It is blocked if http test running is in progress. After the last test
fininshed, the lock is freed and the second instance can start running
http tests.
 
&gt; &gt; we should prevent killing the previously started apache accidentally
&gt; Do you have a suggestion for how to achieve this? We need to kill runaway
&gt; httpd processes (most notably when there is a forgotten run-webkit-httpd
&gt; script in one of the tabs, but also for any other possible problems).

I can imagine a friendly question before killing the httpd, at least in
interactive mode. It can be optional, opt-in or opt-out, it&apos;s all the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050186</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-20 10:47:08 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; WEBKIT_TEST_MAX_LOCK_SHARDS env and --max-locked-shards
typo: WEBKIT_TEST_MAX_LOCK_SHARDS --&gt; WEBKIT_TEST_MAX_LOCKED_SHARDS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050189</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-20 10:50:10 -0800</bug_when>
    <thetext>&gt; I don&apos;t know the reason, maybe there were/are issues on other ports.

Once again, I&apos;m talking about code complexity. This feature is extremely invasive for something that is unused.

&gt; It is blocked if http test running is in progress.

But aren&apos;t they always in progress? On my machine, http tests run longer than all other tests combined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050211</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-20 12:22:40 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; I don&apos;t know the reason, maybe there were/are issues on other ports.
&gt; Once again, I&apos;m talking about code complexity. This feature is extremely
&gt; invasive for something that is unused.
I see, I don&apos;t say we shouldn&apos;t remove this complexity. But before doing
it, we could increase the maximum number of locked shards in base.py:
----------------------------------------------------------------------------
    def default_child_processes(self):
        &quot;&quot;&quot;Return the number of DumpRenderTree instances to use for this port.&quot;&quot;&quot;
        return self._executive.cpu_count()

    def default_max_locked_shards(self):
        &quot;&quot;&quot;Return the number of &quot;locked&quot; shards to run in parallel (like the http tests).&quot;&quot;&quot;
        return 1
----------------------------------------------------------------------------
Let&apos;s start experimenting with the same numbers:
def default_max_locked_shards(self):
    return self.default_child_processes()

Note: default_child_processes() is hard coded to 2 for win, mac 
has a sophisticated algorithm, EFL and GTK use this default value.

If all ports are happy and stable for a time with same unlocked and 
locked thread number, than we can remove all of these complex code paths. ;-)

&gt; &gt; It is blocked if http test running is in progress.
&gt; But aren&apos;t they always in progress? On my machine, http tests run longer
&gt; than all other tests combined.

It can be true if only 1 thread is enabled for http tests. I ran a quick test,
https tests took 4.5 minutes (on 4 threads), all tests took 22.5 minutes.
(EFL / Linux)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050226</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-20 13:42:49 -0800</bug_when>
    <thetext>&gt; But before doing it, we could increase the maximum number of locked shards in base.py

I don&apos;t understand how this is related to removing the http lock.

I am now actively working on making http tests parallel. That doesn&apos;t involve any experimenting, I&apos;m fixing actual issues that prevent parallelism. But that is orthogonal to running multiple run-webkit-tests instances, because multiple instances would still fight for port 8000 and for temporary files created by PHP and Perl scripts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050229</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-11-20 13:47:19 -0800</bug_when>
    <thetext>&gt;&gt; But aren&apos;t they always in progress? On my machine, http tests run longer
&gt;&gt; than all other tests combined.

&gt; It can be true if only 1 thread is enabled for http tests.

HTTP tests are sequential now, there is always one thread. Trying to run more will make tests flaky, for multiple reasons that I&apos;m fixing now.

You are suggesting a new feature that hasn&apos;t been requested before we started talking about removing unused code. This doesn&apos;t strike me as a high level of interest from the community.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050411</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-21 03:16:00 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; But before doing it, we could increase the maximum number of locked shards in base.py
&gt; I don&apos;t understand how this is related to removing the http lock.

I thought you suggested removing the whole locking shards mechanism. It would
really decrease the complexity of the code. But removing only http locking
wouldn&apos;t decrease any complexity. http locking adds only 1-1 lines to
this more complex locked sharding mechanism:
 - self._port.acquire_http_lock() before starting httpd
 - self._port.release_http_lock() after stopping httpd

I still don&apos;t have objection against removing it, just asked to have 
a graceful mechanism not kill running httpds unasked and agressively.

And if we are doing cleanups, go forward, and remove the whole locking
shards complexity and run https tests parallel when all ports are ready
for it and they are very stable.

&gt; I am now actively working on making http tests parallel. That doesn&apos;t
&gt; involve any experimenting, I&apos;m fixing actual issues that prevent
&gt; parallelism. But that is orthogonal to running multiple run-webkit-tests
&gt; instances, because multiple instances would still fight for port 8000 and
&gt; for temporary files created by PHP and Perl scripts.

As I said previously, parallel http testing is stable for long time ago,
at least on EFL port. I already have WEBKIT_TEST_MAX_LOCK_SHARDS=4 in my
environment for 2 years and haven&apos;t seen any flakiness related to it.
Sharding guarantess that tests in the same directory aren&apos;t run parallel.
Of course rare flakiness can happen if php and perl scripts are fighting
for the same temporary files and full parallelism is enabled. Or if two
different tests in different directories want to use the same temporary
file in the same time. But this is a bug in the test infrastructure and 
in the tests too. To avoid all of these possible parallelism issues, we
shouldn&apos;t let any test to write a hard coded file name on the filesystem. 
Now the run-webkit-test creates an own temporary directory for each DRT/WTR
with &lt;DumpRenderTree|WebkitTestRunner&gt;-XXXXX . DRT/WTR know the path of this
temporary directory, it can (and should) pass it to the perl/php scripts and
they should use only this path for temporary files.

(In reply to comment #12)
&gt; &gt;&gt; But aren&apos;t they always in progress? On my machine, http tests run longer
&gt; &gt;&gt; than all other tests combined.
&gt; &gt; It can be true if only 1 thread is enabled for http tests.
&gt; HTTP tests are sequential now, there is always one thread. Trying to run
&gt; more will make tests flaky, for multiple reasons that I&apos;m fixing now.

Just out of curiosity, I tried parallel running on Mac too.
(On a week old build, not checked trunk after your fixes.)
I didn&apos;t get any flakiness with 4 parallel threads and http
tests ran in 2.5 minutes. With 8 threads: 2 minutes, no flakiness.
 
&gt; You are suggesting a new feature that hasn&apos;t been requested before we
&gt; started talking about removing unused code. This doesn&apos;t strike me as a high
&gt; level of interest from the community.
I suggested a new feature (not to kill httpd agressively without asking) 
after you stated http locking unused code. It is unused on Mac, because
you have overriden the acquire_http_lock/release_http_lock methods. But
it is used for other ports, and useful in the use case I wrote before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050412</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-21 03:17:32 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Merge this webkitpy change into our repository:
&gt; &lt;https://chromium.googlesource.com/chromium/blink/+/
&gt; 196f8146a948275c2f1594b13e30ab19a6e6fd66&gt;

file lock can&apos;t be removed, it is still used by xvfbdriver.py,
changed the title accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050416</commentid>
    <comment_count>15</comment_count>
      <attachid>242035</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-11-21 03:24:46 -0800</bug_when>
    <thetext>Created attachment 242035
WIP patch

WIP patch, it removes only the lock, not move start/stop servers from the layout_test_runner to the manager. In my opinion it is useful to stop httpd when it isn&apos;t needed anymore. It doesn&apos;t make sense to start the httpd at the beginning and only stop at the end. TODO: find a way not to kill already runnning httpd agressively without asking the user.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052228</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-03 11:22:52 -0800</bug_when>
    <thetext>&gt; I thought you suggested removing the whole locking shards mechanism.

What I&apos;m saying is that this code is so hopelessly confusing that I can&apos;t even figure out how to make http tests parallel. I&apos;ve been testing with &quot;-f&quot;, but how do I make them normal tests, like those in fast/ directory?

When I try to change anything, it either breaks locking for perf tests, or refuses to launch httpd (even if I change Manager.needs_servers() to return True).

Then again, I&apos;m not sure if locking does the right thing for perf tests either. Do we still run them in parallel with all other tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052248</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-03 12:16:20 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; I thought you suggested removing the whole locking shards mechanism.
&gt; 
&gt; What I&apos;m saying is that this code is so hopelessly confusing that I can&apos;t
&gt; even figure out how to make http tests parallel. I&apos;ve been testing with
&gt; &quot;-f&quot;, but how do I make them normal tests, like those in fast/ directory?
&gt;
&gt; When I try to change anything, it either breaks locking for perf tests, or
&gt; refuses to launch httpd (even if I change Manager.needs_servers() to return
&gt; True).
&gt; 
&gt; Then again, I&apos;m not sure if locking does the right thing for perf tests
&gt; either. Do we still run them in parallel with all other tests?

Making http tests to normal tests should be easy. Just remove the is_http_test
from _test_requires_lock in manager.py. But in this case starting servers should
be unconditional too. (in layout_test_runner.py) Now httpd are stopped after
the last locked test. It would be broken after making http tests normal test.

The blink change solves this problem with starting httpd at the beginning
and stopping it at the end. And leave locking mechanism for the 24 tests
in LayoutTests/perf directory. But locking is absolutely useless here,
these tests are in one directory, it is one shard, they can&apos;t run in
parallel with each other. But they can run parallel with other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052255</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-03 12:38:18 -0800</bug_when>
    <thetext>&gt; But they can run parallel with other tests.

Can they? I think that&apos;s a mistake, perf tests need to run exclusively - it does not matter whether they run in parallel with other tests, or with other perf tests, the impact is the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052280</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-03 13:40:34 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; But they can run parallel with other tests.
&gt; 
&gt; Can they? I think that&apos;s a mistake, perf tests need to run exclusively - it
&gt; does not matter whether they run in parallel with other tests, or with other
&gt; perf tests, the impact is the same.

Yes, they can. They are handled as locked test same as http test. I checked
the code a little bit deeper now. There are two numbers, number of workers
and number of locked shards. Tests are sharded always by leaf subdirectory,
and then _resize_shards integrates locked shards not to have more than the
max number of locked shard. And then all shards are pushed to the pool,
first the locked shard, second the unlocked shards. It doesn&apos;t guarantee
that locked and unlocked shard can&apos;t run in parallel. It guarantees that
only max_locked_shards can run parallel. But unlocked shards can run too
if the number of workers are bigger than max_locked_shards.

LayoutTests/perf tests aren&apos;t a real performance tests, their runtime
doesn&apos;t matter, only their magnitude is important. They are to guarantee
a feature has linear/logarithmic/O(n^2) magnitude. But it seems they are
flakey and timeouts regularly. They are skipped on mac, many of them are
skipped on GTK/EFL/Win.

I&apos;m afraid there isn&apos;t an easy way to guarantee perf tests run first without
any parallelism and then all the other tests. Or what if we don&apos;t run them
during layout testing, but in a separated buildstep - &quot;run-webkit-tests perf&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052288</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-03 13:52:14 -0800</bug_when>
    <thetext>Right. This means that locking is already broken for perf tests, because the idea is that they run exclusively, when the machine is otherwise idle:

        &quot;&quot;&quot;Return True if the test needs to be locked when
        running multiple copies of NRWTs. Perf tests are locked
        because heavy load caused by running other tests in parallel
        might cause some of them to timeout.&quot;&quot;&quot;

The comment isn&apos;t helping either, because this affects threading within a single NRWT, not (or not only?) multiple ones.

Do you plan to finish the WIP patch? Removing the code would make it more feasible for me to hack on what remains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1052535</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-04 12:16:13 -0800</bug_when>
    <thetext>&gt; Right. This means that locking is already broken for perf tests

Posted a patch to remove that in bug 139264.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053749</commentid>
    <comment_count>22</comment_count>
      <attachid>242909</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-09 05:03:52 -0800</bug_when>
    <thetext>Created attachment 242909
Patch

Sorry for the delay, let&apos;s remove it. I updated the patch after r176814 and r176830.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053822</commentid>
    <comment_count>23</comment_count>
      <attachid>242909</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-12-09 09:39:17 -0800</bug_when>
    <thetext>Comment on attachment 242909
Patch

Thank you! rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053885</commentid>
    <comment_count>24</comment_count>
      <attachid>242909</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-09 11:32:19 -0800</bug_when>
    <thetext>Comment on attachment 242909
Patch

Clearing flags on attachment: 242909

Committed r177028: &lt;http://trac.webkit.org/changeset/177028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053886</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-09 11:32:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242035</attachid>
            <date>2014-11-21 03:24:46 -0800</date>
            <delta_ts>2014-12-09 05:03:45 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-136722-20141121032501.patch</filename>
            <type>text/plain</type>
            <size>27114</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2NDAxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDFjOGFkYjJkYTA0OTg2MTUxN2UxZjRhYjhiMWZlNTVk
YjYxYjM3MC4uMmU5MzY1YTQ0NWQxOGU2YTNiMmRjNDk1OTVjOWJhMDgwNzhiZTE0NSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1
IEBACisyMDE0LTExLTIxICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQmxpbmsgTWVyZ2U6IFJlbW92ZSAnaHR0cF9sb2NrJyBjb2RlIGZyb20gd2Via2l0
cHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcy
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVy
LnB5OgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5fX2luaXRfXyk6CisgICAgICAgIChMYXlv
dXRUZXN0UnVubmVyLnJ1bl90ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLnN0YXJ0
X3NlcnZlcnNfd2l0aF9sb2NrKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3RvcF9zZXJ2
ZXJzX3dpdGhfbG9jayk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTG9j
a0NoZWNraW5nUnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExvY2tDaGVja2luZ1J1bm5lci5o
YW5kbGVfZmluaXNoZWRfbGlzdCk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMuX3J1
bm5lcik6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMuX3J1bl90ZXN0cyk6CisgICAg
ICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9odHRwX2xvY2tpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5f
X2luaXRfXyk6CisgICAgICAgIChQb3J0LnRvLmh0dHBfc2VydmVyX3N1cHBvcnRzX2lwdjYpOgor
ICAgICAgICAoUG9ydC50by5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIpOgorICAgICAgICAoUG9ydC50
by5hY3F1aXJlX2h0dHBfbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChQb3J0LnRvLnJlbGVhc2Vf
aHR0cF9sb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaHR0
cF9sb2NrLnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9odHRw
X2xvY2tfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvcy5weToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuc2hvd19yZXN1bHRzX2h0bWxf
ZmlsZSk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmFjcXVpcmVfaHR0cF9sb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5yZWxlYXNlX2h0dHBfbG9jayk6IERlbGV0ZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L21hYy5weToKKyAgICAgICAgKE1hY1BvcnQpOgorICAgICAgICAo
TWFjUG9ydC5hY3F1aXJlX2h0dHBfbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0LnJl
bGVhc2VfaHR0cF9sb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvbW9ja19kcnQucHk6CisgICAgICAgIChNb2NrRFJUUG9ydC5zdGFydF93ZWJzb2NrZXRfc2Vy
dmVyKToKKyAgICAgICAgKE1vY2tEUlRQb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcik6CisgICAg
ICAgIChNb2NrRFJUUG9ydC5hY3F1aXJlX2h0dHBfbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChN
b2NrRFJUUG9ydC5yZWxlYXNlX2h0dHBfbG9jayk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5OgorICAgICAgICAoTW9ja0RSVFBv
cnRUZXN0LnRlc3RfdXNlc19hcGFjaGUpOgorICAgICAgICAoTW9ja0RSVFBvcnRUZXN0LmludGVn
cmF0aW9uX3Rlc3RfaHR0cF9sb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvcG9ydF90ZXN0Y2FzZS5weToKKyAgICAgICAgKFBvcnRUZXN0Q2FzZS5hc3NlcnRf
c2VydmVyc19hcmVfdXApOgorICAgICAgICAoUG9ydFRlc3RDYXNlLmludGVncmF0aW9uX3Rlc3Rf
aHR0cF9sb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvdGVz
dC5weToKKyAgICAgICAgKFRlc3RQb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIpOgorICAgICAg
ICAoVGVzdFBvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKToKKyAgICAgICAgKFRlc3RQb3J0LmFj
cXVpcmVfaHR0cF9sb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKFRlc3RQb3J0LnJlbGVhc2VfaHR0
cF9sb2NrKTogRGVsZXRlZC4KKwogMjAxNC0xMS0yMCAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAg
PGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFByb3ZpZGUgY29udmVuaWVuY2Ug
QVBJIGluIERPTSBiaW5kaW5ncyB0byBwb3N0IG1lc3NhZ2VzIHRvIHVzZXIgbWVzc2FnZSBoYW5k
bGVycwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CmluZGV4IDUyYWE4
ZTBkMGMyZjZjNDQ1YjQ4MzQ4ZmUzOGYzNDUxYTk5ZTk1Y2MuLjA5OGFmMWE2MTA4ZTJhNWMwOGM1
Yjg4MWM2OTc5NzIwMmZmZmMyYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9y
dW5uZXIucHkKQEAgLTc4LDcgKzc4LDYgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3Qp
OgogCiAgICAgICAgIHNlbGYuX2N1cnJlbnRfcnVuX3Jlc3VsdHMgPSBOb25lCiAgICAgICAgIHNl
bGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzID0gW10KLSAgICAgICAgc2VsZi5faGFzX2h0dHBf
bG9jayA9IEZhbHNlCiAKICAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywgdGVz
dF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19odHRwLCBuZWVkc193
ZWJzb2NrZXRzLCByZXRyeWluZyk6CiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IGV4cGVj
dGF0aW9ucwpAQCAtOTEsNyArOTAsNiBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6
CiAgICAgICAgIHJ1bl9yZXN1bHRzID0gVGVzdFJ1blJlc3VsdHMoc2VsZi5fZXhwZWN0YXRpb25z
LCBsZW4odGVzdF9pbnB1dHMpICsgbGVuKHRlc3RzX3RvX3NraXApKQogICAgICAgICBzZWxmLl9j
dXJyZW50X3J1bl9yZXN1bHRzID0gcnVuX3Jlc3VsdHMKICAgICAgICAgc2VsZi5fcmVtYWluaW5n
X2xvY2tlZF9zaGFyZHMgPSBbXQotICAgICAgICBzZWxmLl9oYXNfaHR0cF9sb2NrID0gRmFsc2UK
ICAgICAgICAgc2VsZi5fcHJpbnRlci5udW1fdGVzdHMgPSBsZW4odGVzdF9pbnB1dHMpCiAgICAg
ICAgIHNlbGYuX3ByaW50ZXIubnVtX3N0YXJ0ZWQgPSAwCiAKQEAgLTE5OCwyNyArMTk2LDIwIEBA
IGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5faW50ZXJydXB0
X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHJ1bl9yZXN1bHRzKQogCiAgICAgZGVmIHN0YXJ0X3NlcnZl
cnNfd2l0aF9sb2NrKHNlbGYsIG51bWJlcl9vZl9zZXJ2ZXJzKToKLSAgICAgICAgc2VsZi5fcHJp
bnRlci53cml0ZV91cGRhdGUoJ0FjcXVpcmluZyBodHRwIGxvY2sgLi4uJykKLSAgICAgICAgc2Vs
Zi5fcG9ydC5hY3F1aXJlX2h0dHBfbG9jaygpCiAgICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHA6
CiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBz
ZXJ2ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIobnVt
YmVyX29mX3NlcnZlcnM9bnVtYmVyX29mX3NlcnZlcnMpCiAgICAgICAgIGlmIHNlbGYuX25lZWRz
X3dlYnNvY2tldHM6CiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3Rh
cnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFy
dF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IFRydWUK
IAogICAgIGRlZiBzdG9wX3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICBpZiBzZWxm
Ll9oYXNfaHR0cF9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cDoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RvcHBpbmcgSFRUUCBzZXJ2
ZXIgLi4uJykKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQot
ICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0czoKLSAgICAgICAgICAgICAgICBz
ZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4n
KQotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKLSAg
ICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdSZWxlYXNpbmcgc2VydmVyIGxv
Y2sgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQotICAg
ICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX25l
ZWRzX2h0dHA6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RvcHBp
bmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3Nl
cnZlcigpCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYnNvY2tldHM6CisgICAgICAgICAgICBz
ZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4n
KQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQogCiAgICAg
ZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBzb3VyY2UsICphcmdzKToKICAgICAgICAgbWV0aG9kID0g
Z2V0YXR0cihzZWxmLCAnX2hhbmRsZV8nICsgbmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQppbmRleCA0OWNiMjUyNzNmZjUwYzBj
YjdjZmUzNDA5ZmRjODMyZmU0OGJiOWJjLi40ZjM3NGQxNzQ1OGRjOTM4NDFhOTIwODkxZTZiYzVh
YWQwNGMyZjBkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVu
bmVyX3VuaXR0ZXN0LnB5CkBAIC03MSwyMyArNzEsMjAgQEAgY2xhc3MgRmFrZVByaW50ZXIob2Jq
ZWN0KToKIAogCiBjbGFzcyBMb2NrQ2hlY2tpbmdSdW5uZXIoTGF5b3V0VGVzdFJ1bm5lcik6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIHRlc3RlciwgaHR0
cF9sb2NrKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlciwg
dGVzdGVyKToKICAgICAgICAgc3VwZXIoTG9ja0NoZWNraW5nUnVubmVyLCBzZWxmKS5fX2luaXRf
XyhvcHRpb25zLCBwb3J0LCBwcmludGVyLCBwb3J0LnJlc3VsdHNfZGlyZWN0b3J5KCksIGxhbWJk
YSB0ZXN0X25hbWU6IEZhbHNlKQogICAgICAgICBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZCA9
IEZhbHNlCiAgICAgICAgIHNlbGYuX3Rlc3RlciA9IHRlc3RlcgotICAgICAgICBzZWxmLl9zaG91
bGRfaGF2ZV9odHRwX2xvY2sgPSBodHRwX2xvY2sKIAogICAgIGRlZiBoYW5kbGVfZmluaXNoZWRf
bGlzdChzZWxmLCBzb3VyY2UsIGxpc3RfbmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgog
ICAgICAgICBpZiBub3Qgc2VsZi5fZmluaXNoZWRfbGlzdF9jYWxsZWQ6CiAgICAgICAgICAgICBz
ZWxmLl90ZXN0ZXIuYXNzZXJ0RXF1YWwobGlzdF9uYW1lLCAnbG9ja2VkX3Rlc3RzJykKICAgICAg
ICAgICAgIHNlbGYuX3Rlc3Rlci5hc3NlcnRUcnVlKHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hh
cmRzKQotICAgICAgICAgICAgc2VsZi5fdGVzdGVyLmFzc2VydFRydWUoc2VsZi5faGFzX2h0dHBf
bG9jayBpcyBzZWxmLl9zaG91bGRfaGF2ZV9odHRwX2xvY2spCiAKICAgICAgICAgc3VwZXIoTG9j
a0NoZWNraW5nUnVubmVyLCBzZWxmKS5oYW5kbGVfZmluaXNoZWRfbGlzdChzb3VyY2UsIGxpc3Rf
bmFtZSwgbnVtX3Rlc3RzLCBlbGFwc2VkX3RpbWUpCiAKICAgICAgICAgaWYgbm90IHNlbGYuX2Zp
bmlzaGVkX2xpc3RfY2FsbGVkOgogICAgICAgICAgICAgc2VsZi5fdGVzdGVyLmFzc2VydEVxdWFs
KHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzLCBbXSkKLSAgICAgICAgICAgIHNlbGYuX3Rl
c3Rlci5hc3NlcnRGYWxzZShzZWxmLl9oYXNfaHR0cF9sb2NrKQogICAgICAgICAgICAgc2VsZi5f
ZmluaXNoZWRfbGlzdF9jYWxsZWQgPSBUcnVlCiAKIApAQCAtOTksNyArOTYsNyBAQCBjbGFzcyBM
YXlvdXRUZXN0UnVubmVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIGhvc3Qg
PSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnQgPSBwb3J0IG9yIGhvc3QucG9ydF9mYWN0b3J5Lmdl
dChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgICAgIHJldHVybiBMb2Nr
Q2hlY2tpbmdSdW5uZXIocG9ydCwgb3B0aW9ucywgRmFrZVByaW50ZXIoKSwgc2VsZiwgVHJ1ZSkK
KyAgICAgICAgcmV0dXJuIExvY2tDaGVja2luZ1J1bm5lcihwb3J0LCBvcHRpb25zLCBGYWtlUHJp
bnRlcigpLCBzZWxmKQogCiAgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgcnVubmVyLCB0ZXN0cyk6
CiAgICAgICAgIHRlc3RfaW5wdXRzID0gW1Rlc3RJbnB1dCh0ZXN0LCA2MDAwKSBmb3IgdGVzdCBp
biB0ZXN0c10KQEAgLTEwOCwxMCArMTA1LDYgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3Rz
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcnVubmVyLnJ1bl90ZXN0cyhleHBlY3RhdGlv
bnMsIHRlc3RfaW5wdXRzLCBzZXQoKSwKICAgICAgICAgICAgIG51bV93b3JrZXJzPTEsIG5lZWRz
X2h0dHA9YW55KCdodHRwJyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzKSwgbmVlZHNfd2Vic29j
a2V0cz1hbnkoWyd3ZWJzb2NrZXQnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHNdKSwgcmV0cnlp
bmc9RmFsc2UpCiAKLSAgICBkZWYgdGVzdF9odHRwX2xvY2tpbmcoc2VsZik6Ci0gICAgICAgIHJ1
bm5lciA9IHNlbGYuX3J1bm5lcigpCi0gICAgICAgIHNlbGYuX3J1bl90ZXN0cyhydW5uZXIsIFsn
aHR0cC90ZXN0cy9wYXNzZXMvdGV4dC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSkKLQogICAg
IGRlZiB0ZXN0X3BlcmZfbG9ja2luZyhzZWxmKToKICAgICAgICAgcnVubmVyID0gc2VsZi5fcnVu
bmVyKCkKICAgICAgICAgc2VsZi5fcnVuX3Rlc3RzKHJ1bm5lciwgWydodHRwL3Rlc3RzL3Bhc3Nl
cy90ZXh0Lmh0bWwnLCAncGVyZi9mb28vdGVzdC5odG1sJ10pCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5CmluZGV4IDNkMGQ0ZWJmNTE1ZWFkMjRiM2UyODY3YWU3N2ZmNjc4YjliYzQ0MjMu
LmZkOTcwOTk0NzBhYzllN2Q2ODQyNTEwNDUzNTM0ZjA4YzUxMzBlOTAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9iYXNlLnB5CkBAIC01NCw3ICs1NCw2IEBAIGZyb20gd2Via2l0cHkuY29tbW9u
LndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24K
IGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCiBmcm9tIHdl
YmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlcgotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBodHRw
X2xvY2sKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW1hZ2VfZGlmZgogZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3Rvcnkg
aW1wb3J0IFBvcnRGYWN0b3J5CkBAIC0xMTksNyArMTE4LDYgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl9p
bWFnZV9kaWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVj
dG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAgIyBvdmVycmlkYWJsZSBmb3IgdGVz
dGluZwotICAgICAgICBzZWxmLl9odHRwX2xvY2sgPSBOb25lICAjIEZJWE1FOiBXaHkgZG9lcyB0
aGlzIGxpdmUgb24gdGhlIHBvcnQgb2JqZWN0PwogCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9w
dGlvbnMsICdjb25maWd1cmF0aW9uJykgb3Igbm90IG9wdGlvbnMuY29uZmlndXJhdGlvbjoKICAg
ICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCdjb25maWd1cmF0aW9uJywgc2VsZi5k
ZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSkKQEAgLTkwOCwxMCArOTA2LDYgQEAgY2xhc3MgUG9ydChv
YmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAK
LSAgICBkZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHNlbGYuX2h0dHBfbG9j
ayA9IGh0dHBfbG9jay5IdHRwTG9jayhOb25lLCBmaWxlc3lzdGVtPXNlbGYuX2ZpbGVzeXN0ZW0s
IGV4ZWN1dGl2ZT1zZWxmLl9leGVjdXRpdmUpCi0gICAgICAgIHNlbGYuX2h0dHBfbG9jay53YWl0
X2Zvcl9odHRwZF9sb2NrKCkKLQogICAgIGRlZiBzdG9wX2hlbHBlcihzZWxmKToKICAgICAgICAg
IiIiU2h1dCBkb3duIHRoZSB0ZXN0IGhlbHBlciBpZiBpdCBpcyBydW5uaW5nLiBEbyBub3RoaW5n
IGlmCiAgICAgICAgIGl0IGlzbid0LCBvciBpdCBpc24ndCBhdmFpbGFibGUuIElmIGEgcG9ydCBv
dmVycmlkZXMgc3RhcnRfaGVscGVyKCkKQEAgLTkzMCwxMCArOTI0LDYgQEAgY2xhc3MgUG9ydChv
YmplY3QpOgogICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlci5zdG9wKCkKICAgICAg
ICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBOb25lCiAKLSAgICBkZWYgcmVsZWFzZV9o
dHRwX2xvY2soc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2h0dHBfbG9jazoKLSAgICAgICAgICAg
IHNlbGYuX2h0dHBfbG9jay5jbGVhbnVwX2h0dHBfbG9jaygpCi0KICAgICBkZWYgZXhpdF9jb2Rl
X2Zyb21fc3VtbWFyaXplZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cyk6CiAgICAg
ICAgICIiIkdpdmVuIHN1bW1hcml6ZWQgcmVzdWx0cywgY29tcHV0ZSB0aGUgZXhpdCBjb2RlIHRv
IGJlIHJldHVybmVkIGJ5IG5ldy1ydW4td2Via2l0LXRlc3RzLgogICAgICAgICBCb3RzIHR1cm4g
cmVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuIEJ5IGRlZmF1
bHQsIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlZ3Jlc3Npb25zCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaHR0cF9sb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2h0dHBfbG9jay5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc0ODlk
YjM4NWI4ZTEzY2FhMzQ0NDg4MzEwODFhNzQwOGI2MzRlZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaHR0
cF9sb2NrLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCi0jIENvcHlyaWdodCAoQykgMjAxMCBBbmRyYXMgQmVjc2kgKGFiZWNzaUBp
bmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotIwotIyBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgT1IKLSMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0jIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0jIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSMgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIEZJWE1FOiBy
ZW5hbWUgdGhpcyBmaWxlLCBhbmQgYWRkIG1vcmUgdGV4dCBhYm91dCBob3cgdGhpcyBpcwotIyBk
aWZmZXJlbnQgZnJvbSB0aGUgYmFzZSBmaWxlX2xvY2sgY2xhc3MuCi0KLSIiIlRoaXMgY2xhc3Mg
aGVscHMgdG8gYmxvY2sgTlJXVCB0aHJlYWRzIHdoZW4gbW9yZSBOUldUcyBydW4KLXBlcmYsIGh0
dHAgYW5kIHdlYnNvY2tldCB0ZXN0cyBpbiBhIHNhbWUgdGltZS4iIiIKLQotaW1wb3J0IGxvZ2dp
bmcKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdGltZQot
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUK
LWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlX2xvY2sgaW1wb3J0IEZpbGVMb2NrCi1m
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQot
Ci0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBIdHRwTG9j
ayhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrX3BhdGgsIGxvY2tfZmlsZV9w
cmVmaXg9IldlYktpdEh0dHBkLmxvY2suIiwgZ3VhcmRfbG9jaz0iV2ViS2l0LmxvY2siLCBmaWxl
c3lzdGVtPU5vbmUsIGV4ZWN1dGl2ZT1Ob25lLCBuYW1lPSdIVFRQJyk6Ci0gICAgICAgIHNlbGYu
X2V4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZSBvciBFeGVjdXRpdmUoKQotICAgICAgICBzZWxmLl9maWxl
c3lzdGVtID0gZmlsZXN5c3RlbSBvciBGaWxlU3lzdGVtKCkKLSAgICAgICAgc2VsZi5fbG9ja19w
YXRoID0gbG9ja19wYXRoCi0gICAgICAgIGlmIG5vdCBzZWxmLl9sb2NrX3BhdGg6Ci0gICAgICAg
ICAgICAjIEZJWE1FOiBGaWxlU3lzdGVtIHNob3VsZCBoYXZlIGFuIGFjY2Vzc29yIGZvciB0ZW1w
ZGlyKCkKLSAgICAgICAgICAgIHNlbGYuX2xvY2tfcGF0aCA9IHRlbXBmaWxlLmdldHRlbXBkaXIo
KQotICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcHJlZml4ID0gbG9ja19maWxlX3ByZWZpeAotICAg
ICAgICBzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
c2VsZi5fbG9ja19wYXRoLCBzZWxmLl9sb2NrX2ZpbGVfcHJlZml4KQotICAgICAgICBzZWxmLl9n
dWFyZF9sb2NrX2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbG9ja19wYXRoLCBn
dWFyZF9sb2NrKQotICAgICAgICBzZWxmLl9ndWFyZF9sb2NrID0gRmlsZUxvY2soc2VsZi5fZ3Vh
cmRfbG9ja19maWxlKQotICAgICAgICBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lID0gIiIK
LSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKLQotICAgIGRlZiBjbGVhbnVwX2h0dHBfbG9jayhz
ZWxmKToKLSAgICAgICAgIiIiRGVsZXRlIHRoZSBsb2NrIGZpbGUgaWYgZXhpc3RzLiIiIgotICAg
ICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9u
YW1lKToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlJlbW92aW5nIGxvY2sgZmlsZTogJXMiICUg
c2VsZi5fcHJvY2Vzc19sb2NrX2ZpbGVfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0
ZW0ucmVtb3ZlKHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUpCi0KLSAgICBkZWYgX2V4dHJh
Y3RfbG9ja19udW1iZXIoc2VsZiwgbG9ja19maWxlX25hbWUpOgotICAgICAgICAiIiJSZXR1cm4g
dGhlIGxvY2sgbnVtYmVyIGZyb20gbG9jayBmaWxlLiIiIgotICAgICAgICBwcmVmaXhfbGVuZ3Ro
ID0gbGVuKHNlbGYuX2xvY2tfZmlsZV9wYXRoX3ByZWZpeCkKLSAgICAgICAgcmV0dXJuIGludChs
b2NrX2ZpbGVfbmFtZVtwcmVmaXhfbGVuZ3RoOl0pCi0KLSAgICBkZWYgX2xvY2tfZmlsZV9saXN0
KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgbG9jayBmaWxlcyBzZXF1ZW50
aWFsbHkuIiIiCi0gICAgICAgIGxvY2tfbGlzdCA9IHNlbGYuX2ZpbGVzeXN0ZW0uZ2xvYihzZWxm
Ll9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAnKicpCi0gICAgICAgIGxvY2tfbGlzdC5zb3J0KGtl
eT1zZWxmLl9leHRyYWN0X2xvY2tfbnVtYmVyKQotICAgICAgICByZXR1cm4gbG9ja19saXN0Ci0K
LSAgICBkZWYgX25leHRfbG9ja19udW1iZXIoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB0aGUg
bmV4dCBhdmFpbGFibGUgbG9jayBudW1iZXIuIiIiCi0gICAgICAgIGxvY2tfbGlzdCA9IHNlbGYu
X2xvY2tfZmlsZV9saXN0KCkKLSAgICAgICAgaWYgbm90IGxvY2tfbGlzdDoKLSAgICAgICAgICAg
IHJldHVybiAwCi0gICAgICAgIHJldHVybiBzZWxmLl9leHRyYWN0X2xvY2tfbnVtYmVyKGxvY2tf
bGlzdFstMV0pICsgMQotCi0gICAgZGVmIF9jdXJyZW50X2xvY2tfcGlkKHNlbGYpOgotICAgICAg
ICAiIiJSZXR1cm4gd2l0aCB0aGUgY3VycmVudCBsb2NrIHBpZC4gSWYgdGhlIGxvY2sgaXMgbm90
IHZhbGlkCi0gICAgICAgIGl0IGRlbGV0ZXMgdGhlIGxvY2sgZmlsZS4iIiIKLSAgICAgICAgbG9j
a19saXN0ID0gc2VsZi5fbG9ja19maWxlX2xpc3QoKQotICAgICAgICBpZiBub3QgbG9ja19saXN0
OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTm8gbG9jayBmaWxlIGxpc3QiKQotICAgICAgICAg
ICAgcmV0dXJuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlJldHJpZXZp
bmcgY3VycmVudCBsb2NrIHBpZCBmcm9tICVzIiAlIGxvY2tfbGlzdFswXSkKLSAgICAgICAgICAg
IGN1cnJlbnRfcGlkX3N0cmluZyA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUobG9j
a19saXN0WzBdKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiQ2hlY2tpbmcgY3VycmVudCBsb2Nr
IG9uIHBpZCAlcyIgJSBjdXJyZW50X3BpZF9zdHJpbmcpCi0gICAgICAgICAgICBpZiBub3QgY3Vy
cmVudF9waWRfc3RyaW5nOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3Zl
KGxvY2tfbGlzdFswXSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgdHJ5
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRfcGlkID0gaW50KGN1cnJlbnRfcGlkX3N0cmluZykK
LSAgICAgICAgICAgICAgICBpZiBub3QgKGN1cnJlbnRfcGlkIGFuZCBzZWxmLl9leGVjdXRpdmUu
Y2hlY2tfcnVubmluZ19waWQoY3VycmVudF9waWQpKToKLSAgICAgICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiUmVtb3Zpbmcgc3R1Y2sgbG9jayBmaWxlOiAlcyIgJSBsb2NrX2xpc3RbMF0pCi0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGxvY2tfbGlzdFswXSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJv
ciwgZToKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJWYWx1ZUVycm9yOiAlcyIgJSBlKQot
ICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGxvY2tfbGlzdFswXSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAg
ICAgICBfbG9nLmRlYnVnKCJJT0Vycm9yOiAlcyIgJSBlKQotICAgICAgICAgICAgcmV0dXJuCi0g
ICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiT1NFcnJv
cjogJXMiICUgZSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICByZXR1cm4gaW50KGN1cnJl
bnRfcGlkKQotCi0gICAgZGVmIF9jcmVhdGVfbG9ja19maWxlKHNlbGYpOgotICAgICAgICAiIiJU
aGUgbG9jayBmaWxlcyBhcmUgdXNlZCB0byBzY2hlZHVsZSB0aGUgcnVubmluZyB0ZXN0IHNlc3Np
b25zIGluIGZpcnN0Ci0gICAgICAgIGNvbWUgZmlyc3Qgc2VydmVkIG9yZGVyLiBUaGUgZ3VhcmQg
bG9jayBlbnN1cmVzIHRoYXQgdGhlIGxvY2sgbnVtYmVycyBhcmUKLSAgICAgICAgc2VxdWVudGlh
bC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX2xvY2tf
cGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJMb2NrIGRpcmVjdG9yeSBkb2VzIG5vdCBl
eGlzdDogJXMiICUgc2VsZi5fbG9ja19wYXRoKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0K
LSAgICAgICAgaWYgbm90IHNlbGYuX2d1YXJkX2xvY2suYWNxdWlyZV9sb2NrKCk6Ci0gICAgICAg
ICAgICBfbG9nLmRlYnVnKCJHdWFyZCBsb2NrIHRpbWVkIG91dCEiKQotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0KLSAgICAgICAgc2VsZi5fcHJvY2Vzc19sb2NrX2ZpbGVfbmFtZSA9IChzZWxm
Ll9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyBzdHIoc2VsZi5fbmV4dF9sb2NrX251bWJlcigpKSkK
LSAgICAgICAgX2xvZy5kZWJ1ZygiQ3JlYXRpbmcgbG9jayBmaWxlOiAlcyIgJSBzZWxmLl9wcm9j
ZXNzX2xvY2tfZmlsZV9uYW1lKQotICAgICAgICAjIEZJWE1FOiBFeGVjdXRpdmUucHkgc2hvdWxk
IGhhdmUgYW4gYWNjZXNzb3IgZm9yIGdldHBpZCgpCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
d3JpdGVfdGV4dF9maWxlKHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUsIHN0cihvcy5nZXRw
aWQoKSkpCi0gICAgICAgIHNlbGYuX2d1YXJkX2xvY2sucmVsZWFzZV9sb2NrKCkKLSAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgIGRlZiB3YWl0X2Zvcl9odHRwZF9sb2NrKHNlbGYpOgotICAgICAg
ICAiIiJDcmVhdGUgYSBsb2NrIGZpbGUgYW5kIHdhaXQgdW50aWwgaXQncyB0dXJuIGNvbWVzLiBJ
ZiBzb21ldGhpbmcgZ29lcyB3cm9uZwotICAgICAgICBpdCB3b250IGRvIGFueSBsb2NraW5nLiIi
IgotICAgICAgICBpZiBub3Qgc2VsZi5fY3JlYXRlX2xvY2tfZmlsZSgpOgotICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiV2FybmluZywgJXMgbG9ja2luZyBmYWlsZWQhIiAlIHNlbGYuX25hbWUpCi0g
ICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIEZJWE1FOiBUaGlzIGNhbiBoYW5nIGZvcmV2
ZXIhCi0gICAgICAgIHdoaWxlIHNlbGYuX2N1cnJlbnRfbG9ja19waWQoKSAhPSBvcy5nZXRwaWQo
KToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKLQotICAgICAgICBfbG9nLmRlYnVnKCIlcyBs
b2NrIGFjcXVpcmVkIiAlIHNlbGYuX25hbWUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvaHR0cF9sb2NrX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2h0dHBfbG9ja191bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOTRjZTVmOTk2YzE5NWVlZDNmMzFkYjdkNGM5NmE2ZDk1OTZkOTlmOC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaHR0cF9sb2NrX3VuaXR0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAg
QEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6
ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0jCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0jIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgot
IyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSMgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSMgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
IyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gaHR0cF9sb2NrIGlt
cG9ydCBIdHRwTG9jawotaW1wb3J0IG9zICAjIFVzZWQgZm9yIG9zLmdldHBpZCgpCi1pbXBvcnQg
dW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBp
bXBvcnQgTW9ja0ZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRp
dmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZQotCi0KLSMgRklYTUU6IFRoZXNlIHRlc3RzIGFs
bCB0b3VjaCB0aGUgcmVhbCBkaXNrLCBidXQgY291bGQgYmUgd3JpdHRlbiB0byBhIE1vY2tGaWxl
U3lzdGVtIGluc3RlYWQuCi1jbGFzcyBIdHRwTG9ja1Rlc3RXaXRoUmVhbEZpbGVTeXN0ZW0odW5p
dHRlc3QuVGVzdENhc2UpOgotICAgICMgRklYTUU6IFVuaXQgdGVzdHMgZG8gbm90IHVzZSBhbiBf
X2luaXRfXyBtZXRob2QsIGJ1dCByYXRoZXIgc2V0VXAgYW5kIHRlYXJEb3duIG1ldGhvZHMuCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RGdW5jKToKLSAgICAgICAgc2VsZi5odHRwX2xvY2sg
PSBIdHRwTG9jayhOb25lLCAiV2ViS2l0VGVzdEh0dHBkLmxvY2suIiwgIldlYktpdFRlc3QubG9j
ayIpCi0gICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IHNlbGYuaHR0cF9sb2NrLl9maWxlc3lzdGVt
ICAjIEZJWE1FOiBXZSBzaG91bGQgYmUgcGFzc2luZyBpbiBhIE1vY2tGaWxlU3lzdGVtIGluc3Rl
YWQuCi0gICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ID0gc2VsZi5maWxlc3lzdGVt
LmpvaW4oc2VsZi5odHRwX2xvY2suX2xvY2tfcGF0aCwgc2VsZi5odHRwX2xvY2suX2xvY2tfZmls
ZV9wcmVmaXgpCi0gICAgICAgIHNlbGYubG9ja19maWxlX25hbWUgPSBzZWxmLmxvY2tfZmlsZV9w
YXRoX3ByZWZpeCArICIwIgotICAgICAgICBzZWxmLmd1YXJkX2xvY2tfZmlsZSA9IHNlbGYuaHR0
cF9sb2NrLl9ndWFyZF9sb2NrX2ZpbGUKLSAgICAgICAgc2VsZi5jbGVhbl9hbGxfbG9ja2ZpbGUo
KQotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCB0ZXN0RnVuYykKLQot
ICAgIGRlZiBjbGVhbl9hbGxfbG9ja2ZpbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZmlsZXN5
c3RlbS5leGlzdHMoc2VsZi5ndWFyZF9sb2NrX2ZpbGUpOgotICAgICAgICAgICAgc2VsZi5maWxl
c3lzdGVtLnJlbW92ZShzZWxmLmd1YXJkX2xvY2tfZmlsZSkKLSAgICAgICAgbG9ja19saXN0ID0g
c2VsZi5maWxlc3lzdGVtLmdsb2Ioc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAnKicpCi0g
ICAgICAgIGZvciBmaWxlX25hbWUgaW4gbG9ja19saXN0OgotICAgICAgICAgICAgc2VsZi5maWxl
c3lzdGVtLnJlbW92ZShmaWxlX25hbWUpCi0KLSAgICBkZWYgYXNzZXJ0RXF1YWwoc2VsZiwgZmly
c3QsIHNlY29uZCk6Ci0gICAgICAgIGlmIGZpcnN0ICE9IHNlY29uZDoKLSAgICAgICAgICAgIHNl
bGYuY2xlYW5fYWxsX2xvY2tmaWxlKCkKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0
RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCkKLQotICAgIGRlZiBfY2hlY2tfbG9ja19maWxlKHNl
bGYpOgotICAgICAgICBpZiBzZWxmLmZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYubG9ja19maWxlX25h
bWUpOgotICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKLSAgICAgICAgICAgIGxvY2tfZmls
ZV9waWQgPSBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoc2VsZi5sb2NrX2ZpbGVfbmFt
ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlkLCBpbnQobG9ja19maWxlX3BpZCkp
Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRl
ZiB0ZXN0X2xvY2tfbGlmZWN5Y2xlKHNlbGYpOgotICAgICAgICBzZWxmLmh0dHBfbG9jay5fY3Jl
YXRlX2xvY2tfZmlsZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBzZWxmLl9j
aGVja19sb2NrX2ZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmh0dHBf
bG9jay5fbmV4dF9sb2NrX251bWJlcigpKQotCi0gICAgICAgIHNlbGYuaHR0cF9sb2NrLmNsZWFu
dXBfaHR0cF9sb2NrKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBzZWxmLl9j
aGVja19sb2NrX2ZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLmh0dHBf
bG9jay5fbmV4dF9sb2NrX251bWJlcigpKQotCi0KLWNsYXNzIEh0dHBMb2NrVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmZpbGVzeXN0
ZW0gPSBNb2NrRmlsZVN5c3RlbSgpCi0gICAgICAgIHNlbGYuaHR0cF9sb2NrID0gSHR0cExvY2so
Tm9uZSwgIldlYktpdFRlc3RIdHRwZC5sb2NrLiIsICJXZWJLaXRUZXN0LmxvY2siLCBmaWxlc3lz
dGVtPXNlbGYuZmlsZXN5c3RlbSwgZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUoKSkKLSAgICAgICAg
IyBGSVhNRTogU2hvdWxkbid0IHdlIGJlIGFibGUgdG8gZ2V0IHRoZXNlIHZhbHVlcyBmcm9tIHRo
ZSBodHRwX2xvY2sgb2JqZWN0IGRpcmVjdGx5PwotICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRo
X3ByZWZpeCA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuaHR0cF9sb2NrLl9sb2NrX3BhdGgs
IHNlbGYuaHR0cF9sb2NrLl9sb2NrX2ZpbGVfcHJlZml4KQotICAgICAgICBzZWxmLmxvY2tfZmls
ZV9uYW1lID0gc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiMCIKLQotICAgIGRlZiB0ZXN0
X2N1cnJlbnRfbG9ja19waWQoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IE9uY2UgRXhlY3V0aXZl
IHdyYXBzIGdldHBpZCwgd2UgY2FuIG1vY2sgdGhpcyBhbmQgbm90IHVzZSBhIHJlYWwgcGlkLgot
ICAgICAgICBjdXJyZW50X3BpZCA9IG9zLmdldHBpZCgpCi0gICAgICAgIHNlbGYuaHR0cF9sb2Nr
Ll9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLmxvY2tfZmlsZV9uYW1lLCBzdHIoY3Vy
cmVudF9waWQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9sb2NrLl9jdXJy
ZW50X2xvY2tfcGlkKCksIGN1cnJlbnRfcGlkKQotCi0gICAgZGVmIHRlc3RfZXh0cmFjdF9sb2Nr
X251bWJlcihzZWxmKToKLSAgICAgICAgbG9ja19maWxlX2xpc3QgPSAoCi0gICAgICAgICAgICBz
ZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIwMCIsCi0gICAgICAgICAgICBzZWxmLmxvY2tf
ZmlsZV9wYXRoX3ByZWZpeCArICI5IiwKLSAgICAgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhf
cHJlZml4ICsgIjAwMSIsCi0gICAgICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCAr
ICIwMjEiLAotICAgICAgICApCi0KLSAgICAgICAgZXhwZWN0ZWRfbnVtYmVyX2xpc3QgPSAoMCwg
OSwgMSwgMjEpCi0KLSAgICAgICAgZm9yIGxvY2tfZmlsZSwgZXhwZWN0ZWQgaW4gemlwKGxvY2tf
ZmlsZV9saXN0LCBleHBlY3RlZF9udW1iZXJfbGlzdCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYuaHR0cF9sb2NrLl9leHRyYWN0X2xvY2tfbnVtYmVyKGxvY2tfZmlsZSksIGV4
cGVjdGVkKQotCi0gICAgZGVmIHRlc3RfbG9ja19maWxlX2xpc3Qoc2VsZik6Ci0gICAgICAgIHNl
bGYuaHR0cF9sb2NrLl9maWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oewotICAgICAgICAgICAg
c2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiNiI6ICIiLAotICAgICAgICAgICAgc2VsZi5s
b2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiMSI6ICIiLAotICAgICAgICAgICAgc2VsZi5sb2NrX2Zp
bGVfcGF0aF9wcmVmaXggKyAiNCI6ICIiLAotICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0
aF9wcmVmaXggKyAiMyI6ICIiLAotICAgICAgICB9KQotCi0gICAgICAgIGV4cGVjdGVkX2ZpbGVf
bGlzdCA9IFsKLSAgICAgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsgIjEiLAot
ICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiMyIsCi0gICAgICAgICAg
ICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICI0IiwKLSAgICAgICAgICAgIHNlbGYubG9j
a19maWxlX3BhdGhfcHJlZml4ICsgIjYiLAotICAgICAgICBdCi0KLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzZWxmLmh0dHBfbG9jay5fbG9ja19maWxlX2xpc3QoKSwgZXhwZWN0ZWRfZmlsZV9s
aXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKaW5kZXggZDg4ZDgxMmQ4MDFjYTZmYWVk
ZDUzNmJhYzA2MTRhYTViOGEzMWFmNi4uNmI4ODBjY2ZkZTc4M2M2OTIzZTUxYjk2MWM3NDQ5ODky
MTNmNzEzYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CkBAIC0yMTAsMTIgKzIxMCw2
IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgIHNlbGYuX2V4ZWN1dGl2
ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3NjcmlwdCgncnVuLXNhZmFyaScpXSArIHNlbGYuX2FyZ3Vt
ZW50c19mb3JfY29uZmlndXJhdGlvbigpICsgWyctLW5vLXNhdmVkLXN0YXRlJywgJy1OU09wZW4n
LCByZXN1bHRzX2ZpbGVuYW1lXSwKICAgICAgICAgICAgIGN3ZD1zZWxmLndlYmtpdF9iYXNlKCks
IHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBzdGRlcnI9ZmlsZShvcy5kZXZudWxsKSkKIAotICAg
IGRlZiBhY3F1aXJlX2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHJl
bGVhc2VfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwYXNzCi0KICAgICBkZWYgc2FtcGxlX2Zp
bGVfcGF0aChzZWxmLCBuYW1lLCBwaWQpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgInswfS17MX0tc2FtcGxlLnR4dCIuZm9y
bWF0KG5hbWUsIHBpZCkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9tYWMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5CmluZGV4IGFiYzEz
Y2RlYWQyYzNiMTBkMGUyNDE3ZmNkMDVhMWNkOTE1OGE5MjMuLjhjMjc2MWM2YjBlOWZjMTQ0MGUz
ZDE5YTI3MjU5YjhjODY3NGQ4ZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9tYWMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weQpAQCAt
MjAxLDEyICsyMDEsNiBAQCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9ydCk6CiAgICAgIyB0aGluayB3
ZSdyZSAoaW50ZW50aW9uYWxseSkgYWN0dWFsbHkgcnVubmluZyBtdWx0aXBsZSBydW5zIGNvbmN1
cnJlbnRseQogICAgICMgb24gYW55IE1hYyBib3RzLgogCi0gICAgZGVmIGFjcXVpcmVfaHR0cF9s
b2NrKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2Vs
Zik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBzYW1wbGVfZmlsZV9wYXRoKHNlbGYsIG5hbWUs
IHBpZCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5yZXN1bHRz
X2RpcmVjdG9yeSgpLCAiezB9LXsxfS1zYW1wbGUudHh0Ii5mb3JtYXQobmFtZSwgcGlkKSkKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0LnB5CmluZGV4IGE5MDQwMjUwZTBhOTk4
YTA3MjgyMTY1NWU3NGYwNmNkNGVkYmIwNTQuLjJmMzE0Y2QzN2FmNmNiNTcwODU3NDQxMmM1MDAz
ZGNlZmZiODYxZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2Nr
X2RydC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnQucHkKQEAg
LTEwOSw5ICsxMDksNiBAQCBjbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgogICAgIGRlZiBzdGFy
dF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAKLSAgICBkZWYgYWNxdWly
ZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBzdG9wX2hlbHBlcihz
ZWxmKToKICAgICAgICAgcGFzcwogCkBAIC0xMjEsOSArMTE4LDYgQEAgY2xhc3MgTW9ja0RSVFBv
cnQob2JqZWN0KToKICAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgogICAgICAg
ICBwYXNzCiAKLSAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MK
LQogICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUp
OgogICAgICAgICBwYXNzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9tb2NrX2RydF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2Nr
X2RydF91bml0dGVzdC5weQppbmRleCBjZDVjNDc0NDczZjA3Y2QyZDk0MDJjN2QxN2Y1ZWYwNTgw
ZWM3M2U4Li5hYWI5YmQzY2JmN2E3ZWM1ZDdlMjJmYzQyNTM2YjM2ZTQwNTA3OWY1IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5CkBAIC02
NSw5ICs2NSw2IEBAIGNsYXNzIE1vY2tEUlRQb3J0VGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0
Q2FzZSk6CiAgICAgZGVmIHRlc3RfdXNlc19hcGFjaGUoc2VsZik6CiAgICAgICAgIHBhc3MKIAot
ICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAgcGFzcwot
CiAgICAgZGVmIGludGVncmF0aW9uX3Rlc3Rfc3RhcnRfaGVscGVyKHNlbGYpOgogICAgICAgICBw
YXNzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3Rj
YXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKaW5k
ZXggMzM1OTdlOTE4MmRkOTI0ZTg0ZjA0NDAzOWU3MmUxZjcyMTE2OTEzNC4uOGI4YjcxNTUxYTlm
YWIwNDVhYjA0NTUwNjQ5MzEyMWYwNTEzNWUwZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKQEAgLTEzNiwxMiArMTM2LDYgQEAgY2xhc3MgUG9ydFRl
c3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAg
ICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQogCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3Rf
aHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAg
ICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgotICAgICAgICBw
b3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLSAgICAgICAgcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygp
Ci0KICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9jaGVja19zeXNfZGVwcyhzZWxmKToKICAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKICAgICAgICAgIyBPbmx5IGNoZWNraW5nIHRoYXQg
bm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHkKaW5k
ZXggNDJmZTY4OThhZDNlMDE0ZjZlZTk2NGM0ZTk4ZWNhNmQ3ZWFjN2FiYS4uNTQwNDhkNmFjNGI3
NzgzOWM0MDNhOGM2ZDdlMmYyZGQ3M2ViZWYzZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rl
c3QucHkKQEAgLTQ2OSwxOCArNDY5LDEyIEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgIGRl
ZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAKLSAgICBkZWYg
YWNxdWlyZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBzdG9wX2h0
dHBfc2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAKICAgICBkZWYgc3RvcF93ZWJzb2NrZXRf
c2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAKLSAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2so
c2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBfcGF0aF90b19saWdodHRwZChzZWxmKToK
ICAgICAgICAgcmV0dXJuICIvdXNyL3NiaW4vbGlnaHR0cGQiCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242909</attachid>
            <date>2014-12-09 05:03:52 -0800</date>
            <delta_ts>2014-12-09 11:32:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136722-20141209140430.patch</filename>
            <type>text/plain</type>
            <size>30942</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3MDEyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzExZGJiMWNhMzJhMmRlNDgxZjdkMmUwODQ5YzRhYTAw
OWEzNGI1NC4uOTA4ZGYwNmVhNzMwZjViMGRmYjU2Njg5MTgyMTg3NTZhNDM3NGE4YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYy
IEBACisyMDE0LTEyLTA5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQmxpbmsgTWVyZ2U6IFJlbW92ZSAnaHR0cF9sb2NrJyBjb2RlIGZyb20gd2Via2l0
cHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcy
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2Vk
IG9uIEJsaW5rIGNvbW1pdCBieSBEaXJrIFByYW5rZSA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+Cisg
ICAgICAgIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8r
LzE5NmY4MTQ2YTk0ODI3NWMyZjE1OTRiMTNlMzBhYjE5YTZlNmZkNjYKKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5l
ci5weToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuX19pbml0X18pOgorICAgICAgICAoTGF5
b3V0VGVzdFJ1bm5lci5ydW5fdGVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdGFy
dF9zZXJ2ZXJzKTogUmVuYW1lZCBmcm9tIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrLgorICAgICAg
ICAoTGF5b3V0VGVzdFJ1bm5lci5zdG9wX3NlcnZlcnMpOiBSZW5hbWVkIGZyb20gc3RvcF9zZXJ2
ZXJzX3dpdGhfbG9jay4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChGYWtl
UHJpbnRlci5mbHVzaCk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMuX3J1bm5lcik6
CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMuX3J1bl90ZXN0cyk6CisgICAgICAgIChM
YXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQpOgorICAgICAgICAoTG9j
a0NoZWNraW5nUnVubmVyKTogRGVsZXRlZC4KKyAgICAgICAgKExvY2tDaGVja2luZ1J1bm5lci5f
X2luaXRfXyk6IERlbGV0ZWQuCisgICAgICAgIChMb2NrQ2hlY2tpbmdSdW5uZXIuaGFuZGxlX2Zp
bmlzaGVkX2xpc3QpOiBEZWxldGVkLgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLnRl
c3RfaHR0cF9sb2NraW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOgorICAgICAgICAoUG9ydC50by5o
dHRwX3NlcnZlcl9zdXBwb3J0c19pcHY2KToKKyAgICAgICAgKFBvcnQudG8uc3RvcF93ZWJzb2Nr
ZXRfc2VydmVyKToKKyAgICAgICAgKFBvcnQudG8uYWNxdWlyZV9odHRwX2xvY2spOiBEZWxldGVk
LgorICAgICAgICAoUG9ydC50by5yZWxlYXNlX2h0dHBfbG9jayk6IERlbGV0ZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2h0dHBfbG9jay5weTogUmVtb3ZlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaHR0cF9sb2NrX3VuaXR0ZXN0LnB5OiBSZW1vdmVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUpOgorICAgICAgICAoSU9TU2ltdWxhdG9y
UG9ydC5hY3F1aXJlX2h0dHBfbG9jayk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQ
b3J0KTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQucmVsZWFzZV9odHRwX2xv
Y2spOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHk6Cisg
ICAgICAgIChNYWNQb3J0LnNob3dfcmVzdWx0c19odG1sX2ZpbGUpOgorICAgICAgICAoTWFjUG9y
dCk6IERlbGV0ZWQuCisgICAgICAgIChNYWNQb3J0LmFjcXVpcmVfaHR0cF9sb2NrKTogRGVsZXRl
ZC4KKyAgICAgICAgKE1hY1BvcnQucmVsZWFzZV9odHRwX2xvY2spOiBEZWxldGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydC5weToKKyAgICAgICAgKE1vY2tEUlRQ
b3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIpOgorICAgICAgICAoTW9ja0RSVFBvcnQuc3RvcF93
ZWJzb2NrZXRfc2VydmVyKToKKyAgICAgICAgKE1vY2tEUlRQb3J0LmFjcXVpcmVfaHR0cF9sb2Nr
KTogRGVsZXRlZC4KKyAgICAgICAgKE1vY2tEUlRQb3J0LnJlbGVhc2VfaHR0cF9sb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnRfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChNb2NrRFJUUG9ydFRlc3QudGVzdF91c2VzX2FwYWNoZSk6CisgICAgICAg
IChNb2NrRFJUUG9ydFRlc3QuaW50ZWdyYXRpb25fdGVzdF9odHRwX2xvY2spOiBEZWxldGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5OgorICAgICAg
ICAoUG9ydFRlc3RDYXNlLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCk6CisgICAgICAgIChQb3J0VGVz
dENhc2UuaW50ZWdyYXRpb25fdGVzdF9odHRwX2xvY2spOiBEZWxldGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5OgorICAgICAgICAoVGVzdFBvcnQuc3RhcnRfd2Vi
c29ja2V0X3NlcnZlcik6CisgICAgICAgIChUZXN0UG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIp
OgorICAgICAgICAoVGVzdFBvcnQuYWNxdWlyZV9odHRwX2xvY2spOiBEZWxldGVkLgorICAgICAg
ICAoVGVzdFBvcnQucmVsZWFzZV9odHRwX2xvY2spOiBEZWxldGVkLgorCiAyMDE0LTEyLTA4ICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhY3Rp
b24gbWVudSB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5Cmlu
ZGV4IDk5YTI4ZTdjMDczMTgzZGYwMDIyNjVjNWVjYTE4NjQ0NmEwMjc1Y2UuLjkwMjdhZjdmODU1
ZmI1ZTQ0ZWY5ZTBjOTI0ZDA0ZTcwYzU0MzNkYTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlv
dXRfdGVzdF9ydW5uZXIucHkKQEAgLTc1LDkgKzc1LDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5l
cihvYmplY3QpOgogICAgICAgICBzZWxmLl9uZWVkc19odHRwID0gTm9uZQogICAgICAgICBzZWxm
Ll9uZWVkc193ZWJzb2NrZXRzID0gTm9uZQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNl
Ci0KICAgICAgICAgc2VsZi5fY3VycmVudF9ydW5fcmVzdWx0cyA9IE5vbmUKLSAgICAgICAgc2Vs
Zi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCiAKICAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVj
dGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV93b3JrZXJzLCBuZWVkc19o
dHRwLCBuZWVkc193ZWJzb2NrZXRzLCByZXRyeWluZyk6CiAgICAgICAgIHNlbGYuX2V4cGVjdGF0
aW9ucyA9IGV4cGVjdGF0aW9ucwpAQCAtODksNyArODcsNiBAQCBjbGFzcyBMYXlvdXRUZXN0UnVu
bmVyKG9iamVjdCk6CiAgICAgICAgICMgRklYTUU6IHJlbmFtZSBhbGwgdmFyaWFibGVzIHRvIHRl
c3RfcnVuX3Jlc3VsdHMgb3Igc29tZSBzdWNoIC4uLgogICAgICAgICBydW5fcmVzdWx0cyA9IFRl
c3RSdW5SZXN1bHRzKHNlbGYuX2V4cGVjdGF0aW9ucywgbGVuKHRlc3RfaW5wdXRzKSArIGxlbih0
ZXN0c190b19za2lwKSkKICAgICAgICAgc2VsZi5fY3VycmVudF9ydW5fcmVzdWx0cyA9IHJ1bl9y
ZXN1bHRzCi0gICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBGYWxzZQogICAgICAgICBzZWxm
Ll9wcmludGVyLm51bV90ZXN0cyA9IGxlbih0ZXN0X2lucHV0cykKICAgICAgICAgc2VsZi5fcHJp
bnRlci5udW1fc3RhcnRlZCA9IDAKIApAQCAtMTA1LDcgKzEwMiw3IEBAIGNsYXNzIExheW91dFRl
c3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgYWxsX3NoYXJkcyA9IHNlbGYuX3NoYXJkZXIuc2hh
cmRfdGVzdHModGVzdF9pbnB1dHMsIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3Nlcyks
IHNlbGYuX29wdGlvbnMuZnVsbHlfcGFyYWxsZWwpCiAKICAgICAgICAgaWYgc2VsZi5fbmVlZHNf
aHR0cCBhbmQgc2VsZi5fb3B0aW9ucy5odHRwOgotICAgICAgICAgICAgc2VsZi5zdGFydF9zZXJ2
ZXJzX3dpdGhfbG9jaygpCisgICAgICAgICAgICBzZWxmLnN0YXJ0X3NlcnZlcnMoKQogCiAgICAg
ICAgIG51bV93b3JrZXJzID0gbWluKG51bV93b3JrZXJzLCBsZW4oYWxsX3NoYXJkcykpCiAgICAg
ICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfd29ya2Vyc19hbmRfc2hhcmRzKG51bV93b3JrZXJzLCBs
ZW4oYWxsX3NoYXJkcykpCkBAIC0xMjksNyArMTI2LDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5l
cihvYmplY3QpOgogICAgICAgICAgICAgX2xvZy5kZWJ1ZygnJXMoIiVzIikgcmFpc2VkLCBleGl0
aW5nJyAlIChlLl9fY2xhc3NfXy5fX25hbWVfXywgc3RyKGUpKSkKICAgICAgICAgICAgIHJhaXNl
CiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xv
Y2soKQorICAgICAgICAgICAgc2VsZi5zdG9wX3NlcnZlcnMoKQogCiAgICAgICAgIHJldHVybiBy
dW5fcmVzdWx0cwogCkBAIC0xODUsMjggKzE4MiwyMSBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVy
KG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5faW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRz
KHJ1bl9yZXN1bHRzKQogCi0gICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgot
ICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnQWNxdWlyaW5nIGh0dHAgbG9jayAu
Li4nKQotICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKKyAgICBkZWYgc3Rh
cnRfc2VydmVycyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cDoKICAgICAgICAg
ICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4n
KQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcigpCiAgICAgICAgIGlm
IHNlbGYuX25lZWRzX3dlYnNvY2tldHM6CiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRl
X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2Vs
Zi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgc2VsZi5faGFzX2h0dHBf
bG9jayA9IFRydWUKLQotICAgIGRlZiBzdG9wX3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAg
ICAgICBpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNf
aHR0cDoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RvcHBp
bmcgSFRUUCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0
cF9zZXJ2ZXIoKQotICAgICAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2Vic29ja2V0czoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RvcHBpbmcgV2ViU29ja2V0
IHNlcnZlciAuLi4nKQotICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRf
c2VydmVyKCkKLSAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdSZWxlYXNp
bmcgc2VydmVyIGxvY2sgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRw
X2xvY2soKQotICAgICAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IEZhbHNlCisKKyAgICBk
ZWYgc3RvcF9zZXJ2ZXJzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9uZWVkc19odHRwOgorICAg
ICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3BwaW5nIEhUVFAgc2VydmVy
IC4uLicpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQorICAgICAg
ICBpZiBzZWxmLl9uZWVkc193ZWJzb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53
cml0ZV91cGRhdGUoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAg
IHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKIAogICAgIGRlZiBoYW5kbGUoc2Vs
ZiwgbmFtZSwgc291cmNlLCAqYXJncyk6CiAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZiwg
J19oYW5kbGVfJyArIG5hbWUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVz
dF9ydW5uZXJfdW5pdHRlc3QucHkKaW5kZXggY2NhZWZlNGQ0M2EyZGQ1ODkzMjEwYjNiNWZjMmZm
ZTFlYWZiZDJiMy4uODUxNDFlNjU3ZDBlZDY5ZDg0OTlkNDdlMGQ5YTUwZWM3MGJmODA0OSAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5w
eQpAQCAtNzAsMjcgKzcwLDYgQEAgY2xhc3MgRmFrZVByaW50ZXIob2JqZWN0KToKICAgICAgICAg
cGFzcwogCiAKLWNsYXNzIExvY2tDaGVja2luZ1J1bm5lcihMYXlvdXRUZXN0UnVubmVyKToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgcHJpbnRlciwgdGVzdGVyLCBodHRw
X2xvY2spOgotICAgICAgICBzdXBlcihMb2NrQ2hlY2tpbmdSdW5uZXIsIHNlbGYpLl9faW5pdF9f
KG9wdGlvbnMsIHBvcnQsIHByaW50ZXIsIHBvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgbGFtYmRh
IHRlc3RfbmFtZTogRmFsc2UpCi0gICAgICAgIHNlbGYuX2ZpbmlzaGVkX2xpc3RfY2FsbGVkID0g
RmFsc2UKLSAgICAgICAgc2VsZi5fdGVzdGVyID0gdGVzdGVyCi0gICAgICAgIHNlbGYuX3Nob3Vs
ZF9oYXZlX2h0dHBfbG9jayA9IGh0dHBfbG9jawotCi0gICAgZGVmIGhhbmRsZV9maW5pc2hlZF9s
aXN0KHNlbGYsIHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZDoKLSAgICAgICAgICAgIHNl
bGYuX3Rlc3Rlci5hc3NlcnRFcXVhbChsaXN0X25hbWUsICdsb2NrZWRfdGVzdHMnKQotICAgICAg
ICAgICAgc2VsZi5fdGVzdGVyLmFzc2VydFRydWUoc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFy
ZHMpCi0gICAgICAgICAgICBzZWxmLl90ZXN0ZXIuYXNzZXJ0VHJ1ZShzZWxmLl9oYXNfaHR0cF9s
b2NrIGlzIHNlbGYuX3Nob3VsZF9oYXZlX2h0dHBfbG9jaykKLQotICAgICAgICBzdXBlcihMb2Nr
Q2hlY2tpbmdSdW5uZXIsIHNlbGYpLmhhbmRsZV9maW5pc2hlZF9saXN0KHNvdXJjZSwgbGlzdF9u
YW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKLQotICAgICAgICBpZiBub3Qgc2VsZi5fZmlu
aXNoZWRfbGlzdF9jYWxsZWQ6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0ZXIuYXNzZXJ0RXF1YWwo
c2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMsIFtdKQotICAgICAgICAgICAgc2VsZi5fdGVz
dGVyLmFzc2VydEZhbHNlKHNlbGYuX2hhc19odHRwX2xvY2spCi0gICAgICAgICAgICBzZWxmLl9m
aW5pc2hlZF9saXN0X2NhbGxlZCA9IFRydWUKLQotCiBjbGFzcyBMYXlvdXRUZXN0UnVubmVyVGVz
dHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBfcnVubmVyKHNlbGYsIHBvcnQ9Tm9uZSk6
CiAgICAgICAgICMgRklYTUU6IHdlIHNob3VsZG4ndCBoYXZlIHRvIHVzZSBydW5fd2Via2l0X3Rl
c3RzLnB5IHRvIGdldCB0aGUgb3B0aW9ucyB3ZSBuZWVkLgpAQCAtOTksNyArNzgsNyBAQCBjbGFz
cyBMYXlvdXRUZXN0UnVubmVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIGhv
c3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnQgPSBwb3J0IG9yIGhvc3QucG9ydF9mYWN0b3J5
LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgICAgIHJldHVybiBM
b2NrQ2hlY2tpbmdSdW5uZXIocG9ydCwgb3B0aW9ucywgRmFrZVByaW50ZXIoKSwgc2VsZiwgVHJ1
ZSkKKyAgICAgICAgcmV0dXJuIExheW91dFRlc3RSdW5uZXIob3B0aW9ucywgcG9ydCwgRmFrZVBy
aW50ZXIoKSwgcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpLCBsYW1iZGEgdGVzdF9uYW1lOiBGYWxz
ZSkKIAogICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHJ1bm5lciwgdGVzdHMpOgogICAgICAgICB0
ZXN0X2lucHV0cyA9IFtUZXN0SW5wdXQodGVzdCwgNjAwMCkgZm9yIHRlc3QgaW4gdGVzdHNdCkBA
IC0xMDgsMTAgKzg3LDYgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgcnVubmVyLnJ1bl90ZXN0cyhleHBlY3RhdGlvbnMsIHRlc3RfaW5w
dXRzLCBzZXQoKSwKICAgICAgICAgICAgIG51bV93b3JrZXJzPTEsIG5lZWRzX2h0dHA9YW55KCdo
dHRwJyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzKSwgbmVlZHNfd2Vic29ja2V0cz1hbnkoWyd3
ZWJzb2NrZXQnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHNdKSwgcmV0cnlpbmc9RmFsc2UpCiAK
LSAgICBkZWYgdGVzdF9odHRwX2xvY2tpbmcoc2VsZik6Ci0gICAgICAgIHJ1bm5lciA9IHNlbGYu
X3J1bm5lcigpCi0gICAgICAgIHNlbGYuX3J1bl90ZXN0cyhydW5uZXIsIFsnaHR0cC90ZXN0cy9w
YXNzZXMvdGV4dC5odG1sJywgJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSkKLQogICAgIGRlZiB0ZXN0X2lu
dGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0cyhzZWxmKToKICAgICAgICAgcnVubmVyID0gc2Vs
Zi5fcnVubmVyKCkKICAgICAgICAgcnVubmVyLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9mYWlsdXJl
cyA9IE5vbmUKQEAgLTE4OSwzMCArMTY0LDMwIEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0
cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJ1bm5lciA9IHNlbGYuX3J1bm5lcihwb3J0
PXBvcnQpCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IFRydWUKICAgICAgICAgcnVubmVy
Ll9uZWVkc193ZWJzb2NrZXRzID0gRmFsc2UKLSAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnNf
d2l0aF9sb2NrKCkKKyAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnMoKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdGFydGVkLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQotICAgICAgICBydW5uZXIuc3Rv
cF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgIHJ1bm5lci5zdG9wX3NlcnZlcnMoKQogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9zdG9wcGVkLCBUcnVlKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQogCiAgICAgICAg
IHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9z
dGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5f
bmVlZHNfaHR0cCA9IFRydWUKICAgICAgICAgcnVubmVyLl9uZWVkc193ZWJzb2NrZXRzID0gVHJ1
ZQotICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBydW5u
ZXIuc3RhcnRfc2VydmVycygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0
YXJ0ZWQsIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3Rh
cnRlZCwgVHJ1ZSkKLSAgICAgICAgcnVubmVyLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAg
ICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
Lmh0dHBfc3RvcHBlZCwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndlYnNv
Y2tldF9zdG9wcGVkLCBUcnVlKQogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5o
dHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3Rv
cHBlZCA9IEZhbHNlCiAgICAgICAgIHJ1bm5lci5fbmVlZHNfaHR0cCA9IEZhbHNlCiAgICAgICAg
IHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCi0gICAgICAgIHJ1bm5lci5zdGFydF9z
ZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzKCkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCi0gICAgICAgIHJ1
bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKKyAgICAgICAgcnVubmVyLnN0b3Bfc2VydmVy
cygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5odHRwX3N0b3BwZWQsIEZhbHNlKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNlKQog
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CmluZGV4IGVlNDE0MmMyNDUxZGEzNjViMTI3
MTBlZGE2YTc4OTZmMjdhMmQ3NGYuLjlkNWU1MzE0OWQxODA3YzVmNzdiNDllOTI2NzFhZWU4Mjc4
MTEzNjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CkBAIC01NCw3ICs1NCw2IEBA
IGZyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBv
cnQgVGVzdENvbmZpZ3VyYXRpb24KIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFz
IHBvcnRfY29uZmlnCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlcgotZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCBodHRwX2xvY2sKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW1h
Z2VfZGlmZgogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogZnJvbSB3
ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5CkBAIC0xMTksNyArMTE4LDYg
QEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl93ZWJzb2NrZXRfc2VydmVyID0g
Tm9uZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAg
IyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZwotICAgICAgICBzZWxmLl9odHRwX2xvY2sgPSBOb25l
ICAjIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGxpdmUgb24gdGhlIHBvcnQgb2JqZWN0PwogCiAgICAg
ICAgIGlmIG5vdCBoYXNhdHRyKG9wdGlvbnMsICdjb25maWd1cmF0aW9uJykgb3Igbm90IG9wdGlv
bnMuY29uZmlndXJhdGlvbjoKICAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCdj
b25maWd1cmF0aW9uJywgc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSkKQEAgLTkwNCwxMCAr
OTAyLDYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAg
ICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6Ci0g
ICAgICAgIHNlbGYuX2h0dHBfbG9jayA9IGh0dHBfbG9jay5IdHRwTG9jayhOb25lLCBmaWxlc3lz
dGVtPXNlbGYuX2ZpbGVzeXN0ZW0sIGV4ZWN1dGl2ZT1zZWxmLl9leGVjdXRpdmUpCi0gICAgICAg
IHNlbGYuX2h0dHBfbG9jay53YWl0X2Zvcl9odHRwZF9sb2NrKCkKLQogICAgIGRlZiBzdG9wX2hl
bHBlcihzZWxmKToKICAgICAgICAgIiIiU2h1dCBkb3duIHRoZSB0ZXN0IGhlbHBlciBpZiBpdCBp
cyBydW5uaW5nLiBEbyBub3RoaW5nIGlmCiAgICAgICAgIGl0IGlzbid0LCBvciBpdCBpc24ndCBh
dmFpbGFibGUuIElmIGEgcG9ydCBvdmVycmlkZXMgc3RhcnRfaGVscGVyKCkKQEAgLTkyNiwxMCAr
OTIwLDYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fd2Vic29ja2V0
X3NlcnZlci5zdG9wKCkKICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIgPSBOb25l
CiAKLSAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2h0
dHBfbG9jazoKLSAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9jay5jbGVhbnVwX2h0dHBfbG9jaygp
Ci0KICAgICBkZWYgZXhpdF9jb2RlX2Zyb21fc3VtbWFyaXplZF9yZXN1bHRzKHNlbGYsIHVuZXhw
ZWN0ZWRfcmVzdWx0cyk6CiAgICAgICAgICIiIkdpdmVuIHN1bW1hcml6ZWQgcmVzdWx0cywgY29t
cHV0ZSB0aGUgZXhpdCBjb2RlIHRvIGJlIHJldHVybmVkIGJ5IG5ldy1ydW4td2Via2l0LXRlc3Rz
LgogICAgICAgICBCb3RzIHR1cm4gcmVkIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9u
LXplcm8gdmFsdWUuIEJ5IGRlZmF1bHQsIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlZ3Jlc3Npb25z
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaHR0cF9sb2NrLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2h0dHBfbG9jay5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNTc0ODlkYjM4NWI4ZTEzY2FhMzQ0NDg4MzEwODFhNzQwOGI2MzRlZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvaHR0cF9sb2NrLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICsw
LDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51
LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0jIENvcHlyaWdodCAoQykgMjAxMCBB
bmRyYXMgQmVjc2kgKGFiZWNzaUBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAotIwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCi0jIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0jIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSMgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0jIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSMgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0jIEZJWE1FOiByZW5hbWUgdGhpcyBmaWxlLCBhbmQgYWRkIG1vcmUgdGV4dCBh
Ym91dCBob3cgdGhpcyBpcwotIyBkaWZmZXJlbnQgZnJvbSB0aGUgYmFzZSBmaWxlX2xvY2sgY2xh
c3MuCi0KLSIiIlRoaXMgY2xhc3MgaGVscHMgdG8gYmxvY2sgTlJXVCB0aHJlYWRzIHdoZW4gbW9y
ZSBOUldUcyBydW4KLXBlcmYsIGh0dHAgYW5kIHdlYnNvY2tldCB0ZXN0cyBpbiBhIHNhbWUgdGlt
ZS4iIiIKLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRl
bXBmaWxlCi1pbXBvcnQgdGltZQotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0
aXZlIGltcG9ydCBFeGVjdXRpdmUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlX2xv
Y2sgaW1wb3J0IEZpbGVMb2NrCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3Rl
bSBpbXBvcnQgRmlsZVN5c3RlbQotCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKLQotCi1jbGFzcyBIdHRwTG9jayhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBs
b2NrX3BhdGgsIGxvY2tfZmlsZV9wcmVmaXg9IldlYktpdEh0dHBkLmxvY2suIiwgZ3VhcmRfbG9j
az0iV2ViS2l0LmxvY2siLCBmaWxlc3lzdGVtPU5vbmUsIGV4ZWN1dGl2ZT1Ob25lLCBuYW1lPSdI
VFRQJyk6Ci0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZSA9IGV4ZWN1dGl2ZSBvciBFeGVjdXRpdmUo
KQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gZmlsZXN5c3RlbSBvciBGaWxlU3lzdGVtKCkK
LSAgICAgICAgc2VsZi5fbG9ja19wYXRoID0gbG9ja19wYXRoCi0gICAgICAgIGlmIG5vdCBzZWxm
Ll9sb2NrX3BhdGg6Ci0gICAgICAgICAgICAjIEZJWE1FOiBGaWxlU3lzdGVtIHNob3VsZCBoYXZl
IGFuIGFjY2Vzc29yIGZvciB0ZW1wZGlyKCkKLSAgICAgICAgICAgIHNlbGYuX2xvY2tfcGF0aCA9
IHRlbXBmaWxlLmdldHRlbXBkaXIoKQotICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcHJlZml4ID0g
bG9ja19maWxlX3ByZWZpeAotICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggPSBz
ZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbG9ja19wYXRoLCBzZWxmLl9sb2NrX2ZpbGVfcHJl
Zml4KQotICAgICAgICBzZWxmLl9ndWFyZF9sb2NrX2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLmpv
aW4oc2VsZi5fbG9ja19wYXRoLCBndWFyZF9sb2NrKQotICAgICAgICBzZWxmLl9ndWFyZF9sb2Nr
ID0gRmlsZUxvY2soc2VsZi5fZ3VhcmRfbG9ja19maWxlKQotICAgICAgICBzZWxmLl9wcm9jZXNz
X2xvY2tfZmlsZV9uYW1lID0gIiIKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKLQotICAgIGRl
ZiBjbGVhbnVwX2h0dHBfbG9jayhzZWxmKToKLSAgICAgICAgIiIiRGVsZXRlIHRoZSBsb2NrIGZp
bGUgaWYgZXhpc3RzLiIiIgotICAgICAgICBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxm
Ll9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lKToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlJlbW92
aW5nIGxvY2sgZmlsZTogJXMiICUgc2VsZi5fcHJvY2Vzc19sb2NrX2ZpbGVfbmFtZSkKLSAgICAg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25h
bWUpCi0KLSAgICBkZWYgX2V4dHJhY3RfbG9ja19udW1iZXIoc2VsZiwgbG9ja19maWxlX25hbWUp
OgotICAgICAgICAiIiJSZXR1cm4gdGhlIGxvY2sgbnVtYmVyIGZyb20gbG9jayBmaWxlLiIiIgot
ICAgICAgICBwcmVmaXhfbGVuZ3RoID0gbGVuKHNlbGYuX2xvY2tfZmlsZV9wYXRoX3ByZWZpeCkK
LSAgICAgICAgcmV0dXJuIGludChsb2NrX2ZpbGVfbmFtZVtwcmVmaXhfbGVuZ3RoOl0pCi0KLSAg
ICBkZWYgX2xvY2tfZmlsZV9saXN0KHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qg
b2YgbG9jayBmaWxlcyBzZXF1ZW50aWFsbHkuIiIiCi0gICAgICAgIGxvY2tfbGlzdCA9IHNlbGYu
X2ZpbGVzeXN0ZW0uZ2xvYihzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAnKicpCi0gICAg
ICAgIGxvY2tfbGlzdC5zb3J0KGtleT1zZWxmLl9leHRyYWN0X2xvY2tfbnVtYmVyKQotICAgICAg
ICByZXR1cm4gbG9ja19saXN0Ci0KLSAgICBkZWYgX25leHRfbG9ja19udW1iZXIoc2VsZik6Ci0g
ICAgICAgICIiIlJldHVybiB0aGUgbmV4dCBhdmFpbGFibGUgbG9jayBudW1iZXIuIiIiCi0gICAg
ICAgIGxvY2tfbGlzdCA9IHNlbGYuX2xvY2tfZmlsZV9saXN0KCkKLSAgICAgICAgaWYgbm90IGxv
Y2tfbGlzdDoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIHJldHVybiBzZWxmLl9leHRy
YWN0X2xvY2tfbnVtYmVyKGxvY2tfbGlzdFstMV0pICsgMQotCi0gICAgZGVmIF9jdXJyZW50X2xv
Y2tfcGlkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gd2l0aCB0aGUgY3VycmVudCBsb2NrIHBp
ZC4gSWYgdGhlIGxvY2sgaXMgbm90IHZhbGlkCi0gICAgICAgIGl0IGRlbGV0ZXMgdGhlIGxvY2sg
ZmlsZS4iIiIKLSAgICAgICAgbG9ja19saXN0ID0gc2VsZi5fbG9ja19maWxlX2xpc3QoKQotICAg
ICAgICBpZiBub3QgbG9ja19saXN0OgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiTm8gbG9jayBm
aWxlIGxpc3QiKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IF9sb2cuZGVidWcoIlJldHJpZXZpbmcgY3VycmVudCBsb2NrIHBpZCBmcm9tICVzIiAlIGxvY2tf
bGlzdFswXSkKLSAgICAgICAgICAgIGN1cnJlbnRfcGlkX3N0cmluZyA9IHNlbGYuX2ZpbGVzeXN0
ZW0ucmVhZF90ZXh0X2ZpbGUobG9ja19saXN0WzBdKQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
Q2hlY2tpbmcgY3VycmVudCBsb2NrIG9uIHBpZCAlcyIgJSBjdXJyZW50X3BpZF9zdHJpbmcpCi0g
ICAgICAgICAgICBpZiBub3QgY3VycmVudF9waWRfc3RyaW5nOgotICAgICAgICAgICAgICAgIHNl
bGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGxvY2tfbGlzdFswXSkKLSAgICAgICAgICAgICAgICByZXR1
cm4KLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGN1cnJlbnRfcGlkID0gaW50
KGN1cnJlbnRfcGlkX3N0cmluZykKLSAgICAgICAgICAgICAgICBpZiBub3QgKGN1cnJlbnRfcGlk
IGFuZCBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoY3VycmVudF9waWQpKToKLSAg
ICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiUmVtb3Zpbmcgc3R1Y2sgbG9jayBmaWxlOiAl
cyIgJSBsb2NrX2xpc3RbMF0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
cmVtb3ZlKGxvY2tfbGlzdFswXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
ICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJW
YWx1ZUVycm9yOiAlcyIgJSBlKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVt
b3ZlKGxvY2tfbGlzdFswXSkKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0
IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJJT0Vycm9yOiAlcyIgJSBlKQot
ICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygiT1NFcnJvcjogJXMiICUgZSkKLSAgICAgICAgICAgIHJldHVybgotICAg
ICAgICByZXR1cm4gaW50KGN1cnJlbnRfcGlkKQotCi0gICAgZGVmIF9jcmVhdGVfbG9ja19maWxl
KHNlbGYpOgotICAgICAgICAiIiJUaGUgbG9jayBmaWxlcyBhcmUgdXNlZCB0byBzY2hlZHVsZSB0
aGUgcnVubmluZyB0ZXN0IHNlc3Npb25zIGluIGZpcnN0Ci0gICAgICAgIGNvbWUgZmlyc3Qgc2Vy
dmVkIG9yZGVyLiBUaGUgZ3VhcmQgbG9jayBlbnN1cmVzIHRoYXQgdGhlIGxvY2sgbnVtYmVycyBh
cmUKLSAgICAgICAgc2VxdWVudGlhbC4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uZXhpc3RzKHNlbGYuX2xvY2tfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJMb2Nr
IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJXMiICUgc2VsZi5fbG9ja19wYXRoKQotICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgaWYgbm90IHNlbGYuX2d1YXJkX2xvY2suYWNx
dWlyZV9sb2NrKCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJHdWFyZCBsb2NrIHRpbWVkIG91
dCEiKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgc2VsZi5fcHJvY2Vzc19s
b2NrX2ZpbGVfbmFtZSA9IChzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyBzdHIoc2VsZi5f
bmV4dF9sb2NrX251bWJlcigpKSkKLSAgICAgICAgX2xvZy5kZWJ1ZygiQ3JlYXRpbmcgbG9jayBm
aWxlOiAlcyIgJSBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lKQotICAgICAgICAjIEZJWE1F
OiBFeGVjdXRpdmUucHkgc2hvdWxkIGhhdmUgYW4gYWNjZXNzb3IgZm9yIGdldHBpZCgpCi0gICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYuX3Byb2Nlc3NfbG9ja19m
aWxlX25hbWUsIHN0cihvcy5nZXRwaWQoKSkpCi0gICAgICAgIHNlbGYuX2d1YXJkX2xvY2sucmVs
ZWFzZV9sb2NrKCkKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiB3YWl0X2Zvcl9odHRw
ZF9sb2NrKHNlbGYpOgotICAgICAgICAiIiJDcmVhdGUgYSBsb2NrIGZpbGUgYW5kIHdhaXQgdW50
aWwgaXQncyB0dXJuIGNvbWVzLiBJZiBzb21ldGhpbmcgZ29lcyB3cm9uZwotICAgICAgICBpdCB3
b250IGRvIGFueSBsb2NraW5nLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5fY3JlYXRlX2xvY2tf
ZmlsZSgpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiV2FybmluZywgJXMgbG9ja2luZyBmYWls
ZWQhIiAlIHNlbGYuX25hbWUpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIEZJWE1F
OiBUaGlzIGNhbiBoYW5nIGZvcmV2ZXIhCi0gICAgICAgIHdoaWxlIHNlbGYuX2N1cnJlbnRfbG9j
a19waWQoKSAhPSBvcy5nZXRwaWQoKToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKLQotICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBsb2NrIGFjcXVpcmVkIiAlIHNlbGYuX25hbWUpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaHR0cF9sb2NrX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2h0dHBfbG9ja191bml0dGVzdC5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRjZTVmOTk2YzE5NWVlZDNmMzFkYjdkNGM5NmE2ZDk1
OTZkOTlmOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaHR0cF9sb2NrX3VuaXR0ZXN0LnB5CisrKyAvZGV2
L251bGwKQEAgLTEsMTIwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdhYm9yIFJhcGNz
YW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0jCi0j
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0jIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklW
RVJTSVRZIE9GIFNaRUdFRCBPUgotIyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSMgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSMgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotIyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLWZyb20gaHR0cF9sb2NrIGltcG9ydCBIdHRwTG9jawotaW1wb3J0IG9zICAjIFVzZWQgZm9y
IG9zLmdldHBpZCgpCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW9jayBpbXBvcnQgTW9ja0V4ZWN1dGl2ZQotCi0KLSMg
RklYTUU6IFRoZXNlIHRlc3RzIGFsbCB0b3VjaCB0aGUgcmVhbCBkaXNrLCBidXQgY291bGQgYmUg
d3JpdHRlbiB0byBhIE1vY2tGaWxlU3lzdGVtIGluc3RlYWQuCi1jbGFzcyBIdHRwTG9ja1Rlc3RX
aXRoUmVhbEZpbGVTeXN0ZW0odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgRklYTUU6IFVuaXQg
dGVzdHMgZG8gbm90IHVzZSBhbiBfX2luaXRfXyBtZXRob2QsIGJ1dCByYXRoZXIgc2V0VXAgYW5k
IHRlYXJEb3duIG1ldGhvZHMuCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RGdW5jKToKLSAg
ICAgICAgc2VsZi5odHRwX2xvY2sgPSBIdHRwTG9jayhOb25lLCAiV2ViS2l0VGVzdEh0dHBkLmxv
Y2suIiwgIldlYktpdFRlc3QubG9jayIpCi0gICAgICAgIHNlbGYuZmlsZXN5c3RlbSA9IHNlbGYu
aHR0cF9sb2NrLl9maWxlc3lzdGVtICAjIEZJWE1FOiBXZSBzaG91bGQgYmUgcGFzc2luZyBpbiBh
IE1vY2tGaWxlU3lzdGVtIGluc3RlYWQuCi0gICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJl
Zml4ID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5odHRwX2xvY2suX2xvY2tfcGF0aCwgc2Vs
Zi5odHRwX2xvY2suX2xvY2tfZmlsZV9wcmVmaXgpCi0gICAgICAgIHNlbGYubG9ja19maWxlX25h
bWUgPSBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIwIgotICAgICAgICBzZWxmLmd1YXJk
X2xvY2tfZmlsZSA9IHNlbGYuaHR0cF9sb2NrLl9ndWFyZF9sb2NrX2ZpbGUKLSAgICAgICAgc2Vs
Zi5jbGVhbl9hbGxfbG9ja2ZpbGUoKQotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRf
XyhzZWxmLCB0ZXN0RnVuYykKLQotICAgIGRlZiBjbGVhbl9hbGxfbG9ja2ZpbGUoc2VsZik6Ci0g
ICAgICAgIGlmIHNlbGYuZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5ndWFyZF9sb2NrX2ZpbGUpOgot
ICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLnJlbW92ZShzZWxmLmd1YXJkX2xvY2tfZmlsZSkK
LSAgICAgICAgbG9ja19saXN0ID0gc2VsZi5maWxlc3lzdGVtLmdsb2Ioc2VsZi5sb2NrX2ZpbGVf
cGF0aF9wcmVmaXggKyAnKicpCi0gICAgICAgIGZvciBmaWxlX25hbWUgaW4gbG9ja19saXN0Ogot
ICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLnJlbW92ZShmaWxlX25hbWUpCi0KLSAgICBkZWYg
YXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCk6Ci0gICAgICAgIGlmIGZpcnN0ICE9IHNl
Y29uZDoKLSAgICAgICAgICAgIHNlbGYuY2xlYW5fYWxsX2xvY2tmaWxlKCkKLSAgICAgICAgdW5p
dHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCkKLQotICAgIGRl
ZiBfY2hlY2tfbG9ja19maWxlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmZpbGVzeXN0ZW0uZXhp
c3RzKHNlbGYubG9ja19maWxlX25hbWUpOgotICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkK
LSAgICAgICAgICAgIGxvY2tfZmlsZV9waWQgPSBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2Zp
bGUoc2VsZi5sb2NrX2ZpbGVfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlk
LCBpbnQobG9ja19maWxlX3BpZCkpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBy
ZXR1cm4gRmFsc2UKLQotICAgIGRlZiB0ZXN0X2xvY2tfbGlmZWN5Y2xlKHNlbGYpOgotICAgICAg
ICBzZWxmLmh0dHBfbG9jay5fY3JlYXRlX2xvY2tfZmlsZSgpCi0KLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChUcnVlLCBzZWxmLl9jaGVja19sb2NrX2ZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgxLCBzZWxmLmh0dHBfbG9jay5fbmV4dF9sb2NrX251bWJlcigpKQotCi0gICAgICAg
IHNlbGYuaHR0cF9sb2NrLmNsZWFudXBfaHR0cF9sb2NrKCkKLQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKEZhbHNlLCBzZWxmLl9jaGVja19sb2NrX2ZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgwLCBzZWxmLmh0dHBfbG9jay5fbmV4dF9sb2NrX251bWJlcigpKQotCi0KLWNsYXNz
IEh0dHBMb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgot
ICAgICAgICBzZWxmLmZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSgpCi0gICAgICAgIHNlbGYu
aHR0cF9sb2NrID0gSHR0cExvY2soTm9uZSwgIldlYktpdFRlc3RIdHRwZC5sb2NrLiIsICJXZWJL
aXRUZXN0LmxvY2siLCBmaWxlc3lzdGVtPXNlbGYuZmlsZXN5c3RlbSwgZXhlY3V0aXZlPU1vY2tF
eGVjdXRpdmUoKSkKLSAgICAgICAgIyBGSVhNRTogU2hvdWxkbid0IHdlIGJlIGFibGUgdG8gZ2V0
IHRoZXNlIHZhbHVlcyBmcm9tIHRoZSBodHRwX2xvY2sgb2JqZWN0IGRpcmVjdGx5PwotICAgICAg
ICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYu
aHR0cF9sb2NrLl9sb2NrX3BhdGgsIHNlbGYuaHR0cF9sb2NrLl9sb2NrX2ZpbGVfcHJlZml4KQot
ICAgICAgICBzZWxmLmxvY2tfZmlsZV9uYW1lID0gc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXgg
KyAiMCIKLQotICAgIGRlZiB0ZXN0X2N1cnJlbnRfbG9ja19waWQoc2VsZik6Ci0gICAgICAgICMg
RklYTUU6IE9uY2UgRXhlY3V0aXZlIHdyYXBzIGdldHBpZCwgd2UgY2FuIG1vY2sgdGhpcyBhbmQg
bm90IHVzZSBhIHJlYWwgcGlkLgotICAgICAgICBjdXJyZW50X3BpZCA9IG9zLmdldHBpZCgpCi0g
ICAgICAgIHNlbGYuaHR0cF9sb2NrLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzZWxmLmxv
Y2tfZmlsZV9uYW1lLCBzdHIoY3VycmVudF9waWQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuaHR0cF9sb2NrLl9jdXJyZW50X2xvY2tfcGlkKCksIGN1cnJlbnRfcGlkKQotCi0gICAg
ZGVmIHRlc3RfZXh0cmFjdF9sb2NrX251bWJlcihzZWxmKToKLSAgICAgICAgbG9ja19maWxlX2xp
c3QgPSAoCi0gICAgICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIwMCIsCi0g
ICAgICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICI5IiwKLSAgICAgICAgICAg
IHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsgIjAwMSIsCi0gICAgICAgICAgICBzZWxmLmxv
Y2tfZmlsZV9wYXRoX3ByZWZpeCArICIwMjEiLAotICAgICAgICApCi0KLSAgICAgICAgZXhwZWN0
ZWRfbnVtYmVyX2xpc3QgPSAoMCwgOSwgMSwgMjEpCi0KLSAgICAgICAgZm9yIGxvY2tfZmlsZSwg
ZXhwZWN0ZWQgaW4gemlwKGxvY2tfZmlsZV9saXN0LCBleHBlY3RlZF9udW1iZXJfbGlzdCk6Ci0g
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaHR0cF9sb2NrLl9leHRyYWN0X2xvY2tf
bnVtYmVyKGxvY2tfZmlsZSksIGV4cGVjdGVkKQotCi0gICAgZGVmIHRlc3RfbG9ja19maWxlX2xp
c3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuaHR0cF9sb2NrLl9maWxlc3lzdGVtID0gTW9ja0ZpbGVT
eXN0ZW0oewotICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiNiI6ICIi
LAotICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiMSI6ICIiLAotICAg
ICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiNCI6ICIiLAotICAgICAgICAg
ICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiMyI6ICIiLAotICAgICAgICB9KQotCi0g
ICAgICAgIGV4cGVjdGVkX2ZpbGVfbGlzdCA9IFsKLSAgICAgICAgICAgIHNlbGYubG9ja19maWxl
X3BhdGhfcHJlZml4ICsgIjEiLAotICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVm
aXggKyAiMyIsCi0gICAgICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICI0IiwK
LSAgICAgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsgIjYiLAotICAgICAgICBd
Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0dHBfbG9jay5fbG9ja19maWxlX2xp
c3QoKSwgZXhwZWN0ZWRfZmlsZV9saXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvcy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKaW5k
ZXggNTFmMzkxZTVjZWE1OTA2OWU4MmM3MDE4OTI1NWQwZmE3MjY4YjBhYy4uNTM3MWU3M2NhNDY1
NDU1ZTcxZjU1ZWY3YmYzZTU5NzFhMzYxMTI5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9z
LnB5CkBAIC0yMTAsMTIgKzIxMCw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAg
ICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3NjcmlwdCgncnVuLXNh
ZmFyaScpXSArIHNlbGYuX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpICsgWyctLW5vLXNh
dmVkLXN0YXRlJywgJy1OU09wZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKICAgICAgICAgICAgIGN3
ZD1zZWxmLndlYmtpdF9iYXNlKCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBzdGRlcnI9Zmls
ZShvcy5kZXZudWxsKSkKIAotICAgIGRlZiBhY3F1aXJlX2h0dHBfbG9jayhzZWxmKToKLSAgICAg
ICAgcGFzcwotCi0gICAgZGVmIHJlbGVhc2VfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwYXNz
Ci0KICAgICBkZWYgc2FtcGxlX2ZpbGVfcGF0aChzZWxmLCBuYW1lLCBwaWQpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgInsw
fS17MX0tc2FtcGxlLnR4dCIuZm9ybWF0KG5hbWUsIHBpZCkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvbWFjLnB5CmluZGV4IGFiYzEzY2RlYWQyYzNiMTBkMGUyNDE3ZmNkMDVhMWNkOTE1OGE5MjMu
LjhlMjg3MDViNzBhMjdlZTMyZTEyYjc5YjRiZjg4MzlhYTA3YWExNGMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L21hYy5weQpAQCAtMTkwLDIzICsxOTAsNiBAQCBjbGFzcyBNYWNQb3J0KEFwcGxl
UG9ydCk6CiAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5wb3Blbihbc2VsZi5wYXRoX3RvX3Njcmlw
dCgncnVuLXNhZmFyaScpXSArIHNlbGYuX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpICsg
WyctLW5vLXNhdmVkLXN0YXRlJywgJy1OU09wZW4nLCByZXN1bHRzX2ZpbGVuYW1lXSwKICAgICAg
ICAgICAgIGN3ZD1zZWxmLndlYmtpdF9iYXNlKCksIHN0ZG91dD1maWxlKG9zLmRldm51bGwpLCBz
dGRlcnI9ZmlsZShvcy5kZXZudWxsKSkKIAotICAgICMgRklYTUU6IFRoZSBuZXh0IHR3byByb3V0
aW5lcyB0dXJuIG9mZiB0aGUgaHR0cCBsb2NraW5nIGluIG9yZGVyCi0gICAgIyB0byB3b3JrIGFy
b3VuZCBmYWlsdXJlcyBvbiB0aGUgYm90cyBjYXVzZWQgd2hlbiB0aGUgc2xhdmUgcmVzdGFydHMu
Ci0gICAgIyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0ODg2
IGZvciBtb3JlIGluZm8uCi0gICAgIyBUaGUgcHJvcGVyIGZpeCBpcyB0byBtYWtlIHN1cmUgdGhl
IHNsYXZlIGlzIGFjdHVhbGx5IHN0b3BwaW5nIE5SV1QKLSAgICAjIHByb3Blcmx5IG9uIHJlc3Rh
cnQuIE5vdGUgdGhhdCBieSByZW1vdmluZyB0aGUgbG9jayBmaWxlIGFuZCBub3Qgd2FpdGluZywK
LSAgICAjIHRoZSByZXN1bHQgc2hvdWxkIGJlIHRoYXQgaWYgdGhlcmUgaXMgYSB3ZWIgc2VydmVy
IGFscmVhZHkgcnVubmluZywKLSAgICAjIGl0J2xsIGJlIGtpbGxlZCBhbmQgdGhpcyBvbmUgd2ls
bCBiZSBzdGFydGVkIGluIGl0cyBwbGFjZTsgdGhpcwotICAgICMgbWF5IGxlYWQgdG8gd2VpcmQg
dGhpbmdzIGhhcHBlbmluZyBpbiB0aGUgb3RoZXIgcnVuLiBIb3dldmVyLCBJIGRvbid0Ci0gICAg
IyB0aGluayB3ZSdyZSAoaW50ZW50aW9uYWxseSkgYWN0dWFsbHkgcnVubmluZyBtdWx0aXBsZSBy
dW5zIGNvbmN1cnJlbnRseQotICAgICMgb24gYW55IE1hYyBib3RzLgotCi0gICAgZGVmIGFjcXVp
cmVfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmVsZWFzZV9odHRw
X2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBzYW1wbGVfZmlsZV9wYXRoKHNl
bGYsIG5hbWUsIHBpZCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2Vs
Zi5yZXN1bHRzX2RpcmVjdG9yeSgpLCAiezB9LXsxfS1zYW1wbGUudHh0Ii5mb3JtYXQobmFtZSwg
cGlkKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0LnB5CmluZGV4IGE5MDQw
MjUwZTBhOTk4YTA3MjgyMTY1NWU3NGYwNmNkNGVkYmIwNTQuLjJmMzE0Y2QzN2FmNmNiNTcwODU3
NDQxMmM1MDAzZGNlZmZiODYxZjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9tb2NrX2RydC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19k
cnQucHkKQEAgLTEwOSw5ICsxMDksNiBAQCBjbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgogICAg
IGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAKLSAgICBk
ZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBzdG9w
X2hlbHBlcihzZWxmKToKICAgICAgICAgcGFzcwogCkBAIC0xMjEsOSArMTE4LDYgQEAgY2xhc3Mg
TW9ja0RSVFBvcnQob2JqZWN0KToKICAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYp
OgogICAgICAgICBwYXNzCiAKLSAgICBkZWYgcmVsZWFzZV9odHRwX2xvY2soc2VsZik6Ci0gICAg
ICAgIHBhc3MKLQogICAgIGRlZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNf
ZmlsZW5hbWUpOgogICAgICAgICBwYXNzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9tb2NrX2RydF91bml0dGVzdC5weQppbmRleCBjZDVjNDc0NDczZjA3Y2QyZDk0MDJjN2Qx
N2Y1ZWYwNTgwZWM3M2U4Li5hYWI5YmQzY2JmN2E3ZWM1ZDdlMjJmYzQyNTM2YjM2ZTQwNTA3OWY1
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnRfdW5pdHRl
c3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0
LnB5CkBAIC02NSw5ICs2NSw2IEBAIGNsYXNzIE1vY2tEUlRQb3J0VGVzdChwb3J0X3Rlc3RjYXNl
LlBvcnRUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfdXNlc19hcGFjaGUoc2VsZik6CiAgICAgICAg
IHBhc3MKIAotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfbG9jayhzZWxmKToKLSAgICAg
ICAgcGFzcwotCiAgICAgZGVmIGludGVncmF0aW9uX3Rlc3Rfc3RhcnRfaGVscGVyKHNlbGYpOgog
ICAgICAgICBwYXNzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9w
b3J0X3Rlc3RjYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNh
c2UucHkKaW5kZXggYjIzNTExNDQyNjI5NjcwMGE4YjVmMTllOTkwMDNjMTg0YThlMTA0Ni4uODQ4
NmU4YWExNGQxY2RiYTYzYTVkZmRjYzY5N2U1Mjc3Mjk2NmJiMCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3BvcnRfdGVzdGNhc2UucHkKQEAgLTEyOSwxMiArMTI5LDYgQEAgY2xh
c3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIGZpbmFsbHk6
CiAgICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQogCi0gICAgZGVmIGludGVncmF0
aW9uX3Rlc3RfaHR0cF9sb2NrKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQotICAgICAgICAjIE9ubHkgY2hlY2tpbmcgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgot
ICAgICAgICBwb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLSAgICAgICAgcG9ydC5yZWxlYXNlX2h0
dHBfbG9jaygpCi0KICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9jaGVja19zeXNfZGVwcyhzZWxm
KToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKICAgICAgICAgIyBPbmx5IGNoZWNr
aW5nIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Rl
c3QucHkKaW5kZXggMTA1ZmQ2ZmFkNzEwMGZlNTYxMGIzZmY3M2Q4YzQxZmE0Y2I2Njc0Yi4uMjZm
MzljM2ZkZjg1YzA2ZDczM2Y4ZGNkNTRjOTVmMmE5ZDA5YTUxZiAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3Rlc3QucHkKQEAgLTQ2OSwxOCArNDY5LDEyIEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQp
OgogICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAK
LSAgICBkZWYgYWNxdWlyZV9odHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRl
ZiBzdG9wX2h0dHBfc2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAKICAgICBkZWYgc3RvcF93
ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgogICAgICAgICBwYXNzCiAKLSAgICBkZWYgcmVsZWFzZV9o
dHRwX2xvY2soc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBfcGF0aF90b19saWdodHRw
ZChzZWxmKToKICAgICAgICAgcmV0dXJuICIvdXNyL3NiaW4vbGlnaHR0cGQiCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>