<?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>34826</bug_id>
          
          <creation_ts>2010-02-10 18:13:26 -0800</creation_ts>
          <short_desc>new-run-webkit-tests --platform=mac-leopard does bogus image diffing</short_desc>
          <delta_ts>2010-04-19 13:59:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>34984</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>189558</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-10 18:13:26 -0800</bug_when>
    <thetext>run-chromium-webkit-tests --platform=mac-leopard does bogus image diffing

    def _path_to_image_diff(self):
        return self._build_path(&apos;image_diff&apos;) # FIXME: This is wrong and should be &quot;ImageDiff&quot;, but having the correct path causes other parts of the script to hang.

turns out that &quot;image_diff&quot; expects command line arguments and is not long-running.

ImageDiff is long running.

We&apos;ll have to teach RCWT how to deal with a long-running ImageDiff (similar to how we deal with a long-running DumpRenderTree) via the &quot;Driver&quot; class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194413</commentid>
    <comment_count>1</comment_count>
      <attachid>49671</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-02-26 19:36:14 -0800</bug_when>
    <thetext>Created attachment 49671
first draft of patch - still buggy

This isn&apos;t ready to land yet, but it&apos;s close. The test script is hanging occasionally, and I think it&apos;s due to a bug in the diff_image() implementation but I haven&apos;t tracked it down yet. I&apos;m posting the patch so others know it&apos;s in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203742</commentid>
    <comment_count>2</comment_count>
      <attachid>51582</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-24 19:44:20 -0700</bug_when>
    <thetext>Created attachment 51582
updated patch - this should work correctly and safely</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204215</commentid>
    <comment_count>3</comment_count>
      <attachid>51675</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-25 14:13:19 -0700</bug_when>
    <thetext>Created attachment 51675
split server_process.read() into two calls for clearer usage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204219</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-25 14:21:36 -0700</bug_when>
    <thetext>Drive-by nit: ChangeLog looks not quite right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204226</commentid>
    <comment_count>5</comment_count>
      <attachid>51676</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-25 14:36:07 -0700</bug_when>
    <thetext>Created attachment 51676
fix ChangeLog comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204352</commentid>
    <comment_count>6</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-03-25 17:56:51 -0700</bug_when>
    <thetext>Can you split the style changes off into a separate page? That would make reviewing the code changes considerably easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204363</commentid>
    <comment_count>7</comment_count>
      <attachid>51706</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-25 18:15:35 -0700</bug_when>
    <thetext>Created attachment 51706
back out PEP-8 reformatting to minimize confusion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204364</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-25 18:15:47 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Can you split the style changes off into a separate page? That would make
&gt; reviewing the code changes considerably easier.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204781</commentid>
    <comment_count>9</comment_count>
      <attachid>51706</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-03-26 14:25:18 -0700</bug_when>
    <thetext>Comment on attachment 51706
back out PEP-8 reformatting to minimize confusion

&gt; +    def diff_image(self, expected_filename, actual_filename,
&gt; +                   diff_filename=None):
&gt; +        &quot;&quot;&quot;Compare two image files and produce a delta image file.
&gt; +
&gt; +        Return 1 if the two files are different, 0 if they are the same.

Why not return a boolean?

&gt; +        actual_file = open(actual_filename).read()
&gt; +        input = &apos;Content-Length: %d\n&apos; % actual_length
&gt; +        input += actual_file
&gt; +        input += &apos;Content-Length: %d\n&apos; % expected_length
&gt; +        input += expected_file

How about using a single format string here?

&gt; +        cmd = [self._path_to_image_diff(), &apos;--tolerance&apos;, &apos;0.1&apos;]

Doesn&apos;t this need to be controlled via the commandline? Also, I&apos;m pretty sure tiger, leopard and snow-leopard have different default tolerances.

&gt;              cmd += self._options.wrapper.split()
&gt; -        # FIXME: Using arch here masks any possible file-not-found errors from a non-existant driver executable.
&gt; -        cmd += [&apos;arch&apos;, &apos;-i386&apos;, port._path_to_driver(), &apos;-&apos;]

Is this FIXME no longer true?

&gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/server_process.py
&gt; +class ServerProcess:

I like the concept of this class, but not so much the name. There&apos;s not really a server involved. ReaderProcess? ReadLineProcess? ReadWriteProcess?

&gt; +    &quot;&quot;&quot;This class provides a wrapper around a subprocess that
&gt; +    implements a simple read/write usage model. The primary benefit
&gt; +    is that reading responses takes a timeout, so that we don&apos;t ever block
&gt; +    indefinitely. The class also handles transparently restarting processes
&gt; +    as necessary to keep issuing commands.&quot;&quot;&quot;


&gt; +    def read_line(self, deadline):
&gt; +        &quot;&quot;&quot;Read a single line from the subprocess, waiting until the deadline.
&gt; +        If the deadline passes, the call times out. Note that even if the
&gt; +        subprocess has crashed or the deadline has passed, if there is output
&gt; +        pending, it will be returned.
&gt; +
&gt; +        Args:
&gt; +            deadline: timestamp that the read must complete before

Passing in a timestamp is weird. Can you have it be a timeout and then have this code deal with calculating what the deadline should be?

&gt; +        Returns:
&gt; +            output: data returned, if any. If no data is available and the
&gt; +                call times out or crashes, an empty string is returned. Note
&gt; +                that the returned string includes the newline (&apos;\n&apos;).&quot;&quot;&quot;
&gt; +        return self._read(deadline, 0)
&gt; +
&gt; +    def read(self, deadline, size):
&gt; +        &quot;&quot;&quot;Attempts to read size characters from the subprocess, waiting until
&gt; +        the deadline passes. If the deadline passes, any available data will be
&gt; +        returned. Note that even if the deadline has passed or if the
&gt; +        subprocess has crashed, any available data will still be returned.
&gt; +
&gt; +        Args:
&gt; +            deadline: timestamp that the read must complete before
&gt; +            size: amount of data to read.
&gt; +        Returns:
&gt; +            output: data returned, if any. If no data is available, an empty
&gt; +                string is returned.
&gt; +        &quot;&quot;&quot;
&gt; +        return self._read(deadline, size)

Why does this function exist? Why not just make _read public?

&gt; +    def _read(self, deadline, size):
&gt; +        &quot;&quot;&quot;Internal routine that actually does the read.&quot;&quot;&quot;
&gt; +        idx = -1

Can you give this a more descriptive name?

&gt; diff --git a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
&gt; index 42928ba..3a3d8a6 100644
&gt; --- a/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
&gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/test_types/image_diff.py
&gt; @@ -90,6 +90,7 @@ class ImageDiff(test_type_base.TestTypeBase):
&gt;          Args:
&gt;            filename: the name of the test
&gt;            target: Debug or Release
&gt; +        Returns 1 if the files are different, 0 if they match
&gt;          &quot;&quot;&quot;

I know you didn&apos;t make it this way, but can we make this return a boolean? Then we can make the above code do the same?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204785</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 14:38:31 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 51706 [details])
&gt; &gt; +    def diff_image(self, expected_filename, actual_filename,
&gt; &gt; +                   diff_filename=None):
&gt; &gt; +        &quot;&quot;&quot;Compare two image files and produce a delta image file.
&gt; &gt; +
&gt; &gt; +        Return 1 if the two files are different, 0 if they are the same.
&gt; 
&gt; Why not return a boolean?

You saw below why not; I&apos;ll change the two files to return booleans instead.

&gt; 
&gt; &gt; +        actual_file = open(actual_filename).read()
&gt; &gt; +        input = &apos;Content-Length: %d\n&apos; % actual_length
&gt; &gt; +        input += actual_file
&gt; &gt; +        input += &apos;Content-Length: %d\n&apos; % expected_length
&gt; &gt; +        input += expected_file
&gt; 
&gt; How about using a single format string here?
&gt;

Will do.
 
&gt; &gt; +        cmd = [self._path_to_image_diff(), &apos;--tolerance&apos;, &apos;0.1&apos;]
&gt; 
&gt; Doesn&apos;t this need to be controlled via the commandline? Also, I&apos;m pretty sure
&gt; tiger, leopard and snow-leopard have different default tolerances.

Theoretically. I think the whole &quot;tolerance&quot; concept needs to go away, and we should only allow exact pixel matches.
 
&gt; &gt;              cmd += self._options.wrapper.split()
&gt; &gt; -        # FIXME: Using arch here masks any possible file-not-found errors from a non-existant driver executable.
&gt; &gt; -        cmd += [&apos;arch&apos;, &apos;-i386&apos;, port._path_to_driver(), &apos;-&apos;]
&gt; 
&gt; Is this FIXME no longer true?
&gt; 

That is correct; we now detect and report if the driver is missing properly.

&gt; &gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/server_process.py
&gt; &gt; +class ServerProcess:
&gt; 
&gt; I like the concept of this class, but not so much the name. There&apos;s not really
&gt; a server involved. ReaderProcess? ReadLineProcess? ReadWriteProcess?

I agree with you that ServerProcess isn&apos;t great, but I don&apos;t like any of your suggestions any better. RpcProcess?

&gt; Passing in a timestamp is weird. Can you have it be a timeout and then have
&gt; this code deal with calculating what the deadline should be?

I agree that this is a little weird (compared to select, etc), but I think it&apos;s actually easier to get right on the caller side than the normal API design pattern. I can change it if you think following established (IMO, bad) API conventions is better here.

&gt; &gt; +        &quot;&quot;&quot;
&gt; &gt; +        return self._read(deadline, size)
&gt; 
&gt; Why does this function exist? Why not just make _read public?
&gt;

There are two public use cases supported, &lt;read one line of unknown length&gt; and &lt;read an exact number of bytes&gt;). Combining those into a single function means you have to use some sort of a magic value to indicate which you want. I thought having two public functions was better. However, as you saw below, implementing them separately would be silly, so I combined them into a single internal routine.
  
&gt; &gt; +    def _read(self, deadline, size):
&gt; &gt; +        &quot;&quot;&quot;Internal routine that actually does the read.&quot;&quot;&quot;
&gt; &gt; +        idx = -1
&gt; 
&gt; Can you give this a more descriptive name?

Suggestions?

&gt; I know you didn&apos;t make it this way, but can we make this return a boolean? Then
&gt; we can make the above code do the same?

will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204813</commentid>
    <comment_count>11</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-03-26 15:02:13 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; &gt; +        cmd = [self._path_to_image_diff(), &apos;--tolerance&apos;, &apos;0.1&apos;]
&gt; &gt; 
&gt; &gt; Doesn&apos;t this need to be controlled via the commandline? Also, I&apos;m pretty sure
&gt; &gt; tiger, leopard and snow-leopard have different default tolerances.
&gt; 
&gt; Theoretically. I think the whole &quot;tolerance&quot; concept needs to go away, and we
&gt; should only allow exact pixel matches.

I&apos;m inclined to agree, but for now this should at least have a FIXME.

&gt; &gt; &gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/server_process.py
&gt; &gt; &gt; +class ServerProcess:
&gt; &gt; 
&gt; &gt; I like the concept of this class, but not so much the name. There&apos;s not really
&gt; &gt; a server involved. ReaderProcess? ReadLineProcess? ReadWriteProcess?
&gt; 
&gt; I agree with you that ServerProcess isn&apos;t great, but I don&apos;t like any of your
&gt; suggestions any better. RpcProcess?

How about IpcProcess? RPC is about actually executing code on the remote process. This is more about communicating with the remote process.

&gt; &gt; Passing in a timestamp is weird. Can you have it be a timeout and then have
&gt; &gt; this code deal with calculating what the deadline should be?
&gt; 
&gt; I agree that this is a little weird (compared to select, etc), but I think it&apos;s
&gt; actually easier to get right on the caller side than the normal API design
&gt; pattern. I can change it if you think following established (IMO, bad) API
&gt; conventions is better here.

I think the confusion of this violating established API conventions is more likely to cause bugs. I&apos;d rather it just be a timeout.

&gt; &gt; &gt; +        &quot;&quot;&quot;
&gt; &gt; &gt; +        return self._read(deadline, size)
&gt; &gt; 
&gt; &gt; Why does this function exist? Why not just make _read public?
&gt; 
&gt; There are two public use cases supported, &lt;read one line of unknown length&gt; and
&gt; &lt;read an exact number of bytes&gt;). Combining those into a single function means
&gt; you have to use some sort of a magic value to indicate which you want. I
&gt; thought having two public functions was better. However, as you saw below,
&gt; implementing them separately would be silly, so I combined them into a single
&gt; internal routine.

Sorry, I phrased poorly. I&apos;m suggesting read_line just call the public read function. No need for a private one.

&gt; &gt; &gt; +    def _read(self, deadline, size):
&gt; &gt; &gt; +        &quot;&quot;&quot;Internal routine that actually does the read.&quot;&quot;&quot;
&gt; &gt; &gt; +        idx = -1
&gt; &gt; 
&gt; &gt; Can you give this a more descriptive name?
&gt; 
&gt; Suggestions?

Even just &quot;index&quot; would be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204820</commentid>
    <comment_count>12</comment_count>
      <attachid>51785</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 15:10:18 -0700</bug_when>
    <thetext>Created attachment 51785
revise w/ review feedback from eric and ojan</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204843</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 16:05:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; +        cmd = [self._path_to_image_diff(), &apos;--tolerance&apos;, &apos;0.1&apos;]
&gt; &gt; &gt; 
&gt; &gt; &gt; Doesn&apos;t this need to be controlled via the commandline? Also, I&apos;m pretty sure
&gt; &gt; &gt; tiger, leopard and snow-leopard have different default tolerances.
&gt; &gt; 
&gt; &gt; Theoretically. I think the whole &quot;tolerance&quot; concept needs to go away, and we
&gt; &gt; should only allow exact pixel matches.
&gt; 
&gt; I&apos;m inclined to agree, but for now this should at least have a FIXME.
&gt; 

FIXME added.

&gt; &gt; &gt; &gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/server_process.py
&gt; &gt; &gt; &gt; +class ServerProcess:
&gt; &gt; &gt; 
&gt; &gt; &gt; I like the concept of this class, but not so much the name. There&apos;s not really
&gt; &gt; &gt; a server involved. ReaderProcess? ReadLineProcess? ReadWriteProcess?
&gt; &gt; 
&gt; &gt; I agree with you that ServerProcess isn&apos;t great, but I don&apos;t like any of your
&gt; &gt; suggestions any better. RpcProcess?
&gt; 
&gt; How about IpcProcess? RPC is about actually executing code on the remote
&gt; process. This is more about communicating with the remote process.
&gt;

The intent of the api is that there is a request followed by a reply. Unfortunately due to the way ImageDiff and DRT produce output, you can&apos;t easily encapsulate this into a single reply() method, and so I was left with the more generic read() and write() routines. However, IPC is too vague to capture the intent. Per face-to-face discussion w/ Ojan, we agreed to leave it as ServerProcess until we could think of something better.
 
&gt; &gt; &gt; Passing in a timestamp is weird. Can you have it be a timeout and then have
&gt; &gt; &gt; this code deal with calculating what the deadline should be?
&gt; &gt; 
&gt; &gt; I agree that this is a little weird (compared to select, etc), but I think it&apos;s
&gt; &gt; actually easier to get right on the caller side than the normal API design
&gt; &gt; pattern. I can change it if you think following established (IMO, bad) API
&gt; &gt; conventions is better here.
&gt; 
&gt; I think the confusion of this violating established API conventions is more
&gt; likely to cause bugs. I&apos;d rather it just be a timeout.

Okay, I&apos;ve changed it to be a timeout. Judging by the fact that I introduced half a dozen bugs while change this, and by the fact that the code got longer on both sides, I think I was right. 

For a relevant discussion of the merits of API design in select() and read APIs, see http://cacm.acm.org/magazines/2009/5/24646-api-design-matters/fulltext , although he repeats the error of not being able to distinguish between &quot;don&apos;t wait&quot;, &quot;wait for X&quot;, and &quot;wait forever&quot; in a delta timestamp. Using a deadline is clearer still.

&gt; 
&gt; &gt; &gt; &gt; +        &quot;&quot;&quot;
&gt; &gt; &gt; &gt; +        return self._read(deadline, size)
&gt; &gt; &gt; 
&gt; &gt; &gt; Why does this function exist? Why not just make _read public?
&gt; &gt; 
&gt; &gt; There are two public use cases supported, &lt;read one line of unknown length&gt; and
&gt; &gt; &lt;read an exact number of bytes&gt;). Combining those into a single function means
&gt; &gt; you have to use some sort of a magic value to indicate which you want. I
&gt; &gt; thought having two public functions was better. However, as you saw below,
&gt; &gt; implementing them separately would be silly, so I combined them into a single
&gt; &gt; internal routine.
&gt; 
&gt; Sorry, I phrased poorly. I&apos;m suggesting read_line just call the public read
&gt; function. No need for a private one.

As we discussed face-to-face, read() probably should&apos;ve raised an exception if called with a non-positive number for size. I have added that, and you were okay with the change.

&gt; 
&gt; &gt; &gt; &gt; +    def _read(self, deadline, size):
&gt; &gt; &gt; &gt; +        &quot;&quot;&quot;Internal routine that actually does the read.&quot;&quot;&quot;
&gt; &gt; &gt; &gt; +        idx = -1
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you give this a more descriptive name?
&gt; &gt; 
&gt; &gt; Suggestions?
&gt; 
&gt; Even just &quot;index&quot; would be fine.

Ah, sorry, I thought you were complaining about &quot;_read&quot;. I think &quot;idx&quot; is pretty obvious and shorter, but I&apos;ve changed it to &quot;index&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204844</commentid>
    <comment_count>14</comment_count>
      <attachid>51791</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 16:05:34 -0700</bug_when>
    <thetext>Created attachment 51791
revise w/ more feedback from ojan</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204847</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 16:07:52 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; &gt; &gt; &gt; +++ b/WebKitTools/Scripts/webkitpy/layout_tests/port/server_process.py
&gt; &gt; &gt; &gt; &gt; +class ServerProcess:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I like the concept of this class, but not so much the name. There&apos;s not really
&gt; &gt; &gt; &gt; a server involved. ReaderProcess? ReadLineProcess? ReadWriteProcess?
&gt; &gt; &gt; 
&gt; &gt; &gt; I agree with you that ServerProcess isn&apos;t great, but I don&apos;t like any of your
&gt; &gt; &gt; suggestions any better. RpcProcess?
&gt; &gt; 
&gt; &gt; How about IpcProcess? RPC is about actually executing code on the remote
&gt; &gt; process. This is more about communicating with the remote process.
&gt; &gt;
&gt; 
&gt; The intent of the api is that there is a request followed by a reply.
&gt; Unfortunately due to the way ImageDiff and DRT produce output, you can&apos;t easily
&gt; encapsulate this into a single reply() method, and so I was left with the more
&gt; generic read() and write() routines. However, IPC is too vague to capture the
&gt; intent. Per face-to-face discussion w/ Ojan, we agreed to leave it as
&gt; ServerProcess until we could think of something better.
&gt;

Originally when I wrote this my idea was to have ImageDiff and DumpRenderTree derive from ServerProcess, and then the complexity in parsing the responses would be hidden. Unfortunately, since they return such weird sets of arguments, even trying to fit them both into a single reply() method was awkward, and so I abandoned that idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204851</commentid>
    <comment_count>16</comment_count>
      <attachid>51791</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-26 16:15:51 -0700</bug_when>
    <thetext>Comment on attachment 51791
revise w/ more feedback from ojan

I&apos;m told that you and Ojan reached a happy place.  This looks OK to me.  I think this new architecture is much cleaner.

Two letter variable names make my brain kink.  But I don&apos;t think it&apos;s worth another round of changes to fix them.  In general I&apos;d rather write out full english names and phrases to describe variables.  Then again, I come from a non-80 column limited world. :)

Thanks for all your hard work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204858</commentid>
    <comment_count>17</comment_count>
      <attachid>51791</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 16:38:45 -0700</bug_when>
    <thetext>Comment on attachment 51791
revise w/ more feedback from ojan

Clearing flags on attachment: 51791

Committed r56647: &lt;http://trac.webkit.org/changeset/56647&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204859</commentid>
    <comment_count>18</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-03-26 16:38:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214163</commentid>
    <comment_count>19</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-04-19 12:21:35 -0700</bug_when>
    <thetext>This killed the chromium windows canary:
http://build.chromium.org/buildbot/waterfall.fyi/builders/Webkit%20(webkit.org)/builds/25766/steps/webkit_tests/logs/stdio

The failure is:
Traceback (most recent call last):
  File &quot;C:\b\slave\webkit-rel-webkit-org\build\src\third_party\WebKit\WebKitTools\Scripts\new-run-webkit-tests&quot;, line 37, in &lt;module&gt;
    sys.exit(run_webkit_tests.main(options, args))
  File &quot;C:\b\slave\webkit-rel-webkit-org\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\run_webkit_tests.py&quot;, line 1401, in main
    port_obj = port.get(options.platform, options)
  File &quot;C:\b\slave\webkit-rel-webkit-org\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\port\factory.py&quot;, line 84, in get
    import chromium_win
  File &quot;C:\b\slave\webkit-rel-webkit-org\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\port\chromium_win.py&quot;, line 39, in &lt;module&gt;
    import chromium
  File &quot;C:\b\slave\webkit-rel-webkit-org\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\port\chromium.py&quot;, line 43, in &lt;module&gt;
    import webkit
  File &quot;C:\b\slave\webkit-rel-webkit-org\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\port\webkit.py&quot;, line 46, in &lt;module&gt;
    import webkitpy.layout_tests.port.server_process as server_process
  File &quot;C:\b\slave\webkit-rel-webkit-org\build\src\third_party\WebKit\WebKitTools\Scripts\webkitpy\layout_tests\port\server_process.py&quot;, line 32, in &lt;module&gt;
    import fcntl
ImportError: No module named fcntl
program finished with exit code 1

I think the &apos;import fcntl&apos; line needs to be guarded.  Can you take a look at this Dirk?  If you don&apos;t have time I can try to fix it later today.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214231</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-04-19 13:59:45 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; This killed the chromium windows canary:
&gt; http://build.chromium.org/buildbot/waterfall.fyi/builders/Webkit%20(webkit.org)/builds/25766/steps/webkit_tests/logs/stdio
&gt; 

This whole module won&apos;t work on Windows, because the non-blocking I/O model is totally different. We need to do much more invasive surgery than that. I&apos;ve checked in a fix to webkit.py to not pull the file in if we&apos;re on windows, which fixes this for now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49671</attachid>
            <date>2010-02-26 19:36:14 -0800</date>
            <delta_ts>2010-03-24 19:44:20 -0700</delta_ts>
            <desc>first draft of patch - still buggy</desc>
            <filename>wk34826_image_diff.diff</filename>
            <type>text/plain</type>
            <size>11033</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA5YzM2MmEzLi43NDk2ZWM0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDIt
MjYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHBpeGVsIHRlc3RzIChp
bWFnZSBkaWZmKSBwcm9wZXJseSBvbiB0aGUgTWFjIHBvcnQuIEFsc28KKyAgICAgICAgcmVmb3Jt
YXQgdG8gUEVQIDggc3R5bGUgZ3VpZGVsaW5lcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5OgorCiAyMDEwLTAyLTI2ICBBbnRvbmlvIEdvbWVz
ICA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBO
b3JvbmhhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L21hYy5weQppbmRleCA5YjcwY2I3Li5iZDliOGJkIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQpAQCAt
MzQsNiArMzQsNyBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGRiCiBpbXBv
cnQgcGxhdGZvcm0KK2ltcG9ydCByZQogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNpZ25hbAogaW1w
b3J0IHN1YnByb2Nlc3MKQEAgLTQ2LDYgKzQ3LDcgQEAgaW1wb3J0IGJhc2UKIGltcG9ydCB3ZWJr
aXRweQogZnJvbSB3ZWJraXRweSBpbXBvcnQgZXhlY3V0aXZlCiAKKwogY2xhc3MgTWFjUG9ydChi
YXNlLlBvcnQpOgogICAgICIiIldlYktpdCBNYWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQg
Y2xhc3MuIiIiCiAKQEAgLTY3LDcgKzY5LDggQEAgY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgog
ICAgICAgICByZXR1cm4gZGlycwogCiAgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRz
X2h0dHApOgotICAgICAgICBpZiBleGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYuc2NyaXB0X3Bh
dGgoImJ1aWxkLWR1bXByZW5kZXJ0cmVlIildLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpICE9IDA6
CisgICAgICAgIGlmIGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2VsZi5zY3JpcHRfcGF0aCgiYnVp
bGQtZHVtcHJlbmRlcnRyZWUiKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuX2V4aXRfY29kZT1UcnVlKSAhPSAwOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAK
ICAgICAgICAgZHJpdmVyX3BhdGggPSBzZWxmLl9wYXRoX3RvX2RyaXZlcigpCkBAIC03NSwxMCAr
NzgsNTEgQEAgY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgbG9nZ2luZy5l
cnJvcigiRHVtcFJlbmRlclRyZWUgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSBkcml2ZXJfcGF0aCkK
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgICMgVGhpcyBzaG91bGQgYWxzbyB2
YWxpZGF0ZSB0aGF0IHRoZSBJbWFnZURpZmYgcGF0aCBpcyB2YWxpZCAob25jZSB0aGlzIHNjcmlw
dCBrbm93cyBob3cgdG8gdXNlIEltYWdlRGlmZikuCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0ODI2CisgICAgICAgICMgRklYTUU6IFRoaXMgc2hv
dWxkIGFsc28gdmFsaWRhdGUgdGhhdCB0aGUgSW1hZ2VEaWZmIHBhdGggaXMgdmFsaWQKICAgICAg
ICAgcmV0dXJuIFRydWUKIAorICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2ZpbGVu
YW1lLCBhY3R1YWxfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZT1O
b25lKToKKyAgICAgICAgIiIiQ29tcGFyZSB0d28gaW1hZ2UgZmlsZXMgYW5kIHByb2R1Y2UgYSBk
ZWx0YSBpbWFnZSBmaWxlLgorCisgICAgICAgIFJldHVybiAxIGlmIHRoZSB0d28gZmlsZXMgYXJl
IGRpZmZlcmVudCwgMCBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgQWxzbyBwcm9kdWNl
IGEgZGVsdGEgaW1hZ2Ugb2YgdGhlIHR3byBpbWFnZXMgYW5kIHdyaXRlIHRoYXQgaW50bworICAg
ICAgICB8ZGlmZl9maWxlbmFtZXwgaWYgaXQgaXMgbm90IE5vbmUuIiIiCisgICAgICAgIGV4ZWN1
dGFibGUgPSBzZWxmLl9wYXRoX3RvX2ltYWdlX2RpZmYoKQorICAgICAgICBjbWQgPSBbZXhlY3V0
YWJsZSwgJy0tdG9sZXJhbmNlJywgJzAuMSddCisgICAgICAgIHJlc3VsdCA9IDEKKyAgICAgICAg
cHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAg
ICAgICAgYWN0dWFsX2xlbmd0aCA9IG9zLnN0YXQoYWN0dWFsX2ZpbGVuYW1lKS5zdF9zaXplCisg
ICAgICAgIGFjdHVhbF9maWxlID0gb3BlbihhY3R1YWxfZmlsZW5hbWUpLnJlYWQoKQorICAgICAg
ICBwcm9jLnN0ZGluLndyaXRlKCdDb250ZW50LUxlbmd0aDogJWRcbicgJSBhY3R1YWxfbGVuZ3Ro
KQorICAgICAgICBwcm9jLnN0ZGluLndyaXRlKGFjdHVhbF9maWxlKQorCisgICAgICAgIGV4cGVj
dGVkX2xlbmd0aCA9IG9zLnN0YXQoZXhwZWN0ZWRfZmlsZW5hbWUpLnN0X3NpemUKKyAgICAgICAg
ZXhwZWN0ZWRfZmlsZSA9IG9wZW4oZXhwZWN0ZWRfZmlsZW5hbWUpLnJlYWQoKQorICAgICAgICBw
cm9jLnN0ZGluLndyaXRlKCdDb250ZW50LUxlbmd0aDogJWRcbicgJSBleHBlY3RlZF9sZW5ndGgp
CisgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoZXhwZWN0ZWRfZmlsZSkKKworICAgICAgICBsaW5l
ID0gcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAg
ICAgaWYgbGluZS5zdGFydHN3aXRoKCdDb250ZW50LUxlbmd0aCcpOgorICAgICAgICAgICAgICAg
IG0gPSByZS5tYXRjaCgnQ29udGVudC1MZW5ndGg6IChcZCspJywgbGluZSkKKyAgICAgICAgICAg
ICAgICBkaWZmX2ZpbGUgPSBwcm9jLnN0ZG91dC5yZWFkKGludChtLmdyb3VwKDEpKSkKKyAgICAg
ICAgICAgICAgICBpZiBkaWZmX2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgICAgICBvcGVuKGRp
ZmZfZmlsZW5hbWUsICd3Jykud3JpdGUoZGlmZl9maWxlKQorICAgICAgICAgICAgZWxpZiBsaW5l
LnN0YXJ0c3dpdGgoJ2RpZmYnKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goJ2RpZmY6
ICguKyklIChwYXNzZWR8ZmFpbGVkKScsIGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbS5ncm91
cCgyKSA9PSAncGFzc2VkJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMAorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBsaW5lID0gcHJvYy5zdGRvdXQucmVhZGxpbmUo
KQorCisgICAgICAgIHByb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICBwcm9jLndhaXQoKQorICAg
ICAgICByZXR1cm4gcmVzdWx0CisKICAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gaW50KG9zLnBvcGVuMigic3lzY3RsIC1uIGh3Lm5jcHUiKVsxXS5yZWFkKCkpCiAKQEAg
LTExMiw3ICsxNTYsOCBAQCBjbGFzcyBNYWNQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIHJldHVy
biAoJ21hYycsKQogCiAgICAgZGVmIF9za2lwcGVkX2ZpbGVfcGF0aHMoc2VsZik6Ci0gICAgICAg
ICMgRklYTUU6IFRoaXMgbWV0aG9kIHdpbGwgbmVlZCB0byBiZSBtYWRlIHdvcmsgZm9yIG5vbi1t
YWMgcGxhdGZvcm1zIGFuZCBtb3ZlZCBpbnRvIGJhc2UuUG9ydC4KKyAgICAgICAgIyBGSVhNRTog
VGhpcyBtZXRob2Qgd2lsbCBuZWVkIHRvIGJlIG1hZGUgd29yayBmb3Igbm9uLW1hYyBwbGF0Zm9y
bXMKKyAgICAgICAgIyBhbmQgbW92ZWQgaW50byBiYXNlLlBvcnQuCiAgICAgICAgIHNraXBwZWRf
ZmlsZXMgPSBbXQogICAgICAgICBpZiBzZWxmLl9uYW1lIGluICgnbWFjLXRpZ2VyJywgJ21hYy1s
ZW9wYXJkJywgJ21hYy1zbm93bGVvcGFyZCcpOgogICAgICAgICAgICAgc2tpcHBlZF9maWxlcy5h
cHBlbmQob3MucGF0aC5qb2luKApAQCAtMTIyLDkgKzE2NywxMyBAQCBjbGFzcyBNYWNQb3J0KGJh
c2UuUG9ydCk6CiAgICAgICAgIHJldHVybiBza2lwcGVkX2ZpbGVzCiAKICAgICBkZWYgX3Rlc3Rz
X2Zvcl9vdGhlcl9wbGF0Zm9ybXMoc2VsZik6Ci0gICAgICAgICMgVGhlIG9yaWdpbmFsIHJ1bi13
ZWJraXQtdGVzdHMgYnVpbGRzIHVwIGEgIndoaXRlbGlzdCIgb2YgdGVzdHMgdG8gcnVuLCBhbmQg
cGFzc2VzIHRoYXQgdG8gRHVtcFJlbmRlclRyZWUuCi0gICAgICAgICMgcnVuLWNocm9taXVtLXdl
YmtpdC10ZXN0cyBhc3N1bWVzIHdlIHJ1biAqYWxsKiB0ZXN0cyBhbmQgdGVzdF9leHBlY3RhdGlv
bnMudHh0IGZ1bmN0aW9ucyBhcyBhIGJsYWNrbGlzdC4KLSAgICAgICAgIyBGSVhNRTogVGhpcyBs
aXN0IGNvdWxkIGJlIGR5bmFtaWMgYmFzZWQgb24gcGxhdGZvcm0gbmFtZSBhbmQgcHVzaGVkIGlu
dG8gYmFzZS5Qb3J0LgorICAgICAgICAjIFRoZSBvcmlnaW5hbCBydW4td2Via2l0LXRlc3RzIGJ1
aWxkcyB1cCBhICJ3aGl0ZWxpc3QiIG9mIHRlc3RzCisgICAgICAgICMgdG8gcnVuLCBhbmQgcGFz
c2VzIHRoYXQgdG8gRHVtcFJlbmRlclRyZWUuIG5ldy1ydW4td2Via2l0LXRlc3RzCisgICAgICAg
ICMgYXNzdW1lcyB3ZSBydW4gKmFsbCogdGVzdHMgYW5kIHRlc3RfZXhwZWN0YXRpb25zLnR4dCBm
dW5jdGlvbnMKKyAgICAgICAgIyBhcyBhIGJsYWNrbGlzdC4KKworICAgICAgICAjIEZJWE1FOiBU
aGlzIGxpc3QgY291bGQgYmUgZHluYW1pYyBiYXNlZCBvbiBwbGF0Zm9ybSBuYW1lCisgICAgICAg
ICMgYW5kIHB1c2hlZCBpbnRvIGJhc2UuUG9ydC4KICAgICAgICAgcmV0dXJuIFsKICAgICAgICAg
ICAgICJwbGF0Zm9ybS9jaHJvbWl1bSIsCiAgICAgICAgICAgICAicGxhdGZvcm0vZ3RrIiwKQEAg
LTEzMywxNiArMTgyLDE5IEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgXQog
CiAgICAgZGVmIF90ZXN0c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMoc2VsZik6Ci0gICAgICAgICMg
RklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgZmVhdHVyZSBkZXRlY3Rpb24gZnJvbSB3ZWJraXRw
ZXJsL2ZlYXR1cmVzLnBtIHRvIG1hdGNoIHJ1bi13ZWJraXQtdGVzdHMuCi0gICAgICAgICMgRm9y
IG5vdyB3ZSBoYXJkLWNvZGUgYSBsaXN0IG9mIGZlYXR1cmVzIGtub3duIHRvIGJlIGRpc2FibGVk
IG9uIHRoZSBNYWMgcGxhdGZvcm0uCisgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0
aGUgZmVhdHVyZSBkZXRlY3Rpb24KKyAgICAgICAgIyBmcm9tIHdlYmtpdHBlcmwvZmVhdHVyZXMu
cG0gdG8gbWF0Y2ggcnVuLXdlYmtpdC10ZXN0cy4KKyAgICAgICAgIyBGb3Igbm93IHdlIGhhcmQt
Y29kZSBhIGxpc3Qgb2YgZmVhdHVyZXMga25vd24gdG8gYmUgZGlzYWJsZWQgb24KKyAgICAgICAg
IyB0aGUgTWFjIHBsYXRmb3JtLgogICAgICAgICBkaXNhYmxlZF9mZWF0dXJlX3Rlc3RzID0gWwog
ICAgICAgICAgICAgImZhc3QveGh0bWxtcCIsCiAgICAgICAgICAgICAiaHR0cC90ZXN0cy93bWwi
LAogICAgICAgICAgICAgIm1hdGhtbCIsCiAgICAgICAgICAgICAid21sIiwKICAgICAgICAgXQot
ICAgICAgICAjIEZJWE1FOiB3ZWJhcmNoaXZlIHRlc3RzIGV4cGVjdCB0byByZWFkLXdyaXRlIGZy
b20gLWV4cGVjdGVkLndlYmFyY2hpdmUgZmlsZXMgaW5zdGVhZCBvZiAudHh0IGZpbGVzLgotICAg
ICAgICAjIFRoaXMgc2NyaXB0IGRvZXNuJ3Qga25vdyBob3cgdG8gZG8gdGhhdCB5ZXQsIHNvIHBy
ZXRlbmQgdGhleSdyZSBqdXN0ICJkaXNhYmxlZCIuCisgICAgICAgICMgRklYTUU6IHdlYmFyY2hp
dmUgdGVzdHMgZXhwZWN0IHRvIHJlYWQtd3JpdGUgZnJvbQorICAgICAgICAjIC1leHBlY3RlZC53
ZWJhcmNoaXZlIGZpbGVzIGluc3RlYWQgb2YgLnR4dCBmaWxlcy4gVGhpcyBzY3JpcHQKKyAgICAg
ICAgIyBkb2Vzbid0IGtub3cgaG93IHRvIGRvIHRoYXQgeWV0LCBzbyBwcmV0ZW5kIHRoZXkncmUg
anVzdCAiZGlzYWJsZWQiLgogICAgICAgICB3ZWJhcmNoaXZlX3Rlc3RzID0gWwogICAgICAgICAg
ICAgIndlYmFyY2hpdmUiLAogICAgICAgICAgICAgInN2Zy93ZWJhcmNoaXZlIiwKQEAgLTE3OSwx
MCArMjMxLDEzIEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgIyBhIHZlcnNp
b24tc3BlY2lmaWMgZmlsZSBmb3VuZCBpbiBwbGF0Zm9ybS9YLXZlcnNpb24uIER1cGxpY2F0ZQog
ICAgICAgICAjIGVudHJpZXMgYXJlIGFsbG93ZWQuIFRoaXMgcm91dGluZSByZWFkcyB0aG9zZSBm
aWxlcyBhbmQgdHVybnMKICAgICAgICAgIyBjb250ZW50cyBpbnRvIHRoZSBmb3JtYXQgZXhwZWN0
ZWQgYnkgdGVzdF9leHBlY3RhdGlvbnMuCi0gICAgICAgIHRlc3RzX3RvX3NraXAgPSBzZXQoc2Vs
Zi5fZXhwZWN0YXRpb25zX2Zyb21fc2tpcHBlZF9maWxlcygpKSAjIFVzZSBhIHNldCB0byBhbGxv
dyBkdXBsaWNhdGVzCisKKyAgICAgICAgIyBVc2UgYSBzZXQgdG8gYWxsb3cgZHVwbGljYXRlcwor
ICAgICAgICB0ZXN0c190b19za2lwID0gc2V0KHNlbGYuX2V4cGVjdGF0aW9uc19mcm9tX3NraXBw
ZWRfZmlsZXMoKSkKICAgICAgICAgdGVzdHNfdG9fc2tpcC51cGRhdGUoc2VsZi5fdGVzdHNfZm9y
X290aGVyX3BsYXRmb3JtcygpKQogICAgICAgICB0ZXN0c190b19za2lwLnVwZGF0ZShzZWxmLl90
ZXN0c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMoKSkKLSAgICAgICAgZXhwZWN0YXRpb25zID0gbWFw
KGxhbWJkYSB0ZXN0X3BhdGg6ICJCVUdfU0tJUFBFRCBTS0lQIDogJXMgPSBGQUlMIiAlIHRlc3Rf
cGF0aCwgdGVzdHNfdG9fc2tpcCkKKyAgICAgICAgZXhwZWN0YXRpb25zID0gbWFwKGxhbWJkYSB0
ZXN0X3BhdGg6ICJCVUdfU0tJUFBFRCBTS0lQIDogJXMgPSBGQUlMIiAlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0X3BhdGgsIHRlc3RzX3RvX3NraXApCiAgICAgICAgIHJldHVybiAi
XG4iLmpvaW4oZXhwZWN0YXRpb25zKQogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxm
KToKQEAgLTIxNCw4ICsyNjksMTEgQEAgY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgogCiAgICAg
ZGVmIF9idWlsZF9wYXRoKHNlbGYsICpjb21wcyk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9jYWNo
ZWRfYnVpbGRfcm9vdDoKLSAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9idWlsZF9yb290ID0gZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFtzZWxmLnNjcmlwdF9wYXRoKCJ3ZWJraXQtYnVpbGQtZGlyZWN0
b3J5IiksICItLXRvcC1sZXZlbCJdKS5yc3RyaXAoKQotICAgICAgICByZXR1cm4gb3MucGF0aC5q
b2luKHNlbGYuX2NhY2hlZF9idWlsZF9yb290LCBzZWxmLl9vcHRpb25zLnRhcmdldCwgKmNvbXBz
KQorICAgICAgICAgICAgc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QgPSBleGVjdXRpdmUucnVuX2Nv
bW1hbmQoCisgICAgICAgICAgICAgICAgW3NlbGYuc2NyaXB0X3BhdGgoIndlYmtpdC1idWlsZC1k
aXJlY3RvcnkiKSwKKyAgICAgICAgICAgICAgICAgIi0tdG9wLWxldmVsIl0pLnJzdHJpcCgpCisg
ICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QsIHNlbGYu
X29wdGlvbnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb21wcykKIAog
ICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIHBpZCk6CiAgICAgICAgICIiIkZvcmNlZnVsbHkg
a2lsbCB0aGUgcHJvY2Vzcy4KQEAgLTI1MCwxMCArMzA4LDExIEBAIGNsYXNzIE1hY1BvcnQoYmFz
ZS5Qb3J0KToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfcGF0aF90b19pbWFnZV9k
aWZmKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicp
ICMgRklYTUU6IFRoaXMgaXMgd3JvbmcgYW5kIHNob3VsZCBiZSAiSW1hZ2VEaWZmIiwgYnV0IGhh
dmluZyB0aGUgY29ycmVjdCBwYXRoIGNhdXNlcyBvdGhlciBwYXJ0cyBvZiB0aGUgc2NyaXB0IHRv
IGhhbmcuCisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdJbWFnZURpZmYnKQogCiAg
ICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgotICAgICAgICByZXR1cm4gJ3dkaWZmJyAjIEZJ
WE1FOiBUaGlzIGRvZXMgbm90IGV4aXN0IG9uIGEgZGVmYXVsdCBNYWMgT1MgWCBMZW9wYXJkIGlu
c3RhbGwuCisgICAgICAgICMgRklYTUU6IFRoaXMgZG9lcyBub3QgZXhpc3Qgb24gYSBkZWZhdWx0
IE1hYyBPUyBYIExlb3BhcmQgaW5zdGFsbC4KKyAgICAgICAgcmV0dXJuICd3ZGlmZicKIAogICAg
IGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHNlcnZlcl9waWQpOgogICAgICAgICAi
IiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1
bGx5CkBAIC0zMDUsMTcgKzM2NCwxMiBAQCBjbGFzcyBNYWNEcml2ZXIoYmFzZS5Ecml2ZXIpOgog
ICAgICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0taGVs
cCBvdXRwdXQgd2FybnMKICAgICAgICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgogICAgICAgICAg
ICAgY21kICs9IHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgpCi0gICAgICAgICMgRklYTUU6
IFVzaW5nIGFyY2ggaGVyZSBtYXNrcyBhbnkgcG9zc2libGUgZmlsZS1ub3QtZm91bmQgZXJyb3Jz
IGZyb20gYSBub24tZXhpc3RhbnQgZHJpdmVyIGV4ZWN1dGFibGUuCisgICAgICAgICMgRklYTUU6
IFVzaW5nIGFyY2ggaGVyZSBtYXNrcyBhbnkgcG9zc2libGUgZmlsZS1ub3QtZm91bmQgZXJyb3Jz
CisgICAgICAgICMgZnJvbSBhIG5vbi1leGlzdGFudCBkcml2ZXIgZXhlY3V0YWJsZS4KICAgICAg
ICAgY21kICs9IFsnYXJjaCcsICctaTM4NicsIHBvcnQuX3BhdGhfdG9fZHJpdmVyKCksICctJ10K
IAotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgaGFjayBhcm91bmQgb3VyIGxhY2sgb2YgSW1h
Z2VEaWZmIHN1cHBvcnQgZm9yIG5vdy4KLSAgICAgICAgaWYgbm90IHNlbGYuX3BvcnQuX29wdGlv
bnMubm9fcGl4ZWxfdGVzdHM6Ci0gICAgICAgICAgICBsb2dnaW5nLndhcm4oIlRoaXMgcG9ydCBk
b2VzIG5vdCB5ZXQgc3VwcG9ydCBwaXhlbCB0ZXN0cy4iKQotICAgICAgICAgICAgc2VsZi5fcG9y
dC5fb3B0aW9ucy5ub19waXhlbF90ZXN0cyA9IFRydWUKLSAgICAgICAgICAgICNjbWQuYXBwZW5k
KCctLXBpeGVsLXRlc3RzJykKLQotICAgICAgICAjaWYgZHJpdmVyX29wdGlvbnM6Ci0gICAgICAg
ICMgICAgY21kICs9IGRyaXZlcl9vcHRpb25zCisgICAgICAgIGlmIGltYWdlX3BhdGg6CisgICAg
ICAgICAgICBjbWQuYXBwZW5kKCctLXBpeGVsLXRlc3RzJykKICAgICAgICAgZW52ID0gb3MuZW52
aXJvbgogICAgICAgICBlbnZbJ0RZTERfRlJBTUVXT1JLX1BBVEgnXSA9IHNlbGYuX3BvcnQuX2J1
aWxkX3BhdGgoKQogICAgICAgICBzZWxmLl9jbWQgPSBjbWQKQEAgLTM5MCw3ICs0NDQsNyBAQCBj
bGFzcyBNYWNEcml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAgICAgICAgcmVzcCArPSBsaW5lCiAK
ICAgICAgICAgIyBOb3cgcmVhZCBhIHNlY29uZCBibG9jayBvZiB0ZXh0IGZvciB0aGUgb3B0aW9u
YWwgaW1hZ2UgZGF0YQotICAgICAgICBpbWFnZV9sZW5ndGggPSAwCisgICAgICAgIHJlbWFpbmlu
Z19sZW5ndGggPSAwCiAgICAgICAgICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0
aW1lb3V0LCBzdG9wX3RpbWUpCiAgICAgICAgIHJlc3AgKz0gbGluZQogICAgICAgICBIQVNIX0hF
QURFUiA9ICdBY3R1YWxIYXNoOiAnCkBAIC00MDIsMTYgKzQ1NiwxOSBAQCBjbGFzcyBNYWNEcml2
ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVy
cnVwdAogICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQogICAgICAgICAgICAgICAgIGJyZWFr
Ci0gICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aChIQVNIX0hFQURFUik6CisKKyAgICAg
ICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChIQVNIX0hFQURFUik6CiAgICAgICAgICAgICAgICAg
YWN0dWFsX2ltYWdlX2hhc2ggPSBsaW5lW2xlbihIQVNIX0hFQURFUik6XS5zdHJpcCgpCiAgICAg
ICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnQ29udGVudC1UeXBlOicpOgogICAgICAgICAg
ICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKExFTkdUSF9IRUFE
RVIpOgotICAgICAgICAgICAgICAgIGltYWdlX2xlbmd0aCA9IGludChsaW5lW2xlbihMRU5HVEhf
SEVBREVSKTpdKQotICAgICAgICAgICAgZWxpZiBpbWFnZV9sZW5ndGg6CisgICAgICAgICAgICAg
ICAgcmVtYWluaW5nX2xlbmd0aCA9IGludChsaW5lW2xlbihMRU5HVEhfSEVBREVSKTpdKQorICAg
ICAgICAgICAgZWxpZiByZW1haW5pbmdfbGVuZ3RoOgogICAgICAgICAgICAgICAgIGltYWdlICs9
IGxpbmUKKyAgICAgICAgICAgICAgICByZW1haW5pbmdfbGVuZ3RoIC09IGxlbihsaW5lKQogCi0g
ICAgICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3Rv
cF90aW1lLCBpbWFnZV9sZW5ndGgpCisgICAgICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxm
Ll9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ19sZW5ndGgpCiAgICAgICAgICAgICByZXNw
ICs9IGxpbmUKIAogICAgICAgICBpZiB0aW1lb3V0Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51582</attachid>
            <date>2010-03-24 19:44:20 -0700</date>
            <delta_ts>2010-03-25 14:13:19 -0700</delta_ts>
            <desc>updated patch - this should work correctly and safely</desc>
            <filename>wk34826_image_diff.diff</filename>
            <type>text/plain</type>
            <size>28900</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMDI0ZWRlLi40NWRjNzM5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMDMt
MjQgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9u
IGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvbWFjLnB5OgorCisyMDEwLTAyLTI2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBwaXhlbCB0ZXN0cyAoaW1hZ2UgZGlmZikgcHJvcGVybHkgb24gdGhl
IE1hYyBwb3J0LiBBbHNvCisgICAgICAgIHJlZm9ybWF0IHRvIFBFUCA4IHN0eWxlIGd1aWRlbGlu
ZXMuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyAiU2VydmVyUG9jZXNz
IiBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkCisgICAgICAgIHRvIG1hbmFnZSBwcm9jZXNzZXMgdGhh
dCB0aGUgcnVuLXdlYmtpdC10ZXN0cyBoYXJuZXNzIGZvcmtzIG9mZiBhbmQKKyAgICAgICAgZXhw
ZWN0cyB0byBzdGF5IHVwIGZvciBsb25nZXIgdGhhbiBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNl
IHNlc3Npb24uCisgICAgICAgIEJvdGggRHVtcFJlbmRlclRyZWUgYW5kIEltYWdlRGlmZiB1c2Ug
dGhpcyBzdHlsZSBvZiBjb21tdW5pY2F0aW9uLAorICAgICAgICBhbHRob3VnaCB0aGUgY3VycmVu
dCBjb2RlIGZvcmtzIG9mZiBhIG5ldyBJbWFnZURpZmYgZm9yIGVhY2ggZGlmZgorICAgICAgICAo
V2UgbmVlZCB0byByZXN0cnVjdHVyZSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byBiZSBhYmxl
IHRvIGRvIHRoaXMKKyAgICAgICAgc2FmZWx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1l
bnQpLgorCisgICAgICAgIEFsc28sIG5vdyB0aGF0IHRoZSBTZXJ2ZXJQcm9jZXNzIGFic3RyYWN0
aW9uIGV4aXN0cywgd2UgY2FuIHByb2JhYmx5CisgICAgICAgIGNsZWFuIHVwIGFuZCBzaW1wbGlm
eSBzb21lIG9mIHRoZSB0aHJlYWQgbWFuYWdlbWVudCBsb2dpYyBpbgorICAgICAgICB0ZXN0X3No
ZWxsX3RocmVhZCBhcyB3ZWxsLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDgyNgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHk6CisKIDIwMTAtMDMtMjIgIERpcmsg
UHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlt
aXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21hYy5weQppbmRleCBkMTY1OWNlLi4xNTg2YTU5IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5w
eQpAQCAtMjksMTIgKzI5LDExIEBACiAKICIiIldlYktpdCBNYWMgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIFBvcnQgaW50ZXJmYWNlLiIiIgogCi1pbXBvcnQgZmNudGwKIGltcG9ydCBsb2dnaW5nCiBp
bXBvcnQgb3MKIGltcG9ydCBwZGIKIGltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHNlbGVjdAoraW1w
b3J0IHJlCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwpAQCAt
NDIsNiArNDEsNyBAQCBpbXBvcnQgdGltZQogaW1wb3J0IHdlYmJyb3dzZXIKIAogaW1wb3J0IGJh
c2UKK2ltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogCiBpbXBvcnQgd2Via2l0cHkKIGZyb20gd2Via2l0
cHkgaW1wb3J0IGV4ZWN1dGl2ZQpAQCAtODUsMTEgKzg1LDY4IEBAIGNsYXNzIE1hY1BvcnQoYmFz
ZS5Qb3J0KToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkR1bXBSZW5kZXJUcmVlIHdhcyBub3Qg
Zm91bmQgYXQgJXMiICUgZHJpdmVyX3BhdGgpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAot
ICAgICAgICAjIFRoaXMgc2hvdWxkIGFsc28gdmFsaWRhdGUgdGhhdCB0aGUgSW1hZ2VEaWZmIHBh
dGggaXMgdmFsaWQKLSAgICAgICAgIyAob25jZSB0aGlzIHNjcmlwdCBrbm93cyBob3cgdG8gdXNl
IEltYWdlRGlmZikuCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0ODI2CisgICAgICAgIGltYWdlX2RpZmZfcGF0aCA9IHNlbGYuX3BhdGhfdG9faW1h
Z2VfZGlmZigpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbWFnZV9kaWZmX3BhdGgp
OgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIHdhcyBub3QgZm91bmQgYXQgJXMi
ICUgaW1hZ2VfZGlmZl9wYXRoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICAgICAg
cmV0dXJuIFRydWUKIAorICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2ZpbGVuYW1l
LCBhY3R1YWxfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZT1Ob25l
KToKKyAgICAgICAgIiIiQ29tcGFyZSB0d28gaW1hZ2UgZmlsZXMgYW5kIHByb2R1Y2UgYSBkZWx0
YSBpbWFnZSBmaWxlLgorCisgICAgICAgIFJldHVybiAxIGlmIHRoZSB0d28gZmlsZXMgYXJlIGRp
ZmZlcmVudCwgMCBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgQWxzbyBwcm9kdWNlIGEg
ZGVsdGEgaW1hZ2Ugb2YgdGhlIHR3byBpbWFnZXMgYW5kIHdyaXRlIHRoYXQgaW50bworICAgICAg
ICB8ZGlmZl9maWxlbmFtZXwgaWYgaXQgaXMgbm90IE5vbmUuIiIiCisgICAgICAgIHJlc3VsdCA9
IDEKKyAgICAgICAgZXhwZWN0ZWRfbGVuZ3RoID0gb3Muc3RhdChleHBlY3RlZF9maWxlbmFtZSku
c3Rfc2l6ZQorICAgICAgICBleHBlY3RlZF9maWxlID0gb3BlbihleHBlY3RlZF9maWxlbmFtZSku
cmVhZCgpCisKKyAgICAgICAgIyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRlc3QgZGlkbid0
IGFjdHVhbGx5IGdlbmVyYXRlIGFuIGltYWdlLgorICAgICAgICBhY3R1YWxfbGVuZ3RoID0gb3Mu
c3RhdChhY3R1YWxfZmlsZW5hbWUpLnN0X3NpemUKKyAgICAgICAgaWYgYWN0dWFsX2xlbmd0aCA9
PSAwOgorICAgICAgICAgICAgaWYgZGlmZl9maWxlbmFtZToKKyAgICAgICAgICAgICAgICBvcGVu
KGRpZmZfZmlsZW5hbWUsICd3Jykud3JpdGUoZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgICAgIHJl
dHVybiAxCisKKyAgICAgICAgYWN0dWFsX2ZpbGUgPSBvcGVuKGFjdHVhbF9maWxlbmFtZSkucmVh
ZCgpCisgICAgICAgIGlucHV0ID0gJ0NvbnRlbnQtTGVuZ3RoOiAlZFxuJyAlIGFjdHVhbF9sZW5n
dGgKKyAgICAgICAgaW5wdXQgKz0gYWN0dWFsX2ZpbGUKKyAgICAgICAgaW5wdXQgKz0gJ0NvbnRl
bnQtTGVuZ3RoOiAlZFxuJyAlIGV4cGVjdGVkX2xlbmd0aAorICAgICAgICBpbnB1dCArPSBleHBl
Y3RlZF9maWxlCisKKyAgICAgICAgY21kID0gW3NlbGYuX3BhdGhfdG9faW1hZ2VfZGlmZigpLCAn
LS10b2xlcmFuY2UnLCAnMC4xJ10KKyAgICAgICAgc3AgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQ
cm9jZXNzKHNlbGYsICdJbWFnZURpZmYnLCBjbWQpCisKKyAgICAgICAgc3Aud3JpdGUoaW5wdXQp
CisKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDIuMAorICAgICAgICBvdXRwdXQg
PSBzcC5yZWFkKGRlYWRsaW5lKQorICAgICAgICB3aGlsZSBub3Qgc3AudGltZWRfb3V0IGFuZCBu
b3Qgc3AuY3Jhc2hlZCBhbmQgb3V0cHV0OgorICAgICAgICAgICAgaWYgb3V0cHV0LnN0YXJ0c3dp
dGgoJ0NvbnRlbnQtTGVuZ3RoJyk6CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdDb250
ZW50LUxlbmd0aDogKFxkKyknLCBvdXRwdXQpCisgICAgICAgICAgICAgICAgY29udGVudF9sZW5n
dGggPSBpbnQobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzcC5yZWFkKGRl
YWRsaW5lLCBjb250ZW50X2xlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAg
ICAgZWxpZiBvdXRwdXQuc3RhcnRzd2l0aCgnZGlmZicpOgorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICBvdXRwdXQgPSBzcC5yZWFkKGRlYWRsaW5lKQorCisgICAgICAgIHJlc3Vs
dCA9IDEKKyAgICAgICAgaWYgc3AudGltZWRfb3V0OgorICAgICAgICAgICAgX2xvZy5lcnJvcigi
SW1hZ2VEaWZmIHRpbWVkIG91dCBvbiAlcyIgJSBleHBlY3RlZF9maWxlbmFtZSkKKyAgICAgICAg
ZWxpZiBzcC5jcmFzaGVkOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIGNyYXNo
ZWQiKQorICAgICAgICBlbGlmIG91dHB1dC5zdGFydHN3aXRoKCdkaWZmJyk6CisgICAgICAgICAg
ICBtID0gcmUubWF0Y2goJ2RpZmY6ICguKyklIChwYXNzZWR8ZmFpbGVkKScsIG91dHB1dCkKKyAg
ICAgICAgICAgIGlmIG0uZ3JvdXAoMikgPT0gJ3Bhc3NlZCc6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3BlbihkaWZmX2ZpbGVuYW1lLCAn
dycpLndyaXRlKG91dHB1dCkKKyAgICAgICAgc3Auc3RvcCgpCisgICAgICAgIHJldHVybiByZXN1
bHQKKwogICAgIGRlZiBudW1fY29yZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBpbnQob3MucG9w
ZW4yKCJzeXNjdGwgLW4gaHcubmNwdSIpWzFdLnJlYWQoKSkKIApAQCAtMTE1LDcgKzE3Miw4IEBA
IGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgcmV0dXJuICgnbWFjJywpCiAKICAg
ICBkZWYgX3NraXBwZWRfZmlsZV9wYXRocyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogVGhpcyBt
ZXRob2Qgd2lsbCBuZWVkIHRvIGJlIG1hZGUgd29yayBmb3Igbm9uLW1hYyBwbGF0Zm9ybXMgYW5k
IG1vdmVkIGludG8gYmFzZS5Qb3J0LgorICAgICAgICAjIEZJWE1FOiBUaGlzIG1ldGhvZCB3aWxs
IG5lZWQgdG8gYmUgbWFkZSB3b3JrIGZvciBub24tbWFjIHBsYXRmb3JtcworICAgICAgICAjIGFu
ZCBtb3ZlZCBpbnRvIGJhc2UuUG9ydC4KICAgICAgICAgc2tpcHBlZF9maWxlcyA9IFtdCiAgICAg
ICAgIGlmIHNlbGYuX25hbWUgaW4gKCdtYWMtdGlnZXInLCAnbWFjLWxlb3BhcmQnLCAnbWFjLXNu
b3dsZW9wYXJkJyk6CiAgICAgICAgICAgICBza2lwcGVkX2ZpbGVzLmFwcGVuZChvcy5wYXRoLmpv
aW4oCkBAIC0xMjUsOSArMTgzLDEyIEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAg
ICAgcmV0dXJuIHNraXBwZWRfZmlsZXMKIAogICAgIGRlZiBfdGVzdHNfZm9yX290aGVyX3BsYXRm
b3JtcyhzZWxmKToKLSAgICAgICAgIyBUaGUgb3JpZ2luYWwgcnVuLXdlYmtpdC10ZXN0cyBidWls
ZHMgdXAgYSAid2hpdGVsaXN0IiBvZiB0ZXN0cyB0byBydW4sIGFuZCBwYXNzZXMgdGhhdCB0byBE
dW1wUmVuZGVyVHJlZS4KLSAgICAgICAgIyBydW4tY2hyb21pdW0td2Via2l0LXRlc3RzIGFzc3Vt
ZXMgd2UgcnVuICphbGwqIHRlc3RzIGFuZCB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgZnVuY3Rpb25z
IGFzIGEgYmxhY2tsaXN0LgotICAgICAgICAjIEZJWE1FOiBUaGlzIGxpc3QgY291bGQgYmUgZHlu
YW1pYyBiYXNlZCBvbiBwbGF0Zm9ybSBuYW1lIGFuZCBwdXNoZWQgaW50byBiYXNlLlBvcnQuCisg
ICAgICAgICMgVGhlIG9yaWdpbmFsIHJ1bi13ZWJraXQtdGVzdHMgYnVpbGRzIHVwIGEgIndoaXRl
bGlzdCIgb2YgdGVzdHMKKyAgICAgICAgIyB0byBydW4sIGFuZCBwYXNzZXMgdGhhdCB0byBEdW1w
UmVuZGVyVHJlZS4KKyAgICAgICAgIyBuZXctcnVuLXdlYmtpdC10ZXN0cyBhc3N1bWVzIHdlIHJ1
biAqYWxsKiB0ZXN0cyBhbmQKKyAgICAgICAgIyB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgZnVuY3Rp
b25zIGFzIGEgYmxhY2tsaXN0LgorICAgICAgICAjIEZJWE1FOiBUaGlzIGxpc3QgY291bGQgYmUg
ZHluYW1pYyBiYXNlZCBvbiBwbGF0Zm9ybSBuYW1lCisgICAgICAgICMgYW5kIHB1c2hlZCBpbnRv
IGJhc2UuUG9ydC4KICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICJwbGF0Zm9ybS9jaHJv
bWl1bSIsCiAgICAgICAgICAgICAicGxhdGZvcm0vZ3RrIiwKQEAgLTEzNiwxNiArMTk3LDIwIEBA
IGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgXQogCiAgICAgZGVmIF90ZXN0c19m
b3JfZGlzYWJsZWRfZmVhdHVyZXMoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSB0aGUgZmVhdHVyZSBkZXRlY3Rpb24gZnJvbSB3ZWJraXRwZXJsL2ZlYXR1cmVzLnBtIHRv
IG1hdGNoIHJ1bi13ZWJraXQtdGVzdHMuCi0gICAgICAgICMgRm9yIG5vdyB3ZSBoYXJkLWNvZGUg
YSBsaXN0IG9mIGZlYXR1cmVzIGtub3duIHRvIGJlIGRpc2FibGVkIG9uIHRoZSBNYWMgcGxhdGZv
cm0uCisgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgZmVhdHVyZSBkZXRlY3Rp
b24gZnJvbQorICAgICAgICAjIHdlYmtpdHBlcmwvZmVhdHVyZXMucG0gdG8gbWF0Y2ggcnVuLXdl
YmtpdC10ZXN0cy4KKyAgICAgICAgIyBGb3Igbm93IHdlIGhhcmQtY29kZSBhIGxpc3Qgb2YgZmVh
dHVyZXMga25vd24gdG8gYmUgZGlzYWJsZWQgb24KKyAgICAgICAgIyB0aGUgTWFjIHBsYXRmb3Jt
LgogICAgICAgICBkaXNhYmxlZF9mZWF0dXJlX3Rlc3RzID0gWwogICAgICAgICAgICAgImZhc3Qv
eGh0bWxtcCIsCiAgICAgICAgICAgICAiaHR0cC90ZXN0cy93bWwiLAogICAgICAgICAgICAgIm1h
dGhtbCIsCiAgICAgICAgICAgICAid21sIiwKICAgICAgICAgXQotICAgICAgICAjIEZJWE1FOiB3
ZWJhcmNoaXZlIHRlc3RzIGV4cGVjdCB0byByZWFkLXdyaXRlIGZyb20gLWV4cGVjdGVkLndlYmFy
Y2hpdmUgZmlsZXMgaW5zdGVhZCBvZiAudHh0IGZpbGVzLgotICAgICAgICAjIFRoaXMgc2NyaXB0
IGRvZXNuJ3Qga25vdyBob3cgdG8gZG8gdGhhdCB5ZXQsIHNvIHByZXRlbmQgdGhleSdyZSBqdXN0
ICJkaXNhYmxlZCIuCisgICAgICAgICMgRklYTUU6IHdlYmFyY2hpdmUgdGVzdHMgZXhwZWN0IHRv
IHJlYWQtd3JpdGUgZnJvbQorICAgICAgICAjLWV4cGVjdGVkLndlYmFyY2hpdmUgZmlsZXMgaW5z
dGVhZCBvZiAudHh0IGZpbGVzLgorICAgICAgICAjIFRoaXMgc2NyaXB0IGRvZXNuJ3Qga25vdyBo
b3cgdG8gZG8gdGhhdCB5ZXQsIHNvIHByZXRlbmQgdGhleSdyZSBqdXN0CisgICAgICAgICMgImRp
c2FibGVkIi4KICAgICAgICAgd2ViYXJjaGl2ZV90ZXN0cyA9IFsKICAgICAgICAgICAgICJ3ZWJh
cmNoaXZlIiwKICAgICAgICAgICAgICJzdmcvd2ViYXJjaGl2ZSIsCkBAIC0xODIsMTAgKzI0Nywx
NCBAQCBjbGFzcyBNYWNQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgICMgYSB2ZXJzaW9uLXNwZWNp
ZmljIGZpbGUgZm91bmQgaW4gcGxhdGZvcm0vWC12ZXJzaW9uLiBEdXBsaWNhdGUKICAgICAgICAg
IyBlbnRyaWVzIGFyZSBhbGxvd2VkLiBUaGlzIHJvdXRpbmUgcmVhZHMgdGhvc2UgZmlsZXMgYW5k
IHR1cm5zCiAgICAgICAgICMgY29udGVudHMgaW50byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRl
c3RfZXhwZWN0YXRpb25zLgotICAgICAgICB0ZXN0c190b19za2lwID0gc2V0KHNlbGYuX2V4cGVj
dGF0aW9uc19mcm9tX3NraXBwZWRfZmlsZXMoKSkgIyBVc2UgYSBzZXQgdG8gYWxsb3cgZHVwbGlj
YXRlcworCisgICAgICAgICMgVXNlIGEgc2V0IHRvIGFsbG93IGR1cGxpY2F0ZXMKKyAgICAgICAg
dGVzdHNfdG9fc2tpcCA9IHNldChzZWxmLl9leHBlY3RhdGlvbnNfZnJvbV9za2lwcGVkX2ZpbGVz
KCkpCisKICAgICAgICAgdGVzdHNfdG9fc2tpcC51cGRhdGUoc2VsZi5fdGVzdHNfZm9yX290aGVy
X3BsYXRmb3JtcygpKQogICAgICAgICB0ZXN0c190b19za2lwLnVwZGF0ZShzZWxmLl90ZXN0c19m
b3JfZGlzYWJsZWRfZmVhdHVyZXMoKSkKLSAgICAgICAgZXhwZWN0YXRpb25zID0gbWFwKGxhbWJk
YSB0ZXN0X3BhdGg6ICJCVUdfU0tJUFBFRCBTS0lQIDogJXMgPSBGQUlMIiAlIHRlc3RfcGF0aCwg
dGVzdHNfdG9fc2tpcCkKKyAgICAgICAgZXhwZWN0YXRpb25zID0gbWFwKGxhbWJkYSB0ZXN0X3Bh
dGg6ICJCVUdfU0tJUFBFRCBTS0lQIDogJXMgPSBGQUlMIiAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXN0X3BhdGgsIHRlc3RzX3RvX3NraXApCiAgICAgICAgIHJldHVybiAiXG4iLmpv
aW4oZXhwZWN0YXRpb25zKQogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKQEAg
LTIxNyw4ICsyODYsMTEgQEAgY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgogCiAgICAgZGVmIF9i
dWlsZF9wYXRoKHNlbGYsICpjb21wcyk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9jYWNoZWRfYnVp
bGRfcm9vdDoKLSAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9idWlsZF9yb290ID0gZXhlY3V0aXZl
LnJ1bl9jb21tYW5kKFtzZWxmLnNjcmlwdF9wYXRoKCJ3ZWJraXQtYnVpbGQtZGlyZWN0b3J5Iiks
ICItLXRvcC1sZXZlbCJdKS5yc3RyaXAoKQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNl
bGYuX2NhY2hlZF9idWlsZF9yb290LCBzZWxmLl9vcHRpb25zLnRhcmdldCwgKmNvbXBzKQorICAg
ICAgICAgICAgc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQo
CisgICAgICAgICAgICAgICAgW3NlbGYuc2NyaXB0X3BhdGgoIndlYmtpdC1idWlsZC1kaXJlY3Rv
cnkiKSwKKyAgICAgICAgICAgICAgICAgIi0tdG9wLWxldmVsIl0pLnJzdHJpcCgpCisgICAgICAg
IHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QsIHNlbGYuX29wdGlv
bnMudGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb21wcykKIAogICAgIGRl
ZiBfa2lsbF9wcm9jZXNzKHNlbGYsIHBpZCk6CiAgICAgICAgICIiIkZvcmNlZnVsbHkga2lsbCB0
aGUgcHJvY2Vzcy4KQEAgLTI1MywxMCArMzI1LDExIEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0
KToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicpICMgRklY
TUU6IFRoaXMgaXMgd3JvbmcgYW5kIHNob3VsZCBiZSAiSW1hZ2VEaWZmIiwgYnV0IGhhdmluZyB0
aGUgY29ycmVjdCBwYXRoIGNhdXNlcyBvdGhlciBwYXJ0cyBvZiB0aGUgc2NyaXB0IHRvIGhhbmcu
CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdJbWFnZURpZmYnKQogCiAgICAgZGVm
IF9wYXRoX3RvX3dkaWZmKHNlbGYpOgotICAgICAgICByZXR1cm4gJ3dkaWZmJyAjIEZJWE1FOiBU
aGlzIGRvZXMgbm90IGV4aXN0IG9uIGEgZGVmYXVsdCBNYWMgT1MgWCBMZW9wYXJkIGluc3RhbGwu
CisgICAgICAgICMgRklYTUU6IFRoaXMgZG9lcyBub3QgZXhpc3Qgb24gYSBkZWZhdWx0IE1hYyBP
UyBYIExlb3BhcmQgaW5zdGFsbC4KKyAgICAgICAgcmV0dXJuICd3ZGlmZicKIAogICAgIGRlZiBf
c2h1dF9kb3duX2h0dHBfc2VydmVyKHNlbGYsIHNlcnZlcl9waWQpOgogICAgICAgICAiIiJTaHV0
IGRvd24gdGhlIGxpZ2h0dHBkIHdlYiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5CkBA
IC0yODgsNjkgKzM2MSw0NCBAQCBjbGFzcyBNYWNEcml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBpbWFnZV9wYXRoLCBkcml2ZXJfb3B0aW9ucyk6CiAgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX2RyaXZlcl9vcHRpb25zID0gZHJp
dmVyX29wdGlvbnMKLSAgICAgICAgc2VsZi5fdGFyZ2V0ID0gcG9ydC5fb3B0aW9ucy50YXJnZXQK
ICAgICAgICAgc2VsZi5faW1hZ2VfcGF0aCA9IGltYWdlX3BhdGgKLSAgICAgICAgc2VsZi5fc3Rk
b3V0X2ZkID0gTm9uZQotICAgICAgICBzZWxmLl9jbWQgPSBOb25lCi0gICAgICAgIHNlbGYuX2Vu
diA9IE5vbmUKLSAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVhZF9i
dWZmZXIgPSAnJwogCiAgICAgICAgIGNtZCA9IFtdCisKICAgICAgICAgIyBIb29rIGZvciBpbmpl
Y3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCiAgICAgICAg
ICMgdXNlZCBieSBlLmcuIHRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgogICAgICAg
ICB3cmFwcGVyID0gb3MuZW52aXJvbi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCiAgICAg
ICAgIGlmIHdyYXBwZXIgIT0gTm9uZToKICAgICAgICAgICAgIGNtZCArPSBbd3JhcHBlcl0KKwog
ICAgICAgICBpZiBzZWxmLl9wb3J0Ll9vcHRpb25zLndyYXBwZXI6CiAgICAgICAgICAgICAjIFRo
aXMgc3BsaXQoKSBpc24ndCByZWFsbHkgd2hhdCB3ZSB3YW50IC0tIGl0IGluY29ycmVjdGx5IHdp
bGwKICAgICAgICAgICAgICMgc3BsaXQgcXVvdGVkIHN0cmluZ3Mgd2l0aGluIHRoZSB3cmFwcGVy
IGFyZ3VtZW50IC0tIGJ1dCBpbgogICAgICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3Qg
Y29tZSB1cCBhbmQgdGhlIC0taGVscCBvdXRwdXQgd2FybnMKICAgICAgICAgICAgICMgYWJvdXQg
aXQgYW55d2F5LgogICAgICAgICAgICAgY21kICs9IHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxp
dCgpCi0gICAgICAgICMgRklYTUU6IFVzaW5nIGFyY2ggaGVyZSBtYXNrcyBhbnkgcG9zc2libGUg
ZmlsZS1ub3QtZm91bmQgZXJyb3JzIGZyb20gYSBub24tZXhpc3RhbnQgZHJpdmVyIGV4ZWN1dGFi
bGUuCi0gICAgICAgIGNtZCArPSBbJ2FyY2gnLCAnLWkzODYnLCBwb3J0Ll9wYXRoX3RvX2RyaXZl
cigpLCAnLSddCiAKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgYXJvdW5kIG91ciBs
YWNrIG9mIEltYWdlRGlmZiBzdXBwb3J0IGZvciBub3cuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9w
b3J0Ll9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgotICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlz
IHBvcnQgZG9lcyBub3QgeWV0IHN1cHBvcnQgcGl4ZWwgdGVzdHMuIikKLSAgICAgICAgICAgIHNl
bGYuX3BvcnQuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHMgPSBUcnVlCi0gICAgICAgICAgICAjY21k
LmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCisgICAgICAgIGNtZCArPSBbJ2FyY2gnLCAnLWkzODYn
LCBwb3J0Ll9wYXRoX3RvX2RyaXZlcigpLCAnLSddCiAKLSAgICAgICAgI2lmIGRyaXZlcl9vcHRp
b25zOgotICAgICAgICAjICAgIGNtZCArPSBkcml2ZXJfb3B0aW9ucworICAgICAgICBpZiBpbWFn
ZV9wYXRoOgorICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCiAgICAgICAg
IGVudiA9IG9zLmVudmlyb24KICAgICAgICAgZW52WydEWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBz
ZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAgICAgc2VsZi5fY21kID0gY21kCi0gICAgICAg
IHNlbGYuX2VudiA9IGVudgotICAgICAgICBzZWxmLnJlc3RhcnQoKQorICAgICAgICBzZWxmLl9z
cHJvYyA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3Moc2VsZi5fcG9ydCwKKyAgICAgICAg
ICAgICJEdW1wUmVuZGVyVHJlZSIsIGNtZCwgZW52KQogCiAgICAgZGVmIHBvbGwoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICByZXR1cm4gc2VsZi5fc3By
b2MucG9sbCgpCiAKICAgICBkZWYgcmVzdGFydChzZWxmKToKLSAgICAgICAgc2VsZi5zdG9wKCkK
LSAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgY2xvc2VfZmRzPVRydWUgdG8gd29yayBhcm91bmQg
UHl0aG9uIGJ1ZyAjMjMyMAotICAgICAgICAjIChvdGhlcndpc2Ugd2UgY2FuIGhhbmcgd2hlbiB3
ZSBraWxsIHRlc3Rfc2hlbGwgd2hlbiB3ZSBhcmUgcnVubmluZwotICAgICAgICAjIG11bHRpcGxl
IHRocmVhZHMpLiBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAgLgotICAgICAg
ICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLl9jbWQsIHN0ZGluPXN1YnByb2Nl
c3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW52PXNlbGYuX2VudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvc2VfZmRzPVRydWUpCisgICAgICAgIHNlbGYuX3Nwcm9jLnN0b3AoKQorICAgICAgICBzZWxm
Ll9zcHJvYy5zdGFydCgpCisgICAgICAgIHJldHVybgogCiAgICAgZGVmIHJldHVybmNvZGUoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnJldHVybmNvZGUKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3Byb2MucmV0dXJuY29kZSgpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0
aW1lb3V0bXMsIGltYWdlX2hhc2gpOgotICAgICAgICBvdXRwdXQgPSBbXQotICAgICAgICBlcnJv
ciA9IFtdCi0gICAgICAgIGltYWdlID0gJycKLSAgICAgICAgY3Jhc2ggPSBGYWxzZQotICAgICAg
ICB0aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgYWN0dWFsX3VyaSA9IE5vbmUKLSAgICAgICAgYWN0
dWFsX2ltYWdlX2hhc2ggPSBOb25lCi0KICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImZpbGU6
Ly8vIik6CiAgICAgICAgICAgICBjbWQgPSB1cmlbNzpdCiAgICAgICAgIGVsc2U6CkBAIC0zNjAs
MTMwICs0MDgsNDkgQEAgY2xhc3MgTWFjRHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgICAg
IGNtZCArPSAiJyIgKyBpbWFnZV9oYXNoCiAgICAgICAgIGNtZCArPSAiXG4iCiAKLSAgICAgICAg
c2VsZi5fcHJvYy5zdGRpbi53cml0ZShjbWQpCi0gICAgICAgIHNlbGYuX3N0ZG91dF9mZCA9IHNl
bGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAgIGZsID0gZmNudGwuZmNudGwoc2VsZi5f
c3Rkb3V0X2ZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICBmY250bC5mY250bChzZWxmLl9zdGRv
dXRfZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgIyBwZGIu
c2V0X3RyYWNlKCkKKyAgICAgICAgc3AgPSBzZWxmLl9zcHJvYworICAgICAgICBzcC53cml0ZShj
bWQpCiAKLSAgICAgICAgc3RvcF90aW1lID0gdGltZS50aW1lKCkgKyAoaW50KHRpbWVvdXRtcykg
LyAxMDAwLjApCi0gICAgICAgIHJlc3AgPSAnJwotICAgICAgICAodGltZW91dCwgbGluZSkgPSBz
ZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lKQotICAgICAgICByZXNwICs9IGxpbmUK
ICAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSA9IEZhbHNlCi0gICAgICAgIHdoaWxlIG5v
dCB0aW1lb3V0IGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKLSAgICAgICAgICAgICMgTWFr
ZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KLSAgICAgICAgICAgIGlmIGxpbmUgPT0gJycgYW5k
IHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyBoZXgg
Y29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZvciBhYnJ1cHQKLSAgICAgICAgICAgICAg
ICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBw
cm9tcHQKLSAgICAgICAgICAgICAgICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0
aGUgdGVzdF9zaGVsbC4KLSAgICAgICAgICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUgZm9yIHdo
aWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlCi0gICAgICAgICAgICAgICAgIyBh
Ym92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRl
Y3QKLSAgICAgICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJu
Y29kZSB0byBiZSBuZWdhdGl2ZQotICAgICAgICAgICAgICAgICMgU0lHSU5ULiBBbmQgdGhhdCBh
Z3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uLgotICAgICAgICAgICAgICAg
IGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLnJldHVybmNvZGUoKSBvcgotICAgICAgICAgICAgICAg
ICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gc2VsZi5yZXR1cm5jb2RlKCkpOgotICAgICAgICAgICAg
ICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAgICAgIGNyYXNoID0g
VHJ1ZQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0g
Tm9uZQorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBpbWFnZSA9ICcnCiAKLSAgICAgICAg
ICAgIGVsaWYgKGxpbmUuc3RhcnRzd2l0aCgnQ29udGVudC1UeXBlOicpIGFuZCBub3QKLSAgICAg
ICAgICAgICAgICAgIGhhdmVfc2Vlbl9jb250ZW50X3R5cGUpOgorICAgICAgICBkZWFkbGluZSA9
IHRpbWUudGltZSgpICsgaW50KHRpbWVvdXRtcykgLyAxMDAwLjAKKyAgICAgICAgbGluZSA9IHNw
LnJlYWQoZGVhZGxpbmUpCisgICAgICAgIHdoaWxlIG5vdCBzcC50aW1lZF9vdXQgYW5kIG5vdCBz
cC5jcmFzaGVkIGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKKyAgICAgICAgICAgIGlmIChs
aW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQtVHlwZTonKSBhbmQgbm90CisgICAgICAgICAgICAgICAg
aGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSk6CiAgICAgICAgICAgICAgICAgaGF2ZV9zZWVuX2NvbnRl
bnRfdHlwZSA9IFRydWUKLSAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkKLQotICAgICAgICAgICAgKHRpbWVv
dXQsIGxpbmUpID0gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSkKLSAgICAgICAg
ICAgIHJlc3AgKz0gbGluZQorICAgICAgICAgICAgICAgIG91dHB1dCArPSBsaW5lCisgICAgICAg
ICAgICBsaW5lID0gc3AucmVhZChkZWFkbGluZSkKIAogICAgICAgICAjIE5vdyByZWFkIGEgc2Vj
b25kIGJsb2NrIG9mIHRleHQgZm9yIHRoZSBvcHRpb25hbCBpbWFnZSBkYXRhCi0gICAgICAgIGlt
YWdlX2xlbmd0aCA9IDAKLSAgICAgICAgKHRpbWVvdXQsIGxpbmUpID0gc2VsZi5fcmVhZF9saW5l
KHRpbWVvdXQsIHN0b3BfdGltZSkKLSAgICAgICAgcmVzcCArPSBsaW5lCisgICAgICAgIHJlbWFp
bmluZ19sZW5ndGggPSAwCiAgICAgICAgIEhBU0hfSEVBREVSID0gJ0FjdHVhbEhhc2g6ICcKICAg
ICAgICAgTEVOR1RIX0hFQURFUiA9ICdDb250ZW50LUxlbmd0aDogJwotICAgICAgICB3aGlsZSBu
b3QgdGltZW91dCBhbmQgbm90IGNyYXNoIGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKLSAg
ICAgICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLnJldHVybmNvZGUoKSBvcgotICAg
ICAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gc2VsZi5yZXR1cm5jb2RlKCkpOgot
ICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAg
ICAgIGNyYXNoID0gVHJ1ZQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbGlm
IGxpbmUuc3RhcnRzd2l0aChIQVNIX0hFQURFUik6CisgICAgICAgIGxpbmUgPSBzcC5yZWFkKGRl
YWRsaW5lKQorICAgICAgICB3aGlsZSBub3Qgc3AudGltZWRfb3V0IGFuZCBub3Qgc3AuY3Jhc2hl
ZCBhbmQgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0
c3dpdGgoSEFTSF9IRUFERVIpOgogICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0g
bGluZVtsZW4oSEFTSF9IRUFERVIpOl0uc3RyaXAoKQogICAgICAgICAgICAgZWxpZiBsaW5lLnN0
YXJ0c3dpdGgoJ0NvbnRlbnQtVHlwZTonKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAg
ICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aChMRU5HVEhfSEVBREVSKToKLSAgICAgICAgICAgICAg
ICBpbWFnZV9sZW5ndGggPSBpbnQobGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKLSAgICAgICAg
ICAgIGVsaWYgaW1hZ2VfbGVuZ3RoOgorICAgICAgICAgICAgICAgIHJlbWFpbmluZ19sZW5ndGgg
PSBpbnQobGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKKyAgICAgICAgICAgIGVsaWYgcmVtYWlu
aW5nX2xlbmd0aDoKICAgICAgICAgICAgICAgICBpbWFnZSArPSBsaW5lCi0KLSAgICAgICAgICAg
ICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUsIGlt
YWdlX2xlbmd0aCkKLSAgICAgICAgICAgIHJlc3AgKz0gbGluZQotCi0gICAgICAgIGlmIHRpbWVv
dXQ6Ci0gICAgICAgICAgICBzZWxmLnJlc3RhcnQoKQorICAgICAgICAgICAgICAgIHJlbWFpbmlu
Z19sZW5ndGggLT0gbGVuKGxpbmUpCisgICAgICAgICAgICBsaW5lID0gc3AucmVhZChkZWFkbGlu
ZSwgcmVtYWluaW5nX2xlbmd0aCkKIAogICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoIGFuZCBs
ZW4oc2VsZi5faW1hZ2VfcGF0aCk6CiAgICAgICAgICAgICBpbWFnZV9maWxlID0gZmlsZShzZWxm
Ll9pbWFnZV9wYXRoLCAid2IiKQogICAgICAgICAgICAgaW1hZ2VfZmlsZS53cml0ZShpbWFnZSkK
ICAgICAgICAgICAgIGltYWdlX2ZpbGUuY2xvc2UoKQotCi0gICAgICAgIHJldHVybiAoY3Jhc2gs
IHRpbWVvdXQsIGFjdHVhbF9pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICcnLmpvaW4ob3V0
cHV0KSwgJycuam9pbihlcnJvcikpCisgICAgICAgIHJldHVybiAoc3AuY3Jhc2hlZCwgc3AudGlt
ZWRfb3V0LCBhY3R1YWxfaW1hZ2VfaGFzaCwgb3V0cHV0LCBzcC5lcnJvcikKIAogICAgIGRlZiBz
dG9wKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgc2VsZi5fcHJv
Yy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0g
ICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluICgn
d2luMzInLCAnY3lnd2luJyk6Ci0gICAgICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0ZG91
dC9zdGRlcnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFgsCi0gICAgICAgICAgICAgICAgIyAoc2Vl
IHJlc3RhcnQoKSwgYWJvdmUpLCBhbmQgYW55d2F5IHdlIGRvbid0IHdhbnQgdG8gaGFuZwotICAg
ICAgICAgICAgICAgICMgdGhlIGhhcm5lc3MgaWYgdGVzdF9zaGVsbCBpcyBidWdneSwgc28gd2Ug
d2FpdCBhIGNvdXBsZQotICAgICAgICAgICAgICAgICMgc2Vjb25kcyB0byBnaXZlIHRlc3Rfc2hl
bGwgYSBjaGFuY2UgdG8gY2xlYW4gdXAsIGJ1dCB0aGVuCi0gICAgICAgICAgICAgICAgIyBmb3Jj
ZS1raWxsIHRoZSBwcm9jZXNzIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICBLSUxMX1RJ
TUVPVVQgPSAzLjAKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkgKyBLSUxM
X1RJTUVPVVQKLSAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25l
IGFuZCB0aW1lLnRpbWUoKSA8IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xl
ZXAoMC4xKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6Ci0g
ICAgICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcgdGVzdCBkcml2ZXIgdGlt
ZWQgb3V0LCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2lsbGluZyBpdCcp
Ci0gICAgICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKLSAgICAg
ICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAiLTkiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9wcm9jLnBpZCldLCBzdGRlcnI9
bnVsbCkKLSAgICAgICAgICAgICAgICAgICAgbnVsbC5jbG9zZSgpCi0KLSAgICBkZWYgX3JlYWRf
bGluZShzZWxmLCB0aW1lb3V0LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0aD0wKToKLSAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgcmVhZF9mZHMgPSBbXQotCi0gICAgICAgICMgZmly
c3QgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBsaW5lIGFscmVhZHkgcmVhZCBvciBpZiB3ZSd2
ZQotICAgICAgICAjIHJlYWQgdGhlIGVudGlyZSBpbWFnZQotICAgICAgICBpZiBpbWFnZV9sZW5n
dGggYW5kIGxlbihzZWxmLl9yZWFkX2J1ZmZlcikgPj0gaW1hZ2VfbGVuZ3RoOgotICAgICAgICAg
ICAgb3V0ID0gc2VsZi5fcmVhZF9idWZmZXJbMDppbWFnZV9sZW5ndGhdCi0gICAgICAgICAgICBz
ZWxmLl9yZWFkX2J1ZmZlciA9IHNlbGYuX3JlYWRfYnVmZmVyW2ltYWdlX2xlbmd0aDpdCi0gICAg
ICAgICAgICByZXR1cm4gKHRpbWVvdXQsIG91dCkKLQotICAgICAgICBpZHggPSBzZWxmLl9yZWFk
X2J1ZmZlci5maW5kKCdcbicpCi0gICAgICAgIGlmIG5vdCBpbWFnZV9sZW5ndGggYW5kIGlkeCAh
PSAtMToKLSAgICAgICAgICAgIG91dCA9IHNlbGYuX3JlYWRfYnVmZmVyWzA6aWR4ICsgMV0KLSAg
ICAgICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyID0gc2VsZi5fcmVhZF9idWZmZXJbaWR4ICsgMTpd
Ci0gICAgICAgICAgICByZXR1cm4gKHRpbWVvdXQsIG91dCkKLQotICAgICAgICAjIElmIHdlJ3Zl
IHRpbWVkIG91dCwgcmV0dXJuIGp1c3Qgd2hhdCB3ZSBoYXZlLCBpZiBhbnl0aGluZwotICAgICAg
ICBpZiB0aW1lb3V0IG9yIG5vdyA+PSBzdG9wX3RpbWU6Ci0gICAgICAgICAgICBvdXQgPSBzZWxm
Ll9yZWFkX2J1ZmZlcgotICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSAnJwotICAgICAg
ICAgICAgcmV0dXJuIChUcnVlLCBvdXQpCi0KLSAgICAgICAgKHJlYWRfZmRzLCB3cml0ZV9mZHMs
IGVycl9mZHMpID0gc2VsZWN0LnNlbGVjdCgKLSAgICAgICAgICAgIFtzZWxmLl9zdGRvdXRfZmRd
LCBbXSwgW10sIHN0b3BfdGltZSAtIG5vdykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYg
dGltZW91dCBvciBsZW4ocmVhZF9mZHMpID09IDE6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVh
ZF9idWZmZXIgKz0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vy
cm9yLCBlOgotICAgICAgICAgICAgcmVhZCA9IFtdCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFk
X2xpbmUodGltZW91dCwgc3RvcF90aW1lKQorICAgICAgICBpZiBzZWxmLl9zcHJvYzoKKyAgICAg
ICAgICAgIHNlbGYuX3Nwcm9jLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fc3Byb2MgPSBOb25l
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3NlcnZlcl9wcm9jZXNzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42YjNlYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpAQCAtMCwwICsx
LDE4OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29n
bGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlBhY2thZ2UgdGhh
dCBpbXBsZW1lbnRzIHRoZSBTZXJ2ZXJQcm9jZXNzIHdyYXBwZXIgY2xhc3MiIiIKKworaW1wb3J0
IGZjbnRsCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2VsZWN0CitpbXBvcnQg
c2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworX2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJf
cHJvY2VzcyIpCisKKworY2xhc3MgU2VydmVyUHJvY2VzczoKKyAgICAiIiJUaGlzIGNsYXNzIHBy
b3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRoYXQKKyAgICBpbXBsZW1lbnRz
IGEgc2ltcGxlIHJlYWQvd3JpdGUgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKKyAg
ICBpcyB0aGF0IHJlYWRpbmcgcmVzcG9uc2VzIHRha2VzIGEgdGltZW91dCwgc28gdGhhdCB3ZSBk
b24ndCBldmVyIGJsb2NrCisgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVz
IHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKKyAgICBhcyBuZWNlc3NhcnkgdG8g
a2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnRfb2Jq
CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2NtZCA9IGNtZAorICAg
ICAgICBzZWxmLl9lbnYgPSBlbnYKKyAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgZGVmIF9y
ZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fb3V0
cHV0ID0gJycKKyAgICAgICAgc2VsZi5jcmFzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi50aW1l
ZF9vdXQgPSBGYWxzZQorICAgICAgICBzZWxmLmVycm9yID0gJycKKworICAgIGRlZiBfc3RhcnQo
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCIlcyBhbHJlYWR5IHJ1bm5pbmciICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VsZi5fcmVz
ZXQoKQorICAgICAgICBjbG9zZV9mZHMgPSBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAn
Y3lnd2luJykKKyAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fY21k
LCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1jbG9zZV9mZHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVudj1zZWxmLl9lbnYpCisgICAgICAgIGZkID0gc2VsZi5f
cHJvYy5zdGRvdXQuZmlsZW5vKCkKKyAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwu
Rl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3Mu
T19OT05CTE9DSykKKyAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAg
ICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICBmY250bC5m
Y250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorCisgICAgZGVmIGhh
bmRsZV9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBjaGVja3MgdG8g
c2VlIGlmIHRoZSBwcm9jZXNzIGNyYXNoZWQgb3IgZXhpdGVkCisgICAgICAgIGJlY2F1c2Ugb2Yg
YSBrZXlib2FyZCBpbnRlcnJ1cHQgYW5kIHJhaXNlcyBLZXlib2FyZEludGVycnVwdAorICAgICAg
ICBhY2NvcmRpbmdseS4iIiIKKyAgICAgICAgaWYgc2VsZi5jcmFzaGVkOgorICAgICAgICAgICAg
IyBUaGlzIGlzIGhleCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVzZWQgZm9yIGFicnVwdAor
ICAgICAgICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBjdHJsK2Mg
ZnJvbSB0aGUgcHJvbXB0CisgICAgICAgICAgICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGlu
ZyBvbiB0aGUgdGVzdF9zaGVsbC4KKyAgICAgICAgICAgICMgc2RveW9uOiBOb3Qgc3VyZSBmb3Ig
d2hpY2ggT1MgYW5kIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUKKyAgICAgICAgICAgICMgYWJv
dmUgY29kZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIgTGludXggdG8gZGV0ZWN0
CisgICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0
byBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgIyBTSUdJTlQuIEFuZCB0aGF0IGFncmVlcyB3aXRo
IHRoZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICBpZiAoLTEwNzM3NDE1
MTAgPT0gc2VsZi5fcHJvYy5yZXR1cm5jb2RlIG9yCisgICAgICAgICAgICAgICAgLSBzaWduYWwu
U0lHSU5UID09IHNlbGYuX3Byb2MucmV0dXJuY29kZSk6CisgICAgICAgICAgICAgICAgcmFpc2Ug
S2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgZGVmIHBvbGwoc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJv
Yy5wb2xsKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiByZXR1cm5jb2RlKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Mu
cmV0dXJuY29kZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGlu
cHV0KToKKyAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBUaGUg
c3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKKyAgICAgICAgaWYgaXMgbm90IGFscmVhZHkg
cnVubmluZy4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6CisgICAgICAgICAgICBzZWxm
Ll9zdGFydCgpCisgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoaW5wdXQpCisKKyAgICBk
ZWYgcmVhZChzZWxmLCBkZWFkbGluZSwgc2l6ZT0wKToKKyAgICAgICAgIiIiUmVhZCBhIHJlc3Bv
bnNlIGZyb20gdGhlIHN1YnByb2Nlc3MuIE5vdGUgdGhhdCBldmVuIGlmIHRoZSBjYWxsCisgICAg
ICAgIHRpbWVzIG91dCBvciB0aGUgcHJvY2VzcyBjcmFzaGVzLCB0aGUgY2FsbCBtYXkgcmV0dXJu
IGRhdGEuIEluIGZhY3QsCisgICAgICAgIGlmIHlvdSBhcmUgcmVhZGluZyBhIGxpbmUgYXQgYSB0
aW1lICh1c2luZyBzaXplPTApLCB5b3UgY2FuIGNhbGwKKyAgICAgICAgdGhpcyBtdWx0aXBsZSB0
aW1lcyBldmVuIGlmIHRoZSBwcm9jIGhhcyB0aW1lZCBvdXQgb3IgY3Jhc2hlZC4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgICAgZGVhZGxpbmU6IHRpbWVzdGFtcCB0aGF0IHRoZSByZWFkIG11
c3QgY29tcGxldGUgYmVmb3JlCisgICAgICAgICAgICBzaXplOiBhbW91bnQgb2YgZGF0YSB0byBy
ZWFkLiBJZiBzaXplIGlzIDAsIHJlYWQoKSB3aWxsIHJlYWQKKyAgICAgICAgICAgICAgICB1bnRp
bCBhIG5ld2xpbmUgKCdcbicpIGlzIGVuY291bnRlcmVkLgorICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgICAgb3V0cHV0OiBkYXRhIHJldHVybmVkLCBpZiBhbnkKKyAgICAgICAgIiIiCisgICAg
ICAgIGlkeCA9IC0xCisgICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygp
CisgICAgICAgIGVycl9mZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCisgICAgICAgIHNl
bGVjdF9mZHMgPSAob3V0X2ZkLCBlcnJfZmQpCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnRpbWVk
X291dCBhbmQgbm90IHNlbGYuY3Jhc2hlZDoKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9s
bCgpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5jcmFzaGVkID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIHNlbGYuaGFuZGxlX2ludGVycnVwdCgpCisKKyAgICAgICAgICAgIG5vdyA9IHRp
bWUudGltZSgpCisgICAgICAgICAgICBpZiBub3cgPiBkZWFkbGluZToKKyAgICAgICAgICAgICAg
ICBzZWxmLnRpbWVkX291dCA9IFRydWUKKworICAgICAgICAgICAgIyBDaGVjayB0byBzZWUgaWYg
d2UgaGF2ZSBhbnkgb3V0cHV0IHdlIGNhbiByZXR1cm4uCisgICAgICAgICAgICBpZiBzaXplIGFu
ZCBsZW4oc2VsZi5fb3V0cHV0KSA+PSBzaXplOgorICAgICAgICAgICAgICAgIGlkeCA9IHNpemUK
KyAgICAgICAgICAgIGVsaWYgc2l6ZSA9PSAwOgorICAgICAgICAgICAgICAgIGlkeCA9IHNlbGYu
X291dHB1dC5maW5kKCdcbicpICsgMQorCisgICAgICAgICAgICBpZiBpZHggb3Igc2VsZi5jcmFz
aGVkIG9yIHNlbGYudGltZWRfb3V0OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX291
dHB1dFswOmlkeF0KKyAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQgPSBzZWxmLl9vdXRwdXRb
aWR4Ol0KKyAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICAgICAgICAgICMgTm9w
ZSAtIHdhaXQgZm9yIG1vcmUgZGF0YS4KKyAgICAgICAgICAgIChyZWFkX2Zkcywgd3JpdGVfZmRz
LCBlcnJfZmRzKSA9IHNlbGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdF9mZHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlYWRsaW5lIC0gbm93KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlm
IG91dF9mZCBpbiByZWFkX2ZkczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ICs9
IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGVycl9mZCBpbiBy
ZWFkX2ZkczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvciArPSBzZWxmLl9wcm9jLnN0
ZGVyci5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAg
ICAgIHBhc3MKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBwaWQgPSBzZWxmLl9wcm9j
LnBpZAorICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcHJv
Yy5zdGRvdXQuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAg
ICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIG5v
dCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpOgorICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0
ZG91dC9zdGRlcnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFgsCisgICAgICAgICAgICAjIChzZWUg
cmVzdGFydCgpLCBhYm92ZSksIGFuZCBhbnl3YXkgd2UgZG9uJ3Qgd2FudCB0byBoYW5nCisgICAg
ICAgICAgICAjIHRoZSBoYXJuZXNzIGlmIHRlc3Rfc2hlbGwgaXMgYnVnZ3ksIHNvIHdlIHdhaXQg
YSBjb3VwbGUKKyAgICAgICAgICAgICMgc2Vjb25kcyB0byBnaXZlIHRlc3Rfc2hlbGwgYSBjaGFu
Y2UgdG8gY2xlYW4gdXAsIGJ1dCB0aGVuCisgICAgICAgICAgICAjIGZvcmNlLWtpbGwgdGhlIHBy
b2Nlc3MgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgS0lMTF9USU1FT1VUID0gMy4wCisgICAg
ICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkgKyBLSUxMX1RJTUVPVVQKKyAgICAgICAgICAg
IHdoaWxlIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgdGltZW91
dDoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGlmIHNlbGYu
X3Byb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9w
cGluZyAlcyB0aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fbmFtZSkKKyAgICAgICAgICAgICAgICBudWxsID0gb3Blbihvcy5kZXZudWxs
LCAidyIpCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAiLTkiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9wcm9jLnBpZCldLCBz
dGRlcnI9bnVsbCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKKyAgICAgICAgICAgICAg
ICBfbG9nLndhcm5pbmcoJ2tpbGxlZCcpCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMv
aW1hZ2VfZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQppbmRleCA0MjkyOGJhLi4zYTNkOGE2IDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVz
L2ltYWdlX2RpZmYucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC05MCw2ICs5MCw3IEBAIGNsYXNzIElt
YWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICBBcmdzOgogICAg
ICAgICAgIGZpbGVuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdGVzdAogICAgICAgICAgIHRhcmdldDog
RGVidWcgb3IgUmVsZWFzZQorICAgICAgICBSZXR1cm5zIDEgaWYgdGhlIGZpbGVzIGFyZSBkaWZm
ZXJlbnQsIDAgaWYgdGhleSBtYXRjaAogICAgICAgICAiIiIKICAgICAgICAgZGlmZl9maWxlbmFt
ZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAogICAgICAgICAgIHNlbGYuRklMRU5B
TUVfU1VGRklYX0NPTVBBUkUpCkBAIC05OCw2ICs5OSw3IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0
X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNl
bGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAogICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VG
RklYX0VYUEVDVEVEICsgJy5wbmcnKQogCisgICAgICAgIHJlc3VsdCA9IDEKICAgICAgICAgdHJ5
OgogICAgICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gVHJ1ZQogICAgICAgICAgICAgcmVz
dWx0ID0gcG9ydC5kaWZmX2ltYWdlKGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUs
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51675</attachid>
            <date>2010-03-25 14:13:19 -0700</date>
            <delta_ts>2010-03-25 14:36:21 -0700</delta_ts>
            <desc>split server_process.read() into two calls for clearer usage</desc>
            <filename>wk34826_image_diff.diff</filename>
            <type>text/plain</type>
            <size>30115</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMDI0ZWRlLi40NWRjNzM5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMDMt
MjQgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9u
IGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvbWFjLnB5OgorCisyMDEwLTAyLTI2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBwaXhlbCB0ZXN0cyAoaW1hZ2UgZGlmZikgcHJvcGVybHkgb24gdGhl
IE1hYyBwb3J0LiBBbHNvCisgICAgICAgIHJlZm9ybWF0IHRvIFBFUCA4IHN0eWxlIGd1aWRlbGlu
ZXMuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaW50cm9kdWNlcyBhIG5ldyAiU2VydmVyUG9jZXNz
IiBjbGFzcyB0aGF0IGNhbiBiZSB1c2VkCisgICAgICAgIHRvIG1hbmFnZSBwcm9jZXNzZXMgdGhh
dCB0aGUgcnVuLXdlYmtpdC10ZXN0cyBoYXJuZXNzIGZvcmtzIG9mZiBhbmQKKyAgICAgICAgZXhw
ZWN0cyB0byBzdGF5IHVwIGZvciBsb25nZXIgdGhhbiBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNl
IHNlc3Npb24uCisgICAgICAgIEJvdGggRHVtcFJlbmRlclRyZWUgYW5kIEltYWdlRGlmZiB1c2Ug
dGhpcyBzdHlsZSBvZiBjb21tdW5pY2F0aW9uLAorICAgICAgICBhbHRob3VnaCB0aGUgY3VycmVu
dCBjb2RlIGZvcmtzIG9mZiBhIG5ldyBJbWFnZURpZmYgZm9yIGVhY2ggZGlmZgorICAgICAgICAo
V2UgbmVlZCB0byByZXN0cnVjdHVyZSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byBiZSBhYmxl
IHRvIGRvIHRoaXMKKyAgICAgICAgc2FmZWx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1l
bnQpLgorCisgICAgICAgIEFsc28sIG5vdyB0aGF0IHRoZSBTZXJ2ZXJQcm9jZXNzIGFic3RyYWN0
aW9uIGV4aXN0cywgd2UgY2FuIHByb2JhYmx5CisgICAgICAgIGNsZWFuIHVwIGFuZCBzaW1wbGlm
eSBzb21lIG9mIHRoZSB0aHJlYWQgbWFuYWdlbWVudCBsb2dpYyBpbgorICAgICAgICB0ZXN0X3No
ZWxsX3RocmVhZCBhcyB3ZWxsLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDgyNgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9tYWMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHk6CisKIDIwMTAtMDMtMjIgIERpcmsg
UHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlt
aXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9tYWMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21hYy5weQppbmRleCBkMTY1OWNlLi45YmQyY2QzIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weQor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5w
eQpAQCAtMjksMTIgKzI5LDExIEBACiAKICIiIldlYktpdCBNYWMgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIFBvcnQgaW50ZXJmYWNlLiIiIgogCi1pbXBvcnQgZmNudGwKIGltcG9ydCBsb2dnaW5nCiBp
bXBvcnQgb3MKIGltcG9ydCBwZGIKIGltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHNlbGVjdAoraW1w
b3J0IHJlCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwpAQCAt
NDIsNiArNDEsNyBAQCBpbXBvcnQgdGltZQogaW1wb3J0IHdlYmJyb3dzZXIKIAogaW1wb3J0IGJh
c2UKK2ltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogCiBpbXBvcnQgd2Via2l0cHkKIGZyb20gd2Via2l0
cHkgaW1wb3J0IGV4ZWN1dGl2ZQpAQCAtODUsMTEgKzg1LDY4IEBAIGNsYXNzIE1hY1BvcnQoYmFz
ZS5Qb3J0KToKICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkR1bXBSZW5kZXJUcmVlIHdhcyBub3Qg
Zm91bmQgYXQgJXMiICUgZHJpdmVyX3BhdGgpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAot
ICAgICAgICAjIFRoaXMgc2hvdWxkIGFsc28gdmFsaWRhdGUgdGhhdCB0aGUgSW1hZ2VEaWZmIHBh
dGggaXMgdmFsaWQKLSAgICAgICAgIyAob25jZSB0aGlzIHNjcmlwdCBrbm93cyBob3cgdG8gdXNl
IEltYWdlRGlmZikuCi0gICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0ODI2CisgICAgICAgIGltYWdlX2RpZmZfcGF0aCA9IHNlbGYuX3BhdGhfdG9faW1h
Z2VfZGlmZigpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpbWFnZV9kaWZmX3BhdGgp
OgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIHdhcyBub3QgZm91bmQgYXQgJXMi
ICUgaW1hZ2VfZGlmZl9wYXRoKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICAgICAg
cmV0dXJuIFRydWUKIAorICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2ZpbGVuYW1l
LCBhY3R1YWxfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgZGlmZl9maWxlbmFtZT1Ob25l
KToKKyAgICAgICAgIiIiQ29tcGFyZSB0d28gaW1hZ2UgZmlsZXMgYW5kIHByb2R1Y2UgYSBkZWx0
YSBpbWFnZSBmaWxlLgorCisgICAgICAgIFJldHVybiAxIGlmIHRoZSB0d28gZmlsZXMgYXJlIGRp
ZmZlcmVudCwgMCBpZiB0aGV5IGFyZSB0aGUgc2FtZS4KKyAgICAgICAgQWxzbyBwcm9kdWNlIGEg
ZGVsdGEgaW1hZ2Ugb2YgdGhlIHR3byBpbWFnZXMgYW5kIHdyaXRlIHRoYXQgaW50bworICAgICAg
ICB8ZGlmZl9maWxlbmFtZXwgaWYgaXQgaXMgbm90IE5vbmUuIiIiCisgICAgICAgIHJlc3VsdCA9
IDEKKyAgICAgICAgZXhwZWN0ZWRfbGVuZ3RoID0gb3Muc3RhdChleHBlY3RlZF9maWxlbmFtZSku
c3Rfc2l6ZQorICAgICAgICBleHBlY3RlZF9maWxlID0gb3BlbihleHBlY3RlZF9maWxlbmFtZSku
cmVhZCgpCisKKyAgICAgICAgIyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRlc3QgZGlkbid0
IGFjdHVhbGx5IGdlbmVyYXRlIGFuIGltYWdlLgorICAgICAgICBhY3R1YWxfbGVuZ3RoID0gb3Mu
c3RhdChhY3R1YWxfZmlsZW5hbWUpLnN0X3NpemUKKyAgICAgICAgaWYgYWN0dWFsX2xlbmd0aCA9
PSAwOgorICAgICAgICAgICAgaWYgZGlmZl9maWxlbmFtZToKKyAgICAgICAgICAgICAgICBvcGVu
KGRpZmZfZmlsZW5hbWUsICd3Jykud3JpdGUoZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgICAgIHJl
dHVybiAxCisKKyAgICAgICAgYWN0dWFsX2ZpbGUgPSBvcGVuKGFjdHVhbF9maWxlbmFtZSkucmVh
ZCgpCisgICAgICAgIGlucHV0ID0gJ0NvbnRlbnQtTGVuZ3RoOiAlZFxuJyAlIGFjdHVhbF9sZW5n
dGgKKyAgICAgICAgaW5wdXQgKz0gYWN0dWFsX2ZpbGUKKyAgICAgICAgaW5wdXQgKz0gJ0NvbnRl
bnQtTGVuZ3RoOiAlZFxuJyAlIGV4cGVjdGVkX2xlbmd0aAorICAgICAgICBpbnB1dCArPSBleHBl
Y3RlZF9maWxlCisKKyAgICAgICAgY21kID0gW3NlbGYuX3BhdGhfdG9faW1hZ2VfZGlmZigpLCAn
LS10b2xlcmFuY2UnLCAnMC4xJ10KKyAgICAgICAgc3AgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQ
cm9jZXNzKHNlbGYsICdJbWFnZURpZmYnLCBjbWQpCisKKyAgICAgICAgc3Aud3JpdGUoaW5wdXQp
CisKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDIuMAorICAgICAgICBvdXRwdXQg
PSBzcC5yZWFkX2xpbmUoZGVhZGxpbmUpCisgICAgICAgIHdoaWxlIG5vdCBzcC50aW1lZF9vdXQg
YW5kIG5vdCBzcC5jcmFzaGVkIGFuZCBvdXRwdXQ6CisgICAgICAgICAgICBpZiBvdXRwdXQuc3Rh
cnRzd2l0aCgnQ29udGVudC1MZW5ndGgnKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2go
J0NvbnRlbnQtTGVuZ3RoOiAoXGQrKScsIG91dHB1dCkKKyAgICAgICAgICAgICAgICBjb250ZW50
X2xlbmd0aCA9IGludChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIG91dHB1dCA9IHNwLnJl
YWQoZGVhZGxpbmUsIGNvbnRlbnRfbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICBlbGlmIG91dHB1dC5zdGFydHN3aXRoKCdkaWZmJyk6CisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIG91dHB1dCA9IHNwLnJlYWRfbGluZShkZWFkbGluZSkKKworICAg
ICAgICByZXN1bHQgPSAxCisgICAgICAgIGlmIHNwLnRpbWVkX291dDoKKyAgICAgICAgICAgIF9s
b2cuZXJyb3IoIkltYWdlRGlmZiB0aW1lZCBvdXQgb24gJXMiICUgZXhwZWN0ZWRfZmlsZW5hbWUp
CisgICAgICAgIGVsaWYgc3AuY3Jhc2hlZDoKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkltYWdl
RGlmZiBjcmFzaGVkIikKKyAgICAgICAgZWxpZiBvdXRwdXQuc3RhcnRzd2l0aCgnZGlmZicpOgor
ICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdkaWZmOiAoLispJSAocGFzc2VkfGZhaWxlZCknLCBv
dXRwdXQpCisgICAgICAgICAgICBpZiBtLmdyb3VwKDIpID09ICdwYXNzZWQnOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wZW4oZGlmZl9m
aWxlbmFtZSwgJ3cnKS53cml0ZShvdXRwdXQpCisgICAgICAgIHNwLnN0b3AoKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0CisKICAgICBkZWYgbnVtX2NvcmVzKHNlbGYpOgogICAgICAgICByZXR1cm4g
aW50KG9zLnBvcGVuMigic3lzY3RsIC1uIGh3Lm5jcHUiKVsxXS5yZWFkKCkpCiAKQEAgLTExNSw3
ICsxNzIsOCBAQCBjbGFzcyBNYWNQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIHJldHVybiAoJ21h
YycsKQogCiAgICAgZGVmIF9za2lwcGVkX2ZpbGVfcGF0aHMoc2VsZik6Ci0gICAgICAgICMgRklY
TUU6IFRoaXMgbWV0aG9kIHdpbGwgbmVlZCB0byBiZSBtYWRlIHdvcmsgZm9yIG5vbi1tYWMgcGxh
dGZvcm1zIGFuZCBtb3ZlZCBpbnRvIGJhc2UuUG9ydC4KKyAgICAgICAgIyBGSVhNRTogVGhpcyBt
ZXRob2Qgd2lsbCBuZWVkIHRvIGJlIG1hZGUgd29yayBmb3Igbm9uLW1hYyBwbGF0Zm9ybXMKKyAg
ICAgICAgIyBhbmQgbW92ZWQgaW50byBiYXNlLlBvcnQuCiAgICAgICAgIHNraXBwZWRfZmlsZXMg
PSBbXQogICAgICAgICBpZiBzZWxmLl9uYW1lIGluICgnbWFjLXRpZ2VyJywgJ21hYy1sZW9wYXJk
JywgJ21hYy1zbm93bGVvcGFyZCcpOgogICAgICAgICAgICAgc2tpcHBlZF9maWxlcy5hcHBlbmQo
b3MucGF0aC5qb2luKApAQCAtMTI1LDkgKzE4MywxMiBAQCBjbGFzcyBNYWNQb3J0KGJhc2UuUG9y
dCk6CiAgICAgICAgIHJldHVybiBza2lwcGVkX2ZpbGVzCiAKICAgICBkZWYgX3Rlc3RzX2Zvcl9v
dGhlcl9wbGF0Zm9ybXMoc2VsZik6Ci0gICAgICAgICMgVGhlIG9yaWdpbmFsIHJ1bi13ZWJraXQt
dGVzdHMgYnVpbGRzIHVwIGEgIndoaXRlbGlzdCIgb2YgdGVzdHMgdG8gcnVuLCBhbmQgcGFzc2Vz
IHRoYXQgdG8gRHVtcFJlbmRlclRyZWUuCi0gICAgICAgICMgcnVuLWNocm9taXVtLXdlYmtpdC10
ZXN0cyBhc3N1bWVzIHdlIHJ1biAqYWxsKiB0ZXN0cyBhbmQgdGVzdF9leHBlY3RhdGlvbnMudHh0
IGZ1bmN0aW9ucyBhcyBhIGJsYWNrbGlzdC4KLSAgICAgICAgIyBGSVhNRTogVGhpcyBsaXN0IGNv
dWxkIGJlIGR5bmFtaWMgYmFzZWQgb24gcGxhdGZvcm0gbmFtZSBhbmQgcHVzaGVkIGludG8gYmFz
ZS5Qb3J0LgorICAgICAgICAjIFRoZSBvcmlnaW5hbCBydW4td2Via2l0LXRlc3RzIGJ1aWxkcyB1
cCBhICJ3aGl0ZWxpc3QiIG9mIHRlc3RzCisgICAgICAgICMgdG8gcnVuLCBhbmQgcGFzc2VzIHRo
YXQgdG8gRHVtcFJlbmRlclRyZWUuCisgICAgICAgICMgbmV3LXJ1bi13ZWJraXQtdGVzdHMgYXNz
dW1lcyB3ZSBydW4gKmFsbCogdGVzdHMgYW5kCisgICAgICAgICMgdGVzdF9leHBlY3RhdGlvbnMu
dHh0IGZ1bmN0aW9ucyBhcyBhIGJsYWNrbGlzdC4KKyAgICAgICAgIyBGSVhNRTogVGhpcyBsaXN0
IGNvdWxkIGJlIGR5bmFtaWMgYmFzZWQgb24gcGxhdGZvcm0gbmFtZQorICAgICAgICAjIGFuZCBw
dXNoZWQgaW50byBiYXNlLlBvcnQuCiAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAicGxh
dGZvcm0vY2hyb21pdW0iLAogICAgICAgICAgICAgInBsYXRmb3JtL2d0ayIsCkBAIC0xMzYsMTYg
KzE5NywyMCBAQCBjbGFzcyBNYWNQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIF0KIAogICAgIGRl
ZiBfdGVzdHNfZm9yX2Rpc2FibGVkX2ZlYXR1cmVzKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2UgdGhlIGZlYXR1cmUgZGV0ZWN0aW9uIGZyb20gd2Via2l0cGVybC9mZWF0
dXJlcy5wbSB0byBtYXRjaCBydW4td2Via2l0LXRlc3RzLgotICAgICAgICAjIEZvciBub3cgd2Ug
aGFyZC1jb2RlIGEgbGlzdCBvZiBmZWF0dXJlcyBrbm93biB0byBiZSBkaXNhYmxlZCBvbiB0aGUg
TWFjIHBsYXRmb3JtLgorICAgICAgICAjIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIGZlYXR1
cmUgZGV0ZWN0aW9uIGZyb20KKyAgICAgICAgIyB3ZWJraXRwZXJsL2ZlYXR1cmVzLnBtIHRvIG1h
dGNoIHJ1bi13ZWJraXQtdGVzdHMuCisgICAgICAgICMgRm9yIG5vdyB3ZSBoYXJkLWNvZGUgYSBs
aXN0IG9mIGZlYXR1cmVzIGtub3duIHRvIGJlIGRpc2FibGVkIG9uCisgICAgICAgICMgdGhlIE1h
YyBwbGF0Zm9ybS4KICAgICAgICAgZGlzYWJsZWRfZmVhdHVyZV90ZXN0cyA9IFsKICAgICAgICAg
ICAgICJmYXN0L3hodG1sbXAiLAogICAgICAgICAgICAgImh0dHAvdGVzdHMvd21sIiwKICAgICAg
ICAgICAgICJtYXRobWwiLAogICAgICAgICAgICAgIndtbCIsCiAgICAgICAgIF0KLSAgICAgICAg
IyBGSVhNRTogd2ViYXJjaGl2ZSB0ZXN0cyBleHBlY3QgdG8gcmVhZC13cml0ZSBmcm9tIC1leHBl
Y3RlZC53ZWJhcmNoaXZlIGZpbGVzIGluc3RlYWQgb2YgLnR4dCBmaWxlcy4KLSAgICAgICAgIyBU
aGlzIHNjcmlwdCBkb2Vzbid0IGtub3cgaG93IHRvIGRvIHRoYXQgeWV0LCBzbyBwcmV0ZW5kIHRo
ZXkncmUganVzdCAiZGlzYWJsZWQiLgorICAgICAgICAjIEZJWE1FOiB3ZWJhcmNoaXZlIHRlc3Rz
IGV4cGVjdCB0byByZWFkLXdyaXRlIGZyb20KKyAgICAgICAgIy1leHBlY3RlZC53ZWJhcmNoaXZl
IGZpbGVzIGluc3RlYWQgb2YgLnR4dCBmaWxlcy4KKyAgICAgICAgIyBUaGlzIHNjcmlwdCBkb2Vz
bid0IGtub3cgaG93IHRvIGRvIHRoYXQgeWV0LCBzbyBwcmV0ZW5kIHRoZXkncmUganVzdAorICAg
ICAgICAjICJkaXNhYmxlZCIuCiAgICAgICAgIHdlYmFyY2hpdmVfdGVzdHMgPSBbCiAgICAgICAg
ICAgICAid2ViYXJjaGl2ZSIsCiAgICAgICAgICAgICAic3ZnL3dlYmFyY2hpdmUiLApAQCAtMTgy
LDEwICsyNDcsMTQgQEAgY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgogICAgICAgICAjIGEgdmVy
c2lvbi1zcGVjaWZpYyBmaWxlIGZvdW5kIGluIHBsYXRmb3JtL1gtdmVyc2lvbi4gRHVwbGljYXRl
CiAgICAgICAgICMgZW50cmllcyBhcmUgYWxsb3dlZC4gVGhpcyByb3V0aW5lIHJlYWRzIHRob3Nl
IGZpbGVzIGFuZCB0dXJucwogICAgICAgICAjIGNvbnRlbnRzIGludG8gdGhlIGZvcm1hdCBleHBl
Y3RlZCBieSB0ZXN0X2V4cGVjdGF0aW9ucy4KLSAgICAgICAgdGVzdHNfdG9fc2tpcCA9IHNldChz
ZWxmLl9leHBlY3RhdGlvbnNfZnJvbV9za2lwcGVkX2ZpbGVzKCkpICMgVXNlIGEgc2V0IHRvIGFs
bG93IGR1cGxpY2F0ZXMKKworICAgICAgICAjIFVzZSBhIHNldCB0byBhbGxvdyBkdXBsaWNhdGVz
CisgICAgICAgIHRlc3RzX3RvX3NraXAgPSBzZXQoc2VsZi5fZXhwZWN0YXRpb25zX2Zyb21fc2tp
cHBlZF9maWxlcygpKQorCiAgICAgICAgIHRlc3RzX3RvX3NraXAudXBkYXRlKHNlbGYuX3Rlc3Rz
X2Zvcl9vdGhlcl9wbGF0Zm9ybXMoKSkKICAgICAgICAgdGVzdHNfdG9fc2tpcC51cGRhdGUoc2Vs
Zi5fdGVzdHNfZm9yX2Rpc2FibGVkX2ZlYXR1cmVzKCkpCi0gICAgICAgIGV4cGVjdGF0aW9ucyA9
IG1hcChsYW1iZGEgdGVzdF9wYXRoOiAiQlVHX1NLSVBQRUQgU0tJUCA6ICVzID0gRkFJTCIgJSB0
ZXN0X3BhdGgsIHRlc3RzX3RvX3NraXApCisgICAgICAgIGV4cGVjdGF0aW9ucyA9IG1hcChsYW1i
ZGEgdGVzdF9wYXRoOiAiQlVHX1NLSVBQRUQgU0tJUCA6ICVzID0gRkFJTCIgJQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoLCB0ZXN0c190b19za2lwKQogICAgICAgICByZXR1
cm4gIlxuIi5qb2luKGV4cGVjdGF0aW9ucykKIAogICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25hbWUo
c2VsZik6CkBAIC0yMTcsOCArMjg2LDExIEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKIAog
ICAgIGRlZiBfYnVpbGRfcGF0aChzZWxmLCAqY29tcHMpOgogICAgICAgICBpZiBub3Qgc2VsZi5f
Y2FjaGVkX2J1aWxkX3Jvb3Q6Ci0gICAgICAgICAgICBzZWxmLl9jYWNoZWRfYnVpbGRfcm9vdCA9
IGV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2VsZi5zY3JpcHRfcGF0aCgid2Via2l0LWJ1aWxkLWRp
cmVjdG9yeSIpLCAiLS10b3AtbGV2ZWwiXSkucnN0cmlwKCkKLSAgICAgICAgcmV0dXJuIG9zLnBh
dGguam9pbihzZWxmLl9jYWNoZWRfYnVpbGRfcm9vdCwgc2VsZi5fb3B0aW9ucy50YXJnZXQsICpj
b21wcykKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9idWlsZF9yb290ID0gZXhlY3V0aXZlLnJ1
bl9jb21tYW5kKAorICAgICAgICAgICAgICAgIFtzZWxmLnNjcmlwdF9wYXRoKCJ3ZWJraXQtYnVp
bGQtZGlyZWN0b3J5IiksCisgICAgICAgICAgICAgICAgICItLXRvcC1sZXZlbCJdKS5yc3RyaXAo
KQorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX2NhY2hlZF9idWlsZF9yb290LCBz
ZWxmLl9vcHRpb25zLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29tcHMp
CiAKICAgICBkZWYgX2tpbGxfcHJvY2VzcyhzZWxmLCBwaWQpOgogICAgICAgICAiIiJGb3JjZWZ1
bGx5IGtpbGwgdGhlIHByb2Nlc3MuCkBAIC0yNTMsMTAgKzMyNSwxMSBAQCBjbGFzcyBNYWNQb3J0
KGJhc2UuUG9ydCk6CiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgX3BhdGhfdG9faW1h
Z2VfZGlmZihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2ltYWdlX2Rp
ZmYnKSAjIEZJWE1FOiBUaGlzIGlzIHdyb25nIGFuZCBzaG91bGQgYmUgIkltYWdlRGlmZiIsIGJ1
dCBoYXZpbmcgdGhlIGNvcnJlY3QgcGF0aCBjYXVzZXMgb3RoZXIgcGFydHMgb2YgdGhlIHNjcmlw
dCB0byBoYW5nLgorICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnSW1hZ2VEaWZmJykK
IAogICAgIGRlZiBfcGF0aF90b193ZGlmZihzZWxmKToKLSAgICAgICAgcmV0dXJuICd3ZGlmZicg
IyBGSVhNRTogVGhpcyBkb2VzIG5vdCBleGlzdCBvbiBhIGRlZmF1bHQgTWFjIE9TIFggTGVvcGFy
ZCBpbnN0YWxsLgorICAgICAgICAjIEZJWE1FOiBUaGlzIGRvZXMgbm90IGV4aXN0IG9uIGEgZGVm
YXVsdCBNYWMgT1MgWCBMZW9wYXJkIGluc3RhbGwuCisgICAgICAgIHJldHVybiAnd2RpZmYnCiAK
ICAgICBkZWYgX3NodXRfZG93bl9odHRwX3NlcnZlcihzZWxmLCBzZXJ2ZXJfcGlkKToKICAgICAg
ICAgIiIiU2h1dCBkb3duIHRoZSBsaWdodHRwZCB3ZWIgc2VydmVyLiBCbG9ja3MgdW50aWwgaXQn
cyBmdWxseQpAQCAtMjg4LDY5ICszNjEsNDQgQEAgY2xhc3MgTWFjRHJpdmVyKGJhc2UuRHJpdmVy
KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgaW1hZ2VfcGF0aCwgZHJpdmVyX29wdGlv
bnMpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9kcml2ZXJfb3B0
aW9ucyA9IGRyaXZlcl9vcHRpb25zCi0gICAgICAgIHNlbGYuX3RhcmdldCA9IHBvcnQuX29wdGlv
bnMudGFyZ2V0CiAgICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCi0gICAgICAg
IHNlbGYuX3N0ZG91dF9mZCA9IE5vbmUKLSAgICAgICAgc2VsZi5fY21kID0gTm9uZQotICAgICAg
ICBzZWxmLl9lbnYgPSBOb25lCi0gICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCi0gICAgICAgIHNl
bGYuX3JlYWRfYnVmZmVyID0gJycKIAogICAgICAgICBjbWQgPSBbXQorCiAgICAgICAgICMgSG9v
ayBmb3IgaW5qZWN0aW5nIHZhbGdyaW5kIG9yIG90aGVyIHJ1bnRpbWUgaW5zdHJ1bWVudGF0aW9u
LAogICAgICAgICAjIHVzZWQgYnkgZS5nLiB0b29scy92YWxncmluZC92YWxncmluZF90ZXN0cy5w
eS4KICAgICAgICAgd3JhcHBlciA9IG9zLmVudmlyb24uZ2V0KCJCUk9XU0VSX1dSQVBQRVIiLCBO
b25lKQogICAgICAgICBpZiB3cmFwcGVyICE9IE5vbmU6CiAgICAgICAgICAgICBjbWQgKz0gW3dy
YXBwZXJdCisKICAgICAgICAgaWYgc2VsZi5fcG9ydC5fb3B0aW9ucy53cmFwcGVyOgogICAgICAg
ICAgICAgIyBUaGlzIHNwbGl0KCkgaXNuJ3QgcmVhbGx5IHdoYXQgd2Ugd2FudCAtLSBpdCBpbmNv
cnJlY3RseSB3aWxsCiAgICAgICAgICAgICAjIHNwbGl0IHF1b3RlZCBzdHJpbmdzIHdpdGhpbiB0
aGUgd3JhcHBlciBhcmd1bWVudCAtLSBidXQgaW4KICAgICAgICAgICAgICMgcHJhY3RpY2UgaXQg
c2hvdWxkbid0IGNvbWUgdXAgYW5kIHRoZSAtLWhlbHAgb3V0cHV0IHdhcm5zCiAgICAgICAgICAg
ICAjIGFib3V0IGl0IGFueXdheS4KICAgICAgICAgICAgIGNtZCArPSBzZWxmLl9vcHRpb25zLndy
YXBwZXIuc3BsaXQoKQotICAgICAgICAjIEZJWE1FOiBVc2luZyBhcmNoIGhlcmUgbWFza3MgYW55
IHBvc3NpYmxlIGZpbGUtbm90LWZvdW5kIGVycm9ycyBmcm9tIGEgbm9uLWV4aXN0YW50IGRyaXZl
ciBleGVjdXRhYmxlLgotICAgICAgICBjbWQgKz0gWydhcmNoJywgJy1pMzg2JywgcG9ydC5fcGF0
aF90b19kcml2ZXIoKSwgJy0nXQogCi0gICAgICAgICMgRklYTUU6IFRoaXMgaXMgYSBoYWNrIGFy
b3VuZCBvdXIgbGFjayBvZiBJbWFnZURpZmYgc3VwcG9ydCBmb3Igbm93LgotICAgICAgICBpZiBu
b3Qgc2VsZi5fcG9ydC5fb3B0aW9ucy5ub19waXhlbF90ZXN0czoKLSAgICAgICAgICAgIF9sb2cu
d2FybigiVGhpcyBwb3J0IGRvZXMgbm90IHlldCBzdXBwb3J0IHBpeGVsIHRlc3RzLiIpCi0gICAg
ICAgICAgICBzZWxmLl9wb3J0Ll9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzID0gVHJ1ZQotICAgICAg
ICAgICAgI2NtZC5hcHBlbmQoJy0tcGl4ZWwtdGVzdHMnKQorICAgICAgICBjbWQgKz0gWydhcmNo
JywgJy1pMzg2JywgcG9ydC5fcGF0aF90b19kcml2ZXIoKSwgJy0nXQogCi0gICAgICAgICNpZiBk
cml2ZXJfb3B0aW9uczoKLSAgICAgICAgIyAgICBjbWQgKz0gZHJpdmVyX29wdGlvbnMKKyAgICAg
ICAgaWYgaW1hZ2VfcGF0aDoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tcGl4ZWwtdGVzdHMn
KQogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCiAgICAgICAgIGVudlsnRFlMRF9GUkFNRVdPUktf
UEFUSCddID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpCi0gICAgICAgIHNlbGYuX2NtZCA9IGNt
ZAotICAgICAgICBzZWxmLl9lbnYgPSBlbnYKLSAgICAgICAgc2VsZi5yZXN0YXJ0KCkKKyAgICAg
ICAgc2VsZi5fc3Byb2MgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKHNlbGYuX3BvcnQs
CisgICAgICAgICAgICAiRHVtcFJlbmRlclRyZWUiLCBjbWQsIGVudikKIAogICAgIGRlZiBwb2xs
KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3Nwcm9jLnBvbGwoKQogCiAgICAgZGVmIHJlc3RhcnQoc2VsZik6Ci0gICAgICAgIHNl
bGYuc3RvcCgpCi0gICAgICAgICMgV2UgbmVlZCB0byBwYXNzIGNsb3NlX2Zkcz1UcnVlIHRvIHdv
cmsgYXJvdW5kIFB5dGhvbiBidWcgIzIzMjAKLSAgICAgICAgIyAob3RoZXJ3aXNlIHdlIGNhbiBo
YW5nIHdoZW4gd2Uga2lsbCB0ZXN0X3NoZWxsIHdoZW4gd2UgYXJlIHJ1bm5pbmcKLSAgICAgICAg
IyBtdWx0aXBsZSB0aHJlYWRzKS4gU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIw
IC4KLSAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fY21kLCBzdGRp
bj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudj1zZWxmLl9lbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlKQorICAgICAgICBzZWxmLl9zcHJvYy5zdG9wKCkKKyAg
ICAgICAgc2VsZi5fc3Byb2Muc3RhcnQoKQorICAgICAgICByZXR1cm4KIAogICAgIGRlZiByZXR1
cm5jb2RlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5yZXR1cm5jb2RlCisgICAg
ICAgIHJldHVybiBzZWxmLl9wcm9jLnJldHVybmNvZGUoKQogCiAgICAgZGVmIHJ1bl90ZXN0KHNl
bGYsIHVyaSwgdGltZW91dG1zLCBpbWFnZV9oYXNoKToKLSAgICAgICAgb3V0cHV0ID0gW10KLSAg
ICAgICAgZXJyb3IgPSBbXQotICAgICAgICBpbWFnZSA9ICcnCi0gICAgICAgIGNyYXNoID0gRmFs
c2UKLSAgICAgICAgdGltZW91dCA9IEZhbHNlCi0gICAgICAgIGFjdHVhbF91cmkgPSBOb25lCi0g
ICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0gTm9uZQotCiAgICAgICAgIGlmIHVyaS5zdGFydHN3
aXRoKCJmaWxlOi8vLyIpOgogICAgICAgICAgICAgY21kID0gdXJpWzc6XQogICAgICAgICBlbHNl
OgpAQCAtMzYwLDEzMCArNDA4LDQ5IEBAIGNsYXNzIE1hY0RyaXZlcihiYXNlLkRyaXZlcik6CiAg
ICAgICAgICAgICBjbWQgKz0gIiciICsgaW1hZ2VfaGFzaAogICAgICAgICBjbWQgKz0gIlxuIgog
Ci0gICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoY21kKQotICAgICAgICBzZWxmLl9zdGRv
dXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQotICAgICAgICBmbCA9IGZjbnRsLmZj
bnRsKHNlbGYuX3N0ZG91dF9mZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgZmNudGwuZmNudGwo
c2VsZi5fc3Rkb3V0X2ZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAg
ICAgICMgcGRiLnNldF90cmFjZSgpCisgICAgICAgIHNwID0gc2VsZi5fc3Byb2MKKyAgICAgICAg
c3Aud3JpdGUoY21kKQogCi0gICAgICAgIHN0b3BfdGltZSA9IHRpbWUudGltZSgpICsgKGludCh0
aW1lb3V0bXMpIC8gMTAwMC4wKQotICAgICAgICByZXNwID0gJycKLSAgICAgICAgKHRpbWVvdXQs
IGxpbmUpID0gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSkKLSAgICAgICAgcmVz
cCArPSBsaW5lCiAgICAgICAgIGhhdmVfc2Vlbl9jb250ZW50X3R5cGUgPSBGYWxzZQotICAgICAg
ICB3aGlsZSBub3QgdGltZW91dCBhbmQgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6Ci0gICAgICAg
ICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGNyYXNoZWQuCi0gICAgICAgICAgICBpZiBsaW5l
ID09ICcnIGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAjIFRo
aXMgaXMgaGV4IGNvZGUgMHhjMDAwMDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJydXB0Ci0gICAg
ICAgICAgICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBjdHJsK2Mg
ZnJvbSB0aGUgcHJvbXB0Ci0gICAgICAgICAgICAgICAgIyBhbmQgd2UgaGFwcGVuIHRvIGJlIHdh
aXRpbmcgb24gdGhlIHRlc3Rfc2hlbGwuCi0gICAgICAgICAgICAgICAgIyBzZG95b246IE5vdCBz
dXJlIGZvciB3aGljaCBPUyBhbmQgaW4gd2hhdCBjaXJjdW1zdGFuY2VzIHRoZQotICAgICAgICAg
ICAgICAgICMgYWJvdmUgY29kZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIgTGlu
dXggdG8gZGV0ZWN0Ci0gICAgICAgICAgICAgICAgIyBjdHJsK2MgaXMgZm9yIHRoZSBzdWJwcm9j
ZXNzIHJldHVybmNvZGUgdG8gYmUgbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAjIFNJR0lOVC4g
QW5kIHRoYXQgYWdyZWVzIHdpdGggdGhlIHN1YnByb2Nlc3MgZG9jdW1lbnRhdGlvbi4KLSAgICAg
ICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0gc2VsZi5yZXR1cm5jb2RlKCkgb3IKLSAgICAg
ICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5UID09IHNlbGYucmV0dXJuY29kZSgpKToKLSAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAg
ICBjcmFzaCA9IFRydWUKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBhY3R1YWxfaW1h
Z2VfaGFzaCA9IE5vbmUKKyAgICAgICAgb3V0cHV0ID0gJycKKyAgICAgICAgaW1hZ2UgPSAnJwog
Ci0gICAgICAgICAgICBlbGlmIChsaW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQtVHlwZTonKSBhbmQg
bm90Ci0gICAgICAgICAgICAgICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlKToKKyAgICAgICAg
ZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIGludCh0aW1lb3V0bXMpIC8gMTAwMC4wCisgICAgICAg
IGxpbmUgPSBzcC5yZWFkX2xpbmUoZGVhZGxpbmUpCisgICAgICAgIHdoaWxlIG5vdCBzcC50aW1l
ZF9vdXQgYW5kIG5vdCBzcC5jcmFzaGVkIGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKKyAg
ICAgICAgICAgIGlmIChsaW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQtVHlwZTonKSBhbmQgbm90Cisg
ICAgICAgICAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSk6CiAgICAgICAgICAgICAgICAg
aGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSA9IFRydWUKLSAgICAgICAgICAgICAgICBwYXNzCiAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkKLQotICAg
ICAgICAgICAgKHRpbWVvdXQsIGxpbmUpID0gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3Bf
dGltZSkKLSAgICAgICAgICAgIHJlc3AgKz0gbGluZQorICAgICAgICAgICAgICAgIG91dHB1dCAr
PSBsaW5lCisgICAgICAgICAgICBsaW5lID0gc3AucmVhZF9saW5lKGRlYWRsaW5lKQogCiAgICAg
ICAgICMgTm93IHJlYWQgYSBzZWNvbmQgYmxvY2sgb2YgdGV4dCBmb3IgdGhlIG9wdGlvbmFsIGlt
YWdlIGRhdGEKLSAgICAgICAgaW1hZ2VfbGVuZ3RoID0gMAotICAgICAgICAodGltZW91dCwgbGlu
ZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lKQotICAgICAgICByZXNwICs9
IGxpbmUKKyAgICAgICAgcmVtYWluaW5nX2xlbmd0aCA9IDAKICAgICAgICAgSEFTSF9IRUFERVIg
PSAnQWN0dWFsSGFzaDogJwogICAgICAgICBMRU5HVEhfSEVBREVSID0gJ0NvbnRlbnQtTGVuZ3Ro
OiAnCi0gICAgICAgIHdoaWxlIG5vdCB0aW1lb3V0IGFuZCBub3QgY3Jhc2ggYW5kIGxpbmUucnN0
cmlwKCkgIT0gIiNFT0YiOgotICAgICAgICAgICAgaWYgbGluZSA9PSAnJyBhbmQgc2VsZi5wb2xs
KCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgKC0xMDczNzQxNTEwID09IHNlbGYu
cmV0dXJuY29kZSgpIG9yCi0gICAgICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJR0lOVCA9PSBz
ZWxmLnJldHVybmNvZGUoKSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50
ZXJydXB0Ci0gICAgICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCi0gICAgICAgICAgICAgICAgYnJl
YWsKLSAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKEhBU0hfSEVBREVSKToKKyAgICAg
ICAgbGluZSA9IHNwLnJlYWRfbGluZShkZWFkbGluZSkKKyAgICAgICAgd2hpbGUgbm90IHNwLnRp
bWVkX291dCBhbmQgbm90IHNwLmNyYXNoZWQgYW5kIGxpbmUucnN0cmlwKCkgIT0gIiNFT0YiOgor
ICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKEhBU0hfSEVBREVSKToKICAgICAgICAgICAg
ICAgICBhY3R1YWxfaW1hZ2VfaGFzaCA9IGxpbmVbbGVuKEhBU0hfSEVBREVSKTpdLnN0cmlwKCkK
ICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdDb250ZW50LVR5cGU6Jyk6CiAgICAg
ICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoTEVOR1RI
X0hFQURFUik6Ci0gICAgICAgICAgICAgICAgaW1hZ2VfbGVuZ3RoID0gaW50KGxpbmVbbGVuKExF
TkdUSF9IRUFERVIpOl0pCi0gICAgICAgICAgICBlbGlmIGltYWdlX2xlbmd0aDoKKyAgICAgICAg
ICAgICAgICByZW1haW5pbmdfbGVuZ3RoID0gaW50KGxpbmVbbGVuKExFTkdUSF9IRUFERVIpOl0p
CisgICAgICAgICAgICBlbGlmIHJlbWFpbmluZ19sZW5ndGg6CiAgICAgICAgICAgICAgICAgaW1h
Z2UgKz0gbGluZQotCi0gICAgICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xp
bmUodGltZW91dCwgc3RvcF90aW1lLCBpbWFnZV9sZW5ndGgpCi0gICAgICAgICAgICByZXNwICs9
IGxpbmUKLQotICAgICAgICBpZiB0aW1lb3V0OgotICAgICAgICAgICAgc2VsZi5yZXN0YXJ0KCkK
KyAgICAgICAgICAgICAgICByZW1haW5pbmdfbGVuZ3RoIC09IGxlbihsaW5lKQorICAgICAgICAg
ICAgbGluZSA9IHNwLnJlYWQoZGVhZGxpbmUsIHJlbWFpbmluZ19sZW5ndGgpCiAKICAgICAgICAg
aWYgc2VsZi5faW1hZ2VfcGF0aCBhbmQgbGVuKHNlbGYuX2ltYWdlX3BhdGgpOgogICAgICAgICAg
ICAgaW1hZ2VfZmlsZSA9IGZpbGUoc2VsZi5faW1hZ2VfcGF0aCwgIndiIikKICAgICAgICAgICAg
IGltYWdlX2ZpbGUud3JpdGUoaW1hZ2UpCiAgICAgICAgICAgICBpbWFnZV9maWxlLmNsb3NlKCkK
LQotICAgICAgICByZXR1cm4gKGNyYXNoLCB0aW1lb3V0LCBhY3R1YWxfaW1hZ2VfaGFzaCwKLSAg
ICAgICAgICAgICAgICAnJy5qb2luKG91dHB1dCksICcnLmpvaW4oZXJyb3IpKQorICAgICAgICBy
ZXR1cm4gKHNwLmNyYXNoZWQsIHNwLnRpbWVkX291dCwgYWN0dWFsX2ltYWdlX2hhc2gsIG91dHB1
dCwgc3AuZXJyb3IpCiAKICAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcHJv
YzoKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnI6
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAgICAgICAg
aWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpOgotICAgICAgICAgICAg
ICAgICMgQ2xvc2luZyBzdGRpbi9zdGRvdXQvc3RkZXJyIGhhbmdzIHNvbWV0aW1lcyBvbiBPUyBY
LAotICAgICAgICAgICAgICAgICMgKHNlZSByZXN0YXJ0KCksIGFib3ZlKSwgYW5kIGFueXdheSB3
ZSBkb24ndCB3YW50IHRvIGhhbmcKLSAgICAgICAgICAgICAgICAjIHRoZSBoYXJuZXNzIGlmIHRl
c3Rfc2hlbGwgaXMgYnVnZ3ksIHNvIHdlIHdhaXQgYSBjb3VwbGUKLSAgICAgICAgICAgICAgICAj
IHNlY29uZHMgdG8gZ2l2ZSB0ZXN0X3NoZWxsIGEgY2hhbmNlIHRvIGNsZWFuIHVwLCBidXQgdGhl
bgotICAgICAgICAgICAgICAgICMgZm9yY2Uta2lsbCB0aGUgcHJvY2VzcyBpZiBuZWNlc3Nhcnku
Ci0gICAgICAgICAgICAgICAgS0lMTF9USU1FT1VUID0gMy4wCi0gICAgICAgICAgICAgICAgdGlt
ZW91dCA9IHRpbWUudGltZSgpICsgS0lMTF9USU1FT1VUCi0gICAgICAgICAgICAgICAgd2hpbGUg
c2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCB0aW1lb3V0OgotICAg
ICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKLSAgICAgICAgICAgICAgICBpZiBzZWxm
Ll9wcm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmco
J3N0b3BwaW5nIHRlc3QgZHJpdmVyIHRpbWVkIG91dCwgJwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ2tpbGxpbmcgaXQnKQotICAgICAgICAgICAgICAgICAgICBudWxsID0gb3Bl
bihvcy5kZXZudWxsLCAidyIpCi0gICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4o
WyJraWxsIiwgIi05IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIo
c2VsZi5fcHJvYy5waWQpXSwgc3RkZXJyPW51bGwpCi0gICAgICAgICAgICAgICAgICAgIG51bGwu
Y2xvc2UoKQotCi0gICAgZGVmIF9yZWFkX2xpbmUoc2VsZiwgdGltZW91dCwgc3RvcF90aW1lLCBp
bWFnZV9sZW5ndGg9MCk6Ci0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJlYWRf
ZmRzID0gW10KLQotICAgICAgICAjIGZpcnN0IGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgbGlu
ZSBhbHJlYWR5IHJlYWQgb3IgaWYgd2UndmUKLSAgICAgICAgIyByZWFkIHRoZSBlbnRpcmUgaW1h
Z2UKLSAgICAgICAgaWYgaW1hZ2VfbGVuZ3RoIGFuZCBsZW4oc2VsZi5fcmVhZF9idWZmZXIpID49
IGltYWdlX2xlbmd0aDoKLSAgICAgICAgICAgIG91dCA9IHNlbGYuX3JlYWRfYnVmZmVyWzA6aW1h
Z2VfbGVuZ3RoXQotICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSBzZWxmLl9yZWFkX2J1
ZmZlcltpbWFnZV9sZW5ndGg6XQotICAgICAgICAgICAgcmV0dXJuICh0aW1lb3V0LCBvdXQpCi0K
LSAgICAgICAgaWR4ID0gc2VsZi5fcmVhZF9idWZmZXIuZmluZCgnXG4nKQotICAgICAgICBpZiBu
b3QgaW1hZ2VfbGVuZ3RoIGFuZCBpZHggIT0gLTE6Ci0gICAgICAgICAgICBvdXQgPSBzZWxmLl9y
ZWFkX2J1ZmZlclswOmlkeCArIDFdCi0gICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9IHNl
bGYuX3JlYWRfYnVmZmVyW2lkeCArIDE6XQotICAgICAgICAgICAgcmV0dXJuICh0aW1lb3V0LCBv
dXQpCi0KLSAgICAgICAgIyBJZiB3ZSd2ZSB0aW1lZCBvdXQsIHJldHVybiBqdXN0IHdoYXQgd2Ug
aGF2ZSwgaWYgYW55dGhpbmcKLSAgICAgICAgaWYgdGltZW91dCBvciBub3cgPj0gc3RvcF90aW1l
OgotICAgICAgICAgICAgb3V0ID0gc2VsZi5fcmVhZF9idWZmZXIKLSAgICAgICAgICAgIHNlbGYu
X3JlYWRfYnVmZmVyID0gJycKLSAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgb3V0KQotCi0gICAg
ICAgIChyZWFkX2Zkcywgd3JpdGVfZmRzLCBlcnJfZmRzKSA9IHNlbGVjdC5zZWxlY3QoCi0gICAg
ICAgICAgICBbc2VsZi5fc3Rkb3V0X2ZkXSwgW10sIFtdLCBzdG9wX3RpbWUgLSBub3cpCi0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgb3IgbGVuKHJlYWRfZmRzKSA9PSAxOgot
ICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyICs9IHNlbGYuX3Byb2Muc3Rkb3V0LnJl
YWQoKQotICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgIHJlYWQgPSBbXQot
ICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSkKKyAgICAg
ICAgaWYgc2VsZi5fc3Byb2M6CisgICAgICAgICAgICBzZWxmLl9zcHJvYy5zdG9wKCkKKyAgICAg
ICAgICAgIHNlbGYuX3Nwcm9jID0gTm9uZQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weSBiL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3Byb2Nlc3MucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4NzI0ZQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2Vy
dmVyX3Byb2Nlc3MucHkKQEAgLTAsMCArMSwyMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiJQYWNrYWdlIHRoYXQgaW1wbGVtZW50cyB0aGUgU2VydmVyUHJvY2VzcyB3
cmFwcGVyIGNsYXNzIiIiCisKK2ltcG9ydCBmY250bAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9y
dCBzeXMKK2ltcG9ydCB0aW1lCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQuc2VydmVyX3Byb2Nlc3MiKQorCisKK2NsYXNzIFNlcnZlclByb2Nl
c3M6CisgICAgIiIiVGhpcyBjbGFzcyBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIGEgc3VicHJv
Y2VzcyB0aGF0CisgICAgaW1wbGVtZW50cyBhIHNpbXBsZSByZWFkL3dyaXRlIHVzYWdlIG1vZGVs
LiBUaGUgcHJpbWFyeSBiZW5lZml0CisgICAgaXMgdGhhdCByZWFkaW5nIHJlc3BvbnNlcyB0YWtl
cyBhIHRpbWVvdXQsIHNvIHRoYXQgd2UgZG9uJ3QgZXZlciBibG9jaworICAgIGluZGVmaW5pdGVs
eS4gVGhlIGNsYXNzIGFsc28gaGFuZGxlcyB0cmFuc3BhcmVudGx5IHJlc3RhcnRpbmcgcHJvY2Vz
c2VzCisgICAgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgaXNzdWluZyBjb21tYW5kcy4iIiIKKworICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSk6CisgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0X29iagorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAg
ICAgICBzZWxmLl9jbWQgPSBjbWQKKyAgICAgICAgc2VsZi5fZW52ID0gZW52CisgICAgICAgIHNl
bGYuX3Jlc2V0KCkKKworICAgIGRlZiBfcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuX3Byb2Mg
PSBOb25lCisgICAgICAgIHNlbGYuX291dHB1dCA9ICcnCisgICAgICAgIHNlbGYuY3Jhc2hlZCA9
IEZhbHNlCisgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5lcnJv
ciA9ICcnCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAlIHNlbGYu
X25hbWUpCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAgICAgICAgY2xvc2VfZmRzID0gc3lzLnBs
YXRmb3JtIG5vdCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpCisgICAgICAgIHNlbGYuX3Byb2MgPSBz
dWJwcm9jZXNzLlBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5Q
SVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9Y2xv
c2VfZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9c2VsZi5f
ZW52KQorICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCisgICAgICAgIGZs
ID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZjbnRsLmZjbnRsKGZk
LCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIGZkID0gc2VsZi5f
cHJvYy5zdGRlcnIuZmlsZW5vKCkKKyAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwu
Rl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3Mu
T19OT05CTE9DSykKKworICAgIGRlZiBoYW5kbGVfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICAi
IiJUaGlzIHJvdXRpbmUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9yIGV4
aXRlZAorICAgICAgICBiZWNhdXNlIG9mIGEga2V5Ym9hcmQgaW50ZXJydXB0IGFuZCByYWlzZXMg
S2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgYWNjb3JkaW5nbHkuIiIiCisgICAgICAgIGlmIHNl
bGYuY3Jhc2hlZDoKKyAgICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3
aGljaCBpcyB1c2VkIGZvciBhYnJ1cHQKKyAgICAgICAgICAgICMgdGVybWluYXRpb24uIFRoaXMg
aGFwcGVucyBpZiB3ZSBoaXQgY3RybCtjIGZyb20gdGhlIHByb21wdAorICAgICAgICAgICAgIyBh
bmQgd2UgaGFwcGVuIHRvIGJlIHdhaXRpbmcgb24gdGhlIHRlc3Rfc2hlbGwuCisgICAgICAgICAg
ICAjIHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5j
ZXMgdGhlCisgICAgICAgICAgICAjIGFib3ZlIGNvZGUgaXMgdmFsaWQuIFdoYXQgd29ya3MgZm9y
IG1lIHVuZGVyIExpbnV4IHRvIGRldGVjdAorICAgICAgICAgICAgIyBjdHJsK2MgaXMgZm9yIHRo
ZSBzdWJwcm9jZXNzIHJldHVybmNvZGUgdG8gYmUgbmVnYXRpdmUKKyAgICAgICAgICAgICMgU0lH
SU5ULiBBbmQgdGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uLgor
ICAgICAgICAgICAgaWYgKC0xMDczNzQxNTEwID09IHNlbGYuX3Byb2MucmV0dXJuY29kZSBvcgor
ICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJR0lOVCA9PSBzZWxmLl9wcm9jLnJldHVybmNvZGUp
OgorICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgICAgICBy
ZXR1cm4KKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0byBzZWUgaWYg
dGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBydW5uaW5nOyByZXR1cm5zIE5vbmUKKyAgICAgICAg
aWYgaXQgc3RpbGwgaXMgKHdyYXBwZXIgYXJvdW5kIHN1YnByb2Nlc3MucG9sbCkuIiIiCisgICAg
ICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiByZXR1cm5jb2RlKHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIHRoZSBleGl0IGNvZGUgZnJvbSB0aGUgc3VicHJjb2VzczsgcmV0dXJucyBO
b25lIGlmIHRoZQorICAgICAgICBwcm9jZXNzIGhhc24ndCBleGl0ZWQgKHRoaXMgaXMgYSB3cmFw
cGVyIGFyb3VuZCBzdWJwcm9jZXNzLnJldHVybmNvZGUpLgorICAgICAgICAiIiIKKyAgICAgICAg
aWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnJldHVybmNvZGUK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiB3cml0ZShzZWxmLCBpbnB1dCk6CisgICAg
ICAgICIiIldyaXRlIGEgcmVxdWVzdCB0byB0aGUgc3VicHJvY2Vzcy4gVGhlIHN1YnByb2Nlc3Mg
aXMgKHJlLSlzdGFydCgpJ2VkCisgICAgICAgIGlmIGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuIiIi
CisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQor
ICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGlucHV0KQorCisgICAgZGVmIHJlYWRfbGlu
ZShzZWxmLCBkZWFkbGluZSk6CisgICAgICAgICIiIlJlYWQgYSBzaW5nbGUgbGluZSBmcm9tIHRo
ZSBzdWJwcm9jZXNzLCB3YWl0aW5nIHVudGlsIHRoZSBkZWFkbGluZS4KKyAgICAgICAgSWYgdGhl
IGRlYWRsaW5lIHBhc3NlcywgdGhlIGNhbGwgdGltZXMgb3V0LiBOb3RlIHRoYXQgZXZlbiBpZiB0
aGUKKyAgICAgICAgc3VicHJvY2VzcyBoYXMgY3Jhc2hlZCBvciB0aGUgZGVhZGxpbmUgaGFzIHBh
c3NlZCwgaWYgdGhlcmUgaXMgb3V0cHV0CisgICAgICAgIHBlbmRpbmcsIGl0IHdpbGwgYmUgcmV0
dXJuZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRlYWRsaW5lOiB0aW1lc3RhbXAg
dGhhdCB0aGUgcmVhZCBtdXN0IGNvbXBsZXRlIGJlZm9yZQorICAgICAgICBSZXR1cm5zOgorICAg
ICAgICAgICAgb3V0cHV0OiBkYXRhIHJldHVybmVkLCBpZiBhbnkuIElmIG5vIGRhdGEgaXMgYXZh
aWxhYmxlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICBjYWxsIHRpbWVzIG91dCBvciBjcmFzaGVz
LCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuIE5vdGUKKyAgICAgICAgICAgICAgICB0aGF0
IHRoZSByZXR1cm5lZCBzdHJpbmcgaW5jbHVkZXMgdGhlIG5ld2xpbmUgKCdcbicpLiIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgMCkKKworICAgIGRlZiByZWFkKHNlbGYs
IGRlYWRsaW5lLCBzaXplKToKKyAgICAgICAgIiIiQXR0ZW1wdHMgdG8gcmVhZCBzaXplIGNoYXJh
Y3RlcnMgZnJvbSB0aGUgc3VicHJvY2Vzcywgd2FpdGluZyB1bnRpbAorICAgICAgICB0aGUgZGVh
ZGxpbmUgcGFzc2VzLiBJZiB0aGUgZGVhZGxpbmUgcGFzc2VzLCBhbnkgYXZhaWxhYmxlIGRhdGEg
d2lsbCBiZQorICAgICAgICByZXR1cm5lZC4gTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIGRlYWRsaW5l
IGhhcyBwYXNzZWQgb3IgaWYgdGhlCisgICAgICAgIHN1YnByb2Nlc3MgaGFzIGNyYXNoZWQsIGFu
eSBhdmFpbGFibGUgZGF0YSB3aWxsIHN0aWxsIGJlIHJldHVybmVkLgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgICBkZWFkbGluZTogdGltZXN0YW1wIHRoYXQgdGhlIHJlYWQgbXVzdCBjb21w
bGV0ZSBiZWZvcmUKKyAgICAgICAgICAgIHNpemU6IGFtb3VudCBvZiBkYXRhIHRvIHJlYWQuCisg
ICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBvdXRwdXQ6IGRhdGEgcmV0dXJuZWQsIGlmIGFu
eS4gSWYgbm8gZGF0YSBpcyBhdmFpbGFibGUsIGFuIGVtcHR5CisgICAgICAgICAgICAgICAgc3Ry
aW5nIGlzIHJldHVybmVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQo
ZGVhZGxpbmUsIHNpemUpCisKKyAgICBkZWYgX3JlYWQoc2VsZiwgZGVhZGxpbmUsIHNpemUpOgor
ICAgICAgICAiIiJJbnRlcm5hbCByb3V0aW5lIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgcmVhZC4i
IiIKKyAgICAgICAgaWR4ID0gLTEKKyAgICAgICAgb3V0X2ZkID0gc2VsZi5fcHJvYy5zdGRvdXQu
ZmlsZW5vKCkKKyAgICAgICAgZXJyX2ZkID0gc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkKKyAg
ICAgICAgc2VsZWN0X2ZkcyA9IChvdXRfZmQsIGVycl9mZCkKKyAgICAgICAgd2hpbGUgbm90IHNl
bGYudGltZWRfb3V0IGFuZCBub3Qgc2VsZi5jcmFzaGVkOgorICAgICAgICAgICAgaWYgc2VsZi5f
cHJvYy5wb2xsKCkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmNyYXNoZWQgPSBUcnVl
CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfaW50ZXJydXB0KCkKKworICAgICAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIG5vdyA+IGRlYWRsaW5lOgorICAgICAg
ICAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQorCisgICAgICAgICAgICAjIENoZWNrIHRv
IHNlZSBpZiB3ZSBoYXZlIGFueSBvdXRwdXQgd2UgY2FuIHJldHVybi4KKyAgICAgICAgICAgIGlm
IHNpemUgYW5kIGxlbihzZWxmLl9vdXRwdXQpID49IHNpemU6CisgICAgICAgICAgICAgICAgaWR4
ID0gc2l6ZQorICAgICAgICAgICAgZWxpZiBzaXplID09IDA6CisgICAgICAgICAgICAgICAgaWR4
ID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAxCisKKyAgICAgICAgICAgIGlmIGlkeCBvciBz
ZWxmLmNyYXNoZWQgb3Igc2VsZi50aW1lZF9vdXQ6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0g
c2VsZi5fb3V0cHV0WzA6aWR4XQorICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCA9IHNlbGYu
X291dHB1dFtpZHg6XQorICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgICAgICAg
ICAgIyBOb3BlIC0gd2FpdCBmb3IgbW9yZSBkYXRhLgorICAgICAgICAgICAgKHJlYWRfZmRzLCB3
cml0ZV9mZHMsIGVycl9mZHMpID0gc2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0X2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVhZGxpbmUgLSBub3cpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgaWYgb3V0X2ZkIGluIHJlYWRfZmRzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9v
dXRwdXQgKz0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgZXJy
X2ZkIGluIHJlYWRfZmRzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yICs9IHNlbGYu
X3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAg
ICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3Ag
KHNodXQgZG93bikgdGhlIHN1YnByb2Nlc3MpLCBpZiBpdCBpcyBydW5uaW5nLiIiIgorICAgICAg
ICBwaWQgPSBzZWxmLl9wcm9jLnBpZAorICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkK
KyAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9wcm9j
LnN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAg
aWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpOgorICAgICAgICAgICAg
IyBDbG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRlcnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFgsCisg
ICAgICAgICAgICAjIChzZWUgcmVzdGFydCgpLCBhYm92ZSksIGFuZCBhbnl3YXkgd2UgZG9uJ3Qg
d2FudCB0byBoYW5nCisgICAgICAgICAgICAjIHRoZSBoYXJuZXNzIGlmIHRlc3Rfc2hlbGwgaXMg
YnVnZ3ksIHNvIHdlIHdhaXQgYSBjb3VwbGUKKyAgICAgICAgICAgICMgc2Vjb25kcyB0byBnaXZl
IHRlc3Rfc2hlbGwgYSBjaGFuY2UgdG8gY2xlYW4gdXAsIGJ1dCB0aGVuCisgICAgICAgICAgICAj
IGZvcmNlLWtpbGwgdGhlIHByb2Nlc3MgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgS0lMTF9U
SU1FT1VUID0gMy4wCisgICAgICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkgKyBLSUxMX1RJ
TUVPVVQKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRp
bWUudGltZSgpIDwgdGltZW91dDoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAg
ICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAg
X2xvZy53YXJuaW5nKCdzdG9wcGluZyAlcyB0aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmFtZSkKKyAgICAgICAgICAgICAgICBudWxs
ID0gb3Blbihvcy5kZXZudWxsLCAidyIpCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3Bl
bihbImtpbGwiLCAiLTkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihz
ZWxmLl9wcm9jLnBpZCldLCBzdGRlcnI9bnVsbCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3Nl
KCkKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ2tpbGxlZCcpCisgICAgICAgIHNlbGYu
X3Jlc2V0KCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQppbmRleCA0MjkyOGJh
Li4zYTNkOGE2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC05MCw2
ICs5MCw3IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgog
ICAgICAgICBBcmdzOgogICAgICAgICAgIGZpbGVuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdGVzdAog
ICAgICAgICAgIHRhcmdldDogRGVidWcgb3IgUmVsZWFzZQorICAgICAgICBSZXR1cm5zIDEgaWYg
dGhlIGZpbGVzIGFyZSBkaWZmZXJlbnQsIDAgaWYgdGhleSBtYXRjaAogICAgICAgICAiIiIKICAg
ICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAogICAg
ICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0NPTVBBUkUpCkBAIC05OCw2ICs5OSw3IEBAIGNs
YXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICBleHBl
Y3RlZF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1lKGZpbGVuYW1lLAogICAgICAgICAg
IHNlbGYuRklMRU5BTUVfU1VGRklYX0VYUEVDVEVEICsgJy5wbmcnKQogCisgICAgICAgIHJlc3Vs
dCA9IDEKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX2NvbXBhcmVfYXZhaWxhYmxlID0gVHJ1
ZQogICAgICAgICAgICAgcmVzdWx0ID0gcG9ydC5kaWZmX2ltYWdlKGV4cGVjdGVkX2ZpbGVuYW1l
LCBhY3R1YWxfZmlsZW5hbWUsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51676</attachid>
            <date>2010-03-25 14:36:07 -0700</date>
            <delta_ts>2010-03-25 18:15:35 -0700</delta_ts>
            <desc>fix ChangeLog comments</desc>
            <filename>wk34826_image_diff.diff</filename>
            <type>text/plain</type>
            <size>29913</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMDI0ZWRlLi5hZWY5Mzg5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDMt
MjUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHBpeGVsIHRlc3RzIChp
bWFnZSBkaWZmKSBwcm9wZXJseSBvbiB0aGUgTWFjIHBvcnQuIEFsc28KKyAgICAgICAgcmVmb3Jt
YXQgdG8gUEVQIDggc3R5bGUgZ3VpZGVsaW5lcy4KKworICAgICAgICBUaGlzIGNoYW5nZSBpbnRy
b2R1Y2VzIGEgbmV3ICJTZXJ2ZXJQb2Nlc3MiIGNsYXNzIHRoYXQgY2FuIGJlIHVzZWQKKyAgICAg
ICAgdG8gbWFuYWdlIHByb2Nlc3NlcyB0aGF0IHRoZSBydW4td2Via2l0LXRlc3RzIGhhcm5lc3Mg
Zm9ya3Mgb2ZmIGFuZAorICAgICAgICBleHBlY3RzIHRvIHN0YXkgdXAgZm9yIGxvbmdlciB0aGFu
IGEgc2luZ2xlIHJlcXVlc3QvcmVzcG9uc2Ugc2Vzc2lvbi4KKyAgICAgICAgQm90aCBEdW1wUmVu
ZGVyVHJlZSBhbmQgSW1hZ2VEaWZmIHVzZSB0aGlzIHN0eWxlIG9mIGNvbW11bmljYXRpb24sCisg
ICAgICAgIGFsdGhvdWdoIHRoZSBjdXJyZW50IGNvZGUgZm9ya3Mgb2ZmIGEgbmV3IEltYWdlRGlm
ZiBmb3IgZWFjaCBkaWZmCisgICAgICAgIChXZSBuZWVkIHRvIHJlc3RydWN0dXJlIG90aGVyIHBh
cnRzIG9mIHRoZSBjb2RlIHRvIGJlIGFibGUgdG8gZG8gdGhpcworICAgICAgICBzYWZlbHkgaW4g
YSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudCkuCisKKyAgICAgICAgQWxzbywgbm93IHRoYXQg
dGhlIFNlcnZlclByb2Nlc3MgYWJzdHJhY3Rpb24gZXhpc3RzLCB3ZSBjYW4gcHJvYmFibHkKKyAg
ICAgICAgY2xlYW4gdXAgYW5kIHNpbXBsaWZ5IHNvbWUgb2YgdGhlIHRocmVhZCBtYW5hZ2VtZW50
IGxvZ2ljIGluCisgICAgICAgIHRlc3Rfc2hlbGxfdGhyZWFkIGFzIHdlbGwuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0ODI2CisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlm
Zi5weToKKwogMjAxMC0wMy0yMiAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hYy5weSBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CmluZGV4IGQx
NjU5Y2UuLjliZDJjZDMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5CkBAIC0yOSwxMiArMjksMTEgQEAKIAogIiIiV2Vi
S2l0IE1hYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCiAKLWltcG9y
dCBmY250bAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHBkYgogaW1wb3J0IHBs
YXRmb3JtCi1pbXBvcnQgc2VsZWN0CitpbXBvcnQgcmUKIGltcG9ydCBzaWduYWwKIGltcG9ydCBz
dWJwcm9jZXNzCiBpbXBvcnQgc3lzCkBAIC00Miw2ICs0MSw3IEBAIGltcG9ydCB0aW1lCiBpbXBv
cnQgd2ViYnJvd3NlcgogCiBpbXBvcnQgYmFzZQoraW1wb3J0IHNlcnZlcl9wcm9jZXNzCiAKIGlt
cG9ydCB3ZWJraXRweQogZnJvbSB3ZWJraXRweSBpbXBvcnQgZXhlY3V0aXZlCkBAIC04NSwxMSAr
ODUsNjggQEAgY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgX2xvZy5lcnJv
cigiRHVtcFJlbmRlclRyZWUgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSBkcml2ZXJfcGF0aCkKICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgICAgICMgVGhpcyBzaG91bGQgYWxzbyB2YWxp
ZGF0ZSB0aGF0IHRoZSBJbWFnZURpZmYgcGF0aCBpcyB2YWxpZAotICAgICAgICAjIChvbmNlIHRo
aXMgc2NyaXB0IGtub3dzIGhvdyB0byB1c2UgSW1hZ2VEaWZmKS4KLSAgICAgICAgIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ4MjYKKyAgICAgICAgaW1hZ2VfZGlm
Zl9wYXRoID0gc2VsZi5fcGF0aF90b19pbWFnZV9kaWZmKCkKKyAgICAgICAgaWYgbm90IG9zLnBh
dGguZXhpc3RzKGltYWdlX2RpZmZfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJJbWFn
ZURpZmYgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSBpbWFnZV9kaWZmX3BhdGgpCisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKwogICAgICAgICByZXR1cm4gVHJ1ZQogCisgICAgZGVmIGRpZmZfaW1h
Z2Uoc2VsZiwgZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICBkaWZmX2ZpbGVuYW1lPU5vbmUpOgorICAgICAgICAiIiJDb21wYXJlIHR3byBpbWFn
ZSBmaWxlcyBhbmQgcHJvZHVjZSBhIGRlbHRhIGltYWdlIGZpbGUuCisKKyAgICAgICAgUmV0dXJu
IDEgaWYgdGhlIHR3byBmaWxlcyBhcmUgZGlmZmVyZW50LCAwIGlmIHRoZXkgYXJlIHRoZSBzYW1l
LgorICAgICAgICBBbHNvIHByb2R1Y2UgYSBkZWx0YSBpbWFnZSBvZiB0aGUgdHdvIGltYWdlcyBh
bmQgd3JpdGUgdGhhdCBpbnRvCisgICAgICAgIHxkaWZmX2ZpbGVuYW1lfCBpZiBpdCBpcyBub3Qg
Tm9uZS4iIiIKKyAgICAgICAgcmVzdWx0ID0gMQorICAgICAgICBleHBlY3RlZF9sZW5ndGggPSBv
cy5zdGF0KGV4cGVjdGVkX2ZpbGVuYW1lKS5zdF9zaXplCisgICAgICAgIGV4cGVjdGVkX2ZpbGUg
PSBvcGVuKGV4cGVjdGVkX2ZpbGVuYW1lKS5yZWFkKCkKKworICAgICAgICAjIEhhbmRsZSB0aGUg
Y2FzZSB3aGVyZSB0aGUgdGVzdCBkaWRuJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgYW4gaW1hZ2UuCisg
ICAgICAgIGFjdHVhbF9sZW5ndGggPSBvcy5zdGF0KGFjdHVhbF9maWxlbmFtZSkuc3Rfc2l6ZQor
ICAgICAgICBpZiBhY3R1YWxfbGVuZ3RoID09IDA6CisgICAgICAgICAgICBpZiBkaWZmX2ZpbGVu
YW1lOgorICAgICAgICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgJ3cnKS53cml0ZShleHBl
Y3RlZF9maWxlKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBhY3R1YWxfZmlsZSA9
IG9wZW4oYWN0dWFsX2ZpbGVuYW1lKS5yZWFkKCkKKyAgICAgICAgaW5wdXQgPSAnQ29udGVudC1M
ZW5ndGg6ICVkXG4nICUgYWN0dWFsX2xlbmd0aAorICAgICAgICBpbnB1dCArPSBhY3R1YWxfZmls
ZQorICAgICAgICBpbnB1dCArPSAnQ29udGVudC1MZW5ndGg6ICVkXG4nICUgZXhwZWN0ZWRfbGVu
Z3RoCisgICAgICAgIGlucHV0ICs9IGV4cGVjdGVkX2ZpbGUKKworICAgICAgICBjbWQgPSBbc2Vs
Zi5fcGF0aF90b19pbWFnZV9kaWZmKCksICctLXRvbGVyYW5jZScsICcwLjEnXQorICAgICAgICBz
cCA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3Moc2VsZiwgJ0ltYWdlRGlmZicsIGNtZCkK
KworICAgICAgICBzcC53cml0ZShpbnB1dCkKKworICAgICAgICBkZWFkbGluZSA9IHRpbWUudGlt
ZSgpICsgMi4wCisgICAgICAgIG91dHB1dCA9IHNwLnJlYWRfbGluZShkZWFkbGluZSkKKyAgICAg
ICAgd2hpbGUgbm90IHNwLnRpbWVkX291dCBhbmQgbm90IHNwLmNyYXNoZWQgYW5kIG91dHB1dDoK
KyAgICAgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdDb250ZW50LUxlbmd0aCcpOgorICAg
ICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnQ29udGVudC1MZW5ndGg6IChcZCspJywgb3V0cHV0
KQorICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoID0gaW50KG0uZ3JvdXAoMSkpCisgICAg
ICAgICAgICAgICAgb3V0cHV0ID0gc3AucmVhZChkZWFkbGluZSwgY29udGVudF9sZW5ndGgpCisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgb3V0cHV0LnN0YXJ0c3dpdGgo
J2RpZmYnKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgb3V0cHV0ID0gc3Au
cmVhZF9saW5lKGRlYWRsaW5lKQorCisgICAgICAgIHJlc3VsdCA9IDEKKyAgICAgICAgaWYgc3Au
dGltZWRfb3V0OgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIHRpbWVkIG91dCBv
biAlcyIgJSBleHBlY3RlZF9maWxlbmFtZSkKKyAgICAgICAgZWxpZiBzcC5jcmFzaGVkOgorICAg
ICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIGNyYXNoZWQiKQorICAgICAgICBlbGlmIG91
dHB1dC5zdGFydHN3aXRoKCdkaWZmJyk6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goJ2RpZmY6
ICguKyklIChwYXNzZWR8ZmFpbGVkKScsIG91dHB1dCkKKyAgICAgICAgICAgIGlmIG0uZ3JvdXAo
MikgPT0gJ3Bhc3NlZCc6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMAorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgb3BlbihkaWZmX2ZpbGVuYW1lLCAndycpLndyaXRlKG91dHB1dCkKKyAg
ICAgICAgc3Auc3RvcCgpCisgICAgICAgIHJldHVybiByZXN1bHQKKwogICAgIGRlZiBudW1fY29y
ZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBpbnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNw
dSIpWzFdLnJlYWQoKSkKIApAQCAtMTE1LDcgKzE3Miw4IEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Q
b3J0KToKICAgICAgICAgcmV0dXJuICgnbWFjJywpCiAKICAgICBkZWYgX3NraXBwZWRfZmlsZV9w
YXRocyhzZWxmKToKLSAgICAgICAgIyBGSVhNRTogVGhpcyBtZXRob2Qgd2lsbCBuZWVkIHRvIGJl
IG1hZGUgd29yayBmb3Igbm9uLW1hYyBwbGF0Zm9ybXMgYW5kIG1vdmVkIGludG8gYmFzZS5Qb3J0
LgorICAgICAgICAjIEZJWE1FOiBUaGlzIG1ldGhvZCB3aWxsIG5lZWQgdG8gYmUgbWFkZSB3b3Jr
IGZvciBub24tbWFjIHBsYXRmb3JtcworICAgICAgICAjIGFuZCBtb3ZlZCBpbnRvIGJhc2UuUG9y
dC4KICAgICAgICAgc2tpcHBlZF9maWxlcyA9IFtdCiAgICAgICAgIGlmIHNlbGYuX25hbWUgaW4g
KCdtYWMtdGlnZXInLCAnbWFjLWxlb3BhcmQnLCAnbWFjLXNub3dsZW9wYXJkJyk6CiAgICAgICAg
ICAgICBza2lwcGVkX2ZpbGVzLmFwcGVuZChvcy5wYXRoLmpvaW4oCkBAIC0xMjUsOSArMTgzLDEy
IEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgcmV0dXJuIHNraXBwZWRfZmls
ZXMKIAogICAgIGRlZiBfdGVzdHNfZm9yX290aGVyX3BsYXRmb3JtcyhzZWxmKToKLSAgICAgICAg
IyBUaGUgb3JpZ2luYWwgcnVuLXdlYmtpdC10ZXN0cyBidWlsZHMgdXAgYSAid2hpdGVsaXN0IiBv
ZiB0ZXN0cyB0byBydW4sIGFuZCBwYXNzZXMgdGhhdCB0byBEdW1wUmVuZGVyVHJlZS4KLSAgICAg
ICAgIyBydW4tY2hyb21pdW0td2Via2l0LXRlc3RzIGFzc3VtZXMgd2UgcnVuICphbGwqIHRlc3Rz
IGFuZCB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgZnVuY3Rpb25zIGFzIGEgYmxhY2tsaXN0LgotICAg
ICAgICAjIEZJWE1FOiBUaGlzIGxpc3QgY291bGQgYmUgZHluYW1pYyBiYXNlZCBvbiBwbGF0Zm9y
bSBuYW1lIGFuZCBwdXNoZWQgaW50byBiYXNlLlBvcnQuCisgICAgICAgICMgVGhlIG9yaWdpbmFs
IHJ1bi13ZWJraXQtdGVzdHMgYnVpbGRzIHVwIGEgIndoaXRlbGlzdCIgb2YgdGVzdHMKKyAgICAg
ICAgIyB0byBydW4sIGFuZCBwYXNzZXMgdGhhdCB0byBEdW1wUmVuZGVyVHJlZS4KKyAgICAgICAg
IyBuZXctcnVuLXdlYmtpdC10ZXN0cyBhc3N1bWVzIHdlIHJ1biAqYWxsKiB0ZXN0cyBhbmQKKyAg
ICAgICAgIyB0ZXN0X2V4cGVjdGF0aW9ucy50eHQgZnVuY3Rpb25zIGFzIGEgYmxhY2tsaXN0Lgor
ICAgICAgICAjIEZJWE1FOiBUaGlzIGxpc3QgY291bGQgYmUgZHluYW1pYyBiYXNlZCBvbiBwbGF0
Zm9ybSBuYW1lCisgICAgICAgICMgYW5kIHB1c2hlZCBpbnRvIGJhc2UuUG9ydC4KICAgICAgICAg
cmV0dXJuIFsKICAgICAgICAgICAgICJwbGF0Zm9ybS9jaHJvbWl1bSIsCiAgICAgICAgICAgICAi
cGxhdGZvcm0vZ3RrIiwKQEAgLTEzNiwxNiArMTk3LDIwIEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Q
b3J0KToKICAgICAgICAgXQogCiAgICAgZGVmIF90ZXN0c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMo
c2VsZik6Ci0gICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgZmVhdHVyZSBkZXRl
Y3Rpb24gZnJvbSB3ZWJraXRwZXJsL2ZlYXR1cmVzLnBtIHRvIG1hdGNoIHJ1bi13ZWJraXQtdGVz
dHMuCi0gICAgICAgICMgRm9yIG5vdyB3ZSBoYXJkLWNvZGUgYSBsaXN0IG9mIGZlYXR1cmVzIGtu
b3duIHRvIGJlIGRpc2FibGVkIG9uIHRoZSBNYWMgcGxhdGZvcm0uCisgICAgICAgICMgRklYTUU6
IFRoaXMgc2hvdWxkIHVzZSB0aGUgZmVhdHVyZSBkZXRlY3Rpb24gZnJvbQorICAgICAgICAjIHdl
YmtpdHBlcmwvZmVhdHVyZXMucG0gdG8gbWF0Y2ggcnVuLXdlYmtpdC10ZXN0cy4KKyAgICAgICAg
IyBGb3Igbm93IHdlIGhhcmQtY29kZSBhIGxpc3Qgb2YgZmVhdHVyZXMga25vd24gdG8gYmUgZGlz
YWJsZWQgb24KKyAgICAgICAgIyB0aGUgTWFjIHBsYXRmb3JtLgogICAgICAgICBkaXNhYmxlZF9m
ZWF0dXJlX3Rlc3RzID0gWwogICAgICAgICAgICAgImZhc3QveGh0bWxtcCIsCiAgICAgICAgICAg
ICAiaHR0cC90ZXN0cy93bWwiLAogICAgICAgICAgICAgIm1hdGhtbCIsCiAgICAgICAgICAgICAi
d21sIiwKICAgICAgICAgXQotICAgICAgICAjIEZJWE1FOiB3ZWJhcmNoaXZlIHRlc3RzIGV4cGVj
dCB0byByZWFkLXdyaXRlIGZyb20gLWV4cGVjdGVkLndlYmFyY2hpdmUgZmlsZXMgaW5zdGVhZCBv
ZiAudHh0IGZpbGVzLgotICAgICAgICAjIFRoaXMgc2NyaXB0IGRvZXNuJ3Qga25vdyBob3cgdG8g
ZG8gdGhhdCB5ZXQsIHNvIHByZXRlbmQgdGhleSdyZSBqdXN0ICJkaXNhYmxlZCIuCisgICAgICAg
ICMgRklYTUU6IHdlYmFyY2hpdmUgdGVzdHMgZXhwZWN0IHRvIHJlYWQtd3JpdGUgZnJvbQorICAg
ICAgICAjLWV4cGVjdGVkLndlYmFyY2hpdmUgZmlsZXMgaW5zdGVhZCBvZiAudHh0IGZpbGVzLgor
ICAgICAgICAjIFRoaXMgc2NyaXB0IGRvZXNuJ3Qga25vdyBob3cgdG8gZG8gdGhhdCB5ZXQsIHNv
IHByZXRlbmQgdGhleSdyZSBqdXN0CisgICAgICAgICMgImRpc2FibGVkIi4KICAgICAgICAgd2Vi
YXJjaGl2ZV90ZXN0cyA9IFsKICAgICAgICAgICAgICJ3ZWJhcmNoaXZlIiwKICAgICAgICAgICAg
ICJzdmcvd2ViYXJjaGl2ZSIsCkBAIC0xODIsMTAgKzI0NywxNCBAQCBjbGFzcyBNYWNQb3J0KGJh
c2UuUG9ydCk6CiAgICAgICAgICMgYSB2ZXJzaW9uLXNwZWNpZmljIGZpbGUgZm91bmQgaW4gcGxh
dGZvcm0vWC12ZXJzaW9uLiBEdXBsaWNhdGUKICAgICAgICAgIyBlbnRyaWVzIGFyZSBhbGxvd2Vk
LiBUaGlzIHJvdXRpbmUgcmVhZHMgdGhvc2UgZmlsZXMgYW5kIHR1cm5zCiAgICAgICAgICMgY29u
dGVudHMgaW50byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IHRlc3RfZXhwZWN0YXRpb25zLgotICAg
ICAgICB0ZXN0c190b19za2lwID0gc2V0KHNlbGYuX2V4cGVjdGF0aW9uc19mcm9tX3NraXBwZWRf
ZmlsZXMoKSkgIyBVc2UgYSBzZXQgdG8gYWxsb3cgZHVwbGljYXRlcworCisgICAgICAgICMgVXNl
IGEgc2V0IHRvIGFsbG93IGR1cGxpY2F0ZXMKKyAgICAgICAgdGVzdHNfdG9fc2tpcCA9IHNldChz
ZWxmLl9leHBlY3RhdGlvbnNfZnJvbV9za2lwcGVkX2ZpbGVzKCkpCisKICAgICAgICAgdGVzdHNf
dG9fc2tpcC51cGRhdGUoc2VsZi5fdGVzdHNfZm9yX290aGVyX3BsYXRmb3JtcygpKQogICAgICAg
ICB0ZXN0c190b19za2lwLnVwZGF0ZShzZWxmLl90ZXN0c19mb3JfZGlzYWJsZWRfZmVhdHVyZXMo
KSkKLSAgICAgICAgZXhwZWN0YXRpb25zID0gbWFwKGxhbWJkYSB0ZXN0X3BhdGg6ICJCVUdfU0tJ
UFBFRCBTS0lQIDogJXMgPSBGQUlMIiAlIHRlc3RfcGF0aCwgdGVzdHNfdG9fc2tpcCkKKyAgICAg
ICAgZXhwZWN0YXRpb25zID0gbWFwKGxhbWJkYSB0ZXN0X3BhdGg6ICJCVUdfU0tJUFBFRCBTS0lQ
IDogJXMgPSBGQUlMIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGgsIHRl
c3RzX3RvX3NraXApCiAgICAgICAgIHJldHVybiAiXG4iLmpvaW4oZXhwZWN0YXRpb25zKQogCiAg
ICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKQEAgLTIxNyw4ICsyODYsMTEgQEAgY2xh
c3MgTWFjUG9ydChiYXNlLlBvcnQpOgogCiAgICAgZGVmIF9idWlsZF9wYXRoKHNlbGYsICpjb21w
cyk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9jYWNoZWRfYnVpbGRfcm9vdDoKLSAgICAgICAgICAg
IHNlbGYuX2NhY2hlZF9idWlsZF9yb290ID0gZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtzZWxmLnNj
cmlwdF9wYXRoKCJ3ZWJraXQtYnVpbGQtZGlyZWN0b3J5IiksICItLXRvcC1sZXZlbCJdKS5yc3Ry
aXAoKQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuX2NhY2hlZF9idWlsZF9yb290
LCBzZWxmLl9vcHRpb25zLnRhcmdldCwgKmNvbXBzKQorICAgICAgICAgICAgc2VsZi5fY2FjaGVk
X2J1aWxkX3Jvb3QgPSBleGVjdXRpdmUucnVuX2NvbW1hbmQoCisgICAgICAgICAgICAgICAgW3Nl
bGYuc2NyaXB0X3BhdGgoIndlYmtpdC1idWlsZC1kaXJlY3RvcnkiKSwKKyAgICAgICAgICAgICAg
ICAgIi0tdG9wLWxldmVsIl0pLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4o
c2VsZi5fY2FjaGVkX2J1aWxkX3Jvb3QsIHNlbGYuX29wdGlvbnMudGFyZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpjb21wcykKIAogICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYs
IHBpZCk6CiAgICAgICAgICIiIkZvcmNlZnVsbHkga2lsbCB0aGUgcHJvY2Vzcy4KQEAgLTI1Mywx
MCArMzI1LDExIEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgcmV0dXJuIE5v
bmUKIAogICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicpICMgRklYTUU6IFRoaXMgaXMgd3JvbmcgYW5k
IHNob3VsZCBiZSAiSW1hZ2VEaWZmIiwgYnV0IGhhdmluZyB0aGUgY29ycmVjdCBwYXRoIGNhdXNl
cyBvdGhlciBwYXJ0cyBvZiB0aGUgc2NyaXB0IHRvIGhhbmcuCisgICAgICAgIHJldHVybiBzZWxm
Ll9idWlsZF9wYXRoKCdJbWFnZURpZmYnKQogCiAgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYp
OgotICAgICAgICByZXR1cm4gJ3dkaWZmJyAjIEZJWE1FOiBUaGlzIGRvZXMgbm90IGV4aXN0IG9u
IGEgZGVmYXVsdCBNYWMgT1MgWCBMZW9wYXJkIGluc3RhbGwuCisgICAgICAgICMgRklYTUU6IFRo
aXMgZG9lcyBub3QgZXhpc3Qgb24gYSBkZWZhdWx0IE1hYyBPUyBYIExlb3BhcmQgaW5zdGFsbC4K
KyAgICAgICAgcmV0dXJuICd3ZGlmZicKIAogICAgIGRlZiBfc2h1dF9kb3duX2h0dHBfc2VydmVy
KHNlbGYsIHNlcnZlcl9waWQpOgogICAgICAgICAiIiJTaHV0IGRvd24gdGhlIGxpZ2h0dHBkIHdl
YiBzZXJ2ZXIuIEJsb2NrcyB1bnRpbCBpdCdzIGZ1bGx5CkBAIC0yODgsNjkgKzM2MSw0NCBAQCBj
bGFzcyBNYWNEcml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
LCBpbWFnZV9wYXRoLCBkcml2ZXJfb3B0aW9ucyk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0
CiAgICAgICAgIHNlbGYuX2RyaXZlcl9vcHRpb25zID0gZHJpdmVyX29wdGlvbnMKLSAgICAgICAg
c2VsZi5fdGFyZ2V0ID0gcG9ydC5fb3B0aW9ucy50YXJnZXQKICAgICAgICAgc2VsZi5faW1hZ2Vf
cGF0aCA9IGltYWdlX3BhdGgKLSAgICAgICAgc2VsZi5fc3Rkb3V0X2ZkID0gTm9uZQotICAgICAg
ICBzZWxmLl9jbWQgPSBOb25lCi0gICAgICAgIHNlbGYuX2VudiA9IE5vbmUKLSAgICAgICAgc2Vs
Zi5fcHJvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSAnJwogCiAgICAgICAg
IGNtZCA9IFtdCisKICAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3Ro
ZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCiAgICAgICAgICMgdXNlZCBieSBlLmcuIHRvb2xz
L3ZhbGdyaW5kL3ZhbGdyaW5kX3Rlc3RzLnB5LgogICAgICAgICB3cmFwcGVyID0gb3MuZW52aXJv
bi5nZXQoIkJST1dTRVJfV1JBUFBFUiIsIE5vbmUpCiAgICAgICAgIGlmIHdyYXBwZXIgIT0gTm9u
ZToKICAgICAgICAgICAgIGNtZCArPSBbd3JhcHBlcl0KKwogICAgICAgICBpZiBzZWxmLl9wb3J0
Ll9vcHRpb25zLndyYXBwZXI6CiAgICAgICAgICAgICAjIFRoaXMgc3BsaXQoKSBpc24ndCByZWFs
bHkgd2hhdCB3ZSB3YW50IC0tIGl0IGluY29ycmVjdGx5IHdpbGwKICAgICAgICAgICAgICMgc3Bs
aXQgcXVvdGVkIHN0cmluZ3Mgd2l0aGluIHRoZSB3cmFwcGVyIGFyZ3VtZW50IC0tIGJ1dCBpbgog
ICAgICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0taGVs
cCBvdXRwdXQgd2FybnMKICAgICAgICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgogICAgICAgICAg
ICAgY21kICs9IHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgpCi0gICAgICAgICMgRklYTUU6
IFVzaW5nIGFyY2ggaGVyZSBtYXNrcyBhbnkgcG9zc2libGUgZmlsZS1ub3QtZm91bmQgZXJyb3Jz
IGZyb20gYSBub24tZXhpc3RhbnQgZHJpdmVyIGV4ZWN1dGFibGUuCi0gICAgICAgIGNtZCArPSBb
J2FyY2gnLCAnLWkzODYnLCBwb3J0Ll9wYXRoX3RvX2RyaXZlcigpLCAnLSddCiAKLSAgICAgICAg
IyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgYXJvdW5kIG91ciBsYWNrIG9mIEltYWdlRGlmZiBzdXBw
b3J0IGZvciBub3cuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0Ll9vcHRpb25zLm5vX3BpeGVs
X3Rlc3RzOgotICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIHBvcnQgZG9lcyBub3QgeWV0IHN1
cHBvcnQgcGl4ZWwgdGVzdHMuIikKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuX29wdGlvbnMubm9f
cGl4ZWxfdGVzdHMgPSBUcnVlCi0gICAgICAgICAgICAjY21kLmFwcGVuZCgnLS1waXhlbC10ZXN0
cycpCisgICAgICAgIGNtZCArPSBbJ2FyY2gnLCAnLWkzODYnLCBwb3J0Ll9wYXRoX3RvX2RyaXZl
cigpLCAnLSddCiAKLSAgICAgICAgI2lmIGRyaXZlcl9vcHRpb25zOgotICAgICAgICAjICAgIGNt
ZCArPSBkcml2ZXJfb3B0aW9ucworICAgICAgICBpZiBpbWFnZV9wYXRoOgorICAgICAgICAgICAg
Y21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCiAgICAgICAgIGVudiA9IG9zLmVudmlyb24KICAg
ICAgICAgZW52WydEWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRo
KCkKLSAgICAgICAgc2VsZi5fY21kID0gY21kCi0gICAgICAgIHNlbGYuX2VudiA9IGVudgotICAg
ICAgICBzZWxmLnJlc3RhcnQoKQorICAgICAgICBzZWxmLl9zcHJvYyA9IHNlcnZlcl9wcm9jZXNz
LlNlcnZlclByb2Nlc3Moc2VsZi5fcG9ydCwKKyAgICAgICAgICAgICJEdW1wUmVuZGVyVHJlZSIs
IGNtZCwgZW52KQogCiAgICAgZGVmIHBvbGwoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9w
cm9jLnBvbGwoKQorICAgICAgICByZXR1cm4gc2VsZi5fc3Byb2MucG9sbCgpCiAKICAgICBkZWYg
cmVzdGFydChzZWxmKToKLSAgICAgICAgc2VsZi5zdG9wKCkKLSAgICAgICAgIyBXZSBuZWVkIHRv
IHBhc3MgY2xvc2VfZmRzPVRydWUgdG8gd29yayBhcm91bmQgUHl0aG9uIGJ1ZyAjMjMyMAotICAg
ICAgICAjIChvdGhlcndpc2Ugd2UgY2FuIGhhbmcgd2hlbiB3ZSBraWxsIHRlc3Rfc2hlbGwgd2hl
biB3ZSBhcmUgcnVubmluZwotICAgICAgICAjIG11bHRpcGxlIHRocmVhZHMpLiBTZWUgaHR0cDov
L2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAgLgotICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJv
Y2Vzcy5Qb3BlbihzZWxmLl9jbWQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXNlbGYuX2VudiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUpCisgICAg
ICAgIHNlbGYuX3Nwcm9jLnN0b3AoKQorICAgICAgICBzZWxmLl9zcHJvYy5zdGFydCgpCisgICAg
ICAgIHJldHVybgogCiAgICAgZGVmIHJldHVybmNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9wcm9jLnJldHVybmNvZGUKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucmV0dXJuY29k
ZSgpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gp
OgotICAgICAgICBvdXRwdXQgPSBbXQotICAgICAgICBlcnJvciA9IFtdCi0gICAgICAgIGltYWdl
ID0gJycKLSAgICAgICAgY3Jhc2ggPSBGYWxzZQotICAgICAgICB0aW1lb3V0ID0gRmFsc2UKLSAg
ICAgICAgYWN0dWFsX3VyaSA9IE5vbmUKLSAgICAgICAgYWN0dWFsX2ltYWdlX2hhc2ggPSBOb25l
Ci0KICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImZpbGU6Ly8vIik6CiAgICAgICAgICAgICBj
bWQgPSB1cmlbNzpdCiAgICAgICAgIGVsc2U6CkBAIC0zNjAsMTMwICs0MDgsNDkgQEAgY2xhc3Mg
TWFjRHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgICAgIGNtZCArPSAiJyIgKyBpbWFnZV9o
YXNoCiAgICAgICAgIGNtZCArPSAiXG4iCiAKLSAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0
ZShjbWQpCi0gICAgICAgIHNlbGYuX3N0ZG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVu
bygpCi0gICAgICAgIGZsID0gZmNudGwuZmNudGwoc2VsZi5fc3Rkb3V0X2ZkLCBmY250bC5GX0dF
VEZMKQotICAgICAgICBmY250bC5mY250bChzZWxmLl9zdGRvdXRfZmQsIGZjbnRsLkZfU0VURkws
IGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgIyBwZGIuc2V0X3RyYWNlKCkKKyAgICAgICAg
c3AgPSBzZWxmLl9zcHJvYworICAgICAgICBzcC53cml0ZShjbWQpCiAKLSAgICAgICAgc3RvcF90
aW1lID0gdGltZS50aW1lKCkgKyAoaW50KHRpbWVvdXRtcykgLyAxMDAwLjApCi0gICAgICAgIHJl
c3AgPSAnJwotICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91
dCwgc3RvcF90aW1lKQotICAgICAgICByZXNwICs9IGxpbmUKICAgICAgICAgaGF2ZV9zZWVuX2Nv
bnRlbnRfdHlwZSA9IEZhbHNlCi0gICAgICAgIHdoaWxlIG5vdCB0aW1lb3V0IGFuZCBsaW5lLnJz
dHJpcCgpICE9ICIjRU9GIjoKLSAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jh
c2hlZC4KLSAgICAgICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3aGlj
aCBpcyB1c2VkIGZvciBhYnJ1cHQKLSAgICAgICAgICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlz
IGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQKLSAgICAgICAgICAgICAg
ICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVsbC4KLSAgICAg
ICAgICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNp
cmN1bXN0YW5jZXMgdGhlCi0gICAgICAgICAgICAgICAgIyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBX
aGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKLSAgICAgICAgICAgICAgICAj
IGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZQot
ICAgICAgICAgICAgICAgICMgU0lHSU5ULiBBbmQgdGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJv
Y2VzcyBkb2N1bWVudGF0aW9uLgotICAgICAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBz
ZWxmLnJldHVybmNvZGUoKSBvcgotICAgICAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQg
PT0gc2VsZi5yZXR1cm5jb2RlKCkpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2Fy
ZEludGVycnVwdAotICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQotICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0gTm9uZQorICAgICAgICBvdXRwdXQg
PSAnJworICAgICAgICBpbWFnZSA9ICcnCiAKLSAgICAgICAgICAgIGVsaWYgKGxpbmUuc3RhcnRz
d2l0aCgnQ29udGVudC1UeXBlOicpIGFuZCBub3QKLSAgICAgICAgICAgICAgICAgIGhhdmVfc2Vl
bl9jb250ZW50X3R5cGUpOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgaW50KHRp
bWVvdXRtcykgLyAxMDAwLjAKKyAgICAgICAgbGluZSA9IHNwLnJlYWRfbGluZShkZWFkbGluZSkK
KyAgICAgICAgd2hpbGUgbm90IHNwLnRpbWVkX291dCBhbmQgbm90IHNwLmNyYXNoZWQgYW5kIGxp
bmUucnN0cmlwKCkgIT0gIiNFT0YiOgorICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCgn
Q29udGVudC1UeXBlOicpIGFuZCBub3QKKyAgICAgICAgICAgICAgICBoYXZlX3NlZW5fY29udGVu
dF90eXBlKToKICAgICAgICAgICAgICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlID0gVHJ1ZQot
ICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZChsaW5lKQotCi0gICAgICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxm
Ll9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lKQotICAgICAgICAgICAgcmVzcCArPSBsaW5l
CisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGxpbmUKKyAgICAgICAgICAgIGxpbmUgPSBzcC5y
ZWFkX2xpbmUoZGVhZGxpbmUpCiAKICAgICAgICAgIyBOb3cgcmVhZCBhIHNlY29uZCBibG9jayBv
ZiB0ZXh0IGZvciB0aGUgb3B0aW9uYWwgaW1hZ2UgZGF0YQotICAgICAgICBpbWFnZV9sZW5ndGgg
PSAwCi0gICAgICAgICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBz
dG9wX3RpbWUpCi0gICAgICAgIHJlc3AgKz0gbGluZQorICAgICAgICByZW1haW5pbmdfbGVuZ3Ro
ID0gMAogICAgICAgICBIQVNIX0hFQURFUiA9ICdBY3R1YWxIYXNoOiAnCiAgICAgICAgIExFTkdU
SF9IRUFERVIgPSAnQ29udGVudC1MZW5ndGg6ICcKLSAgICAgICAgd2hpbGUgbm90IHRpbWVvdXQg
YW5kIG5vdCBjcmFzaCBhbmQgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6Ci0gICAgICAgICAgICBp
ZiBsaW5lID09ICcnIGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAg
ICBpZiAoLTEwNzM3NDE1MTAgPT0gc2VsZi5yZXR1cm5jb2RlKCkgb3IKLSAgICAgICAgICAgICAg
ICAgICAgLSBzaWduYWwuU0lHSU5UID09IHNlbGYucmV0dXJuY29kZSgpKToKLSAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgICBjcmFzaCA9
IFRydWUKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0
c3dpdGgoSEFTSF9IRUFERVIpOgorICAgICAgICBsaW5lID0gc3AucmVhZF9saW5lKGRlYWRsaW5l
KQorICAgICAgICB3aGlsZSBub3Qgc3AudGltZWRfb3V0IGFuZCBub3Qgc3AuY3Jhc2hlZCBhbmQg
bGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgo
SEFTSF9IRUFERVIpOgogICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0gbGluZVts
ZW4oSEFTSF9IRUFERVIpOl0uc3RyaXAoKQogICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dp
dGgoJ0NvbnRlbnQtVHlwZTonKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBl
bGlmIGxpbmUuc3RhcnRzd2l0aChMRU5HVEhfSEVBREVSKToKLSAgICAgICAgICAgICAgICBpbWFn
ZV9sZW5ndGggPSBpbnQobGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKLSAgICAgICAgICAgIGVs
aWYgaW1hZ2VfbGVuZ3RoOgorICAgICAgICAgICAgICAgIHJlbWFpbmluZ19sZW5ndGggPSBpbnQo
bGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKKyAgICAgICAgICAgIGVsaWYgcmVtYWluaW5nX2xl
bmd0aDoKICAgICAgICAgICAgICAgICBpbWFnZSArPSBsaW5lCi0KLSAgICAgICAgICAgICh0aW1l
b3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUsIGltYWdlX2xl
bmd0aCkKLSAgICAgICAgICAgIHJlc3AgKz0gbGluZQotCi0gICAgICAgIGlmIHRpbWVvdXQ6Ci0g
ICAgICAgICAgICBzZWxmLnJlc3RhcnQoKQorICAgICAgICAgICAgICAgIHJlbWFpbmluZ19sZW5n
dGggLT0gbGVuKGxpbmUpCisgICAgICAgICAgICBsaW5lID0gc3AucmVhZChkZWFkbGluZSwgcmVt
YWluaW5nX2xlbmd0aCkKIAogICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoIGFuZCBsZW4oc2Vs
Zi5faW1hZ2VfcGF0aCk6CiAgICAgICAgICAgICBpbWFnZV9maWxlID0gZmlsZShzZWxmLl9pbWFn
ZV9wYXRoLCAid2IiKQogICAgICAgICAgICAgaW1hZ2VfZmlsZS53cml0ZShpbWFnZSkKICAgICAg
ICAgICAgIGltYWdlX2ZpbGUuY2xvc2UoKQotCi0gICAgICAgIHJldHVybiAoY3Jhc2gsIHRpbWVv
dXQsIGFjdHVhbF9pbWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICcnLmpvaW4ob3V0cHV0KSwg
Jycuam9pbihlcnJvcikpCisgICAgICAgIHJldHVybiAoc3AuY3Jhc2hlZCwgc3AudGltZWRfb3V0
LCBhY3R1YWxfaW1hZ2VfaGFzaCwgb3V0cHV0LCBzcC5lcnJvcikKIAogICAgIGRlZiBzdG9wKHNl
bGYpOgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRp
bi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAgICAg
ICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0
ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzIn
LCAnY3lnd2luJyk6Ci0gICAgICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRl
cnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFgsCi0gICAgICAgICAgICAgICAgIyAoc2VlIHJlc3Rh
cnQoKSwgYWJvdmUpLCBhbmQgYW55d2F5IHdlIGRvbid0IHdhbnQgdG8gaGFuZwotICAgICAgICAg
ICAgICAgICMgdGhlIGhhcm5lc3MgaWYgdGVzdF9zaGVsbCBpcyBidWdneSwgc28gd2Ugd2FpdCBh
IGNvdXBsZQotICAgICAgICAgICAgICAgICMgc2Vjb25kcyB0byBnaXZlIHRlc3Rfc2hlbGwgYSBj
aGFuY2UgdG8gY2xlYW4gdXAsIGJ1dCB0aGVuCi0gICAgICAgICAgICAgICAgIyBmb3JjZS1raWxs
IHRoZSBwcm9jZXNzIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICBLSUxMX1RJTUVPVVQg
PSAzLjAKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkgKyBLSUxMX1RJTUVP
VVQKLSAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lIGFuZCB0
aW1lLnRpbWUoKSA8IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4x
KQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAg
ICAgICAgICAgICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcgdGVzdCBkcml2ZXIgdGltZWQgb3V0
LCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2lsbGluZyBpdCcpCi0gICAg
ICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKLSAgICAgICAgICAg
ICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAiLTkiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9wcm9jLnBpZCldLCBzdGRlcnI9bnVsbCkK
LSAgICAgICAgICAgICAgICAgICAgbnVsbC5jbG9zZSgpCi0KLSAgICBkZWYgX3JlYWRfbGluZShz
ZWxmLCB0aW1lb3V0LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0aD0wKToKLSAgICAgICAgbm93ID0g
dGltZS50aW1lKCkKLSAgICAgICAgcmVhZF9mZHMgPSBbXQotCi0gICAgICAgICMgZmlyc3QgY2hl
Y2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBsaW5lIGFscmVhZHkgcmVhZCBvciBpZiB3ZSd2ZQotICAg
ICAgICAjIHJlYWQgdGhlIGVudGlyZSBpbWFnZQotICAgICAgICBpZiBpbWFnZV9sZW5ndGggYW5k
IGxlbihzZWxmLl9yZWFkX2J1ZmZlcikgPj0gaW1hZ2VfbGVuZ3RoOgotICAgICAgICAgICAgb3V0
ID0gc2VsZi5fcmVhZF9idWZmZXJbMDppbWFnZV9sZW5ndGhdCi0gICAgICAgICAgICBzZWxmLl9y
ZWFkX2J1ZmZlciA9IHNlbGYuX3JlYWRfYnVmZmVyW2ltYWdlX2xlbmd0aDpdCi0gICAgICAgICAg
ICByZXR1cm4gKHRpbWVvdXQsIG91dCkKLQotICAgICAgICBpZHggPSBzZWxmLl9yZWFkX2J1ZmZl
ci5maW5kKCdcbicpCi0gICAgICAgIGlmIG5vdCBpbWFnZV9sZW5ndGggYW5kIGlkeCAhPSAtMToK
LSAgICAgICAgICAgIG91dCA9IHNlbGYuX3JlYWRfYnVmZmVyWzA6aWR4ICsgMV0KLSAgICAgICAg
ICAgIHNlbGYuX3JlYWRfYnVmZmVyID0gc2VsZi5fcmVhZF9idWZmZXJbaWR4ICsgMTpdCi0gICAg
ICAgICAgICByZXR1cm4gKHRpbWVvdXQsIG91dCkKLQotICAgICAgICAjIElmIHdlJ3ZlIHRpbWVk
IG91dCwgcmV0dXJuIGp1c3Qgd2hhdCB3ZSBoYXZlLCBpZiBhbnl0aGluZwotICAgICAgICBpZiB0
aW1lb3V0IG9yIG5vdyA+PSBzdG9wX3RpbWU6Ci0gICAgICAgICAgICBvdXQgPSBzZWxmLl9yZWFk
X2J1ZmZlcgotICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSAnJwotICAgICAgICAgICAg
cmV0dXJuIChUcnVlLCBvdXQpCi0KLSAgICAgICAgKHJlYWRfZmRzLCB3cml0ZV9mZHMsIGVycl9m
ZHMpID0gc2VsZWN0LnNlbGVjdCgKLSAgICAgICAgICAgIFtzZWxmLl9zdGRvdXRfZmRdLCBbXSwg
W10sIHN0b3BfdGltZSAtIG5vdykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgdGltZW91
dCBvciBsZW4ocmVhZF9mZHMpID09IDE6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZm
ZXIgKz0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBl
OgotICAgICAgICAgICAgcmVhZCA9IFtdCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2xpbmUo
dGltZW91dCwgc3RvcF90aW1lKQorICAgICAgICBpZiBzZWxmLl9zcHJvYzoKKyAgICAgICAgICAg
IHNlbGYuX3Nwcm9jLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fc3Byb2MgPSBOb25lCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Nl
cnZlcl9wcm9jZXNzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kNDg3MjRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpAQCAtMCwwICsxLDIxMyBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFt
ZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlBhY2thZ2UgdGhhdCBpbXBs
ZW1lbnRzIHRoZSBTZXJ2ZXJQcm9jZXNzIHdyYXBwZXIgY2xhc3MiIiIKKworaW1wb3J0IGZjbnRs
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc2lnbmFs
CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJfcHJvY2Vz
cyIpCisKKworY2xhc3MgU2VydmVyUHJvY2VzczoKKyAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVz
IGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRoYXQKKyAgICBpbXBsZW1lbnRzIGEgc2lt
cGxlIHJlYWQvd3JpdGUgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKKyAgICBpcyB0
aGF0IHJlYWRpbmcgcmVzcG9uc2VzIHRha2VzIGEgdGltZW91dCwgc28gdGhhdCB3ZSBkb24ndCBl
dmVyIGJsb2NrCisgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5z
cGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKKyAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBp
c3N1aW5nIGNvbW1hbmRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBu
YW1lLCBjbWQsIGVudj1Ob25lKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnRfb2JqCisgICAg
ICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2NtZCA9IGNtZAorICAgICAgICBz
ZWxmLl9lbnYgPSBlbnYKKyAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgZGVmIF9yZXNldChz
ZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0g
JycKKyAgICAgICAgc2VsZi5jcmFzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi50aW1lZF9vdXQg
PSBGYWxzZQorICAgICAgICBzZWxmLmVycm9yID0gJycKKworICAgIGRlZiBfc3RhcnQoc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIl
cyBhbHJlYWR5IHJ1bm5pbmciICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VsZi5fcmVzZXQoKQor
ICAgICAgICBjbG9zZV9mZHMgPSBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2lu
JykKKyAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fY21kLCBzdGRp
bj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsb3NlX2Zkcz1jbG9zZV9mZHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVudj1zZWxmLl9lbnYpCisgICAgICAgIGZkID0gc2VsZi5fcHJvYy5z
dGRvdXQuZmlsZW5vKCkKKyAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRG
TCkKKyAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05C
TE9DSykKKyAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICBm
bCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICBmY250bC5mY250bChm
ZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorCisgICAgZGVmIGhhbmRsZV9p
bnRlcnJ1cHQoc2VsZik6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBjaGVja3MgdG8gc2VlIGlm
IHRoZSBwcm9jZXNzIGNyYXNoZWQgb3IgZXhpdGVkCisgICAgICAgIGJlY2F1c2Ugb2YgYSBrZXli
b2FyZCBpbnRlcnJ1cHQgYW5kIHJhaXNlcyBLZXlib2FyZEludGVycnVwdAorICAgICAgICBhY2Nv
cmRpbmdseS4iIiIKKyAgICAgICAgaWYgc2VsZi5jcmFzaGVkOgorICAgICAgICAgICAgIyBUaGlz
IGlzIGhleCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVzZWQgZm9yIGFicnVwdAorICAgICAg
ICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBjdHJsK2MgZnJvbSB0
aGUgcHJvbXB0CisgICAgICAgICAgICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0
aGUgdGVzdF9zaGVsbC4KKyAgICAgICAgICAgICMgc2RveW9uOiBOb3Qgc3VyZSBmb3Igd2hpY2gg
T1MgYW5kIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUKKyAgICAgICAgICAgICMgYWJvdmUgY29k
ZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIgTGludXggdG8gZGV0ZWN0CisgICAg
ICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBu
ZWdhdGl2ZQorICAgICAgICAgICAgIyBTSUdJTlQuIEFuZCB0aGF0IGFncmVlcyB3aXRoIHRoZSBz
dWJwcm9jZXNzIGRvY3VtZW50YXRpb24uCisgICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0g
c2VsZi5fcHJvYy5yZXR1cm5jb2RlIG9yCisgICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5U
ID09IHNlbGYuX3Byb2MucmV0dXJuY29kZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9h
cmRJbnRlcnJ1cHQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgZGVmIHBvbGwoc2VsZik6Cisg
ICAgICAgICIiIkNoZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJseWluZyBwcm9jZXNzIGlzIHJ1bm5p
bmc7IHJldHVybnMgTm9uZQorICAgICAgICBpZiBpdCBzdGlsbCBpcyAod3JhcHBlciBhcm91bmQg
c3VicHJvY2Vzcy5wb2xsKS4iIiIKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVm
IHJldHVybmNvZGUoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGV4aXQgY29kZSBmcm9t
IHRoZSBzdWJwcmNvZXNzOyByZXR1cm5zIE5vbmUgaWYgdGhlCisgICAgICAgIHByb2Nlc3MgaGFz
bid0IGV4aXRlZCAodGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHN1YnByb2Nlc3MucmV0dXJuY29k
ZSkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX3Byb2MucmV0dXJuY29kZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVm
IHdyaXRlKHNlbGYsIGlucHV0KToKKyAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBz
dWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKKyAgICAgICAgaWYg
aXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Cisg
ICAgICAgICAgICBzZWxmLl9zdGFydCgpCisgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUo
aW5wdXQpCisKKyAgICBkZWYgcmVhZF9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgIiIi
UmVhZCBhIHNpbmdsZSBsaW5lIGZyb20gdGhlIHN1YnByb2Nlc3MsIHdhaXRpbmcgdW50aWwgdGhl
IGRlYWRsaW5lLgorICAgICAgICBJZiB0aGUgZGVhZGxpbmUgcGFzc2VzLCB0aGUgY2FsbCB0aW1l
cyBvdXQuIE5vdGUgdGhhdCBldmVuIGlmIHRoZQorICAgICAgICBzdWJwcm9jZXNzIGhhcyBjcmFz
aGVkIG9yIHRoZSBkZWFkbGluZSBoYXMgcGFzc2VkLCBpZiB0aGVyZSBpcyBvdXRwdXQKKyAgICAg
ICAgcGVuZGluZywgaXQgd2lsbCBiZSByZXR1cm5lZC4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgICAgZGVhZGxpbmU6IHRpbWVzdGFtcCB0aGF0IHRoZSByZWFkIG11c3QgY29tcGxldGUgYmVm
b3JlCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBvdXRwdXQ6IGRhdGEgcmV0dXJuZWQs
IGlmIGFueS4gSWYgbm8gZGF0YSBpcyBhdmFpbGFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAg
IGNhbGwgdGltZXMgb3V0IG9yIGNyYXNoZXMsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4g
Tm90ZQorICAgICAgICAgICAgICAgIHRoYXQgdGhlIHJldHVybmVkIHN0cmluZyBpbmNsdWRlcyB0
aGUgbmV3bGluZSAoJ1xuJykuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5l
LCAwKQorCisgICAgZGVmIHJlYWQoc2VsZiwgZGVhZGxpbmUsIHNpemUpOgorICAgICAgICAiIiJB
dHRlbXB0cyB0byByZWFkIHNpemUgY2hhcmFjdGVycyBmcm9tIHRoZSBzdWJwcm9jZXNzLCB3YWl0
aW5nIHVudGlsCisgICAgICAgIHRoZSBkZWFkbGluZSBwYXNzZXMuIElmIHRoZSBkZWFkbGluZSBw
YXNzZXMsIGFueSBhdmFpbGFibGUgZGF0YSB3aWxsIGJlCisgICAgICAgIHJldHVybmVkLiBOb3Rl
IHRoYXQgZXZlbiBpZiB0aGUgZGVhZGxpbmUgaGFzIHBhc3NlZCBvciBpZiB0aGUKKyAgICAgICAg
c3VicHJvY2VzcyBoYXMgY3Jhc2hlZCwgYW55IGF2YWlsYWJsZSBkYXRhIHdpbGwgc3RpbGwgYmUg
cmV0dXJuZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRlYWRsaW5lOiB0aW1lc3Rh
bXAgdGhhdCB0aGUgcmVhZCBtdXN0IGNvbXBsZXRlIGJlZm9yZQorICAgICAgICAgICAgc2l6ZTog
YW1vdW50IG9mIGRhdGEgdG8gcmVhZC4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIG91
dHB1dDogZGF0YSByZXR1cm5lZCwgaWYgYW55LiBJZiBubyBkYXRhIGlzIGF2YWlsYWJsZSwgYW4g
ZW1wdHkKKyAgICAgICAgICAgICAgICBzdHJpbmcgaXMgcmV0dXJuZWQuCisgICAgICAgICIiIgor
ICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgc2l6ZSkKKworICAgIGRlZiBfcmVh
ZChzZWxmLCBkZWFkbGluZSwgc2l6ZSk6CisgICAgICAgICIiIkludGVybmFsIHJvdXRpbmUgdGhh
dCBhY3R1YWxseSBkb2VzIHRoZSByZWFkLiIiIgorICAgICAgICBpZHggPSAtMQorICAgICAgICBv
dXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQorICAgICAgICBlcnJfZmQgPSBzZWxm
Ll9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICBzZWxlY3RfZmRzID0gKG91dF9mZCwgZXJy
X2ZkKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi50aW1lZF9vdXQgYW5kIG5vdCBzZWxmLmNyYXNo
ZWQ6CisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSAhPSBOb25lOgorICAgICAgICAg
ICAgICAgIHNlbGYuY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9p
bnRlcnJ1cHQoKQorCisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAg
aWYgbm93ID4gZGVhZGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBUcnVl
CisKKyAgICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IG91dHB1dCB3ZSBj
YW4gcmV0dXJuLgorICAgICAgICAgICAgaWYgc2l6ZSBhbmQgbGVuKHNlbGYuX291dHB1dCkgPj0g
c2l6ZToKKyAgICAgICAgICAgICAgICBpZHggPSBzaXplCisgICAgICAgICAgICBlbGlmIHNpemUg
PT0gMDoKKyAgICAgICAgICAgICAgICBpZHggPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4nKSArIDEK
KworICAgICAgICAgICAgaWYgaWR4IG9yIHNlbGYuY3Jhc2hlZCBvciBzZWxmLnRpbWVkX291dDoK
KyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9vdXRwdXRbMDppZHhdCisgICAgICAgICAg
ICAgICAgc2VsZi5fb3V0cHV0ID0gc2VsZi5fb3V0cHV0W2lkeDpdCisgICAgICAgICAgICAgICAg
cmV0dXJuIG91dHB1dAorCisgICAgICAgICAgICAjIE5vcGUgLSB3YWl0IGZvciBtb3JlIGRhdGEu
CisgICAgICAgICAgICAocmVhZF9mZHMsIHdyaXRlX2ZkcywgZXJyX2ZkcykgPSBzZWxlY3Quc2Vs
ZWN0KHNlbGVjdF9mZHMsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RfZmRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSAtIG5vdykKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBvdXRfZmQgaW4gcmVhZF9mZHM6Cisg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFk
KCkKKyAgICAgICAgICAgICAgICBpZiBlcnJfZmQgaW4gcmVhZF9mZHM6CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuZXJyb3IgKz0gc2VsZi5fcHJvYy5zdGRlcnIucmVhZCgpCisgICAgICAgICAg
ICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgc3Rv
cChzZWxmKToKKyAgICAgICAgIiIiU3RvcCAoc2h1dCBkb3duKSB0aGUgc3VicHJvY2VzcyksIGlm
IGl0IGlzIHJ1bm5pbmcuIiIiCisgICAgICAgIHBpZCA9IHNlbGYuX3Byb2MucGlkCisgICAgICAg
IHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9z
ZSgpCisgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fcHJv
Yy5zdGRlcnIuY2xvc2UoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzIn
LCAnY3lnd2luJyk6CisgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0L3N0ZGVyciBo
YW5ncyBzb21ldGltZXMgb24gT1MgWCwKKyAgICAgICAgICAgICMgKHNlZSByZXN0YXJ0KCksIGFi
b3ZlKSwgYW5kIGFueXdheSB3ZSBkb24ndCB3YW50IHRvIGhhbmcKKyAgICAgICAgICAgICMgdGhl
IGhhcm5lc3MgaWYgdGVzdF9zaGVsbCBpcyBidWdneSwgc28gd2Ugd2FpdCBhIGNvdXBsZQorICAg
ICAgICAgICAgIyBzZWNvbmRzIHRvIGdpdmUgdGVzdF9zaGVsbCBhIGNoYW5jZSB0byBjbGVhbiB1
cCwgYnV0IHRoZW4KKyAgICAgICAgICAgICMgZm9yY2Uta2lsbCB0aGUgcHJvY2VzcyBpZiBuZWNl
c3NhcnkuCisgICAgICAgICAgICBLSUxMX1RJTUVPVVQgPSAzLjAKKyAgICAgICAgICAgIHRpbWVv
dXQgPSB0aW1lLnRpbWUoKSArIEtJTExfVElNRU9VVAorICAgICAgICAgICAgd2hpbGUgc2VsZi5f
cHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCB0aW1lb3V0OgorICAgICAgICAg
ICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkg
aXMgTm9uZToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVzIHRpbWVk
IG91dCwga2lsbGluZyBpdCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9u
YW1lKQorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKKyAgICAg
ICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3Byb2MucGlkKV0sIHN0ZGVycj1udWxsKQor
ICAgICAgICAgICAgICAgIG51bGwuY2xvc2UoKQorICAgICAgICAgICAgICAgIF9sb2cud2Fybmlu
Zygna2lsbGVkJykKKyAgICAgICAgc2VsZi5fcmVzZXQoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9p
bWFnZV9kaWZmLnB5CmluZGV4IDQyOTI4YmEuLjNhM2Q4YTYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5w
eQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5
cGVzL2ltYWdlX2RpZmYucHkKQEAgLTkwLDYgKzkwLDcgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3Rf
dHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgZmlsZW5h
bWU6IHRoZSBuYW1lIG9mIHRoZSB0ZXN0CiAgICAgICAgICAgdGFyZ2V0OiBEZWJ1ZyBvciBSZWxl
YXNlCisgICAgICAgIFJldHVybnMgMSBpZiB0aGUgZmlsZXMgYXJlIGRpZmZlcmVudCwgMCBpZiB0
aGV5IG1hdGNoCiAgICAgICAgICIiIgogICAgICAgICBkaWZmX2ZpbGVuYW1lID0gc2VsZi5vdXRw
dXRfZmlsZW5hbWUoZmlsZW5hbWUsCiAgICAgICAgICAgc2VsZi5GSUxFTkFNRV9TVUZGSVhfQ09N
UEFSRSkKQEAgLTk4LDYgKzk5LDcgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRl
c3RUeXBlQmFzZSk6CiAgICAgICAgIGV4cGVjdGVkX2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmls
ZW5hbWUoZmlsZW5hbWUsCiAgICAgICAgICAgc2VsZi5GSUxFTkFNRV9TVUZGSVhfRVhQRUNURUQg
KyAnLnBuZycpCiAKKyAgICAgICAgcmVzdWx0ID0gMQogICAgICAgICB0cnk6CiAgICAgICAgICAg
ICBfY29tcGFyZV9hdmFpbGFibGUgPSBUcnVlCiAgICAgICAgICAgICByZXN1bHQgPSBwb3J0LmRp
ZmZfaW1hZ2UoZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51706</attachid>
            <date>2010-03-25 18:15:35 -0700</date>
            <delta_ts>2010-03-26 15:10:18 -0700</delta_ts>
            <desc>back out PEP-8 reformatting to minimize confusion</desc>
            <filename>wk34826_image_diff.diff</filename>
            <type>text/plain</type>
            <size>25146</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlYmRiNTg3Li5hMTRkNjExIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMt
MjUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHBpeGVsIHRlc3RzIChp
bWFnZSBkaWZmKSBwcm9wZXJseSBvbiB0aGUgTWFjIHBvcnQuCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW50cm9kdWNlcyBhIG5ldyAiU2VydmVyUG9jZXNzIiBjbGFzcyB0aGF0IGNhbiBiZSB1c2Vk
CisgICAgICAgIHRvIG1hbmFnZSBwcm9jZXNzZXMgdGhhdCB0aGUgcnVuLXdlYmtpdC10ZXN0cyBo
YXJuZXNzIGZvcmtzIG9mZiBhbmQKKyAgICAgICAgZXhwZWN0cyB0byBzdGF5IHVwIGZvciBsb25n
ZXIgdGhhbiBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIHNlc3Npb24uCisgICAgICAgIEJvdGgg
RHVtcFJlbmRlclRyZWUgYW5kIEltYWdlRGlmZiB1c2UgdGhpcyBzdHlsZSBvZiBjb21tdW5pY2F0
aW9uLAorICAgICAgICBhbHRob3VnaCB0aGUgY3VycmVudCBjb2RlIGZvcmtzIG9mZiBhIG5ldyBJ
bWFnZURpZmYgZm9yIGVhY2ggZGlmZgorICAgICAgICAoV2UgbmVlZCB0byByZXN0cnVjdHVyZSBv
dGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byBiZSBhYmxlIHRvIGRvIHRoaXMKKyAgICAgICAgc2Fm
ZWx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQpLgorCisgICAgICAgIEFsc28sIG5v
dyB0aGF0IHRoZSBTZXJ2ZXJQcm9jZXNzIGFic3RyYWN0aW9uIGV4aXN0cywgd2UgY2FuIHByb2Jh
Ymx5CisgICAgICAgIGNsZWFuIHVwIGFuZCBzaW1wbGlmeSBzb21lIG9mIHRoZSB0aHJlYWQgbWFu
YWdlbWVudCBsb2dpYyBpbgorICAgICAgICB0ZXN0X3NoZWxsX3RocmVhZCBhcyB3ZWxsLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDgyNgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2lt
YWdlX2RpZmYucHk6CisKIDIwMTAtMDMtMjUgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkK
aW5kZXggMzBkMmFiOC4uMTI4MTFkNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTI5LDEyICsyOSwxMSBAQAog
CiAiIiJXZWJLaXQgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIK
IAotaW1wb3J0IGZjbnRsCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGRiCiBp
bXBvcnQgcGxhdGZvcm0KLWltcG9ydCBzZWxlY3QKK2ltcG9ydCByZQogaW1wb3J0IHNpZ25hbAog
aW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKQEAgLTQyLDYgKzQxLDcgQEAgaW1wb3J0IHRp
bWUKIGltcG9ydCB3ZWJicm93c2VyCiAKIGltcG9ydCBiYXNlCitpbXBvcnQgc2VydmVyX3Byb2Nl
c3MKIAogaW1wb3J0IHdlYmtpdHB5CiBpbXBvcnQgd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgYXMgZXhlY3V0aXZlCkBAIC04NSwxMSArODUsNjggQEAgY2xhc3MgTWFjUG9ydChiYXNl
LlBvcnQpOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRHVtcFJlbmRlclRyZWUgd2FzIG5vdCBm
b3VuZCBhdCAlcyIgJSBkcml2ZXJfcGF0aCkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0g
ICAgICAgICMgVGhpcyBzaG91bGQgYWxzbyB2YWxpZGF0ZSB0aGF0IHRoZSBJbWFnZURpZmYgcGF0
aCBpcyB2YWxpZAotICAgICAgICAjIChvbmNlIHRoaXMgc2NyaXB0IGtub3dzIGhvdyB0byB1c2Ug
SW1hZ2VEaWZmKS4KLSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzQ4MjYKKyAgICAgICAgaW1hZ2VfZGlmZl9wYXRoID0gc2VsZi5fcGF0aF90b19pbWFn
ZV9kaWZmKCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGltYWdlX2RpZmZfcGF0aCk6
CisgICAgICAgICAgICBfbG9nLmVycm9yKCJJbWFnZURpZmYgd2FzIG5vdCBmb3VuZCBhdCAlcyIg
JSBpbWFnZV9kaWZmX3BhdGgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwogICAgICAgICBy
ZXR1cm4gVHJ1ZQogCisgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfZmlsZW5hbWUs
IGFjdHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBkaWZmX2ZpbGVuYW1lPU5vbmUp
OgorICAgICAgICAiIiJDb21wYXJlIHR3byBpbWFnZSBmaWxlcyBhbmQgcHJvZHVjZSBhIGRlbHRh
IGltYWdlIGZpbGUuCisKKyAgICAgICAgUmV0dXJuIDEgaWYgdGhlIHR3byBmaWxlcyBhcmUgZGlm
ZmVyZW50LCAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLgorICAgICAgICBBbHNvIHByb2R1Y2UgYSBk
ZWx0YSBpbWFnZSBvZiB0aGUgdHdvIGltYWdlcyBhbmQgd3JpdGUgdGhhdCBpbnRvCisgICAgICAg
IHxkaWZmX2ZpbGVuYW1lfCBpZiBpdCBpcyBub3QgTm9uZS4iIiIKKyAgICAgICAgcmVzdWx0ID0g
MQorICAgICAgICBleHBlY3RlZF9sZW5ndGggPSBvcy5zdGF0KGV4cGVjdGVkX2ZpbGVuYW1lKS5z
dF9zaXplCisgICAgICAgIGV4cGVjdGVkX2ZpbGUgPSBvcGVuKGV4cGVjdGVkX2ZpbGVuYW1lKS5y
ZWFkKCkKKworICAgICAgICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGVzdCBkaWRuJ3Qg
YWN0dWFsbHkgZ2VuZXJhdGUgYW4gaW1hZ2UuCisgICAgICAgIGFjdHVhbF9sZW5ndGggPSBvcy5z
dGF0KGFjdHVhbF9maWxlbmFtZSkuc3Rfc2l6ZQorICAgICAgICBpZiBhY3R1YWxfbGVuZ3RoID09
IDA6CisgICAgICAgICAgICBpZiBkaWZmX2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgIG9wZW4o
ZGlmZl9maWxlbmFtZSwgJ3cnKS53cml0ZShleHBlY3RlZF9maWxlKQorICAgICAgICAgICAgcmV0
dXJuIDEKKworICAgICAgICBhY3R1YWxfZmlsZSA9IG9wZW4oYWN0dWFsX2ZpbGVuYW1lKS5yZWFk
KCkKKyAgICAgICAgaW5wdXQgPSAnQ29udGVudC1MZW5ndGg6ICVkXG4nICUgYWN0dWFsX2xlbmd0
aAorICAgICAgICBpbnB1dCArPSBhY3R1YWxfZmlsZQorICAgICAgICBpbnB1dCArPSAnQ29udGVu
dC1MZW5ndGg6ICVkXG4nICUgZXhwZWN0ZWRfbGVuZ3RoCisgICAgICAgIGlucHV0ICs9IGV4cGVj
dGVkX2ZpbGUKKworICAgICAgICBjbWQgPSBbc2VsZi5fcGF0aF90b19pbWFnZV9kaWZmKCksICct
LXRvbGVyYW5jZScsICcwLjEnXQorICAgICAgICBzcCA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclBy
b2Nlc3Moc2VsZiwgJ0ltYWdlRGlmZicsIGNtZCkKKworICAgICAgICBzcC53cml0ZShpbnB1dCkK
KworICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgMi4wCisgICAgICAgIG91dHB1dCA9
IHNwLnJlYWRfbGluZShkZWFkbGluZSkKKyAgICAgICAgd2hpbGUgbm90IHNwLnRpbWVkX291dCBh
bmQgbm90IHNwLmNyYXNoZWQgYW5kIG91dHB1dDoKKyAgICAgICAgICAgIGlmIG91dHB1dC5zdGFy
dHN3aXRoKCdDb250ZW50LUxlbmd0aCcpOgorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgn
Q29udGVudC1MZW5ndGg6IChcZCspJywgb3V0cHV0KQorICAgICAgICAgICAgICAgIGNvbnRlbnRf
bGVuZ3RoID0gaW50KG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3AucmVh
ZChkZWFkbGluZSwgY29udGVudF9sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAg
ICAgICAgIGVsaWYgb3V0cHV0LnN0YXJ0c3dpdGgoJ2RpZmYnKToKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgb3V0cHV0ID0gc3AucmVhZF9saW5lKGRlYWRsaW5lKQorCisgICAg
ICAgIHJlc3VsdCA9IDEKKyAgICAgICAgaWYgc3AudGltZWRfb3V0OgorICAgICAgICAgICAgX2xv
Zy5lcnJvcigiSW1hZ2VEaWZmIHRpbWVkIG91dCBvbiAlcyIgJSBleHBlY3RlZF9maWxlbmFtZSkK
KyAgICAgICAgZWxpZiBzcC5jcmFzaGVkOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VE
aWZmIGNyYXNoZWQiKQorICAgICAgICBlbGlmIG91dHB1dC5zdGFydHN3aXRoKCdkaWZmJyk6Cisg
ICAgICAgICAgICBtID0gcmUubWF0Y2goJ2RpZmY6ICguKyklIChwYXNzZWR8ZmFpbGVkKScsIG91
dHB1dCkKKyAgICAgICAgICAgIGlmIG0uZ3JvdXAoMikgPT0gJ3Bhc3NlZCc6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3BlbihkaWZmX2Zp
bGVuYW1lLCAndycpLndyaXRlKG91dHB1dCkKKyAgICAgICAgc3Auc3RvcCgpCisgICAgICAgIHJl
dHVybiByZXN1bHQKKwogICAgIGRlZiBudW1fY29yZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBp
bnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNwdSIpWzFdLnJlYWQoKSkKIApAQCAtMjUzLDcg
KzMxMCw3IEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgcmV0dXJuIE5vbmUK
IAogICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicpICMgRklYTUU6IFRoaXMgaXMgd3JvbmcgYW5kIHNo
b3VsZCBiZSAiSW1hZ2VEaWZmIiwgYnV0IGhhdmluZyB0aGUgY29ycmVjdCBwYXRoIGNhdXNlcyBv
dGhlciBwYXJ0cyBvZiB0aGUgc2NyaXB0IHRvIGhhbmcuCisgICAgICAgIHJldHVybiBzZWxmLl9i
dWlsZF9wYXRoKCdJbWFnZURpZmYnKQogCiAgICAgZGVmIF9wYXRoX3RvX3dkaWZmKHNlbGYpOgog
ICAgICAgICByZXR1cm4gJ3dkaWZmJyAjIEZJWE1FOiBUaGlzIGRvZXMgbm90IGV4aXN0IG9uIGEg
ZGVmYXVsdCBNYWMgT1MgWCBMZW9wYXJkIGluc3RhbGwuCkBAIC0yODgsMTMgKzM0NSw3IEBAIGNs
YXNzIE1hY0RyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQs
IGltYWdlX3BhdGgsIGRyaXZlcl9vcHRpb25zKToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQK
ICAgICAgICAgc2VsZi5fZHJpdmVyX29wdGlvbnMgPSBkcml2ZXJfb3B0aW9ucwotICAgICAgICBz
ZWxmLl90YXJnZXQgPSBwb3J0Ll9vcHRpb25zLnRhcmdldAogICAgICAgICBzZWxmLl9pbWFnZV9w
YXRoID0gaW1hZ2VfcGF0aAotICAgICAgICBzZWxmLl9zdGRvdXRfZmQgPSBOb25lCi0gICAgICAg
IHNlbGYuX2NtZCA9IE5vbmUKLSAgICAgICAgc2VsZi5fZW52ID0gTm9uZQotICAgICAgICBzZWxm
Ll9wcm9jID0gTm9uZQotICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9ICcnCiAKICAgICAgICAg
Y21kID0gW10KICAgICAgICAgIyBIb29rIGZvciBpbmplY3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIg
cnVudGltZSBpbnN0cnVtZW50YXRpb24sCkBAIC0zMDgsNDkgKzM1OSwyOCBAQCBjbGFzcyBNYWNE
cml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAgICAgICAgIyBwcmFjdGljZSBpdCBzaG91bGRuJ3Qg
Y29tZSB1cCBhbmQgdGhlIC0taGVscCBvdXRwdXQgd2FybnMKICAgICAgICAgICAgICMgYWJvdXQg
aXQgYW55d2F5LgogICAgICAgICAgICAgY21kICs9IHNlbGYuX29wdGlvbnMud3JhcHBlci5zcGxp
dCgpCi0gICAgICAgICMgRklYTUU6IFVzaW5nIGFyY2ggaGVyZSBtYXNrcyBhbnkgcG9zc2libGUg
ZmlsZS1ub3QtZm91bmQgZXJyb3JzIGZyb20gYSBub24tZXhpc3RhbnQgZHJpdmVyIGV4ZWN1dGFi
bGUuCi0gICAgICAgIGNtZCArPSBbJ2FyY2gnLCAnLWkzODYnLCBwb3J0Ll9wYXRoX3RvX2RyaXZl
cigpLCAnLSddCiAKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgYXJvdW5kIG91ciBs
YWNrIG9mIEltYWdlRGlmZiBzdXBwb3J0IGZvciBub3cuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9w
b3J0Ll9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgotICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlz
IHBvcnQgZG9lcyBub3QgeWV0IHN1cHBvcnQgcGl4ZWwgdGVzdHMuIikKLSAgICAgICAgICAgIHNl
bGYuX3BvcnQuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHMgPSBUcnVlCi0gICAgICAgICAgICAjY21k
LmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCisgICAgICAgIGNtZCArPSBbJ2FyY2gnLCAnLWkzODYn
LCBwb3J0Ll9wYXRoX3RvX2RyaXZlcigpLCAnLSddCiAKLSAgICAgICAgI2lmIGRyaXZlcl9vcHRp
b25zOgotICAgICAgICAjICAgIGNtZCArPSBkcml2ZXJfb3B0aW9ucworICAgICAgICBpZiBpbWFn
ZV9wYXRoOgorICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCiAgICAgICAg
IGVudiA9IG9zLmVudmlyb24KICAgICAgICAgZW52WydEWUxEX0ZSQU1FV09SS19QQVRIJ10gPSBz
ZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAgICAgc2VsZi5fY21kID0gY21kCi0gICAgICAg
IHNlbGYuX2VudiA9IGVudgotICAgICAgICBzZWxmLnJlc3RhcnQoKQorICAgICAgICBzZWxmLl9z
cHJvYyA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3Moc2VsZi5fcG9ydCwKKyAgICAgICAg
ICAgICJEdW1wUmVuZGVyVHJlZSIsIGNtZCwgZW52KQogCiAgICAgZGVmIHBvbGwoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICByZXR1cm4gc2VsZi5fc3By
b2MucG9sbCgpCiAKICAgICBkZWYgcmVzdGFydChzZWxmKToKLSAgICAgICAgc2VsZi5zdG9wKCkK
LSAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgY2xvc2VfZmRzPVRydWUgdG8gd29yayBhcm91bmQg
UHl0aG9uIGJ1ZyAjMjMyMAotICAgICAgICAjIChvdGhlcndpc2Ugd2UgY2FuIGhhbmcgd2hlbiB3
ZSBraWxsIHRlc3Rfc2hlbGwgd2hlbiB3ZSBhcmUgcnVubmluZwotICAgICAgICAjIG11bHRpcGxl
IHRocmVhZHMpLiBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAgLgotICAgICAg
ICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLl9jbWQsIHN0ZGluPXN1YnByb2Nl
c3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
ZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW52PXNlbGYuX2VudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvc2VfZmRzPVRydWUpCisgICAgICAgIHNlbGYuX3Nwcm9jLnN0b3AoKQorICAgICAgICBzZWxm
Ll9zcHJvYy5zdGFydCgpCisgICAgICAgIHJldHVybgogCiAgICAgZGVmIHJldHVybmNvZGUoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnJldHVybmNvZGUKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3Byb2MucmV0dXJuY29kZSgpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0
aW1lb3V0bXMsIGltYWdlX2hhc2gpOgotICAgICAgICBvdXRwdXQgPSBbXQotICAgICAgICBlcnJv
ciA9IFtdCi0gICAgICAgIGltYWdlID0gJycKLSAgICAgICAgY3Jhc2ggPSBGYWxzZQotICAgICAg
ICB0aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgYWN0dWFsX3VyaSA9IE5vbmUKLSAgICAgICAgYWN0
dWFsX2ltYWdlX2hhc2ggPSBOb25lCi0KICAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoImZpbGU6
Ly8vIik6CiAgICAgICAgICAgICBjbWQgPSB1cmlbNzpdCiAgICAgICAgIGVsc2U6CkBAIC0zNjAs
MTMwICszOTAsNDkgQEAgY2xhc3MgTWFjRHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICAgICAgICAg
IGNtZCArPSAiJyIgKyBpbWFnZV9oYXNoCiAgICAgICAgIGNtZCArPSAiXG4iCiAKLSAgICAgICAg
c2VsZi5fcHJvYy5zdGRpbi53cml0ZShjbWQpCi0gICAgICAgIHNlbGYuX3N0ZG91dF9mZCA9IHNl
bGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAgIGZsID0gZmNudGwuZmNudGwoc2VsZi5f
c3Rkb3V0X2ZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICBmY250bC5mY250bChzZWxmLl9zdGRv
dXRfZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgIyBwZGIu
c2V0X3RyYWNlKCkKKyAgICAgICAgc3AgPSBzZWxmLl9zcHJvYworICAgICAgICBzcC53cml0ZShj
bWQpCiAKLSAgICAgICAgc3RvcF90aW1lID0gdGltZS50aW1lKCkgKyAoaW50KHRpbWVvdXRtcykg
LyAxMDAwLjApCi0gICAgICAgIHJlc3AgPSAnJwotICAgICAgICAodGltZW91dCwgbGluZSkgPSBz
ZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lKQotICAgICAgICByZXNwICs9IGxpbmUK
ICAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSA9IEZhbHNlCi0gICAgICAgIHdoaWxlIG5v
dCB0aW1lb3V0IGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKLSAgICAgICAgICAgICMgTWFr
ZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KLSAgICAgICAgICAgIGlmIGxpbmUgPT0gJycgYW5k
IHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyBoZXgg
Y29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZvciBhYnJ1cHQKLSAgICAgICAgICAgICAg
ICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBw
cm9tcHQKLSAgICAgICAgICAgICAgICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0
aGUgdGVzdF9zaGVsbC4KLSAgICAgICAgICAgICAgICAjIHNkb3lvbjogTm90IHN1cmUgZm9yIHdo
aWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlCi0gICAgICAgICAgICAgICAgIyBh
Ym92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRl
Y3QKLSAgICAgICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJu
Y29kZSB0byBiZSBuZWdhdGl2ZQotICAgICAgICAgICAgICAgICMgU0lHSU5ULiBBbmQgdGhhdCBh
Z3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uLgotICAgICAgICAgICAgICAg
IGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLnJldHVybmNvZGUoKSBvcgotICAgICAgICAgICAgICAg
ICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gc2VsZi5yZXR1cm5jb2RlKCkpOgotICAgICAgICAgICAg
ICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAgICAgIGNyYXNoID0g
VHJ1ZQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0g
Tm9uZQorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBpbWFnZSA9ICcnCiAKLSAgICAgICAg
ICAgIGVsaWYgKGxpbmUuc3RhcnRzd2l0aCgnQ29udGVudC1UeXBlOicpIGFuZCBub3QKLSAgICAg
ICAgICAgICAgICAgIGhhdmVfc2Vlbl9jb250ZW50X3R5cGUpOgorICAgICAgICBkZWFkbGluZSA9
IHRpbWUudGltZSgpICsgaW50KHRpbWVvdXRtcykgLyAxMDAwLjAKKyAgICAgICAgbGluZSA9IHNw
LnJlYWRfbGluZShkZWFkbGluZSkKKyAgICAgICAgd2hpbGUgbm90IHNwLnRpbWVkX291dCBhbmQg
bm90IHNwLmNyYXNoZWQgYW5kIGxpbmUucnN0cmlwKCkgIT0gIiNFT0YiOgorICAgICAgICAgICAg
aWYgKGxpbmUuc3RhcnRzd2l0aCgnQ29udGVudC1UeXBlOicpIGFuZCBub3QKKyAgICAgICAgICAg
ICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlKToKICAgICAgICAgICAgICAgICBoYXZlX3NlZW5f
Y29udGVudF90eXBlID0gVHJ1ZQotICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChsaW5lKQotCi0gICAgICAgICAgICAo
dGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lKQotICAg
ICAgICAgICAgcmVzcCArPSBsaW5lCisgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGxpbmUKKyAg
ICAgICAgICAgIGxpbmUgPSBzcC5yZWFkX2xpbmUoZGVhZGxpbmUpCiAKICAgICAgICAgIyBOb3cg
cmVhZCBhIHNlY29uZCBibG9jayBvZiB0ZXh0IGZvciB0aGUgb3B0aW9uYWwgaW1hZ2UgZGF0YQot
ICAgICAgICBpbWFnZV9sZW5ndGggPSAwCi0gICAgICAgICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYu
X3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUpCi0gICAgICAgIHJlc3AgKz0gbGluZQorICAg
ICAgICByZW1haW5pbmdfbGVuZ3RoID0gMAogICAgICAgICBIQVNIX0hFQURFUiA9ICdBY3R1YWxI
YXNoOiAnCiAgICAgICAgIExFTkdUSF9IRUFERVIgPSAnQ29udGVudC1MZW5ndGg6ICcKLSAgICAg
ICAgd2hpbGUgbm90IHRpbWVvdXQgYW5kIG5vdCBjcmFzaCBhbmQgbGluZS5yc3RyaXAoKSAhPSAi
I0VPRiI6Ci0gICAgICAgICAgICBpZiBsaW5lID09ICcnIGFuZCBzZWxmLnBvbGwoKSBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0gc2VsZi5yZXR1cm5jb2Rl
KCkgb3IKLSAgICAgICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5UID09IHNlbGYucmV0dXJu
Y29kZSgpKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAg
ICAgICAgICAgICAgICBjcmFzaCA9IFRydWUKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAg
ICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoSEFTSF9IRUFERVIpOgorICAgICAgICBsaW5lID0g
c3AucmVhZF9saW5lKGRlYWRsaW5lKQorICAgICAgICB3aGlsZSBub3Qgc3AudGltZWRfb3V0IGFu
ZCBub3Qgc3AuY3Jhc2hlZCBhbmQgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6CisgICAgICAgICAg
ICBpZiBsaW5lLnN0YXJ0c3dpdGgoSEFTSF9IRUFERVIpOgogICAgICAgICAgICAgICAgIGFjdHVh
bF9pbWFnZV9oYXNoID0gbGluZVtsZW4oSEFTSF9IRUFERVIpOl0uc3RyaXAoKQogICAgICAgICAg
ICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQtVHlwZTonKToKICAgICAgICAgICAgICAg
ICBwYXNzCiAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aChMRU5HVEhfSEVBREVSKToK
LSAgICAgICAgICAgICAgICBpbWFnZV9sZW5ndGggPSBpbnQobGluZVtsZW4oTEVOR1RIX0hFQURF
Uik6XSkKLSAgICAgICAgICAgIGVsaWYgaW1hZ2VfbGVuZ3RoOgorICAgICAgICAgICAgICAgIHJl
bWFpbmluZ19sZW5ndGggPSBpbnQobGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKKyAgICAgICAg
ICAgIGVsaWYgcmVtYWluaW5nX2xlbmd0aDoKICAgICAgICAgICAgICAgICBpbWFnZSArPSBsaW5l
Ci0KLSAgICAgICAgICAgICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0
LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0aCkKLSAgICAgICAgICAgIHJlc3AgKz0gbGluZQotCi0g
ICAgICAgIGlmIHRpbWVvdXQ6Ci0gICAgICAgICAgICBzZWxmLnJlc3RhcnQoKQorICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ19sZW5ndGggLT0gbGVuKGxpbmUpCisgICAgICAgICAgICBsaW5lID0g
c3AucmVhZChkZWFkbGluZSwgcmVtYWluaW5nX2xlbmd0aCkKIAogICAgICAgICBpZiBzZWxmLl9p
bWFnZV9wYXRoIGFuZCBsZW4oc2VsZi5faW1hZ2VfcGF0aCk6CiAgICAgICAgICAgICBpbWFnZV9m
aWxlID0gZmlsZShzZWxmLl9pbWFnZV9wYXRoLCAid2IiKQogICAgICAgICAgICAgaW1hZ2VfZmls
ZS53cml0ZShpbWFnZSkKICAgICAgICAgICAgIGltYWdlX2ZpbGUuY2xvc2UoKQotCi0gICAgICAg
IHJldHVybiAoY3Jhc2gsIHRpbWVvdXQsIGFjdHVhbF9pbWFnZV9oYXNoLAotICAgICAgICAgICAg
ICAgICcnLmpvaW4ob3V0cHV0KSwgJycuam9pbihlcnJvcikpCisgICAgICAgIHJldHVybiAoc3Au
Y3Jhc2hlZCwgc3AudGltZWRfb3V0LCBhY3R1YWxfaW1hZ2VfaGFzaCwgb3V0cHV0LCBzcC5lcnJv
cikKIAogICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAg
ICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0
ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKLSAgICAgICAg
ICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBpZiBzeXMucGxh
dGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJyk6Ci0gICAgICAgICAgICAgICAgIyBDbG9z
aW5nIHN0ZGluL3N0ZG91dC9zdGRlcnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFgsCi0gICAgICAg
ICAgICAgICAgIyAoc2VlIHJlc3RhcnQoKSwgYWJvdmUpLCBhbmQgYW55d2F5IHdlIGRvbid0IHdh
bnQgdG8gaGFuZwotICAgICAgICAgICAgICAgICMgdGhlIGhhcm5lc3MgaWYgdGVzdF9zaGVsbCBp
cyBidWdneSwgc28gd2Ugd2FpdCBhIGNvdXBsZQotICAgICAgICAgICAgICAgICMgc2Vjb25kcyB0
byBnaXZlIHRlc3Rfc2hlbGwgYSBjaGFuY2UgdG8gY2xlYW4gdXAsIGJ1dCB0aGVuCi0gICAgICAg
ICAgICAgICAgIyBmb3JjZS1raWxsIHRoZSBwcm9jZXNzIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAg
ICAgICAgICBLSUxMX1RJTUVPVVQgPSAzLjAKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gdGlt
ZS50aW1lKCkgKyBLSUxMX1RJTUVPVVQKLSAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLl9wcm9j
LnBvbGwoKSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IHRpbWVvdXQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHRpbWUuc2xlZXAoMC4xKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9s
bCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcg
dGVzdCBkcml2ZXIgdGltZWQgb3V0LCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAna2lsbGluZyBpdCcpCi0gICAgICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51
bGwsICJ3IikKLSAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAi
LTkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9wcm9j
LnBpZCldLCBzdGRlcnI9bnVsbCkKLSAgICAgICAgICAgICAgICAgICAgbnVsbC5jbG9zZSgpCi0K
LSAgICBkZWYgX3JlYWRfbGluZShzZWxmLCB0aW1lb3V0LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0
aD0wKToKLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgcmVhZF9mZHMgPSBbXQot
Ci0gICAgICAgICMgZmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBsaW5lIGFscmVhZHkg
cmVhZCBvciBpZiB3ZSd2ZQotICAgICAgICAjIHJlYWQgdGhlIGVudGlyZSBpbWFnZQotICAgICAg
ICBpZiBpbWFnZV9sZW5ndGggYW5kIGxlbihzZWxmLl9yZWFkX2J1ZmZlcikgPj0gaW1hZ2VfbGVu
Z3RoOgotICAgICAgICAgICAgb3V0ID0gc2VsZi5fcmVhZF9idWZmZXJbMDppbWFnZV9sZW5ndGhd
Ci0gICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9IHNlbGYuX3JlYWRfYnVmZmVyW2ltYWdl
X2xlbmd0aDpdCi0gICAgICAgICAgICByZXR1cm4gKHRpbWVvdXQsIG91dCkKLQotICAgICAgICBp
ZHggPSBzZWxmLl9yZWFkX2J1ZmZlci5maW5kKCdcbicpCi0gICAgICAgIGlmIG5vdCBpbWFnZV9s
ZW5ndGggYW5kIGlkeCAhPSAtMToKLSAgICAgICAgICAgIG91dCA9IHNlbGYuX3JlYWRfYnVmZmVy
WzA6aWR4ICsgMV0KLSAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVmZmVyID0gc2VsZi5fcmVhZF9i
dWZmZXJbaWR4ICsgMTpdCi0gICAgICAgICAgICByZXR1cm4gKHRpbWVvdXQsIG91dCkKLQotICAg
ICAgICAjIElmIHdlJ3ZlIHRpbWVkIG91dCwgcmV0dXJuIGp1c3Qgd2hhdCB3ZSBoYXZlLCBpZiBh
bnl0aGluZwotICAgICAgICBpZiB0aW1lb3V0IG9yIG5vdyA+PSBzdG9wX3RpbWU6Ci0gICAgICAg
ICAgICBvdXQgPSBzZWxmLl9yZWFkX2J1ZmZlcgotICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZm
ZXIgPSAnJwotICAgICAgICAgICAgcmV0dXJuIChUcnVlLCBvdXQpCi0KLSAgICAgICAgKHJlYWRf
ZmRzLCB3cml0ZV9mZHMsIGVycl9mZHMpID0gc2VsZWN0LnNlbGVjdCgKLSAgICAgICAgICAgIFtz
ZWxmLl9zdGRvdXRfZmRdLCBbXSwgW10sIHN0b3BfdGltZSAtIG5vdykKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgaWYgdGltZW91dCBvciBsZW4ocmVhZF9mZHMpID09IDE6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fcmVhZF9idWZmZXIgKz0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCi0gICAg
ICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgcmVhZCA9IFtdCi0gICAgICAgIHJl
dHVybiBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1lKQorICAgICAgICBpZiBzZWxm
Ll9zcHJvYzoKKyAgICAgICAgICAgIHNlbGYuX3Nwcm9jLnN0b3AoKQorICAgICAgICAgICAgc2Vs
Zi5fc3Byb2MgPSBOb25lCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDg3MjRlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vz
cy5weQpAQCAtMCwwICsxLDIxMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyIiIlBhY2thZ2UgdGhhdCBpbXBsZW1lbnRzIHRoZSBTZXJ2ZXJQcm9jZXNzIHdyYXBwZXIgY2xh
c3MiIiIKKworaW1wb3J0IGZjbnRsCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQg
c2VsZWN0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1w
b3J0IHRpbWUKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVz
dHMucG9ydC5zZXJ2ZXJfcHJvY2VzcyIpCisKKworY2xhc3MgU2VydmVyUHJvY2VzczoKKyAgICAi
IiJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRoYXQK
KyAgICBpbXBsZW1lbnRzIGEgc2ltcGxlIHJlYWQvd3JpdGUgdXNhZ2UgbW9kZWwuIFRoZSBwcmlt
YXJ5IGJlbmVmaXQKKyAgICBpcyB0aGF0IHJlYWRpbmcgcmVzcG9uc2VzIHRha2VzIGEgdGltZW91
dCwgc28gdGhhdCB3ZSBkb24ndCBldmVyIGJsb2NrCisgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xh
c3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKKyAgICBh
cyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lKToKKyAgICAgICAgc2VsZi5f
cG9ydCA9IHBvcnRfb2JqCisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYu
X2NtZCA9IGNtZAorICAgICAgICBzZWxmLl9lbnYgPSBlbnYKKyAgICAgICAgc2VsZi5fcmVzZXQo
KQorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fb3V0cHV0ID0gJycKKyAgICAgICAgc2VsZi5jcmFzaGVkID0gRmFsc2UKKyAg
ICAgICAgc2VsZi50aW1lZF9vdXQgPSBGYWxzZQorICAgICAgICBzZWxmLmVycm9yID0gJycKKwor
ICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCIlcyBhbHJlYWR5IHJ1bm5pbmciICUgc2VsZi5fbmFtZSkKKyAg
ICAgICAgc2VsZi5fcmVzZXQoKQorICAgICAgICBjbG9zZV9mZHMgPSBzeXMucGxhdGZvcm0gbm90
IGluICgnd2luMzInLCAnY3lnd2luJykKKyAgICAgICAgc2VsZi5fcHJvYyA9IHN1YnByb2Nlc3Mu
UG9wZW4oc2VsZi5fY21kLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1jbG9zZV9mZHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1zZWxmLl9lbnYpCisgICAg
ICAgIGZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKKyAgICAgICAgZmwgPSBmY250bC5m
Y250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZf
U0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVy
ci5maWxlbm8oKQorICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQor
ICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NL
KQorCisgICAgZGVmIGhhbmRsZV9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICIiIlRoaXMgcm91
dGluZSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwcm9jZXNzIGNyYXNoZWQgb3IgZXhpdGVkCisgICAg
ICAgIGJlY2F1c2Ugb2YgYSBrZXlib2FyZCBpbnRlcnJ1cHQgYW5kIHJhaXNlcyBLZXlib2FyZElu
dGVycnVwdAorICAgICAgICBhY2NvcmRpbmdseS4iIiIKKyAgICAgICAgaWYgc2VsZi5jcmFzaGVk
OgorICAgICAgICAgICAgIyBUaGlzIGlzIGhleCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVz
ZWQgZm9yIGFicnVwdAorICAgICAgICAgICAgIyB0ZXJtaW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlm
IHdlIGhpdCBjdHJsK2MgZnJvbSB0aGUgcHJvbXB0CisgICAgICAgICAgICAjIGFuZCB3ZSBoYXBw
ZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVsbC4KKyAgICAgICAgICAgICMgc2RveW9u
OiBOb3Qgc3VyZSBmb3Igd2hpY2ggT1MgYW5kIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUKKyAg
ICAgICAgICAgICMgYWJvdmUgY29kZSBpcyB2YWxpZC4gV2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIg
TGludXggdG8gZGV0ZWN0CisgICAgICAgICAgICAjIGN0cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nl
c3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZQorICAgICAgICAgICAgIyBTSUdJTlQuIEFuZCB0
aGF0IGFncmVlcyB3aXRoIHRoZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRpb24uCisgICAgICAgICAg
ICBpZiAoLTEwNzM3NDE1MTAgPT0gc2VsZi5fcHJvYy5yZXR1cm5jb2RlIG9yCisgICAgICAgICAg
ICAgICAgLSBzaWduYWwuU0lHSU5UID09IHNlbGYuX3Byb2MucmV0dXJuY29kZSk6CisgICAgICAg
ICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJs
eWluZyBwcm9jZXNzIGlzIHJ1bm5pbmc7IHJldHVybnMgTm9uZQorICAgICAgICBpZiBpdCBzdGls
bCBpcyAod3JhcHBlciBhcm91bmQgc3VicHJvY2Vzcy5wb2xsKS4iIiIKKyAgICAgICAgaWYgc2Vs
Zi5fcHJvYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgZGVmIHJldHVybmNvZGUoc2VsZik6CisgICAgICAgICIiIlJldHVy
bnMgdGhlIGV4aXQgY29kZSBmcm9tIHRoZSBzdWJwcmNvZXNzOyByZXR1cm5zIE5vbmUgaWYgdGhl
CisgICAgICAgIHByb2Nlc3MgaGFzbid0IGV4aXRlZCAodGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5k
IHN1YnByb2Nlc3MucmV0dXJuY29kZSkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9w
cm9jOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucmV0dXJuY29kZQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGlucHV0KToKKyAgICAgICAgIiIiV3Jp
dGUgYSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0
YXJ0KCknZWQKKyAgICAgICAgaWYgaXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKKyAgICAgICAg
aWYgbm90IHNlbGYuX3Byb2M6CisgICAgICAgICAgICBzZWxmLl9zdGFydCgpCisgICAgICAgIHNl
bGYuX3Byb2Muc3RkaW4ud3JpdGUoaW5wdXQpCisKKyAgICBkZWYgcmVhZF9saW5lKHNlbGYsIGRl
YWRsaW5lKToKKyAgICAgICAgIiIiUmVhZCBhIHNpbmdsZSBsaW5lIGZyb20gdGhlIHN1YnByb2Nl
c3MsIHdhaXRpbmcgdW50aWwgdGhlIGRlYWRsaW5lLgorICAgICAgICBJZiB0aGUgZGVhZGxpbmUg
cGFzc2VzLCB0aGUgY2FsbCB0aW1lcyBvdXQuIE5vdGUgdGhhdCBldmVuIGlmIHRoZQorICAgICAg
ICBzdWJwcm9jZXNzIGhhcyBjcmFzaGVkIG9yIHRoZSBkZWFkbGluZSBoYXMgcGFzc2VkLCBpZiB0
aGVyZSBpcyBvdXRwdXQKKyAgICAgICAgcGVuZGluZywgaXQgd2lsbCBiZSByZXR1cm5lZC4KKwor
ICAgICAgICBBcmdzOgorICAgICAgICAgICAgZGVhZGxpbmU6IHRpbWVzdGFtcCB0aGF0IHRoZSBy
ZWFkIG11c3QgY29tcGxldGUgYmVmb3JlCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBv
dXRwdXQ6IGRhdGEgcmV0dXJuZWQsIGlmIGFueS4gSWYgbm8gZGF0YSBpcyBhdmFpbGFibGUgYW5k
IHRoZQorICAgICAgICAgICAgICAgIGNhbGwgdGltZXMgb3V0IG9yIGNyYXNoZXMsIGFuIGVtcHR5
IHN0cmluZyBpcyByZXR1cm5lZC4gTm90ZQorICAgICAgICAgICAgICAgIHRoYXQgdGhlIHJldHVy
bmVkIHN0cmluZyBpbmNsdWRlcyB0aGUgbmV3bGluZSAoJ1xuJykuIiIiCisgICAgICAgIHJldHVy
biBzZWxmLl9yZWFkKGRlYWRsaW5lLCAwKQorCisgICAgZGVmIHJlYWQoc2VsZiwgZGVhZGxpbmUs
IHNpemUpOgorICAgICAgICAiIiJBdHRlbXB0cyB0byByZWFkIHNpemUgY2hhcmFjdGVycyBmcm9t
IHRoZSBzdWJwcm9jZXNzLCB3YWl0aW5nIHVudGlsCisgICAgICAgIHRoZSBkZWFkbGluZSBwYXNz
ZXMuIElmIHRoZSBkZWFkbGluZSBwYXNzZXMsIGFueSBhdmFpbGFibGUgZGF0YSB3aWxsIGJlCisg
ICAgICAgIHJldHVybmVkLiBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgZGVhZGxpbmUgaGFzIHBhc3Nl
ZCBvciBpZiB0aGUKKyAgICAgICAgc3VicHJvY2VzcyBoYXMgY3Jhc2hlZCwgYW55IGF2YWlsYWJs
ZSBkYXRhIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg
ICAgIGRlYWRsaW5lOiB0aW1lc3RhbXAgdGhhdCB0aGUgcmVhZCBtdXN0IGNvbXBsZXRlIGJlZm9y
ZQorICAgICAgICAgICAgc2l6ZTogYW1vdW50IG9mIGRhdGEgdG8gcmVhZC4KKyAgICAgICAgUmV0
dXJuczoKKyAgICAgICAgICAgIG91dHB1dDogZGF0YSByZXR1cm5lZCwgaWYgYW55LiBJZiBubyBk
YXRhIGlzIGF2YWlsYWJsZSwgYW4gZW1wdHkKKyAgICAgICAgICAgICAgICBzdHJpbmcgaXMgcmV0
dXJuZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwg
c2l6ZSkKKworICAgIGRlZiBfcmVhZChzZWxmLCBkZWFkbGluZSwgc2l6ZSk6CisgICAgICAgICIi
IkludGVybmFsIHJvdXRpbmUgdGhhdCBhY3R1YWxseSBkb2VzIHRoZSByZWFkLiIiIgorICAgICAg
ICBpZHggPSAtMQorICAgICAgICBvdXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQor
ICAgICAgICBlcnJfZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICBzZWxl
Y3RfZmRzID0gKG91dF9mZCwgZXJyX2ZkKQorICAgICAgICB3aGlsZSBub3Qgc2VsZi50aW1lZF9v
dXQgYW5kIG5vdCBzZWxmLmNyYXNoZWQ6CisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwo
KSAhPSBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuY3Jhc2hlZCA9IFRydWUKKyAgICAgICAg
ICAgICAgICBzZWxmLmhhbmRsZV9pbnRlcnJ1cHQoKQorCisgICAgICAgICAgICBub3cgPSB0aW1l
LnRpbWUoKQorICAgICAgICAgICAgaWYgbm93ID4gZGVhZGxpbmU6CisgICAgICAgICAgICAgICAg
c2VsZi50aW1lZF9vdXQgPSBUcnVlCisKKyAgICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHdl
IGhhdmUgYW55IG91dHB1dCB3ZSBjYW4gcmV0dXJuLgorICAgICAgICAgICAgaWYgc2l6ZSBhbmQg
bGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToKKyAgICAgICAgICAgICAgICBpZHggPSBzaXplCisg
ICAgICAgICAgICBlbGlmIHNpemUgPT0gMDoKKyAgICAgICAgICAgICAgICBpZHggPSBzZWxmLl9v
dXRwdXQuZmluZCgnXG4nKSArIDEKKworICAgICAgICAgICAgaWYgaWR4IG9yIHNlbGYuY3Jhc2hl
ZCBvciBzZWxmLnRpbWVkX291dDoKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9vdXRw
dXRbMDppZHhdCisgICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ID0gc2VsZi5fb3V0cHV0W2lk
eDpdCisgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgICAgICAgICAjIE5vcGUg
LSB3YWl0IGZvciBtb3JlIGRhdGEuCisgICAgICAgICAgICAocmVhZF9mZHMsIHdyaXRlX2Zkcywg
ZXJyX2ZkcykgPSBzZWxlY3Quc2VsZWN0KHNlbGVjdF9mZHMsIFtdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RfZmRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWFkbGluZSAtIG5vdykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBv
dXRfZmQgaW4gcmVhZF9mZHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBz
ZWxmLl9wcm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBlcnJfZmQgaW4gcmVh
ZF9mZHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IgKz0gc2VsZi5fcHJvYy5zdGRl
cnIucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAg
ICBwYXNzCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCAoc2h1dCBkb3du
KSB0aGUgc3VicHJvY2VzcyksIGlmIGl0IGlzIHJ1bm5pbmcuIiIiCisgICAgICAgIHBpZCA9IHNl
bGYuX3Byb2MucGlkCisgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICBz
ZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgor
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQorICAgICAgICBpZiBzeXMucGxh
dGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJyk6CisgICAgICAgICAgICAjIENsb3Npbmcg
c3RkaW4vc3Rkb3V0L3N0ZGVyciBoYW5ncyBzb21ldGltZXMgb24gT1MgWCwKKyAgICAgICAgICAg
ICMgKHNlZSByZXN0YXJ0KCksIGFib3ZlKSwgYW5kIGFueXdheSB3ZSBkb24ndCB3YW50IHRvIGhh
bmcKKyAgICAgICAgICAgICMgdGhlIGhhcm5lc3MgaWYgdGVzdF9zaGVsbCBpcyBidWdneSwgc28g
d2Ugd2FpdCBhIGNvdXBsZQorICAgICAgICAgICAgIyBzZWNvbmRzIHRvIGdpdmUgdGVzdF9zaGVs
bCBhIGNoYW5jZSB0byBjbGVhbiB1cCwgYnV0IHRoZW4KKyAgICAgICAgICAgICMgZm9yY2Uta2ls
bCB0aGUgcHJvY2VzcyBpZiBuZWNlc3NhcnkuCisgICAgICAgICAgICBLSUxMX1RJTUVPVVQgPSAz
LjAKKyAgICAgICAgICAgIHRpbWVvdXQgPSB0aW1lLnRpbWUoKSArIEtJTExfVElNRU9VVAorICAg
ICAgICAgICAgd2hpbGUgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkg
PCB0aW1lb3V0OgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAg
aWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5p
bmcoJ3N0b3BwaW5nICVzIHRpbWVkIG91dCwga2lsbGluZyBpdCcgJQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9uYW1lKQorICAgICAgICAgICAgICAgIG51bGwgPSBvcGVuKG9z
LmRldm51bGwsICJ3IikKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIs
ICItOSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3Byb2Mu
cGlkKV0sIHN0ZGVycj1udWxsKQorICAgICAgICAgICAgICAgIG51bGwuY2xvc2UoKQorICAgICAg
ICAgICAgICAgIF9sb2cud2FybmluZygna2lsbGVkJykKKyAgICAgICAgc2VsZi5fcmVzZXQoKQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVz
dF90eXBlcy9pbWFnZV9kaWZmLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5CmluZGV4IDQyOTI4YmEuLjNhM2Q4YTYg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rl
c3RfdHlwZXMvaW1hZ2VfZGlmZi5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2RpZmYucHkKQEAgLTkwLDYgKzkwLDcgQEAg
Y2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgIEFy
Z3M6CiAgICAgICAgICAgZmlsZW5hbWU6IHRoZSBuYW1lIG9mIHRoZSB0ZXN0CiAgICAgICAgICAg
dGFyZ2V0OiBEZWJ1ZyBvciBSZWxlYXNlCisgICAgICAgIFJldHVybnMgMSBpZiB0aGUgZmlsZXMg
YXJlIGRpZmZlcmVudCwgMCBpZiB0aGV5IG1hdGNoCiAgICAgICAgICIiIgogICAgICAgICBkaWZm
X2ZpbGVuYW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsCiAgICAgICAgICAgc2Vs
Zi5GSUxFTkFNRV9TVUZGSVhfQ09NUEFSRSkKQEAgLTk4LDYgKzk5LDcgQEAgY2xhc3MgSW1hZ2VE
aWZmKHRlc3RfdHlwZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgIGV4cGVjdGVkX2ZpbGVu
YW1lID0gc2VsZi5vdXRwdXRfZmlsZW5hbWUoZmlsZW5hbWUsCiAgICAgICAgICAgc2VsZi5GSUxF
TkFNRV9TVUZGSVhfRVhQRUNURUQgKyAnLnBuZycpCiAKKyAgICAgICAgcmVzdWx0ID0gMQogICAg
ICAgICB0cnk6CiAgICAgICAgICAgICBfY29tcGFyZV9hdmFpbGFibGUgPSBUcnVlCiAgICAgICAg
ICAgICByZXN1bHQgPSBwb3J0LmRpZmZfaW1hZ2UoZXhwZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9m
aWxlbmFtZSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51785</attachid>
            <date>2010-03-26 15:10:18 -0700</date>
            <delta_ts>2010-03-26 16:09:04 -0700</delta_ts>
            <desc>revise w/ review feedback from eric and ojan</desc>
            <filename>wk34826_image_diff.diff</filename>
            <type>text/plain</type>
            <size>26930</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlYmRiNTg3Li5hMTRkNjExIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMt
MjUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHBpeGVsIHRlc3RzIChp
bWFnZSBkaWZmKSBwcm9wZXJseSBvbiB0aGUgTWFjIHBvcnQuCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW50cm9kdWNlcyBhIG5ldyAiU2VydmVyUG9jZXNzIiBjbGFzcyB0aGF0IGNhbiBiZSB1c2Vk
CisgICAgICAgIHRvIG1hbmFnZSBwcm9jZXNzZXMgdGhhdCB0aGUgcnVuLXdlYmtpdC10ZXN0cyBo
YXJuZXNzIGZvcmtzIG9mZiBhbmQKKyAgICAgICAgZXhwZWN0cyB0byBzdGF5IHVwIGZvciBsb25n
ZXIgdGhhbiBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIHNlc3Npb24uCisgICAgICAgIEJvdGgg
RHVtcFJlbmRlclRyZWUgYW5kIEltYWdlRGlmZiB1c2UgdGhpcyBzdHlsZSBvZiBjb21tdW5pY2F0
aW9uLAorICAgICAgICBhbHRob3VnaCB0aGUgY3VycmVudCBjb2RlIGZvcmtzIG9mZiBhIG5ldyBJ
bWFnZURpZmYgZm9yIGVhY2ggZGlmZgorICAgICAgICAoV2UgbmVlZCB0byByZXN0cnVjdHVyZSBv
dGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byBiZSBhYmxlIHRvIGRvIHRoaXMKKyAgICAgICAgc2Fm
ZWx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQpLgorCisgICAgICAgIEFsc28sIG5v
dyB0aGF0IHRoZSBTZXJ2ZXJQcm9jZXNzIGFic3RyYWN0aW9uIGV4aXN0cywgd2UgY2FuIHByb2Jh
Ymx5CisgICAgICAgIGNsZWFuIHVwIGFuZCBzaW1wbGlmeSBzb21lIG9mIHRoZSB0aHJlYWQgbWFu
YWdlbWVudCBsb2dpYyBpbgorICAgICAgICB0ZXN0X3NoZWxsX3RocmVhZCBhcyB3ZWxsLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDgyNgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2lt
YWdlX2RpZmYucHk6CisKIDIwMTAtMDMtMjUgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkK
aW5kZXggMzBkMmFiOC4uYTRkMDk3MSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTI5LDEyICsyOSwxMiBAQAog
CiAiIiJXZWJLaXQgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIK
IAotaW1wb3J0IGZjbnRsCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGRiCiBp
bXBvcnQgcGxhdGZvcm0KLWltcG9ydCBzZWxlY3QKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAog
aW1wb3J0IHNpZ25hbAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKQEAgLTQyLDYgKzQy
LDcgQEAgaW1wb3J0IHRpbWUKIGltcG9ydCB3ZWJicm93c2VyCiAKIGltcG9ydCBiYXNlCitpbXBv
cnQgc2VydmVyX3Byb2Nlc3MKIAogaW1wb3J0IHdlYmtpdHB5CiBpbXBvcnQgd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgYXMgZXhlY3V0aXZlCkBAIC04NSwxMSArODYsNjkgQEAgY2xh
c3MgTWFjUG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRHVtcFJlbmRl
clRyZWUgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSBkcml2ZXJfcGF0aCkKICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQogCi0gICAgICAgICMgVGhpcyBzaG91bGQgYWxzbyB2YWxpZGF0ZSB0aGF0IHRo
ZSBJbWFnZURpZmYgcGF0aCBpcyB2YWxpZAotICAgICAgICAjIChvbmNlIHRoaXMgc2NyaXB0IGtu
b3dzIGhvdyB0byB1c2UgSW1hZ2VEaWZmKS4KLSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ4MjYKKyAgICAgICAgaW1hZ2VfZGlmZl9wYXRoID0gc2Vs
Zi5fcGF0aF90b19pbWFnZV9kaWZmKCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGlt
YWdlX2RpZmZfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJJbWFnZURpZmYgd2FzIG5v
dCBmb3VuZCBhdCAlcyIgJSBpbWFnZV9kaWZmX3BhdGgpCisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKwogICAgICAgICByZXR1cm4gVHJ1ZQogCisgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhw
ZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBkaWZm
X2ZpbGVuYW1lPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIGZpbGVz
IGFyZSBkaWZmZXJlbnQuIEFsc28gd3JpdGUgYSBkZWx0YQorICAgICAgICBpbWFnZSBvZiB0aGUg
dHdvIGltYWdlcyBpbnRvIHxkaWZmX2ZpbGVuYW1lfCBpZiBpdCBpcyBub3QgTm9uZS4iIiIKKwor
ICAgICAgICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGVzdCBkaWRuJ3QgYWN0dWFsbHkg
Z2VuZXJhdGUgYW4gaW1hZ2UuCisgICAgICAgIGFjdHVhbF9sZW5ndGggPSBvcy5zdGF0KGFjdHVh
bF9maWxlbmFtZSkuc3Rfc2l6ZQorICAgICAgICBpZiBhY3R1YWxfbGVuZ3RoID09IDA6CisgICAg
ICAgICAgICBpZiBkaWZmX2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5Zmls
ZShhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKworICAgICAgICBzcCA9IHNlbGYuX2RpZmZfaW1hZ2VfcmVxdWVzdChleHBlY3RlZF9m
aWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fZGlmZl9pbWFn
ZV9yZXBseShzcCwgZGlmZl9maWxlbmFtZSkKKworICAgIGRlZiBfZGlmZl9pbWFnZV9yZXF1ZXN0
KHNlbGYsIGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpOgorICAgICAgICBjbWQg
PSBbc2VsZi5fcGF0aF90b19pbWFnZV9kaWZmKCksICctLXRvbGVyYW5jZScsICcwLjEnXQorICAg
ICAgICBzcCA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3Moc2VsZiwgJ0ltYWdlRGlmZics
IGNtZCkKKworICAgICAgICBhY3R1YWxfbGVuZ3RoID0gb3Muc3RhdChhY3R1YWxfZmlsZW5hbWUp
LnN0X3NpemUKKyAgICAgICAgYWN0dWFsX2ZpbGUgPSBvcGVuKGFjdHVhbF9maWxlbmFtZSkucmVh
ZCgpCisgICAgICAgIGV4cGVjdGVkX2xlbmd0aCA9IG9zLnN0YXQoZXhwZWN0ZWRfZmlsZW5hbWUp
LnN0X3NpemUKKyAgICAgICAgZXhwZWN0ZWRfZmlsZSA9IG9wZW4oZXhwZWN0ZWRfZmlsZW5hbWUp
LnJlYWQoKQorICAgICAgICBzcC53cml0ZSgnQ29udGVudC1MZW5ndGg6ICVkXG4lc0NvbnRlbnQt
TGVuZ3RoOiAlZFxuJXMnICUKKyAgICAgICAgICAgICAgICAgKGFjdHVhbF9sZW5ndGgsIGFjdHVh
bF9maWxlLCBleHBlY3RlZF9sZW5ndGgsIGV4cGVjdGVkX2ZpbGUpKQorCisgICAgICAgIHJldHVy
biBzcAorCisgICAgZGVmIF9kaWZmX2ltYWdlX3JlcGx5KHNlbGYsIHNwLCBkaWZmX2ZpbGVuYW1l
KToKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDIuMAorICAgICAgICBvdXRwdXQg
PSBzcC5yZWFkX2xpbmUoZGVhZGxpbmUpCisgICAgICAgIHdoaWxlIG5vdCBzcC50aW1lZF9vdXQg
YW5kIG5vdCBzcC5jcmFzaGVkIGFuZCBvdXRwdXQ6CisgICAgICAgICAgICBpZiBvdXRwdXQuc3Rh
cnRzd2l0aCgnQ29udGVudC1MZW5ndGgnKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2go
J0NvbnRlbnQtTGVuZ3RoOiAoXGQrKScsIG91dHB1dCkKKyAgICAgICAgICAgICAgICBjb250ZW50
X2xlbmd0aCA9IGludChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIG91dHB1dCA9IHNwLnJl
YWQoZGVhZGxpbmUsIGNvbnRlbnRfbGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICBlbGlmIG91dHB1dC5zdGFydHN3aXRoKCdkaWZmJyk6CisgICAgICAgICAgICAgICAg
YnJlYWsKKyAgICAgICAgICAgIG91dHB1dCA9IHNwLnJlYWRfbGluZShkZWFkbGluZSkKKworICAg
ICAgICByZXN1bHQgPSBUcnVlCisgICAgICAgIGlmIHNwLnRpbWVkX291dDoKKyAgICAgICAgICAg
IF9sb2cuZXJyb3IoIkltYWdlRGlmZiB0aW1lZCBvdXQgb24gJXMiICUgZXhwZWN0ZWRfZmlsZW5h
bWUpCisgICAgICAgIGVsaWYgc3AuY3Jhc2hlZDoKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIklt
YWdlRGlmZiBjcmFzaGVkIikKKyAgICAgICAgZWxpZiBvdXRwdXQuc3RhcnRzd2l0aCgnZGlmZicp
OgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdkaWZmOiAoLispJSAocGFzc2VkfGZhaWxlZCkn
LCBvdXRwdXQpCisgICAgICAgICAgICBpZiBtLmdyb3VwKDIpID09ICdwYXNzZWQnOgorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIGVsaWYgZGlmZl9maWxlbmFtZToKKyAg
ICAgICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgJ3cnKS53cml0ZShvdXRwdXQpCisKKyAgICAg
ICAgc3Auc3RvcCgpCisgICAgICAgIHJldHVybiByZXN1bHQKKwogICAgIGRlZiBudW1fY29yZXMo
c2VsZik6CiAgICAgICAgIHJldHVybiBpbnQob3MucG9wZW4yKCJzeXNjdGwgLW4gaHcubmNwdSIp
WzFdLnJlYWQoKSkKIApAQCAtMjUzLDcgKzMxMiw3IEBAIGNsYXNzIE1hY1BvcnQoYmFzZS5Qb3J0
KToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnaW1hZ2VfZGlmZicpICMgRklY
TUU6IFRoaXMgaXMgd3JvbmcgYW5kIHNob3VsZCBiZSAiSW1hZ2VEaWZmIiwgYnV0IGhhdmluZyB0
aGUgY29ycmVjdCBwYXRoIGNhdXNlcyBvdGhlciBwYXJ0cyBvZiB0aGUgc2NyaXB0IHRvIGhhbmcu
CisgICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdJbWFnZURpZmYnKQogCiAgICAgZGVm
IF9wYXRoX3RvX3dkaWZmKHNlbGYpOgogICAgICAgICByZXR1cm4gJ3dkaWZmJyAjIEZJWE1FOiBU
aGlzIGRvZXMgbm90IGV4aXN0IG9uIGEgZGVmYXVsdCBNYWMgT1MgWCBMZW9wYXJkIGluc3RhbGwu
CkBAIC0yODgsMTMgKzM0Nyw3IEBAIGNsYXNzIE1hY0RyaXZlcihiYXNlLkRyaXZlcik6CiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGltYWdlX3BhdGgsIGRyaXZlcl9vcHRpb25zKToKICAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fZHJpdmVyX29wdGlvbnMgPSBk
cml2ZXJfb3B0aW9ucwotICAgICAgICBzZWxmLl90YXJnZXQgPSBwb3J0Ll9vcHRpb25zLnRhcmdl
dAogICAgICAgICBzZWxmLl9pbWFnZV9wYXRoID0gaW1hZ2VfcGF0aAotICAgICAgICBzZWxmLl9z
dGRvdXRfZmQgPSBOb25lCi0gICAgICAgIHNlbGYuX2NtZCA9IE5vbmUKLSAgICAgICAgc2VsZi5f
ZW52ID0gTm9uZQotICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQotICAgICAgICBzZWxmLl9yZWFk
X2J1ZmZlciA9ICcnCiAKICAgICAgICAgY21kID0gW10KICAgICAgICAgIyBIb29rIGZvciBpbmpl
Y3RpbmcgdmFsZ3JpbmQgb3Igb3RoZXIgcnVudGltZSBpbnN0cnVtZW50YXRpb24sCkBAIC0zMDgs
NDkgKzM2MSwyOCBAQCBjbGFzcyBNYWNEcml2ZXIoYmFzZS5Ecml2ZXIpOgogICAgICAgICAgICAg
IyBwcmFjdGljZSBpdCBzaG91bGRuJ3QgY29tZSB1cCBhbmQgdGhlIC0taGVscCBvdXRwdXQgd2Fy
bnMKICAgICAgICAgICAgICMgYWJvdXQgaXQgYW55d2F5LgogICAgICAgICAgICAgY21kICs9IHNl
bGYuX29wdGlvbnMud3JhcHBlci5zcGxpdCgpCi0gICAgICAgICMgRklYTUU6IFVzaW5nIGFyY2gg
aGVyZSBtYXNrcyBhbnkgcG9zc2libGUgZmlsZS1ub3QtZm91bmQgZXJyb3JzIGZyb20gYSBub24t
ZXhpc3RhbnQgZHJpdmVyIGV4ZWN1dGFibGUuCi0gICAgICAgIGNtZCArPSBbJ2FyY2gnLCAnLWkz
ODYnLCBwb3J0Ll9wYXRoX3RvX2RyaXZlcigpLCAnLSddCiAKLSAgICAgICAgIyBGSVhNRTogVGhp
cyBpcyBhIGhhY2sgYXJvdW5kIG91ciBsYWNrIG9mIEltYWdlRGlmZiBzdXBwb3J0IGZvciBub3cu
Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0Ll9vcHRpb25zLm5vX3BpeGVsX3Rlc3RzOgotICAg
ICAgICAgICAgX2xvZy53YXJuKCJUaGlzIHBvcnQgZG9lcyBub3QgeWV0IHN1cHBvcnQgcGl4ZWwg
dGVzdHMuIikKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHMg
PSBUcnVlCi0gICAgICAgICAgICAjY21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCisgICAgICAg
IGNtZCArPSBbJ2FyY2gnLCAnLWkzODYnLCBwb3J0Ll9wYXRoX3RvX2RyaXZlcigpLCAnLSddCiAK
LSAgICAgICAgI2lmIGRyaXZlcl9vcHRpb25zOgotICAgICAgICAjICAgIGNtZCArPSBkcml2ZXJf
b3B0aW9ucworICAgICAgICBpZiBpbWFnZV9wYXRoOgorICAgICAgICAgICAgY21kLmFwcGVuZCgn
LS1waXhlbC10ZXN0cycpCiAgICAgICAgIGVudiA9IG9zLmVudmlyb24KICAgICAgICAgZW52WydE
WUxEX0ZSQU1FV09SS19QQVRIJ10gPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAgICAg
c2VsZi5fY21kID0gY21kCi0gICAgICAgIHNlbGYuX2VudiA9IGVudgotICAgICAgICBzZWxmLnJl
c3RhcnQoKQorICAgICAgICBzZWxmLl9zcHJvYyA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nl
c3Moc2VsZi5fcG9ydCwKKyAgICAgICAgICAgICJEdW1wUmVuZGVyVHJlZSIsIGNtZCwgZW52KQog
CiAgICAgZGVmIHBvbGwoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQor
ICAgICAgICByZXR1cm4gc2VsZi5fc3Byb2MucG9sbCgpCiAKICAgICBkZWYgcmVzdGFydChzZWxm
KToKLSAgICAgICAgc2VsZi5zdG9wKCkKLSAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgY2xvc2Vf
ZmRzPVRydWUgdG8gd29yayBhcm91bmQgUHl0aG9uIGJ1ZyAjMjMyMAotICAgICAgICAjIChvdGhl
cndpc2Ugd2UgY2FuIGhhbmcgd2hlbiB3ZSBraWxsIHRlc3Rfc2hlbGwgd2hlbiB3ZSBhcmUgcnVu
bmluZwotICAgICAgICAjIG11bHRpcGxlIHRocmVhZHMpLiBTZWUgaHR0cDovL2J1Z3MucHl0aG9u
Lm9yZy9pc3N1ZTIzMjAgLgotICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihz
ZWxmLl9jbWQsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXNlbGYuX2VudiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUpCisgICAgICAgIHNlbGYuX3Nw
cm9jLnN0b3AoKQorICAgICAgICBzZWxmLl9zcHJvYy5zdGFydCgpCisgICAgICAgIHJldHVybgog
CiAgICAgZGVmIHJldHVybmNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnJl
dHVybmNvZGUKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucmV0dXJuY29kZSgpCiAKICAgICBk
ZWYgcnVuX3Rlc3Qoc2VsZiwgdXJpLCB0aW1lb3V0bXMsIGltYWdlX2hhc2gpOgotICAgICAgICBv
dXRwdXQgPSBbXQotICAgICAgICBlcnJvciA9IFtdCi0gICAgICAgIGltYWdlID0gJycKLSAgICAg
ICAgY3Jhc2ggPSBGYWxzZQotICAgICAgICB0aW1lb3V0ID0gRmFsc2UKLSAgICAgICAgYWN0dWFs
X3VyaSA9IE5vbmUKLSAgICAgICAgYWN0dWFsX2ltYWdlX2hhc2ggPSBOb25lCi0KICAgICAgICAg
aWYgdXJpLnN0YXJ0c3dpdGgoImZpbGU6Ly8vIik6CiAgICAgICAgICAgICBjbWQgPSB1cmlbNzpd
CiAgICAgICAgIGVsc2U6CkBAIC0zNjAsMTMwICszOTIsNDkgQEAgY2xhc3MgTWFjRHJpdmVyKGJh
c2UuRHJpdmVyKToKICAgICAgICAgICAgIGNtZCArPSAiJyIgKyBpbWFnZV9oYXNoCiAgICAgICAg
IGNtZCArPSAiXG4iCiAKLSAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZShjbWQpCi0gICAg
ICAgIHNlbGYuX3N0ZG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAg
IGZsID0gZmNudGwuZmNudGwoc2VsZi5fc3Rkb3V0X2ZkLCBmY250bC5GX0dFVEZMKQotICAgICAg
ICBmY250bC5mY250bChzZWxmLl9zdGRvdXRfZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19O
T05CTE9DSykKKyAgICAgICAgIyBwZGIuc2V0X3RyYWNlKCkKKyAgICAgICAgc3AgPSBzZWxmLl9z
cHJvYworICAgICAgICBzcC53cml0ZShjbWQpCiAKLSAgICAgICAgc3RvcF90aW1lID0gdGltZS50
aW1lKCkgKyAoaW50KHRpbWVvdXRtcykgLyAxMDAwLjApCi0gICAgICAgIHJlc3AgPSAnJwotICAg
ICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3RvcF90aW1l
KQotICAgICAgICByZXNwICs9IGxpbmUKICAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSA9
IEZhbHNlCi0gICAgICAgIHdoaWxlIG5vdCB0aW1lb3V0IGFuZCBsaW5lLnJzdHJpcCgpICE9ICIj
RU9GIjoKLSAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmVuJ3QgY3Jhc2hlZC4KLSAgICAg
ICAgICAgIGlmIGxpbmUgPT0gJycgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgICAgICMgVGhpcyBpcyBoZXggY29kZSAweGMwMDAwMDFkLCB3aGljaCBpcyB1c2VkIGZv
ciBhYnJ1cHQKLSAgICAgICAgICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYg
d2UgaGl0IGN0cmwrYyBmcm9tIHRoZSBwcm9tcHQKLSAgICAgICAgICAgICAgICAjIGFuZCB3ZSBo
YXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVsbC4KLSAgICAgICAgICAgICAgICAj
IHNkb3lvbjogTm90IHN1cmUgZm9yIHdoaWNoIE9TIGFuZCBpbiB3aGF0IGNpcmN1bXN0YW5jZXMg
dGhlCi0gICAgICAgICAgICAgICAgIyBhYm92ZSBjb2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZv
ciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKLSAgICAgICAgICAgICAgICAjIGN0cmwrYyBpcyBm
b3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZQotICAgICAgICAgICAg
ICAgICMgU0lHSU5ULiBBbmQgdGhhdCBhZ3JlZXMgd2l0aCB0aGUgc3VicHJvY2VzcyBkb2N1bWVu
dGF0aW9uLgotICAgICAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLnJldHVybmNv
ZGUoKSBvcgotICAgICAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gc2VsZi5yZXR1
cm5jb2RlKCkpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAot
ICAgICAgICAgICAgICAgIGNyYXNoID0gVHJ1ZQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgIGFjdHVhbF9pbWFnZV9oYXNoID0gTm9uZQorICAgICAgICBvdXRwdXQgPSAnJworICAgICAg
ICBpbWFnZSA9ICcnCiAKLSAgICAgICAgICAgIGVsaWYgKGxpbmUuc3RhcnRzd2l0aCgnQ29udGVu
dC1UeXBlOicpIGFuZCBub3QKLSAgICAgICAgICAgICAgICAgIGhhdmVfc2Vlbl9jb250ZW50X3R5
cGUpOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgaW50KHRpbWVvdXRtcykgLyAx
MDAwLjAKKyAgICAgICAgbGluZSA9IHNwLnJlYWRfbGluZShkZWFkbGluZSkKKyAgICAgICAgd2hp
bGUgbm90IHNwLnRpbWVkX291dCBhbmQgbm90IHNwLmNyYXNoZWQgYW5kIGxpbmUucnN0cmlwKCkg
IT0gIiNFT0YiOgorICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzd2l0aCgnQ29udGVudC1UeXBl
OicpIGFuZCBub3QKKyAgICAgICAgICAgICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlKToKICAg
ICAgICAgICAgICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlID0gVHJ1ZQotICAgICAgICAgICAg
ICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVu
ZChsaW5lKQotCi0gICAgICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUo
dGltZW91dCwgc3RvcF90aW1lKQotICAgICAgICAgICAgcmVzcCArPSBsaW5lCisgICAgICAgICAg
ICAgICAgb3V0cHV0ICs9IGxpbmUKKyAgICAgICAgICAgIGxpbmUgPSBzcC5yZWFkX2xpbmUoZGVh
ZGxpbmUpCiAKICAgICAgICAgIyBOb3cgcmVhZCBhIHNlY29uZCBibG9jayBvZiB0ZXh0IGZvciB0
aGUgb3B0aW9uYWwgaW1hZ2UgZGF0YQotICAgICAgICBpbWFnZV9sZW5ndGggPSAwCi0gICAgICAg
ICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUpCi0g
ICAgICAgIHJlc3AgKz0gbGluZQorICAgICAgICByZW1haW5pbmdfbGVuZ3RoID0gMAogICAgICAg
ICBIQVNIX0hFQURFUiA9ICdBY3R1YWxIYXNoOiAnCiAgICAgICAgIExFTkdUSF9IRUFERVIgPSAn
Q29udGVudC1MZW5ndGg6ICcKLSAgICAgICAgd2hpbGUgbm90IHRpbWVvdXQgYW5kIG5vdCBjcmFz
aCBhbmQgbGluZS5yc3RyaXAoKSAhPSAiI0VPRiI6Ci0gICAgICAgICAgICBpZiBsaW5lID09ICcn
IGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiAoLTEwNzM3
NDE1MTAgPT0gc2VsZi5yZXR1cm5jb2RlKCkgb3IKLSAgICAgICAgICAgICAgICAgICAgLSBzaWdu
YWwuU0lHSU5UID09IHNlbGYucmV0dXJuY29kZSgpKToKLSAgICAgICAgICAgICAgICAgICAgcmFp
c2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgICBjcmFzaCA9IFRydWUKLSAgICAg
ICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoSEFTSF9I
RUFERVIpOgorICAgICAgICBsaW5lID0gc3AucmVhZF9saW5lKGRlYWRsaW5lKQorICAgICAgICB3
aGlsZSBub3Qgc3AudGltZWRfb3V0IGFuZCBub3Qgc3AuY3Jhc2hlZCBhbmQgbGluZS5yc3RyaXAo
KSAhPSAiI0VPRiI6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoSEFTSF9IRUFERVIp
OgogICAgICAgICAgICAgICAgIGFjdHVhbF9pbWFnZV9oYXNoID0gbGluZVtsZW4oSEFTSF9IRUFE
RVIpOl0uc3RyaXAoKQogICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJ0NvbnRlbnQt
VHlwZTonKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIGxpbmUuc3Rh
cnRzd2l0aChMRU5HVEhfSEVBREVSKToKLSAgICAgICAgICAgICAgICBpbWFnZV9sZW5ndGggPSBp
bnQobGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKLSAgICAgICAgICAgIGVsaWYgaW1hZ2VfbGVu
Z3RoOgorICAgICAgICAgICAgICAgIHJlbWFpbmluZ19sZW5ndGggPSBpbnQobGluZVtsZW4oTEVO
R1RIX0hFQURFUik6XSkKKyAgICAgICAgICAgIGVsaWYgcmVtYWluaW5nX2xlbmd0aDoKICAgICAg
ICAgICAgICAgICBpbWFnZSArPSBsaW5lCi0KLSAgICAgICAgICAgICh0aW1lb3V0LCBsaW5lKSA9
IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0aCkKLSAgICAg
ICAgICAgIHJlc3AgKz0gbGluZQotCi0gICAgICAgIGlmIHRpbWVvdXQ6Ci0gICAgICAgICAgICBz
ZWxmLnJlc3RhcnQoKQorICAgICAgICAgICAgICAgIHJlbWFpbmluZ19sZW5ndGggLT0gbGVuKGxp
bmUpCisgICAgICAgICAgICBsaW5lID0gc3AucmVhZChkZWFkbGluZSwgcmVtYWluaW5nX2xlbmd0
aCkKIAogICAgICAgICBpZiBzZWxmLl9pbWFnZV9wYXRoIGFuZCBsZW4oc2VsZi5faW1hZ2VfcGF0
aCk6CiAgICAgICAgICAgICBpbWFnZV9maWxlID0gZmlsZShzZWxmLl9pbWFnZV9wYXRoLCAid2Ii
KQogICAgICAgICAgICAgaW1hZ2VfZmlsZS53cml0ZShpbWFnZSkKICAgICAgICAgICAgIGltYWdl
X2ZpbGUuY2xvc2UoKQotCi0gICAgICAgIHJldHVybiAoY3Jhc2gsIHRpbWVvdXQsIGFjdHVhbF9p
bWFnZV9oYXNoLAotICAgICAgICAgICAgICAgICcnLmpvaW4ob3V0cHV0KSwgJycuam9pbihlcnJv
cikpCisgICAgICAgIHJldHVybiAoc3AuY3Jhc2hlZCwgc3AudGltZWRfb3V0LCBhY3R1YWxfaW1h
Z2VfaGFzaCwgb3V0cHV0LCBzcC5lcnJvcikKIAogICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAg
ICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0g
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAgICAgICAgICBpZiBzZWxm
Ll9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgp
Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJyk6
Ci0gICAgICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRlcnIgaGFuZ3Mgc29t
ZXRpbWVzIG9uIE9TIFgsCi0gICAgICAgICAgICAgICAgIyAoc2VlIHJlc3RhcnQoKSwgYWJvdmUp
LCBhbmQgYW55d2F5IHdlIGRvbid0IHdhbnQgdG8gaGFuZwotICAgICAgICAgICAgICAgICMgdGhl
IGhhcm5lc3MgaWYgdGVzdF9zaGVsbCBpcyBidWdneSwgc28gd2Ugd2FpdCBhIGNvdXBsZQotICAg
ICAgICAgICAgICAgICMgc2Vjb25kcyB0byBnaXZlIHRlc3Rfc2hlbGwgYSBjaGFuY2UgdG8gY2xl
YW4gdXAsIGJ1dCB0aGVuCi0gICAgICAgICAgICAgICAgIyBmb3JjZS1raWxsIHRoZSBwcm9jZXNz
IGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICBLSUxMX1RJTUVPVVQgPSAzLjAKLSAgICAg
ICAgICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkgKyBLSUxMX1RJTUVPVVQKLSAgICAgICAg
ICAgICAgICB3aGlsZSBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8
IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQotICAgICAgICAg
ICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAg
IF9sb2cud2FybmluZygnc3RvcHBpbmcgdGVzdCBkcml2ZXIgdGltZWQgb3V0LCAnCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAna2lsbGluZyBpdCcpCi0gICAgICAgICAgICAgICAg
ICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKLSAgICAgICAgICAgICAgICAgICAgc3Vi
cHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAiLTkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cihzZWxmLl9wcm9jLnBpZCldLCBzdGRlcnI9bnVsbCkKLSAgICAgICAgICAg
ICAgICAgICAgbnVsbC5jbG9zZSgpCi0KLSAgICBkZWYgX3JlYWRfbGluZShzZWxmLCB0aW1lb3V0
LCBzdG9wX3RpbWUsIGltYWdlX2xlbmd0aD0wKToKLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkK
LSAgICAgICAgcmVhZF9mZHMgPSBbXQotCi0gICAgICAgICMgZmlyc3QgY2hlY2sgdG8gc2VlIGlm
IHdlIGhhdmUgYSBsaW5lIGFscmVhZHkgcmVhZCBvciBpZiB3ZSd2ZQotICAgICAgICAjIHJlYWQg
dGhlIGVudGlyZSBpbWFnZQotICAgICAgICBpZiBpbWFnZV9sZW5ndGggYW5kIGxlbihzZWxmLl9y
ZWFkX2J1ZmZlcikgPj0gaW1hZ2VfbGVuZ3RoOgotICAgICAgICAgICAgb3V0ID0gc2VsZi5fcmVh
ZF9idWZmZXJbMDppbWFnZV9sZW5ndGhdCi0gICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9
IHNlbGYuX3JlYWRfYnVmZmVyW2ltYWdlX2xlbmd0aDpdCi0gICAgICAgICAgICByZXR1cm4gKHRp
bWVvdXQsIG91dCkKLQotICAgICAgICBpZHggPSBzZWxmLl9yZWFkX2J1ZmZlci5maW5kKCdcbicp
Ci0gICAgICAgIGlmIG5vdCBpbWFnZV9sZW5ndGggYW5kIGlkeCAhPSAtMToKLSAgICAgICAgICAg
IG91dCA9IHNlbGYuX3JlYWRfYnVmZmVyWzA6aWR4ICsgMV0KLSAgICAgICAgICAgIHNlbGYuX3Jl
YWRfYnVmZmVyID0gc2VsZi5fcmVhZF9idWZmZXJbaWR4ICsgMTpdCi0gICAgICAgICAgICByZXR1
cm4gKHRpbWVvdXQsIG91dCkKLQotICAgICAgICAjIElmIHdlJ3ZlIHRpbWVkIG91dCwgcmV0dXJu
IGp1c3Qgd2hhdCB3ZSBoYXZlLCBpZiBhbnl0aGluZwotICAgICAgICBpZiB0aW1lb3V0IG9yIG5v
dyA+PSBzdG9wX3RpbWU6Ci0gICAgICAgICAgICBvdXQgPSBzZWxmLl9yZWFkX2J1ZmZlcgotICAg
ICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgPSAnJwotICAgICAgICAgICAgcmV0dXJuIChUcnVl
LCBvdXQpCi0KLSAgICAgICAgKHJlYWRfZmRzLCB3cml0ZV9mZHMsIGVycl9mZHMpID0gc2VsZWN0
LnNlbGVjdCgKLSAgICAgICAgICAgIFtzZWxmLl9zdGRvdXRfZmRdLCBbXSwgW10sIHN0b3BfdGlt
ZSAtIG5vdykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgdGltZW91dCBvciBsZW4ocmVh
ZF9mZHMpID09IDE6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9idWZmZXIgKz0gc2VsZi5f
cHJvYy5zdGRvdXQucmVhZCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAg
ICAgcmVhZCA9IFtdCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3Rv
cF90aW1lKQorICAgICAgICBpZiBzZWxmLl9zcHJvYzoKKyAgICAgICAgICAgIHNlbGYuX3Nwcm9j
LnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fc3Byb2MgPSBOb25lCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNz
LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2
ZXJfcHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDg3MjRl
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpAQCAtMCwwICsxLDIxMyBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIlBhY2thZ2UgdGhhdCBpbXBsZW1lbnRzIHRoZSBT
ZXJ2ZXJQcm9jZXNzIHdyYXBwZXIgY2xhc3MiIiIKKworaW1wb3J0IGZjbnRsCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IG9zCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3Vi
cHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJfcHJvY2VzcyIpCisKKworY2xh
c3MgU2VydmVyUHJvY2VzczoKKyAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgd3JhcHBlciBh
cm91bmQgYSBzdWJwcm9jZXNzIHRoYXQKKyAgICBpbXBsZW1lbnRzIGEgc2ltcGxlIHJlYWQvd3Jp
dGUgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKKyAgICBpcyB0aGF0IHJlYWRpbmcg
cmVzcG9uc2VzIHRha2VzIGEgdGltZW91dCwgc28gdGhhdCB3ZSBkb24ndCBldmVyIGJsb2NrCisg
ICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVz
dGFydGluZyBwcm9jZXNzZXMKKyAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1h
bmRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVu
dj1Ob25lKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnRfb2JqCisgICAgICAgIHNlbGYuX25h
bWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2NtZCA9IGNtZAorICAgICAgICBzZWxmLl9lbnYgPSBl
bnYKKyAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAgICAg
ICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gJycKKyAgICAgICAg
c2VsZi5jcmFzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBGYWxzZQorICAg
ICAgICBzZWxmLmVycm9yID0gJycKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuX3Byb2M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBhbHJlYWR5IHJ1
bm5pbmciICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VsZi5fcmVzZXQoKQorICAgICAgICBjbG9z
ZV9mZHMgPSBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJykKKyAgICAgICAg
c2VsZi5fcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fY21kLCBzdGRpbj1zdWJwcm9jZXNz
LlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJw
cm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVy
cj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsb3NlX2Zkcz1jbG9zZV9mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudj1zZWxmLl9lbnYpCisgICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5v
KCkKKyAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAg
ZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAg
ICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICBmbCA9IGZjbnRsLmZj
bnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9T
RVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorCisgICAgZGVmIGhhbmRsZV9pbnRlcnJ1cHQoc2Vs
Zik6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwcm9jZXNz
IGNyYXNoZWQgb3IgZXhpdGVkCisgICAgICAgIGJlY2F1c2Ugb2YgYSBrZXlib2FyZCBpbnRlcnJ1
cHQgYW5kIHJhaXNlcyBLZXlib2FyZEludGVycnVwdAorICAgICAgICBhY2NvcmRpbmdseS4iIiIK
KyAgICAgICAgaWYgc2VsZi5jcmFzaGVkOgorICAgICAgICAgICAgIyBUaGlzIGlzIGhleCBjb2Rl
IDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVzZWQgZm9yIGFicnVwdAorICAgICAgICAgICAgIyB0ZXJt
aW5hdGlvbi4gVGhpcyBoYXBwZW5zIGlmIHdlIGhpdCBjdHJsK2MgZnJvbSB0aGUgcHJvbXB0Cisg
ICAgICAgICAgICAjIGFuZCB3ZSBoYXBwZW4gdG8gYmUgd2FpdGluZyBvbiB0aGUgdGVzdF9zaGVs
bC4KKyAgICAgICAgICAgICMgc2RveW9uOiBOb3Qgc3VyZSBmb3Igd2hpY2ggT1MgYW5kIGluIHdo
YXQgY2lyY3Vtc3RhbmNlcyB0aGUKKyAgICAgICAgICAgICMgYWJvdmUgY29kZSBpcyB2YWxpZC4g
V2hhdCB3b3JrcyBmb3IgbWUgdW5kZXIgTGludXggdG8gZGV0ZWN0CisgICAgICAgICAgICAjIGN0
cmwrYyBpcyBmb3IgdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSB0byBiZSBuZWdhdGl2ZQorICAg
ICAgICAgICAgIyBTSUdJTlQuIEFuZCB0aGF0IGFncmVlcyB3aXRoIHRoZSBzdWJwcm9jZXNzIGRv
Y3VtZW50YXRpb24uCisgICAgICAgICAgICBpZiAoLTEwNzM3NDE1MTAgPT0gc2VsZi5fcHJvYy5y
ZXR1cm5jb2RlIG9yCisgICAgICAgICAgICAgICAgLSBzaWduYWwuU0lHSU5UID09IHNlbGYuX3By
b2MucmV0dXJuY29kZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQK
KyAgICAgICAgICAgIHJldHVybgorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICIiIkNo
ZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJseWluZyBwcm9jZXNzIGlzIHJ1bm5pbmc7IHJldHVybnMg
Tm9uZQorICAgICAgICBpZiBpdCBzdGlsbCBpcyAod3JhcHBlciBhcm91bmQgc3VicHJvY2Vzcy5w
b2xsKS4iIiIKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9wcm9jLnBvbGwoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJldHVybmNvZGUo
c2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGV4aXQgY29kZSBmcm9tIHRoZSBzdWJwcmNv
ZXNzOyByZXR1cm5zIE5vbmUgaWYgdGhlCisgICAgICAgIHByb2Nlc3MgaGFzbid0IGV4aXRlZCAo
dGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHN1YnByb2Nlc3MucmV0dXJuY29kZSkuCisgICAgICAg
ICIiIgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3By
b2MucmV0dXJuY29kZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHdyaXRlKHNlbGYs
IGlucHV0KToKKyAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBU
aGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKKyAgICAgICAgaWYgaXMgbm90IGFscmVh
ZHkgcnVubmluZy4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6CisgICAgICAgICAgICBz
ZWxmLl9zdGFydCgpCisgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoaW5wdXQpCisKKyAg
ICBkZWYgcmVhZF9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgIiIiUmVhZCBhIHNpbmds
ZSBsaW5lIGZyb20gdGhlIHN1YnByb2Nlc3MsIHdhaXRpbmcgdW50aWwgdGhlIGRlYWRsaW5lLgor
ICAgICAgICBJZiB0aGUgZGVhZGxpbmUgcGFzc2VzLCB0aGUgY2FsbCB0aW1lcyBvdXQuIE5vdGUg
dGhhdCBldmVuIGlmIHRoZQorICAgICAgICBzdWJwcm9jZXNzIGhhcyBjcmFzaGVkIG9yIHRoZSBk
ZWFkbGluZSBoYXMgcGFzc2VkLCBpZiB0aGVyZSBpcyBvdXRwdXQKKyAgICAgICAgcGVuZGluZywg
aXQgd2lsbCBiZSByZXR1cm5lZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZGVhZGxp
bmU6IHRpbWVzdGFtcCB0aGF0IHRoZSByZWFkIG11c3QgY29tcGxldGUgYmVmb3JlCisgICAgICAg
IFJldHVybnM6CisgICAgICAgICAgICBvdXRwdXQ6IGRhdGEgcmV0dXJuZWQsIGlmIGFueS4gSWYg
bm8gZGF0YSBpcyBhdmFpbGFibGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIGNhbGwgdGltZXMg
b3V0IG9yIGNyYXNoZXMsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gTm90ZQorICAgICAg
ICAgICAgICAgIHRoYXQgdGhlIHJldHVybmVkIHN0cmluZyBpbmNsdWRlcyB0aGUgbmV3bGluZSAo
J1xuJykuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5lLCAwKQorCisgICAg
ZGVmIHJlYWQoc2VsZiwgZGVhZGxpbmUsIHNpemUpOgorICAgICAgICAiIiJBdHRlbXB0cyB0byBy
ZWFkIHNpemUgY2hhcmFjdGVycyBmcm9tIHRoZSBzdWJwcm9jZXNzLCB3YWl0aW5nIHVudGlsCisg
ICAgICAgIHRoZSBkZWFkbGluZSBwYXNzZXMuIElmIHRoZSBkZWFkbGluZSBwYXNzZXMsIGFueSBh
dmFpbGFibGUgZGF0YSB3aWxsIGJlCisgICAgICAgIHJldHVybmVkLiBOb3RlIHRoYXQgZXZlbiBp
ZiB0aGUgZGVhZGxpbmUgaGFzIHBhc3NlZCBvciBpZiB0aGUKKyAgICAgICAgc3VicHJvY2VzcyBo
YXMgY3Jhc2hlZCwgYW55IGF2YWlsYWJsZSBkYXRhIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCisK
KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRlYWRsaW5lOiB0aW1lc3RhbXAgdGhhdCB0aGUg
cmVhZCBtdXN0IGNvbXBsZXRlIGJlZm9yZQorICAgICAgICAgICAgc2l6ZTogYW1vdW50IG9mIGRh
dGEgdG8gcmVhZC4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIG91dHB1dDogZGF0YSBy
ZXR1cm5lZCwgaWYgYW55LiBJZiBubyBkYXRhIGlzIGF2YWlsYWJsZSwgYW4gZW1wdHkKKyAgICAg
ICAgICAgICAgICBzdHJpbmcgaXMgcmV0dXJuZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1
cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgc2l6ZSkKKworICAgIGRlZiBfcmVhZChzZWxmLCBkZWFk
bGluZSwgc2l6ZSk6CisgICAgICAgICIiIkludGVybmFsIHJvdXRpbmUgdGhhdCBhY3R1YWxseSBk
b2VzIHRoZSByZWFkLiIiIgorICAgICAgICBpZHggPSAtMQorICAgICAgICBvdXRfZmQgPSBzZWxm
Ll9wcm9jLnN0ZG91dC5maWxlbm8oKQorICAgICAgICBlcnJfZmQgPSBzZWxmLl9wcm9jLnN0ZGVy
ci5maWxlbm8oKQorICAgICAgICBzZWxlY3RfZmRzID0gKG91dF9mZCwgZXJyX2ZkKQorICAgICAg
ICB3aGlsZSBub3Qgc2VsZi50aW1lZF9vdXQgYW5kIG5vdCBzZWxmLmNyYXNoZWQ6CisgICAgICAg
ICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSAhPSBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYu
Y3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pbnRlcnJ1cHQoKQor
CisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgbm93ID4gZGVh
ZGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBUcnVlCisKKyAgICAgICAg
ICAgICMgQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IG91dHB1dCB3ZSBjYW4gcmV0dXJuLgor
ICAgICAgICAgICAgaWYgc2l6ZSBhbmQgbGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToKKyAgICAg
ICAgICAgICAgICBpZHggPSBzaXplCisgICAgICAgICAgICBlbGlmIHNpemUgPT0gMDoKKyAgICAg
ICAgICAgICAgICBpZHggPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4nKSArIDEKKworICAgICAgICAg
ICAgaWYgaWR4IG9yIHNlbGYuY3Jhc2hlZCBvciBzZWxmLnRpbWVkX291dDoKKyAgICAgICAgICAg
ICAgICBvdXRwdXQgPSBzZWxmLl9vdXRwdXRbMDppZHhdCisgICAgICAgICAgICAgICAgc2VsZi5f
b3V0cHV0ID0gc2VsZi5fb3V0cHV0W2lkeDpdCisgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1
dAorCisgICAgICAgICAgICAjIE5vcGUgLSB3YWl0IGZvciBtb3JlIGRhdGEuCisgICAgICAgICAg
ICAocmVhZF9mZHMsIHdyaXRlX2ZkcywgZXJyX2ZkcykgPSBzZWxlY3Quc2VsZWN0KHNlbGVjdF9m
ZHMsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RfZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSAtIG5vdykKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBpZiBvdXRfZmQgaW4gcmVhZF9mZHM6CisgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX291dHB1dCArPSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAg
ICAgICAgICBpZiBlcnJfZmQgaW4gcmVhZF9mZHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYu
ZXJyb3IgKz0gc2VsZi5fcHJvYy5zdGRlcnIucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9F
cnJvciwgZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAg
ICAgICAgIiIiU3RvcCAoc2h1dCBkb3duKSB0aGUgc3VicHJvY2VzcyksIGlmIGl0IGlzIHJ1bm5p
bmcuIiIiCisgICAgICAgIHBpZCA9IHNlbGYuX3Byb2MucGlkCisgICAgICAgIHNlbGYuX3Byb2Mu
c3RkaW4uY2xvc2UoKQorICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCisgICAgICAg
IGlmIHNlbGYuX3Byb2Muc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xv
c2UoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnY3lnd2luJyk6
CisgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0L3N0ZGVyciBoYW5ncyBzb21ldGlt
ZXMgb24gT1MgWCwKKyAgICAgICAgICAgICMgKHNlZSByZXN0YXJ0KCksIGFib3ZlKSwgYW5kIGFu
eXdheSB3ZSBkb24ndCB3YW50IHRvIGhhbmcKKyAgICAgICAgICAgICMgdGhlIGhhcm5lc3MgaWYg
dGVzdF9zaGVsbCBpcyBidWdneSwgc28gd2Ugd2FpdCBhIGNvdXBsZQorICAgICAgICAgICAgIyBz
ZWNvbmRzIHRvIGdpdmUgdGVzdF9zaGVsbCBhIGNoYW5jZSB0byBjbGVhbiB1cCwgYnV0IHRoZW4K
KyAgICAgICAgICAgICMgZm9yY2Uta2lsbCB0aGUgcHJvY2VzcyBpZiBuZWNlc3NhcnkuCisgICAg
ICAgICAgICBLSUxMX1RJTUVPVVQgPSAzLjAKKyAgICAgICAgICAgIHRpbWVvdXQgPSB0aW1lLnRp
bWUoKSArIEtJTExfVElNRU9VVAorICAgICAgICAgICAgd2hpbGUgc2VsZi5fcHJvYy5wb2xsKCkg
aXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCB0aW1lb3V0OgorICAgICAgICAgICAgICAgIHRpbWUu
c2xlZXAoMC4xKQorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVzIHRpbWVkIG91dCwga2lsbGlu
ZyBpdCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9uYW1lKQorICAgICAg
ICAgICAgICAgIG51bGwgPSBvcGVuKG9zLmRldm51bGwsICJ3IikKKyAgICAgICAgICAgICAgICBz
dWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyKHNlbGYuX3Byb2MucGlkKV0sIHN0ZGVycj1udWxsKQorICAgICAgICAgICAg
ICAgIG51bGwuY2xvc2UoKQorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygna2lsbGVkJykK
KyAgICAgICAgc2VsZi5fcmVzZXQoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVzdF90eXBlcy9pbWFnZV9kaWZmLnB5
CmluZGV4IDQyOTI4YmEuLmQ5ZTc4NGEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlmZi5weQorKysgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2Rp
ZmYucHkKQEAgLTkwLDYgKzkwLDcgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRl
c3RUeXBlQmFzZSk6CiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgZmlsZW5hbWU6IHRoZSBuYW1l
IG9mIHRoZSB0ZXN0CiAgICAgICAgICAgdGFyZ2V0OiBEZWJ1ZyBvciBSZWxlYXNlCisgICAgICAg
IFJldHVybnMgVHJ1ZSBpZiB0aGUgZmlsZXMgYXJlIGRpZmZlcmVudCwgRmFsc2UgaWYgdGhleSBt
YXRjaAogICAgICAgICAiIiIKICAgICAgICAgZGlmZl9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2Zp
bGVuYW1lKGZpbGVuYW1lLAogICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0NPTVBBUkUp
CkBAIC05OCw2ICs5OSw3IEBAIGNsYXNzIEltYWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlw
ZUJhc2UpOgogICAgICAgICBleHBlY3RlZF9maWxlbmFtZSA9IHNlbGYub3V0cHV0X2ZpbGVuYW1l
KGZpbGVuYW1lLAogICAgICAgICAgIHNlbGYuRklMRU5BTUVfU1VGRklYX0VYUEVDVEVEICsgJy5w
bmcnKQogCisgICAgICAgIHJlc3VsdCA9IFRydWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAg
X2NvbXBhcmVfYXZhaWxhYmxlID0gVHJ1ZQogICAgICAgICAgICAgcmVzdWx0ID0gcG9ydC5kaWZm
X2ltYWdlKGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUsCkBAIC0xNjUsMTggKzE2
NywxNiBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAg
ICAgICAgc2VsZi5fY29weV9vdXRwdXRfcG5nKGZpbGVuYW1lLCB0ZXN0X2FyZ3MucG5nX3BhdGgs
ICctYWN0dWFsLnBuZycpCiAgICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwg
ZXhwZWN0ZWRfcG5nX2ZpbGUsICctZXhwZWN0ZWQucG5nJykKIAotICAgICAgICAjIEV2ZW4gdGhv
dWdoIHdlIG9ubHkgdXNlIHJlc3VsdCBpbiBvbmUgY29kZXBhdGggYmVsb3cgYnV0IHdlCisgICAg
ICAgICMgRXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgdGhlIHJlc3VsdCBpbiBvbmUgY29kZXBhdGgg
YmVsb3cgYnV0IHdlCiAgICAgICAgICMgc3RpbGwgbmVlZCB0byBjYWxsIENyZWF0ZUltYWdlRGlm
ZiBmb3Igb3RoZXIgY29kZXBhdGhzLgotICAgICAgICByZXN1bHQgPSBzZWxmLl9jcmVhdGVfaW1h
Z2VfZGlmZihwb3J0LCBmaWxlbmFtZSwgdGFyZ2V0KQorICAgICAgICBpbWFnZXNfYXJlX2RpZmZl
cmVudCA9IHNlbGYuX2NyZWF0ZV9pbWFnZV9kaWZmKHBvcnQsIGZpbGVuYW1lLCB0YXJnZXQpCiAg
ICAgICAgIGlmIGV4cGVjdGVkX2hhc2ggPT0gJyc6CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlTWlzc2luZ0ltYWdlSGFzaChzZWxmKSkKICAgICAgICAg
ZWxpZiB0ZXN0X2FyZ3MuaGFzaCAhPSBleHBlY3RlZF9oYXNoOgotICAgICAgICAgICAgIyBIYXNo
ZXMgZG9uJ3QgbWF0Y2gsIHNvIHNlZSBpZiB0aGUgaW1hZ2VzIG1hdGNoLiBJZiB0aGV5IGRvLCB0
aGVuCi0gICAgICAgICAgICAjIHRoZSBoYXNoIGlzIHdyb25nLgotICAgICAgICAgICAgaWYgcmVz
dWx0ID09IDA6Ci0gICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMu
RmFpbHVyZUltYWdlSGFzaEluY29ycmVjdChzZWxmKSkKLSAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBpZiBpbWFnZXNfYXJlX2RpZmZlcmVudDoKICAgICAgICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoTWlzbWF0Y2goc2VsZikpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2Zh
aWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3Qoc2VsZikpCiAKICAgICAgICAgcmV0dXJu
IGZhaWx1cmVzCiAKQEAgLTE5MCwxMCArMTkwLDcgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlw
ZV9iYXNlLlRlc3RUeXBlQmFzZSk6CiAgICAgICAgICAgVHJ1ZSBpZiB0d28gZmlsZXMgYXJlIGRp
ZmZlcmVudC4KICAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCiAgICAgICAgICIiIgotCiAgICAg
ICAgIHRyeToKLSAgICAgICAgICAgIHJlc3VsdCA9IHBvcnQuZGlmZl9pbWFnZShmaWxlMSwgZmls
ZTIpCisgICAgICAgICAgICByZXR1cm4gcG9ydC5kaWZmX2ltYWdlKGZpbGUxLCBmaWxlMikKICAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0g
ICAgICAgIHJldHVybiByZXN1bHQgPT0gMQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51791</attachid>
            <date>2010-03-26 16:05:34 -0700</date>
            <delta_ts>2010-03-26 16:38:45 -0700</delta_ts>
            <desc>revise w/ more feedback from ojan</desc>
            <filename>wk34826_image_diff.diff</filename>
            <type>text/plain</type>
            <size>28029</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBlYmRiNTg3Li5hMTRkNjExIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMt
MjUgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHBpeGVsIHRlc3RzIChp
bWFnZSBkaWZmKSBwcm9wZXJseSBvbiB0aGUgTWFjIHBvcnQuCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgaW50cm9kdWNlcyBhIG5ldyAiU2VydmVyUG9jZXNzIiBjbGFzcyB0aGF0IGNhbiBiZSB1c2Vk
CisgICAgICAgIHRvIG1hbmFnZSBwcm9jZXNzZXMgdGhhdCB0aGUgcnVuLXdlYmtpdC10ZXN0cyBo
YXJuZXNzIGZvcmtzIG9mZiBhbmQKKyAgICAgICAgZXhwZWN0cyB0byBzdGF5IHVwIGZvciBsb25n
ZXIgdGhhbiBhIHNpbmdsZSByZXF1ZXN0L3Jlc3BvbnNlIHNlc3Npb24uCisgICAgICAgIEJvdGgg
RHVtcFJlbmRlclRyZWUgYW5kIEltYWdlRGlmZiB1c2UgdGhpcyBzdHlsZSBvZiBjb21tdW5pY2F0
aW9uLAorICAgICAgICBhbHRob3VnaCB0aGUgY3VycmVudCBjb2RlIGZvcmtzIG9mZiBhIG5ldyBJ
bWFnZURpZmYgZm9yIGVhY2ggZGlmZgorICAgICAgICAoV2UgbmVlZCB0byByZXN0cnVjdHVyZSBv
dGhlciBwYXJ0cyBvZiB0aGUgY29kZSB0byBiZSBhYmxlIHRvIGRvIHRoaXMKKyAgICAgICAgc2Fm
ZWx5IGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQpLgorCisgICAgICAgIEFsc28sIG5v
dyB0aGF0IHRoZSBTZXJ2ZXJQcm9jZXNzIGFic3RyYWN0aW9uIGV4aXN0cywgd2UgY2FuIHByb2Jh
Ymx5CisgICAgICAgIGNsZWFuIHVwIGFuZCBzaW1wbGlmeSBzb21lIG9mIHRoZSB0aHJlYWQgbWFu
YWdlbWVudCBsb2dpYyBpbgorICAgICAgICB0ZXN0X3NoZWxsX3RocmVhZCBhcyB3ZWxsLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDgyNgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2lt
YWdlX2RpZmYucHk6CisKIDIwMTAtMDMtMjUgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjLnB5
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkK
aW5kZXggMzBkMmFiOC4uODk5NDIwMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWMucHkKQEAgLTI5LDEyICsyOSwxMiBAQAog
CiAiIiJXZWJLaXQgTWFjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3J0IGludGVyZmFjZS4iIiIK
IAotaW1wb3J0IGZjbnRsCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGRiCiBp
bXBvcnQgcGxhdGZvcm0KLWltcG9ydCBzZWxlY3QKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAog
aW1wb3J0IHNpZ25hbAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKQEAgLTQyLDYgKzQy
LDcgQEAgaW1wb3J0IHRpbWUKIGltcG9ydCB3ZWJicm93c2VyCiAKIGltcG9ydCBiYXNlCitpbXBv
cnQgc2VydmVyX3Byb2Nlc3MKIAogaW1wb3J0IHdlYmtpdHB5CiBpbXBvcnQgd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgYXMgZXhlY3V0aXZlCkBAIC04NSwxMSArODYsNzQgQEAgY2xh
c3MgTWFjUG9ydChiYXNlLlBvcnQpOgogICAgICAgICAgICAgX2xvZy5lcnJvcigiRHVtcFJlbmRl
clRyZWUgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSBkcml2ZXJfcGF0aCkKICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQogCi0gICAgICAgICMgVGhpcyBzaG91bGQgYWxzbyB2YWxpZGF0ZSB0aGF0IHRo
ZSBJbWFnZURpZmYgcGF0aCBpcyB2YWxpZAotICAgICAgICAjIChvbmNlIHRoaXMgc2NyaXB0IGtu
b3dzIGhvdyB0byB1c2UgSW1hZ2VEaWZmKS4KLSAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ4MjYKKyAgICAgICAgaW1hZ2VfZGlmZl9wYXRoID0gc2Vs
Zi5fcGF0aF90b19pbWFnZV9kaWZmKCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGlt
YWdlX2RpZmZfcGF0aCk6CisgICAgICAgICAgICBfbG9nLmVycm9yKCJJbWFnZURpZmYgd2FzIG5v
dCBmb3VuZCBhdCAlcyIgJSBpbWFnZV9kaWZmX3BhdGgpCisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKwogICAgICAgICByZXR1cm4gVHJ1ZQogCisgICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhw
ZWN0ZWRfZmlsZW5hbWUsIGFjdHVhbF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBkaWZm
X2ZpbGVuYW1lPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIGZpbGVz
IGFyZSBkaWZmZXJlbnQuIEFsc28gd3JpdGUgYSBkZWx0YQorICAgICAgICBpbWFnZSBvZiB0aGUg
dHdvIGltYWdlcyBpbnRvIHxkaWZmX2ZpbGVuYW1lfCBpZiBpdCBpcyBub3QgTm9uZS4iIiIKKwor
ICAgICAgICAjIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdGVzdCBkaWRuJ3QgYWN0dWFsbHkg
Z2VuZXJhdGUgYW4gaW1hZ2UuCisgICAgICAgIGFjdHVhbF9sZW5ndGggPSBvcy5zdGF0KGFjdHVh
bF9maWxlbmFtZSkuc3Rfc2l6ZQorICAgICAgICBpZiBhY3R1YWxfbGVuZ3RoID09IDA6CisgICAg
ICAgICAgICBpZiBkaWZmX2ZpbGVuYW1lOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5Zmls
ZShhY3R1YWxfZmlsZW5hbWUsIGV4cGVjdGVkX2ZpbGVuYW1lKQorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKworICAgICAgICBzcCA9IHNlbGYuX2RpZmZfaW1hZ2VfcmVxdWVzdChleHBlY3RlZF9m
aWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fZGlmZl9pbWFn
ZV9yZXBseShzcCwgZXhwZWN0ZWRfZmlsZW5hbWUsIGRpZmZfZmlsZW5hbWUpCisKKyAgICBkZWYg
X2RpZmZfaW1hZ2VfcmVxdWVzdChzZWxmLCBleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVu
YW1lKToKKyAgICAgICAgIyBGSVhNRTogZWl0aGVyIGV4cG9zZSB0aGUgdG9sZXJhbmNlIGFyZ3Vt
ZW50IGFzIGEgY29tbWFuZC1saW5lCisgICAgICAgICMgcGFyYW1ldGVyLCBvciBtYWtlIGl0IGdv
IGF3YXkgYW5kIGF3YXlzIHVzZSBleGFjdCBtYXRjaGVzLgorICAgICAgICBjbWQgPSBbc2VsZi5f
cGF0aF90b19pbWFnZV9kaWZmKCksICctLXRvbGVyYW5jZScsICcwLjEnXQorICAgICAgICBzcCA9
IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3Moc2VsZiwgJ0ltYWdlRGlmZicsIGNtZCkKKwor
ICAgICAgICBhY3R1YWxfbGVuZ3RoID0gb3Muc3RhdChhY3R1YWxfZmlsZW5hbWUpLnN0X3NpemUK
KyAgICAgICAgYWN0dWFsX2ZpbGUgPSBvcGVuKGFjdHVhbF9maWxlbmFtZSkucmVhZCgpCisgICAg
ICAgIGV4cGVjdGVkX2xlbmd0aCA9IG9zLnN0YXQoZXhwZWN0ZWRfZmlsZW5hbWUpLnN0X3NpemUK
KyAgICAgICAgZXhwZWN0ZWRfZmlsZSA9IG9wZW4oZXhwZWN0ZWRfZmlsZW5hbWUpLnJlYWQoKQor
ICAgICAgICBzcC53cml0ZSgnQ29udGVudC1MZW5ndGg6ICVkXG4lc0NvbnRlbnQtTGVuZ3RoOiAl
ZFxuJXMnICUKKyAgICAgICAgICAgICAgICAgKGFjdHVhbF9sZW5ndGgsIGFjdHVhbF9maWxlLCBl
eHBlY3RlZF9sZW5ndGgsIGV4cGVjdGVkX2ZpbGUpKQorCisgICAgICAgIHJldHVybiBzcAorCisg
ICAgZGVmIF9kaWZmX2ltYWdlX3JlcGx5KHNlbGYsIHNwLCBleHBlY3RlZF9maWxlbmFtZSwgZGlm
Zl9maWxlbmFtZSk6CisgICAgICAgIHRpbWVvdXQgPSAyLjAKKyAgICAgICAgZGVhZGxpbmUgPSB0
aW1lLnRpbWUoKSArIHRpbWVvdXQKKyAgICAgICAgb3V0cHV0ID0gc3AucmVhZF9saW5lKHRpbWVv
dXQpCisgICAgICAgIHdoaWxlIG5vdCBzcC50aW1lZF9vdXQgYW5kIG5vdCBzcC5jcmFzaGVkIGFu
ZCBvdXRwdXQ6CisgICAgICAgICAgICBpZiBvdXRwdXQuc3RhcnRzd2l0aCgnQ29udGVudC1MZW5n
dGgnKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goJ0NvbnRlbnQtTGVuZ3RoOiAoXGQr
KScsIG91dHB1dCkKKyAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aCA9IGludChtLmdyb3Vw
KDEpKQorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisg
ICAgICAgICAgICAgICAgb3V0cHV0ID0gc3AucmVhZCh0aW1lb3V0LCBjb250ZW50X2xlbmd0aCkK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBvdXRwdXQuc3RhcnRzd2l0
aCgnZGlmZicpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAg
ICAgICAgb3V0cHV0ID0gc3AucmVhZF9saW5lKGRlYWRsaW5lKQorCisgICAgICAgIHJlc3VsdCA9
IFRydWUKKyAgICAgICAgaWYgb3V0cHV0LnN0YXJ0c3dpdGgoJ2RpZmYnKToKKyAgICAgICAgICAg
IG0gPSByZS5tYXRjaCgnZGlmZjogKC4rKSUgKHBhc3NlZHxmYWlsZWQpJywgb3V0cHV0KQorICAg
ICAgICAgICAgaWYgbS5ncm91cCgyKSA9PSAncGFzc2VkJzoKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBGYWxzZQorICAgICAgICBlbGlmIG91dHB1dCBhbmQgZGlmZl9maWxlbmFtZToKKyAgICAg
ICAgICAgIG9wZW4oZGlmZl9maWxlbmFtZSwgJ3cnKS53cml0ZShvdXRwdXQpCisgICAgICAgIGVs
aWYgc3AudGltZWRfb3V0OgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIHRpbWVk
IG91dCBvbiAlcyIgJSBleHBlY3RlZF9maWxlbmFtZSkKKyAgICAgICAgZWxpZiBzcC5jcmFzaGVk
OgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIGNyYXNoZWQiKQorICAgICAgICBz
cC5zdG9wKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCiAgICAgZGVmIG51bV9jb3JlcyhzZWxm
KToKICAgICAgICAgcmV0dXJuIGludChvcy5wb3BlbjIoInN5c2N0bCAtbiBody5uY3B1IilbMV0u
cmVhZCgpKQogCkBAIC0yNTMsNyArMzE3LDcgQEAgY2xhc3MgTWFjUG9ydChiYXNlLlBvcnQpOgog
ICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYoc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLl9idWlsZF9wYXRoKCdpbWFnZV9kaWZmJykgIyBGSVhNRTog
VGhpcyBpcyB3cm9uZyBhbmQgc2hvdWxkIGJlICJJbWFnZURpZmYiLCBidXQgaGF2aW5nIHRoZSBj
b3JyZWN0IHBhdGggY2F1c2VzIG90aGVyIHBhcnRzIG9mIHRoZSBzY3JpcHQgdG8gaGFuZy4KKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ0ltYWdlRGlmZicpCiAKICAgICBkZWYgX3Bh
dGhfdG9fd2RpZmYoc2VsZik6CiAgICAgICAgIHJldHVybiAnd2RpZmYnICMgRklYTUU6IFRoaXMg
ZG9lcyBub3QgZXhpc3Qgb24gYSBkZWZhdWx0IE1hYyBPUyBYIExlb3BhcmQgaW5zdGFsbC4KQEAg
LTI4OCwxMyArMzUyLDcgQEAgY2xhc3MgTWFjRHJpdmVyKGJhc2UuRHJpdmVyKToKICAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydCwgaW1hZ2VfcGF0aCwgZHJpdmVyX29wdGlvbnMpOgogICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9kcml2ZXJfb3B0aW9ucyA9IGRyaXZl
cl9vcHRpb25zCi0gICAgICAgIHNlbGYuX3RhcmdldCA9IHBvcnQuX29wdGlvbnMudGFyZ2V0CiAg
ICAgICAgIHNlbGYuX2ltYWdlX3BhdGggPSBpbWFnZV9wYXRoCi0gICAgICAgIHNlbGYuX3N0ZG91
dF9mZCA9IE5vbmUKLSAgICAgICAgc2VsZi5fY21kID0gTm9uZQotICAgICAgICBzZWxmLl9lbnYg
PSBOb25lCi0gICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCi0gICAgICAgIHNlbGYuX3JlYWRfYnVm
ZmVyID0gJycKIAogICAgICAgICBjbWQgPSBbXQogICAgICAgICAjIEhvb2sgZm9yIGluamVjdGlu
ZyB2YWxncmluZCBvciBvdGhlciBydW50aW1lIGluc3RydW1lbnRhdGlvbiwKQEAgLTMwOCw0OSAr
MzY2LDI4IEBAIGNsYXNzIE1hY0RyaXZlcihiYXNlLkRyaXZlcik6CiAgICAgICAgICAgICAjIHBy
YWN0aWNlIGl0IHNob3VsZG4ndCBjb21lIHVwIGFuZCB0aGUgLS1oZWxwIG91dHB1dCB3YXJucwog
ICAgICAgICAgICAgIyBhYm91dCBpdCBhbnl3YXkuCiAgICAgICAgICAgICBjbWQgKz0gc2VsZi5f
b3B0aW9ucy53cmFwcGVyLnNwbGl0KCkKLSAgICAgICAgIyBGSVhNRTogVXNpbmcgYXJjaCBoZXJl
IG1hc2tzIGFueSBwb3NzaWJsZSBmaWxlLW5vdC1mb3VuZCBlcnJvcnMgZnJvbSBhIG5vbi1leGlz
dGFudCBkcml2ZXIgZXhlY3V0YWJsZS4KLSAgICAgICAgY21kICs9IFsnYXJjaCcsICctaTM4Nics
IHBvcnQuX3BhdGhfdG9fZHJpdmVyKCksICctJ10KIAotICAgICAgICAjIEZJWE1FOiBUaGlzIGlz
IGEgaGFjayBhcm91bmQgb3VyIGxhY2sgb2YgSW1hZ2VEaWZmIHN1cHBvcnQgZm9yIG5vdy4KLSAg
ICAgICAgaWYgbm90IHNlbGYuX3BvcnQuX29wdGlvbnMubm9fcGl4ZWxfdGVzdHM6Ci0gICAgICAg
ICAgICBfbG9nLndhcm4oIlRoaXMgcG9ydCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBwaXhlbCB0ZXN0
cy4iKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5fb3B0aW9ucy5ub19waXhlbF90ZXN0cyA9IFRy
dWUKLSAgICAgICAgICAgICNjbWQuYXBwZW5kKCctLXBpeGVsLXRlc3RzJykKKyAgICAgICAgY21k
ICs9IFsnYXJjaCcsICctaTM4NicsIHBvcnQuX3BhdGhfdG9fZHJpdmVyKCksICctJ10KIAotICAg
ICAgICAjaWYgZHJpdmVyX29wdGlvbnM6Ci0gICAgICAgICMgICAgY21kICs9IGRyaXZlcl9vcHRp
b25zCisgICAgICAgIGlmIGltYWdlX3BhdGg6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLXBp
eGVsLXRlc3RzJykKICAgICAgICAgZW52ID0gb3MuZW52aXJvbgogICAgICAgICBlbnZbJ0RZTERf
RlJBTUVXT1JLX1BBVEgnXSA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQotICAgICAgICBzZWxm
Ll9jbWQgPSBjbWQKLSAgICAgICAgc2VsZi5fZW52ID0gZW52Ci0gICAgICAgIHNlbGYucmVzdGFy
dCgpCisgICAgICAgIHNlbGYuX3Nwcm9jID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2Vzcyhz
ZWxmLl9wb3J0LAorICAgICAgICAgICAgIkR1bXBSZW5kZXJUcmVlIiwgY21kLCBlbnYpCiAKICAg
ICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucG9sbCgpCisgICAg
ICAgIHJldHVybiBzZWxmLl9zcHJvYy5wb2xsKCkKIAogICAgIGRlZiByZXN0YXJ0KHNlbGYpOgot
ICAgICAgICBzZWxmLnN0b3AoKQotICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBjbG9zZV9mZHM9
VHJ1ZSB0byB3b3JrIGFyb3VuZCBQeXRob24gYnVnICMyMzIwCi0gICAgICAgICMgKG90aGVyd2lz
ZSB3ZSBjYW4gaGFuZyB3aGVuIHdlIGtpbGwgdGVzdF9zaGVsbCB3aGVuIHdlIGFyZSBydW5uaW5n
Ci0gICAgICAgICMgbXVsdGlwbGUgdGhyZWFkcykuIFNlZSBodHRwOi8vYnVncy5weXRob24ub3Jn
L2lzc3VlMjMyMCAuCi0gICAgICAgIHNlbGYuX3Byb2MgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYu
X2NtZCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbnY9c2VsZi5fZW52LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5fc3Byb2Mu
c3RvcCgpCisgICAgICAgIHNlbGYuX3Nwcm9jLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuCiAKICAg
ICBkZWYgcmV0dXJuY29kZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucmV0dXJu
Y29kZQorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5yZXR1cm5jb2RlKCkKIAogICAgIGRlZiBy
dW5fdGVzdChzZWxmLCB1cmksIHRpbWVvdXRtcywgaW1hZ2VfaGFzaCk6Ci0gICAgICAgIG91dHB1
dCA9IFtdCi0gICAgICAgIGVycm9yID0gW10KLSAgICAgICAgaW1hZ2UgPSAnJwotICAgICAgICBj
cmFzaCA9IEZhbHNlCi0gICAgICAgIHRpbWVvdXQgPSBGYWxzZQotICAgICAgICBhY3R1YWxfdXJp
ID0gTm9uZQotICAgICAgICBhY3R1YWxfaW1hZ2VfaGFzaCA9IE5vbmUKLQogICAgICAgICBpZiB1
cmkuc3RhcnRzd2l0aCgiZmlsZTovLy8iKToKICAgICAgICAgICAgIGNtZCA9IHVyaVs3Ol0KICAg
ICAgICAgZWxzZToKQEAgLTM2MCwxMzAgKzM5Nyw1MSBAQCBjbGFzcyBNYWNEcml2ZXIoYmFzZS5E
cml2ZXIpOgogICAgICAgICAgICAgY21kICs9ICInIiArIGltYWdlX2hhc2gKICAgICAgICAgY21k
ICs9ICJcbiIKIAotICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGNtZCkKLSAgICAgICAg
c2VsZi5fc3Rkb3V0X2ZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKLSAgICAgICAgZmwg
PSBmY250bC5mY250bChzZWxmLl9zdGRvdXRfZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgIGZj
bnRsLmZjbnRsKHNlbGYuX3N0ZG91dF9mZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJM
T0NLKQorICAgICAgICAjIHBkYi5zZXRfdHJhY2UoKQorICAgICAgICBzcCA9IHNlbGYuX3Nwcm9j
CisgICAgICAgIHNwLndyaXRlKGNtZCkKIAotICAgICAgICBzdG9wX3RpbWUgPSB0aW1lLnRpbWUo
KSArIChpbnQodGltZW91dG1zKSAvIDEwMDAuMCkKLSAgICAgICAgcmVzcCA9ICcnCi0gICAgICAg
ICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUpCi0g
ICAgICAgIHJlc3AgKz0gbGluZQogICAgICAgICBoYXZlX3NlZW5fY29udGVudF90eXBlID0gRmFs
c2UKLSAgICAgICAgd2hpbGUgbm90IHRpbWVvdXQgYW5kIGxpbmUucnN0cmlwKCkgIT0gIiNFT0Yi
OgotICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZW4ndCBjcmFzaGVkLgotICAgICAgICAg
ICAgaWYgbGluZSA9PSAnJyBhbmQgc2VsZi5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAg
ICAgICAgIyBUaGlzIGlzIGhleCBjb2RlIDB4YzAwMDAwMWQsIHdoaWNoIGlzIHVzZWQgZm9yIGFi
cnVwdAotICAgICAgICAgICAgICAgICMgdGVybWluYXRpb24uIFRoaXMgaGFwcGVucyBpZiB3ZSBo
aXQgY3RybCtjIGZyb20gdGhlIHByb21wdAotICAgICAgICAgICAgICAgICMgYW5kIHdlIGhhcHBl
biB0byBiZSB3YWl0aW5nIG9uIHRoZSB0ZXN0X3NoZWxsLgotICAgICAgICAgICAgICAgICMgc2Rv
eW9uOiBOb3Qgc3VyZSBmb3Igd2hpY2ggT1MgYW5kIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUK
LSAgICAgICAgICAgICAgICAjIGFib3ZlIGNvZGUgaXMgdmFsaWQuIFdoYXQgd29ya3MgZm9yIG1l
IHVuZGVyIExpbnV4IHRvIGRldGVjdAotICAgICAgICAgICAgICAgICMgY3RybCtjIGlzIGZvciB0
aGUgc3VicHJvY2VzcyByZXR1cm5jb2RlIHRvIGJlIG5lZ2F0aXZlCi0gICAgICAgICAgICAgICAg
IyBTSUdJTlQuIEFuZCB0aGF0IGFncmVlcyB3aXRoIHRoZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRp
b24uCi0gICAgICAgICAgICAgICAgaWYgKC0xMDczNzQxNTEwID09IHNlbGYucmV0dXJuY29kZSgp
IG9yCi0gICAgICAgICAgICAgICAgICAgIC0gc2lnbmFsLlNJR0lOVCA9PSBzZWxmLnJldHVybmNv
ZGUoKSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0gICAg
ICAgICAgICAgICAgY3Jhc2ggPSBUcnVlCi0gICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
YWN0dWFsX2ltYWdlX2hhc2ggPSBOb25lCisgICAgICAgIG91dHB1dCA9ICcnCisgICAgICAgIGlt
YWdlID0gJycKIAotICAgICAgICAgICAgZWxpZiAobGluZS5zdGFydHN3aXRoKCdDb250ZW50LVR5
cGU6JykgYW5kIG5vdAotICAgICAgICAgICAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlwZSk6
CisgICAgICAgIHRpbWVvdXQgPSBpbnQodGltZW91dG1zKSAvIDEwMDAuMAorICAgICAgICBkZWFk
bGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorICAgICAgICBsaW5lID0gc3AucmVhZF9saW5l
KHRpbWVvdXQpCisgICAgICAgIHdoaWxlIG5vdCBzcC50aW1lZF9vdXQgYW5kIG5vdCBzcC5jcmFz
aGVkIGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKKyAgICAgICAgICAgIGlmIChsaW5lLnN0
YXJ0c3dpdGgoJ0NvbnRlbnQtVHlwZTonKSBhbmQgbm90CisgICAgICAgICAgICAgICAgaGF2ZV9z
ZWVuX2NvbnRlbnRfdHlwZSk6CiAgICAgICAgICAgICAgICAgaGF2ZV9zZWVuX2NvbnRlbnRfdHlw
ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIG91dHB1dC5hcHBlbmQobGluZSkKLQotICAgICAgICAgICAgKHRpbWVvdXQsIGxp
bmUpID0gc2VsZi5fcmVhZF9saW5lKHRpbWVvdXQsIHN0b3BfdGltZSkKLSAgICAgICAgICAgIHJl
c3AgKz0gbGluZQorICAgICAgICAgICAgICAgIG91dHB1dCArPSBsaW5lCisgICAgICAgICAgICBs
aW5lID0gc3AucmVhZF9saW5lKHRpbWVvdXQpCisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxp
bmUgLSB0aW1lLnRpbWUoKQogCiAgICAgICAgICMgTm93IHJlYWQgYSBzZWNvbmQgYmxvY2sgb2Yg
dGV4dCBmb3IgdGhlIG9wdGlvbmFsIGltYWdlIGRhdGEKLSAgICAgICAgaW1hZ2VfbGVuZ3RoID0g
MAotICAgICAgICAodGltZW91dCwgbGluZSkgPSBzZWxmLl9yZWFkX2xpbmUodGltZW91dCwgc3Rv
cF90aW1lKQotICAgICAgICByZXNwICs9IGxpbmUKKyAgICAgICAgcmVtYWluaW5nX2xlbmd0aCA9
IC0xCiAgICAgICAgIEhBU0hfSEVBREVSID0gJ0FjdHVhbEhhc2g6ICcKICAgICAgICAgTEVOR1RI
X0hFQURFUiA9ICdDb250ZW50LUxlbmd0aDogJwotICAgICAgICB3aGlsZSBub3QgdGltZW91dCBh
bmQgbm90IGNyYXNoIGFuZCBsaW5lLnJzdHJpcCgpICE9ICIjRU9GIjoKLSAgICAgICAgICAgIGlm
IGxpbmUgPT0gJycgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAg
IGlmICgtMTA3Mzc0MTUxMCA9PSBzZWxmLnJldHVybmNvZGUoKSBvcgotICAgICAgICAgICAgICAg
ICAgICAtIHNpZ25hbC5TSUdJTlQgPT0gc2VsZi5yZXR1cm5jb2RlKCkpOgotICAgICAgICAgICAg
ICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAgICAgIGNyYXNoID0g
VHJ1ZQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRz
d2l0aChIQVNIX0hFQURFUik6CisgICAgICAgIGxpbmUgPSBzcC5yZWFkX2xpbmUodGltZW91dCkK
KyAgICAgICAgd2hpbGUgbm90IHNwLnRpbWVkX291dCBhbmQgbm90IHNwLmNyYXNoZWQgYW5kIGxp
bmUucnN0cmlwKCkgIT0gIiNFT0YiOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKEhB
U0hfSEVBREVSKToKICAgICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2VfaGFzaCA9IGxpbmVbbGVu
KEhBU0hfSEVBREVSKTpdLnN0cmlwKCkKICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRo
KCdDb250ZW50LVR5cGU6Jyk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxp
ZiBsaW5lLnN0YXJ0c3dpdGgoTEVOR1RIX0hFQURFUik6Ci0gICAgICAgICAgICAgICAgaW1hZ2Vf
bGVuZ3RoID0gaW50KGxpbmVbbGVuKExFTkdUSF9IRUFERVIpOl0pCi0gICAgICAgICAgICBlbGlm
IGltYWdlX2xlbmd0aDoKLSAgICAgICAgICAgICAgICBpbWFnZSArPSBsaW5lCi0KLSAgICAgICAg
ICAgICh0aW1lb3V0LCBsaW5lKSA9IHNlbGYuX3JlYWRfbGluZSh0aW1lb3V0LCBzdG9wX3RpbWUs
IGltYWdlX2xlbmd0aCkKLSAgICAgICAgICAgIHJlc3AgKz0gbGluZQotCi0gICAgICAgIGlmIHRp
bWVvdXQ6Ci0gICAgICAgICAgICBzZWxmLnJlc3RhcnQoKQorICAgICAgICAgICAgICAgIHRpbWVv
dXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgY29udGVudF9sZW5n
dGggPSBpbnQobGluZVtsZW4oTEVOR1RIX0hFQURFUik6XSkKKyAgICAgICAgICAgICAgICBpbWFn
ZSA9IHNwLnJlYWQodGltZW91dCwgY29udGVudF9sZW5ndGgpCisgICAgICAgICAgICB0aW1lb3V0
ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgbGluZSA9IHNwLnJlYWRfbGlu
ZSh0aW1lb3V0KQogCiAgICAgICAgIGlmIHNlbGYuX2ltYWdlX3BhdGggYW5kIGxlbihzZWxmLl9p
bWFnZV9wYXRoKToKICAgICAgICAgICAgIGltYWdlX2ZpbGUgPSBmaWxlKHNlbGYuX2ltYWdlX3Bh
dGgsICJ3YiIpCiAgICAgICAgICAgICBpbWFnZV9maWxlLndyaXRlKGltYWdlKQogICAgICAgICAg
ICAgaW1hZ2VfZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgcmV0dXJuIChjcmFzaCwgdGltZW91dCwg
YWN0dWFsX2ltYWdlX2hhc2gsCi0gICAgICAgICAgICAgICAgJycuam9pbihvdXRwdXQpLCAnJy5q
b2luKGVycm9yKSkKKyAgICAgICAgcmV0dXJuIChzcC5jcmFzaGVkLCBzcC50aW1lZF9vdXQsIGFj
dHVhbF9pbWFnZV9oYXNoLCBvdXRwdXQsIHNwLmVycm9yKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6
Ci0gICAgICAgIGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNs
b3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAg
IGlmIHNlbGYuX3Byb2Muc3RkZXJyOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJy
LmNsb3NlKCkKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMicsICdj
eWd3aW4nKToKLSAgICAgICAgICAgICAgICAjIENsb3Npbmcgc3RkaW4vc3Rkb3V0L3N0ZGVyciBo
YW5ncyBzb21ldGltZXMgb24gT1MgWCwKLSAgICAgICAgICAgICAgICAjIChzZWUgcmVzdGFydCgp
LCBhYm92ZSksIGFuZCBhbnl3YXkgd2UgZG9uJ3Qgd2FudCB0byBoYW5nCi0gICAgICAgICAgICAg
ICAgIyB0aGUgaGFybmVzcyBpZiB0ZXN0X3NoZWxsIGlzIGJ1Z2d5LCBzbyB3ZSB3YWl0IGEgY291
cGxlCi0gICAgICAgICAgICAgICAgIyBzZWNvbmRzIHRvIGdpdmUgdGVzdF9zaGVsbCBhIGNoYW5j
ZSB0byBjbGVhbiB1cCwgYnV0IHRoZW4KLSAgICAgICAgICAgICAgICAjIGZvcmNlLWtpbGwgdGhl
IHByb2Nlc3MgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgICAgIEtJTExfVElNRU9VVCA9IDMu
MAotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSB0aW1lLnRpbWUoKSArIEtJTExfVElNRU9VVAot
ICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUu
dGltZSgpIDwgdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCi0g
ICAgICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAg
ICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9wcGluZyB0ZXN0IGRyaXZlciB0aW1lZCBvdXQsICcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdraWxsaW5nIGl0JykKLSAgICAgICAg
ICAgICAgICAgICAgbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwgInciKQotICAgICAgICAgICAgICAg
ICAgICBzdWJwcm9jZXNzLlBvcGVuKFsia2lsbCIsICItOSIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3Byb2MucGlkKV0sIHN0ZGVycj1udWxsKQotICAg
ICAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKLQotICAgIGRlZiBfcmVhZF9saW5lKHNlbGYs
IHRpbWVvdXQsIHN0b3BfdGltZSwgaW1hZ2VfbGVuZ3RoPTApOgotICAgICAgICBub3cgPSB0aW1l
LnRpbWUoKQotICAgICAgICByZWFkX2ZkcyA9IFtdCi0KLSAgICAgICAgIyBmaXJzdCBjaGVjayB0
byBzZWUgaWYgd2UgaGF2ZSBhIGxpbmUgYWxyZWFkeSByZWFkIG9yIGlmIHdlJ3ZlCi0gICAgICAg
ICMgcmVhZCB0aGUgZW50aXJlIGltYWdlCi0gICAgICAgIGlmIGltYWdlX2xlbmd0aCBhbmQgbGVu
KHNlbGYuX3JlYWRfYnVmZmVyKSA+PSBpbWFnZV9sZW5ndGg6Ci0gICAgICAgICAgICBvdXQgPSBz
ZWxmLl9yZWFkX2J1ZmZlclswOmltYWdlX2xlbmd0aF0KLSAgICAgICAgICAgIHNlbGYuX3JlYWRf
YnVmZmVyID0gc2VsZi5fcmVhZF9idWZmZXJbaW1hZ2VfbGVuZ3RoOl0KLSAgICAgICAgICAgIHJl
dHVybiAodGltZW91dCwgb3V0KQotCi0gICAgICAgIGlkeCA9IHNlbGYuX3JlYWRfYnVmZmVyLmZp
bmQoJ1xuJykKLSAgICAgICAgaWYgbm90IGltYWdlX2xlbmd0aCBhbmQgaWR4ICE9IC0xOgotICAg
ICAgICAgICAgb3V0ID0gc2VsZi5fcmVhZF9idWZmZXJbMDppZHggKyAxXQotICAgICAgICAgICAg
c2VsZi5fcmVhZF9idWZmZXIgPSBzZWxmLl9yZWFkX2J1ZmZlcltpZHggKyAxOl0KLSAgICAgICAg
ICAgIHJldHVybiAodGltZW91dCwgb3V0KQotCi0gICAgICAgICMgSWYgd2UndmUgdGltZWQgb3V0
LCByZXR1cm4ganVzdCB3aGF0IHdlIGhhdmUsIGlmIGFueXRoaW5nCi0gICAgICAgIGlmIHRpbWVv
dXQgb3Igbm93ID49IHN0b3BfdGltZToKLSAgICAgICAgICAgIG91dCA9IHNlbGYuX3JlYWRfYnVm
ZmVyCi0gICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciA9ICcnCi0gICAgICAgICAgICByZXR1
cm4gKFRydWUsIG91dCkKLQotICAgICAgICAocmVhZF9mZHMsIHdyaXRlX2ZkcywgZXJyX2Zkcykg
PSBzZWxlY3Quc2VsZWN0KAotICAgICAgICAgICAgW3NlbGYuX3N0ZG91dF9mZF0sIFtdLCBbXSwg
c3RvcF90aW1lIC0gbm93KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IG9y
IGxlbihyZWFkX2ZkcykgPT0gMToKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZmZlciAr
PSBzZWxmLl9wcm9jLnN0ZG91dC5yZWFkKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0g
ICAgICAgICAgICByZWFkID0gW10KLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfbGluZSh0aW1l
b3V0LCBzdG9wX3RpbWUpCisgICAgICAgIGlmIHNlbGYuX3Nwcm9jOgorICAgICAgICAgICAgc2Vs
Zi5fc3Byb2Muc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9zcHJvYyA9IE5vbmUKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVy
X3Byb2Nlc3MucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3NlcnZlcl9wcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQwNzI1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CkBAIC0wLDAgKzEsMjIzIEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiUGFja2FnZSB0aGF0IGltcGxlbWVu
dHMgdGhlIFNlcnZlclByb2Nlc3Mgd3JhcHBlciBjbGFzcyIiIgorCitpbXBvcnQgZmNudGwKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWduYWwKK2lt
cG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorCitfbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnNlcnZlcl9wcm9jZXNzIikK
KworCitjbGFzcyBTZXJ2ZXJQcm9jZXNzOgorICAgICIiIlRoaXMgY2xhc3MgcHJvdmlkZXMgYSB3
cmFwcGVyIGFyb3VuZCBhIHN1YnByb2Nlc3MgdGhhdAorICAgIGltcGxlbWVudHMgYSBzaW1wbGUg
cmVxdWVzdC9yZXNwb25zZSB1c2FnZSBtb2RlbC4gVGhlIHByaW1hcnkgYmVuZWZpdAorICAgIGlz
IHRoYXQgcmVhZGluZyByZXNwb25zZXMgdGFrZXMgYSB0aW1lb3V0LCBzbyB0aGF0IHdlIGRvbid0
IGV2ZXIgYmxvY2sKKyAgICBpbmRlZmluaXRlbHkuIFRoZSBjbGFzcyBhbHNvIGhhbmRsZXMgdHJh
bnNwYXJlbnRseSByZXN0YXJ0aW5nIHByb2Nlc3NlcworICAgIGFzIG5lY2Vzc2FyeSB0byBrZWVw
IGlzc3VpbmcgY29tbWFuZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmos
IG5hbWUsIGNtZCwgZW52PU5vbmUpOgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKKyAg
ICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fY21kID0gY21kCisgICAgICAg
IHNlbGYuX2VudiA9IGVudgorICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICBkZWYgX3Jlc2V0
KHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9vdXRwdXQg
PSAnJworICAgICAgICBzZWxmLmNyYXNoZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnRpbWVkX291
dCA9IEZhbHNlCisgICAgICAgIHNlbGYuZXJyb3IgPSAnJworCisgICAgZGVmIF9zdGFydChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
IiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQorICAgICAgICBzZWxmLl9yZXNldCgp
CisgICAgICAgIGNsb3NlX2ZkcyA9IHN5cy5wbGF0Zm9ybSBub3QgaW4gKCd3aW4zMicsICdjeWd3
aW4nKQorICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLl9jbWQsIHN0
ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvc2VfZmRzPWNsb3NlX2ZkcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW52PXNlbGYuX2VudikKKyAgICAgICAgZmQgPSBzZWxmLl9wcm9j
LnN0ZG91dC5maWxlbm8oKQorICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dF
VEZMKQorICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05P
TkJMT0NLKQorICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCisgICAgICAg
IGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZjbnRsLmZjbnRs
KGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisKKyAgICBkZWYgaGFuZGxl
X2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNoZWNrcyB0byBzZWUg
aWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKKyAgICAgICAgYmVjYXVzZSBvZiBhIGtl
eWJvYXJkIGludGVycnVwdCBhbmQgcmFpc2VzIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIGFj
Y29yZGluZ2x5LiIiIgorICAgICAgICBpZiBzZWxmLmNyYXNoZWQ6CisgICAgICAgICAgICAjIFRo
aXMgaXMgaGV4IGNvZGUgMHhjMDAwMDAxZCwgd2hpY2ggaXMgdXNlZCBmb3IgYWJydXB0CisgICAg
ICAgICAgICAjIHRlcm1pbmF0aW9uLiBUaGlzIGhhcHBlbnMgaWYgd2UgaGl0IGN0cmwrYyBmcm9t
IHRoZSBwcm9tcHQKKyAgICAgICAgICAgICMgYW5kIHdlIGhhcHBlbiB0byBiZSB3YWl0aW5nIG9u
IHRoZSB0ZXN0X3NoZWxsLgorICAgICAgICAgICAgIyBzZG95b246IE5vdCBzdXJlIGZvciB3aGlj
aCBPUyBhbmQgaW4gd2hhdCBjaXJjdW1zdGFuY2VzIHRoZQorICAgICAgICAgICAgIyBhYm92ZSBj
b2RlIGlzIHZhbGlkLiBXaGF0IHdvcmtzIGZvciBtZSB1bmRlciBMaW51eCB0byBkZXRlY3QKKyAg
ICAgICAgICAgICMgY3RybCtjIGlzIGZvciB0aGUgc3VicHJvY2VzcyByZXR1cm5jb2RlIHRvIGJl
IG5lZ2F0aXZlCisgICAgICAgICAgICAjIFNJR0lOVC4gQW5kIHRoYXQgYWdyZWVzIHdpdGggdGhl
IHN1YnByb2Nlc3MgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAgIGlmICgtMTA3Mzc0MTUxMCA9
PSBzZWxmLl9wcm9jLnJldHVybmNvZGUgb3IKKyAgICAgICAgICAgICAgICAtIHNpZ25hbC5TSUdJ
TlQgPT0gc2VsZi5fcHJvYy5yZXR1cm5jb2RlKToKKyAgICAgICAgICAgICAgICByYWlzZSBLZXli
b2FyZEludGVycnVwdAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgcG9sbChzZWxmKToK
KyAgICAgICAgIiIiQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaXMgcnVu
bmluZzsgcmV0dXJucyBOb25lCisgICAgICAgIGlmIGl0IHN0aWxsIGlzICh3cmFwcGVyIGFyb3Vu
ZCBzdWJwcm9jZXNzLnBvbGwpLiIiIgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3Byb2MucG9sbCgpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBk
ZWYgcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgZXhpdCBjb2RlIGZy
b20gdGhlIHN1YnByY29lc3M7IHJldHVybnMgTm9uZSBpZiB0aGUKKyAgICAgICAgcHJvY2VzcyBo
YXNuJ3QgZXhpdGVkICh0aGlzIGlzIGEgd3JhcHBlciBhcm91bmQgc3VicHJvY2Vzcy5yZXR1cm5j
b2RlKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvYy5yZXR1cm5jb2RlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBk
ZWYgd3JpdGUoc2VsZiwgaW5wdXQpOgorICAgICAgICAiIiJXcml0ZSBhIHJlcXVlc3QgdG8gdGhl
IHN1YnByb2Nlc3MuIFRoZSBzdWJwcm9jZXNzIGlzIChyZS0pc3RhcnQoKSdlZAorICAgICAgICBp
ZiBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoK
KyAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKKyAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0
ZShpbnB1dCkKKworICAgIGRlZiByZWFkX2xpbmUoc2VsZiwgdGltZW91dCk6CisgICAgICAgICIi
IlJlYWQgYSBzaW5nbGUgbGluZSBmcm9tIHRoZSBzdWJwcm9jZXNzLCB3YWl0aW5nIHVudGlsIHRo
ZSBkZWFkbGluZS4KKyAgICAgICAgSWYgdGhlIGRlYWRsaW5lIHBhc3NlcywgdGhlIGNhbGwgdGlt
ZXMgb3V0LiBOb3RlIHRoYXQgZXZlbiBpZiB0aGUKKyAgICAgICAgc3VicHJvY2VzcyBoYXMgY3Jh
c2hlZCBvciB0aGUgZGVhZGxpbmUgaGFzIHBhc3NlZCwgaWYgdGhlcmUgaXMgb3V0cHV0CisgICAg
ICAgIHBlbmRpbmcsIGl0IHdpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAgICAgQXJnczoKKyAgICAg
ICAgICAgIHRpbWVvdXQ6IGZsb2F0aW5nLXBvaW50IG51bWJlciBvZiBzZWNvbmRzIHRoZSBjYWxs
IGlzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICB0byBibG9jayBmb3IuIEEgemVybyBvciBuZWdh
dGl2ZSBudW1iZXIgd2lsbCBhdHRlbXB0IHRvIHJlYWQKKyAgICAgICAgICAgICAgICBhbnkgZXhp
c3RpbmcgZGF0YSwgYnV0IHdpbGwgbm90IGJsb2NrLiBUaGVyZSBpcyBubyB3YXkgdG8KKyAgICAg
ICAgICAgICAgICBibG9jayBpbmRlZmluaXRlbHkuCisgICAgICAgIFJldHVybnM6CisgICAgICAg
ICAgICBvdXRwdXQ6IGRhdGEgcmV0dXJuZWQsIGlmIGFueS4gSWYgbm8gZGF0YSBpcyBhdmFpbGFi
bGUgYW5kIHRoZQorICAgICAgICAgICAgICAgIGNhbGwgdGltZXMgb3V0IG9yIGNyYXNoZXMsIGFu
IGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4gTm90ZQorICAgICAgICAgICAgICAgIHRoYXQgdGhl
IHJldHVybmVkIHN0cmluZyBpbmNsdWRlcyB0aGUgbmV3bGluZSAoJ1xuJykuIiIiCisgICAgICAg
IHJldHVybiBzZWxmLl9yZWFkKHRpbWVvdXQsIHNpemU9MCkKKworICAgIGRlZiByZWFkKHNlbGYs
IHRpbWVvdXQsIHNpemUpOgorICAgICAgICAiIiJBdHRlbXB0cyB0byByZWFkIHNpemUgY2hhcmFj
dGVycyBmcm9tIHRoZSBzdWJwcm9jZXNzLCB3YWl0aW5nIHVudGlsCisgICAgICAgIHRoZSBkZWFk
bGluZSBwYXNzZXMuIElmIHRoZSBkZWFkbGluZSBwYXNzZXMsIGFueSBhdmFpbGFibGUgZGF0YSB3
aWxsIGJlCisgICAgICAgIHJldHVybmVkLiBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgZGVhZGxpbmUg
aGFzIHBhc3NlZCBvciBpZiB0aGUKKyAgICAgICAgc3VicHJvY2VzcyBoYXMgY3Jhc2hlZCwgYW55
IGF2YWlsYWJsZSBkYXRhIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAgICAgQXJnczoK
KyAgICAgICAgICAgIHRpbWVvdXQ6IGZsb2F0aW5nLXBvaW50IG51bWJlciBvZiBzZWNvbmRzIHRo
ZSBjYWxsIGlzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICB0byBibG9jayBmb3IuIEEgemVybyBv
ciBuZWdhdGl2ZSBudW1iZXIgd2lsbCBhdHRlbXB0IHRvIHJlYWQKKyAgICAgICAgICAgICAgICBh
bnkgZXhpc3RpbmcgZGF0YSwgYnV0IHdpbGwgbm90IGJsb2NrLiBUaGVyZSBpcyBubyB3YXkgdG8K
KyAgICAgICAgICAgICAgICBibG9jayBpbmRlZmluaXRlbHkuCisgICAgICAgICAgICBzaXplOiBh
bW91bnQgb2YgZGF0YSB0byByZWFkLiBNdXN0IGJlIGEgcG9zdGl2ZSBpbnRlZ2VyLgorICAgICAg
ICBSZXR1cm5zOgorICAgICAgICAgICAgb3V0cHV0OiBkYXRhIHJldHVybmVkLCBpZiBhbnkuIElm
IG5vIGRhdGEgaXMgYXZhaWxhYmxlLCBhbiBlbXB0eQorICAgICAgICAgICAgICAgIHN0cmluZyBp
cyByZXR1cm5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNpemUgPD0gMDoKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlcnZlclByb2Nlc3MucmVhZCgpIGNhbGxlZCB3aXRoIGEg
JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uLXBvc2l0aXZlIHNpemU6ICVkICcg
JSBzaXplKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZCh0aW1lb3V0LCBzaXplKQorCisgICAg
ZGVmIF9yZWFkKHNlbGYsIHRpbWVvdXQsIHNpemUpOgorICAgICAgICAiIiJJbnRlcm5hbCByb3V0
aW5lIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgcmVhZC4iIiIKKyAgICAgICAgaW5kZXggPSAtMQor
ICAgICAgICBvdXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQorICAgICAgICBlcnJf
ZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICBzZWxlY3RfZmRzID0gKG91
dF9mZCwgZXJyX2ZkKQorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAor
ICAgICAgICB3aGlsZSBub3Qgc2VsZi50aW1lZF9vdXQgYW5kIG5vdCBzZWxmLmNyYXNoZWQ6Cisg
ICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSAhPSBOb25lOgorICAgICAgICAgICAgICAg
IHNlbGYuY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9pbnRlcnJ1
cHQoKQorCisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgbm93
ID4gZGVhZGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBUcnVlCisKKyAg
ICAgICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IG91dHB1dCB3ZSBjYW4gcmV0
dXJuLgorICAgICAgICAgICAgaWYgc2l6ZSBhbmQgbGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToK
KyAgICAgICAgICAgICAgICBpbmRleCA9IHNpemUKKyAgICAgICAgICAgIGVsaWYgc2l6ZSA9PSAw
OgorICAgICAgICAgICAgICAgIGluZGV4ID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAxCisK
KyAgICAgICAgICAgIGlmIGluZGV4IG9yIHNlbGYuY3Jhc2hlZCBvciBzZWxmLnRpbWVkX291dDoK
KyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9vdXRwdXRbMDppbmRleF0KKyAgICAgICAg
ICAgICAgICBzZWxmLl9vdXRwdXQgPSBzZWxmLl9vdXRwdXRbaW5kZXg6XQorICAgICAgICAgICAg
ICAgIHJldHVybiBvdXRwdXQKKworICAgICAgICAgICAgIyBOb3BlIC0gd2FpdCBmb3IgbW9yZSBk
YXRhLgorICAgICAgICAgICAgKHJlYWRfZmRzLCB3cml0ZV9mZHMsIGVycl9mZHMpID0gc2VsZWN0
LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0X2ZkcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmUgLSBub3cp
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgb3V0X2ZkIGluIHJlYWRfZmRz
OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQgKz0gc2VsZi5fcHJvYy5zdGRvdXQu
cmVhZCgpCisgICAgICAgICAgICAgICAgaWYgZXJyX2ZkIGluIHJlYWRfZmRzOgorICAgICAgICAg
ICAgICAgICAgICBzZWxmLmVycm9yICs9IHNlbGYuX3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAg
ICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVm
IHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgKHNodXQgZG93bikgdGhlIHN1YnByb2Nlc3Mp
LCBpZiBpdCBpcyBydW5uaW5nLiIiIgorICAgICAgICBwaWQgPSBzZWxmLl9wcm9jLnBpZAorICAg
ICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQu
Y2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYu
X3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dp
bjMyJywgJ2N5Z3dpbicpOgorICAgICAgICAgICAgIyBDbG9zaW5nIHN0ZGluL3N0ZG91dC9zdGRl
cnIgaGFuZ3Mgc29tZXRpbWVzIG9uIE9TIFgsCisgICAgICAgICAgICAjIChzZWUgcmVzdGFydCgp
LCBhYm92ZSksIGFuZCBhbnl3YXkgd2UgZG9uJ3Qgd2FudCB0byBoYW5nCisgICAgICAgICAgICAj
IHRoZSBoYXJuZXNzIGlmIHRlc3Rfc2hlbGwgaXMgYnVnZ3ksIHNvIHdlIHdhaXQgYSBjb3VwbGUK
KyAgICAgICAgICAgICMgc2Vjb25kcyB0byBnaXZlIHRlc3Rfc2hlbGwgYSBjaGFuY2UgdG8gY2xl
YW4gdXAsIGJ1dCB0aGVuCisgICAgICAgICAgICAjIGZvcmNlLWtpbGwgdGhlIHByb2Nlc3MgaWYg
bmVjZXNzYXJ5LgorICAgICAgICAgICAgS0lMTF9USU1FT1VUID0gMy4wCisgICAgICAgICAgICB0
aW1lb3V0ID0gdGltZS50aW1lKCkgKyBLSUxMX1RJTUVPVVQKKyAgICAgICAgICAgIHdoaWxlIHNl
bGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgdGltZW91dDoKKyAgICAg
ICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9s
bCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9wcGluZyAlcyB0
aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fbmFtZSkKKyAgICAgICAgICAgICAgICBudWxsID0gb3Blbihvcy5kZXZudWxsLCAidyIpCisg
ICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbImtpbGwiLCAiLTkiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9wcm9jLnBpZCldLCBzdGRlcnI9bnVs
bCkKKyAgICAgICAgICAgICAgICBudWxsLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBfbG9nLndh
cm5pbmcoJ2tpbGxlZCcpCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlwZXMvaW1hZ2VfZGlm
Zi5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Rlc3RfdHlw
ZXMvaW1hZ2VfZGlmZi5weQppbmRleCA0MjkyOGJhLi5kOWU3ODRhIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy90ZXN0X3R5cGVzL2ltYWdlX2Rp
ZmYucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdGVz
dF90eXBlcy9pbWFnZV9kaWZmLnB5CkBAIC05MCw2ICs5MCw3IEBAIGNsYXNzIEltYWdlRGlmZih0
ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICBBcmdzOgogICAgICAgICAgIGZp
bGVuYW1lOiB0aGUgbmFtZSBvZiB0aGUgdGVzdAogICAgICAgICAgIHRhcmdldDogRGVidWcgb3Ig
UmVsZWFzZQorICAgICAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGZpbGVzIGFyZSBkaWZmZXJlbnQs
IEZhbHNlIGlmIHRoZXkgbWF0Y2gKICAgICAgICAgIiIiCiAgICAgICAgIGRpZmZfZmlsZW5hbWUg
PSBzZWxmLm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKICAgICAgICAgICBzZWxmLkZJTEVOQU1F
X1NVRkZJWF9DT01QQVJFKQpAQCAtOTgsNiArOTksNyBAQCBjbGFzcyBJbWFnZURpZmYodGVzdF90
eXBlX2Jhc2UuVGVzdFR5cGVCYXNlKToKICAgICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUgPSBzZWxm
Lm91dHB1dF9maWxlbmFtZShmaWxlbmFtZSwKICAgICAgICAgICBzZWxmLkZJTEVOQU1FX1NVRkZJ
WF9FWFBFQ1RFRCArICcucG5nJykKIAorICAgICAgICByZXN1bHQgPSBUcnVlCiAgICAgICAgIHRy
eToKICAgICAgICAgICAgIF9jb21wYXJlX2F2YWlsYWJsZSA9IFRydWUKICAgICAgICAgICAgIHJl
c3VsdCA9IHBvcnQuZGlmZl9pbWFnZShleHBlY3RlZF9maWxlbmFtZSwgYWN0dWFsX2ZpbGVuYW1l
LApAQCAtMTY1LDE4ICsxNjcsMTYgQEAgY2xhc3MgSW1hZ2VEaWZmKHRlc3RfdHlwZV9iYXNlLlRl
c3RUeXBlQmFzZSk6CiAgICAgICAgIHNlbGYuX2NvcHlfb3V0cHV0X3BuZyhmaWxlbmFtZSwgdGVz
dF9hcmdzLnBuZ19wYXRoLCAnLWFjdHVhbC5wbmcnKQogICAgICAgICBzZWxmLl9jb3B5X291dHB1
dF9wbmcoZmlsZW5hbWUsIGV4cGVjdGVkX3BuZ19maWxlLCAnLWV4cGVjdGVkLnBuZycpCiAKLSAg
ICAgICAgIyBFdmVuIHRob3VnaCB3ZSBvbmx5IHVzZSByZXN1bHQgaW4gb25lIGNvZGVwYXRoIGJl
bG93IGJ1dCB3ZQorICAgICAgICAjIEV2ZW4gdGhvdWdoIHdlIG9ubHkgdXNlIHRoZSByZXN1bHQg
aW4gb25lIGNvZGVwYXRoIGJlbG93IGJ1dCB3ZQogICAgICAgICAjIHN0aWxsIG5lZWQgdG8gY2Fs
bCBDcmVhdGVJbWFnZURpZmYgZm9yIG90aGVyIGNvZGVwYXRocy4KLSAgICAgICAgcmVzdWx0ID0g
c2VsZi5fY3JlYXRlX2ltYWdlX2RpZmYocG9ydCwgZmlsZW5hbWUsIHRhcmdldCkKKyAgICAgICAg
aW1hZ2VzX2FyZV9kaWZmZXJlbnQgPSBzZWxmLl9jcmVhdGVfaW1hZ2VfZGlmZihwb3J0LCBmaWxl
bmFtZSwgdGFyZ2V0KQogICAgICAgICBpZiBleHBlY3RlZF9oYXNoID09ICcnOgogICAgICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZU1pc3NpbmdJbWFnZUhhc2go
c2VsZikpCiAgICAgICAgIGVsaWYgdGVzdF9hcmdzLmhhc2ggIT0gZXhwZWN0ZWRfaGFzaDoKLSAg
ICAgICAgICAgICMgSGFzaGVzIGRvbid0IG1hdGNoLCBzbyBzZWUgaWYgdGhlIGltYWdlcyBtYXRj
aC4gSWYgdGhleSBkbywgdGhlbgotICAgICAgICAgICAgIyB0aGUgaGFzaCBpcyB3cm9uZy4KLSAg
ICAgICAgICAgIGlmIHJlc3VsdCA9PSAwOgotICAgICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVu
ZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVJbWFnZUhhc2hJbmNvcnJlY3Qoc2VsZikpCi0gICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgaWYgaW1hZ2VzX2FyZV9kaWZmZXJlbnQ6CiAgICAgICAg
ICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHRlc3RfZmFpbHVyZXMuRmFpbHVyZUltYWdlSGFzaE1p
c21hdGNoKHNlbGYpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWlsdXJl
cy5hcHBlbmQodGVzdF9mYWlsdXJlcy5GYWlsdXJlSW1hZ2VIYXNoSW5jb3JyZWN0KHNlbGYpKQog
CiAgICAgICAgIHJldHVybiBmYWlsdXJlcwogCkBAIC0xOTAsMTAgKzE5MCw3IEBAIGNsYXNzIElt
YWdlRGlmZih0ZXN0X3R5cGVfYmFzZS5UZXN0VHlwZUJhc2UpOgogICAgICAgICAgIFRydWUgaWYg
dHdvIGZpbGVzIGFyZSBkaWZmZXJlbnQuCiAgICAgICAgICAgRmFsc2Ugb3RoZXJ3aXNlLgogICAg
ICAgICAiIiIKLQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXN1bHQgPSBwb3J0LmRpZmZf
aW1hZ2UoZmlsZTEsIGZpbGUyKQorICAgICAgICAgICAgcmV0dXJuIHBvcnQuZGlmZl9pbWFnZShm
aWxlMSwgZmlsZTIpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgogICAgICAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgICAgICByZXR1cm4gcmVzdWx0ID09IDEK
</data>

          </attachment>
      

    </bug>

</bugzilla>