<?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>117098</bug_id>
          
          <creation_ts>2013-05-31 16:47:02 -0700</creation_ts>
          <short_desc>[Windows] NRWT is not putting crash logs in proper place</short_desc>
          <delta_ts>2017-11-09 17:15:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=179514</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>38756</blocked>
    
    <blocked>117212</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>glenn</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>896026</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-05-31 16:47:02 -0700</bug_when>
    <thetext>The layout test result page created by NRWT expects crash logs to be placed in particular locations using specific names.  The current implementation of this logic for the Windows port is doing the wrong things, so these end up being dead links.

This patch corrects the Windows logic to move the crash files to the proper place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896027</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-05-31 16:47:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/14039502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896558</commentid>
    <comment_count>2</comment_count>
      <attachid>203616</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 11:38:02 -0700</bug_when>
    <thetext>Created attachment 203616
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896559</commentid>
    <comment_count>3</comment_count>
      <attachid>203616</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 11:39:54 -0700</bug_when>
    <thetext>Comment on attachment 203616
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:83
&gt; +        log_directory = port.results_directory()

I only needed to pass in &apos;port&apos; to get access to this directory.  Is there some other way for the CrashLog object to get to the port without passing as argument?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896563</commentid>
    <comment_count>4</comment_count>
      <attachid>203616</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-06-03 11:52:25 -0700</bug_when>
    <thetext>Comment on attachment 203616
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:83
&gt;&gt; +        log_directory = port.results_directory()
&gt; 
&gt; I only needed to pass in &apos;port&apos; to get access to this directory.  Is there some other way for the CrashLog object to get to the port without passing as argument?

Since log_directory is only used in the call to files_under, why don&apos;t we just call it there?

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:85
&gt; +        pid_line_regex = re.compile(&apos;\s+Global\s+PID:\s+\[(?P&lt;pid&gt;\d+)\]&apos;)

Since this doesn&apos;t change, why don&apos;t we put it as a static value?

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:86
&gt; +        errors = &apos;&apos;

Ser errors to None.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:98
&gt; +                    if (int(match.group(&apos;pid&apos;)) == pid):

The outer parenthesis is not needed.

&gt; Tools/Scripts/webkitpy/port/win.py:239
&gt; +            winpid = self._executive.pid_to_sys_pid.get(pid)

Nit: we should call this system_id to be consistent.

&gt; Tools/Scripts/webkitpy/port/win.py:268
&gt; +            if not crash_log:
&gt; +                continue
&gt; +            crash_logs[test_name] = crash_log

It&apos;s probably cleaner to write it as:
if crash_log:
    crash_logs[test_name] = crash_log

&gt; Tools/Scripts/webkitpy/port/win.py:272
&gt; +        self.win_pid = int(pid)

Why are we setting this as an instance variable?  It&apos;s not used anywhere else so I don&apos;t think this is intended.
r- because of this.

Also, we should call this system_pid to be consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896567</commentid>
    <comment_count>5</comment_count>
      <attachid>203616</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 12:16:21 -0700</bug_when>
    <thetext>Comment on attachment 203616
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:86
&gt;&gt; +        errors = &apos;&apos;
&gt; 
&gt; Ser errors to None.

I can&apos;t -- this is a string that is appended to in the stanzas below (this is duplicated from the mac logic).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896568</commentid>
    <comment_count>6</comment_count>
      <attachid>203616</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 12:17:18 -0700</bug_when>
    <thetext>Comment on attachment 203616
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:83
&gt;&gt;&gt; +        log_directory = port.results_directory()
&gt;&gt; 
&gt;&gt; I only needed to pass in &apos;port&apos; to get access to this directory.  Is there some other way for the CrashLog object to get to the port without passing as argument?
&gt; 
&gt; Since log_directory is only used in the call to files_under, why don&apos;t we just call it there?

Done

&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:85
&gt;&gt; +        pid_line_regex = re.compile(&apos;\s+Global\s+PID:\s+\[(?P&lt;pid&gt;\d+)\]&apos;)
&gt; 
&gt; Since this doesn&apos;t change, why don&apos;t we put it as a static value?

Done

&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:98
&gt;&gt; +                    if (int(match.group(&apos;pid&apos;)) == pid):
&gt; 
&gt; The outer parenthesis is not needed.

Done

&gt;&gt; Tools/Scripts/webkitpy/port/win.py:239
&gt;&gt; +            winpid = self._executive.pid_to_sys_pid.get(pid)
&gt; 
&gt; Nit: we should call this system_id to be consistent.

Done

&gt;&gt; Tools/Scripts/webkitpy/port/win.py:268
&gt;&gt; +            crash_logs[test_name] = crash_log
&gt; 
&gt; It&apos;s probably cleaner to write it as:
&gt; if crash_log:
&gt;     crash_logs[test_name] = crash_log

Done

&gt;&gt; Tools/Scripts/webkitpy/port/win.py:272
&gt;&gt; +        self.win_pid = int(pid)
&gt; 
&gt; Why are we setting this as an instance variable?  It&apos;s not used anywhere else so I don&apos;t think this is intended.
&gt; r- because of this.
&gt; 
&gt; Also, we should call this system_pid to be consistent.

Corrected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896571</commentid>
    <comment_count>7</comment_count>
      <attachid>203618</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 12:20:25 -0700</bug_when>
    <thetext>Created attachment 203618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896594</commentid>
    <comment_count>8</comment_count>
      <attachid>203618</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-06-03 13:45:28 -0700</bug_when>
    <thetext>Comment on attachment 203618
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:29
&gt; +import codecs

We don&apos;t need this once you address the comment below.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:82
&gt; +    def _find_newest_log_win(self, process_name, pid, include_errors, newer_than, port):

We can&apos;t write any test for this method?

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:95
&gt; +                    with codecs.open(path, &apos;r&apos;, &apos;utf8&apos;, &apos;ignore&apos;) as ff:
&gt; +                        f = ff.read()

Please use filesystem.read_text_file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896595</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 13:49:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 203618 [details])
&gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:95
&gt; &gt; +                    with codecs.open(path, &apos;r&apos;, &apos;utf8&apos;, &apos;ignore&apos;) as ff:
&gt; &gt; +                        f = ff.read()
&gt; 
&gt; Please use filesystem.read_text_file.

I can&apos;t, because I need to pass the &apos;ignore&apos; flag to the underlying codecs.open call so that I can handle the malformed Windows log files.

I could modify the existing read_text_file to add an optional error-handling argument.  Would that be okay?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896598</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-06-03 13:52:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 203618 [details] [details])
&gt; &gt; &gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:95
&gt; &gt; &gt; +                    with codecs.open(path, &apos;r&apos;, &apos;utf8&apos;, &apos;ignore&apos;) as ff:
&gt; &gt; &gt; +                        f = ff.read()
&gt; &gt; 
&gt; &gt; Please use filesystem.read_text_file.
&gt; 
&gt; I can&apos;t, because I need to pass the &apos;ignore&apos; flag to the underlying codecs.open call so that I can handle the malformed Windows log files.
&gt;

Ick. Can you read the file as a straight binary file (using read_binary_file)? I&apos;m guessing python might be okay with that.
 
&gt; I could modify the existing read_text_file to add an optional error-handling argument.  Would that be okay?

I&apos;d prefer not to if there&apos;s any way around it. The only reason I&apos;d be open to allowing the flag would be for us to be able to more easily write tests for this, but even then I&apos;d probably rather add a separate _read() call on this object that you could override to mock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896664</commentid>
    <comment_count>11</comment_count>
      <attachid>203635</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 17:27:42 -0700</bug_when>
    <thetext>Created attachment 203635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896665</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-03 17:28:51 -0700</bug_when>
    <thetext>Attachment 203635 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy/common/system/crashlogs.py&apos;, u&apos;Tools/Scripts/webkitpy/common/system/crashlogs_unittest.py&apos;, u&apos;Tools/Scripts/webkitpy/common/system/executive.py&apos;, u&apos;Tools/Scripts/webkitpy/common/system/executive_mock.py&apos;, u&apos;Tools/Scripts/webkitpy/common/system/filesystem.py&apos;, u&apos;Tools/Scripts/webkitpy/common/system/filesystem_mock.py&apos;, u&apos;Tools/Scripts/webkitpy/common/system/filesystem_unittest.py&apos;, u&apos;Tools/Scripts/webkitpy/port/base.py&apos;, u&apos;Tools/Scripts/webkitpy/port/server_process.py&apos;, u&apos;Tools/Scripts/webkitpy/port/win.py&apos;, u&apos;Tools/Scripts/webkitpy/port/win_unittest.py&apos;]&quot; exit_code: 1
Tools/Scripts/webkitpy/common/system/filesystem_mock.py:324:  [MockFileSystem.read_text_file] An attribute affected in webkitpy.common.system.crashlogs_unittest line 271 hide this method  [pylint/E0202] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896667</commentid>
    <comment_count>13</comment_count>
      <attachid>203635</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-06-03 17:35:48 -0700</bug_when>
    <thetext>Comment on attachment 203635
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:35
&gt; +    PID_LINE_REGEX = re.compile(&apos;\s+Global\s+PID:\s+\[(?P&lt;pid&gt;\d+)\]&apos;)

Use r&apos;~&apos;.

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:96
&gt; +                    f = self._host.filesystem.read_text_file(path, &apos;ignore&apos;)
&gt; +                    match = self.PID_LINE_REGEX.search(f)
&gt; +                    if match is None:
&gt; +                        continue
&gt; +                    if int(match.group(&apos;pid&apos;)) == pid:
&gt; +                        return errors + f

Please don&apos;t use one-letter variable like f.  I&apos;d call this variable log_file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896670</commentid>
    <comment_count>14</comment_count>
      <attachid>203635</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-06-03 17:42:08 -0700</bug_when>
    <thetext>Comment on attachment 203635
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/executive.py:279
&gt; +            ps_process = self.run_command([&apos;ps&apos;, &apos;-e&apos;], error_handler=Executive.ignore_error)

Won&apos;t this only work under cygwin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896691</commentid>
    <comment_count>15</comment_count>
      <attachid>203635</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 18:31:13 -0700</bug_when>
    <thetext>Comment on attachment 203635
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:35
&gt;&gt; +    PID_LINE_REGEX = re.compile(&apos;\s+Global\s+PID:\s+\[(?P&lt;pid&gt;\d+)\]&apos;)
&gt; 
&gt; Use r&apos;~&apos;.

Doesn&apos;t the &quot;r&quot; string decoration mean that it will not treat escape characters specially?  I want to use the escape characters as they are written.

Probably I am misunderstanding your comment:  Is there some built-in feature for regular expression building you are wanting me to use?

&gt;&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:96
&gt;&gt; +                        return errors + f
&gt; 
&gt; Please don&apos;t use one-letter variable like f.  I&apos;d call this variable log_file.

Done

&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:279
&gt;&gt; +            ps_process = self.run_command([&apos;ps&apos;, &apos;-e&apos;], error_handler=Executive.ignore_error)
&gt; 
&gt; Won&apos;t this only work under cygwin?

Ah, right -- I&apos;ll change that to:              if sys.platform == &quot;cygwin&quot;:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896715</commentid>
    <comment_count>16</comment_count>
      <attachid>203648</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 20:51:58 -0700</bug_when>
    <thetext>Created attachment 203648
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896716</commentid>
    <comment_count>17</comment_count>
      <attachid>203648</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 20:52:58 -0700</bug_when>
    <thetext>Comment on attachment 203648
Patch

No longer pass &apos;errors&apos; argument to {read|write}_text_file.  Resolve dpranke/rniwa comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896717</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 20:54:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; &gt; Please use filesystem.read_text_file.
&gt; &gt; 
&gt; &gt; I can&apos;t, because I need to pass the &apos;ignore&apos; flag to the underlying codecs.open call so that I can handle the malformed Windows log files.
&gt; &gt;
&gt; 
&gt; Ick. Can you read the file as a straight binary file (using read_binary_file)? I&apos;m guessing python might be okay with that.

You are right.  I used that with a combination of &apos;decode&apos; to get what I wanted. 
 
&gt; &gt; I could modify the existing read_text_file to add an optional error-handling argument.  Would that be okay?
&gt; 
&gt; I&apos;d prefer not to if there&apos;s any way around it.

I no longer need the change; I&apos;ve backed it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896719</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-03 21:02:05 -0700</bug_when>
    <thetext>Committed r151151: &lt;http://trac.webkit.org/changeset/151151&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896936</commentid>
    <comment_count>20</comment_count>
      <attachid>203648</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-06-04 09:53:59 -0700</bug_when>
    <thetext>Comment on attachment 203648
Patch

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

You missed a couple of things. Can you file a follow-up bug/patch?

&gt; Tools/Scripts/webkitpy/common/system/crashlogs.py:40
&gt; +    def find_newest_log(self, process_name, pid=None, include_errors=False, newer_than=None, port=None):

You didn&apos;t address the comment I had about passing in results_directory instead of the port (or moving the port to the __init__ call)

&gt; Tools/Scripts/webkitpy/common/system/executive.py:278
&gt; +        if sys.platform in (&quot;cygwin&quot;):

this makes win32 take the else branch, which is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897040</commentid>
    <comment_count>21</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-04 14:31:27 -0700</bug_when>
    <thetext>Reopening to address dpranke&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897058</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-06-04 15:14:13 -0700</bug_when>
    <thetext>Moved corrections to Bug 117212.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203616</attachid>
            <date>2013-06-03 11:38:02 -0700</date>
            <delta_ts>2013-06-03 12:20:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117098-20130603113641.patch</filename>
            <type>text/plain</type>
            <size>13054</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1MTExOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMxIEBACisyMDEzLTA2LTAzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgorCisgICAgICAgIFtXaW5kb3dzXSBOUldUIGlzIG5vdCBwdXR0aW5nIGNyYXNoIGxvZ3MgaW4g
cHJvcGVyIHBsYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTcwOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQcm92aWRlIHdpbmRvd3Mtc3BlY2lmaWMgb3ZlcmxvYWRzIGZvciB2YXJpb3VzIFBvcnQg
ZmVhdHVyZXMgbmVlZGVkIHRvIGNyZWF0ZSBhbmQgY2FwdHVyZQorICAgICAgICBjcmFzaCBsb2dz
LiAgVGhpcyBjaGFuZ2UgbWFrZXMgaXQgcG9zc2libGUgdG8gdmlldyBjcmFzaCBsb2dzICh3aGVu
IGNyZWF0ZWQpIGFzIHBhcnQgb2YgdGhlCisgICAgICAgIHN1bW1hcnkgcmVwb3J0IGF0IHRoZSBl
bmQgb2YgdGhlIE5SV1QgcnVuLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2NyYXNobG9ncy5weToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cp
OiBBZGQgc3VwcG9ydCBmb3Igd2luMzIgY3Jhc2ggbG9ncworICAgICAgICAoQ3Jhc2hMb2dzLl9m
aW5kX25ld2VzdF9sb2dfd2luKTogQWRkZWQKKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdl
c3RfbG9nX3dpbi5pc19jcmFzaF9sb2cpOiBBZGRlZAorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHk6CisgICAgICAgIChFeGVjdXRpdmUucnVubmlu
Z19waWRzKTogQWRkIHN1cHBvcnQgZm9yIEN5Z3dpbiB3aW4zMiBjcmFzaCBsb2dzCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LmZpbmRfc3lz
dGVtX3BpZCk6IEFkZGVkCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9w
cm9jZXNzLnB5OgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3RhcnQpOiBHYXRoZXIgd2luZG93
cyBQSURzIHRvIG1hdGNoIHVwIHdpdGggQ3lnd2luIFBJRHMKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9ydC5zZXR1cF9jcmFzaF9sb2dfc2F2
aW5nKTogRG9uJ3Qgb3BlbiB3aW5kb3dzIHNoZWxsICh3aGljaCBtaWdodCBnZXQgc3R1Y2sgd2Fp
dGluZworICAgICAgICBmb3IgdXNlciB0byBoaXQgZW50ZXIuCisgICAgICAgIChXaW5Qb3J0Ll9n
ZXRfY3Jhc2hfbG9nKTogQWRkZWQKKyAgICAgICAgKFdpblBvcnQubG9va19mb3JfbmV3X2NyYXNo
X2xvZ3MpOiBBZGRlZAorICAgICAgICAoV2luUG9ydC5maW5kX3N5c3RlbV9waWQpOiBBZGRlZAor
CiAyMDEzLTA2LTAzICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTUxMTA5LgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CShyZXZpc2lv
biAxNTEwMTYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQog
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogCitpbXBvcnQgY29kZWNzCiBpbXBvcnQgcmUKIAogCkBAIC0zMyw5ICsz
NCwxMSBAQCBjbGFzcyBDcmFzaExvZ3Mob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwg
aG9zdCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAKLSAgICBkZWYgZmluZF9uZXdlc3Rf
bG9nKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkPU5vbmUsIGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBu
ZXdlcl90aGFuPU5vbmUpOgorICAgIGRlZiBmaW5kX25ld2VzdF9sb2coc2VsZiwgcHJvY2Vzc19u
YW1lLCBwaWQ9Tm9uZSwgaW5jbHVkZV9lcnJvcnM9RmFsc2UsIG5ld2VyX3RoYW49Tm9uZSwgcG9y
dD1Ob25lKToKICAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfZGFyd2luKHByb2Nlc3NfbmFtZSwg
cGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKKyAgICAgICAgZWxpZiBzZWxmLl9ob3N0
LnBsYXRmb3JtLmlzX3dpbigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3ZXN0
X2xvZ193aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuLCBw
b3J0KQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9sb2dfZGlyZWN0b3J5X2Rhcndp
bihzZWxmKToKQEAgLTcxLDQgKzc0LDQyIEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgogCiAg
ICAgICAgIGlmIGluY2x1ZGVfZXJyb3JzIGFuZCBlcnJvcnM6CiAgICAgICAgICAgICByZXR1cm4g
ZXJyb3JzCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xvZ193
aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFuLCBw
b3J0KToKKyAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUpOgor
ICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgoIkNyYXNoTG9nIikKKworICAg
ICAgICBsb2dfZGlyZWN0b3J5ID0gcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpCisgICAgICAgIGxv
Z3MgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIobG9nX2RpcmVjdG9yeSwgZmls
ZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQorICAgICAgICBwaWRfbGluZV9yZWdleCA9IHJlLmNvbXBp
bGUoJ1xzK0dsb2JhbFxzK1BJRDpccytcWyg/UDxwaWQ+XGQrKVxdJykKKyAgICAgICAgZXJyb3Jz
ID0gJycKKyAgICAgICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3MpKToKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3ZXJfdGhhbiBvciBzZWxmLl9o
b3N0LmZpbGVzeXN0ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90aGFuOgorICAgICAgICAgICAgICAg
ICAgICAjIG50c2QuZXhlIGR1bXAgZmlsZXMgZW1iZWQgbm9uLXV0ZjggY2hhcmFjdGVycyAoc3Bl
Y2lmaWNhbGx5LCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyByZWdpc3RlcmVkIG1hcmsgKFIp
IHN5bWJvbCwgd2hpY2ggY2F1c2VzIHRoZSBub3JtYWwgcmVhZF90ZXh0X2ZpbGUKKyAgICAgICAg
ICAgICAgICAgICAgIyBtZXRob2QgdG8gZmFpbC4gIFNvIGRvIHRoZSByZWFkIG1hbnVhbGx5Ogor
ICAgICAgICAgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsICdyJywgJ3V0ZjgnLCAn
aWdub3JlJykgYXMgZmY6CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gZmYucmVhZCgpCisg
ICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcGlkX2xpbmVfcmVnZXguc2VhcmNoKGYpCisgICAg
ICAgICAgICAgICAgICAgIGlmIG1hdGNoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBpZiAoaW50KG1hdGNoLmdyb3VwKCdwaWQn
KSkgPT0gcGlkKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcnMgKyBmCisg
ICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBwcmludCAiSU9F
cnJvciAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAgICAgICBpZiBpbmNsdWRlX2Vycm9yczoKKyAg
ICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJFUlJPUjogRmFpbGVkIHRvIHJlYWQgJyVzJzog
JXNcbiIgJSAocGF0aCwgc3RyKGUpKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Cisg
ICAgICAgICAgICAgICAgcHJpbnQgIk9TRXJyb3IgJXMiICUgc3RyKGUpCisgICAgICAgICAgICAg
ICAgaWYgaW5jbHVkZV9lcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyArPSAiRVJS
T1I6IEZhaWxlZCB0byByZWFkICclcyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcHJpbnQg
IlVuaWNvZGVEZWNvZGVFcnJvciAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAgICAgICBpZiBpbmNs
dWRlX2Vycm9yczoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJFUlJPUjogRmFpbGVk
IHRvIGRlY29kZSAnJXMnIGFzIHV0Zjg6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKKworICAgICAg
ICBpZiBpbmNsdWRlX2Vycm9ycyBhbmQgZXJyb3JzOgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
cwogICAgICAgICByZXR1cm4gTm9uZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShyZXZpc2lvbiAxNTEwMTYpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0yNzMsMjAgKzI3MywyOSBAQCBjbGFzcyBFeGVjdXRpdmUob2JqZWN0KToKICAgICAg
ICAgcnVubmluZ19waWRzID0gW10KIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCJ3aW4z
MiIsICJjeWd3aW4iKToKLSAgICAgICAgICAgICMgRklYTUU6IHJ1bm5pbmdfcGlkcyBpc24ndCBp
bXBsZW1lbnRlZCBvbiBXaW5kb3dzIHlldC4uLgotICAgICAgICAgICAgcmV0dXJuIFtdCi0KLSAg
ICAgICAgcHNfcHJvY2VzcyA9IHNlbGYucG9wZW4oWydwcycsICctZW8nLCAncGlkLGNvbW0nXSwg
c3Rkb3V0PXNlbGYuUElQRSwgc3RkZXJyPXNlbGYuUElQRSkKLSAgICAgICAgc3Rkb3V0LCBfID0g
cHNfcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCi0gICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxp
dGxpbmVzKCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBJbiBzb21lIGNh
c2VzIHRoZSBsaW5lIGNhbiBjb250YWluIG9uZSBvciBtb3JlCi0gICAgICAgICAgICAgICAgIyBs
ZWFkaW5nIHdoaXRlLXNwYWNlcywgc28gc3RyaXAgaXQgYmVmb3JlIHNwbGl0LgotICAgICAgICAg
ICAgICAgIHBpZCwgcHJvY2Vzc19uYW1lID0gbGluZS5zdHJpcCgpLnNwbGl0KCcgJywgMSkKLSAg
ICAgICAgICAgICAgICBpZiBwcm9jZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6Ci0gICAg
ICAgICAgICAgICAgICAgIHJ1bm5pbmdfcGlkcy5hcHBlbmQoaW50KHBpZCkpCi0gICAgICAgICAg
ICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAg
ICBwaWRfdG9fc3lzX3BpZCA9IHt9CisgICAgICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5ydW5f
Y29tbWFuZChbJ3BzJywgJy1lJ10sIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJv
cikKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHBzX3Byb2Nlc3Muc3BsaXRsaW5lcygpOgorICAg
ICAgICAgICAgICAgIHRva2VucyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwaWQsIHBwaWQsIHBnaWQsIHdpbnBpZCwgdHR5
LCB1aWQsIHN0aW1lLCBwcm9jZXNzX25hbWUgPSB0b2tlbnMKKyAgICAgICAgICAgICAgICAgICAg
aWYgcHJvY2Vzc19uYW1lX2ZpbHRlcihwcm9jZXNzX25hbWUpOgorICAgICAgICAgICAgICAgICAg
ICAgICAgcnVubmluZ19waWRzLmFwcGVuZChpbnQocGlkKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBpZF90b19zeXNfcGlkW2ludChwaWQpXSA9IGludCh3aW5waWQpCisgICAgICAgICAgICAg
ICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHBzX3Byb2Nlc3MgPSBzZWxmLnBvcGVuKFsncHMnLCAnLWVv
JywgJ3BpZCxjb21tJ10sIHN0ZG91dD1zZWxmLlBJUEUsIHN0ZGVycj1zZWxmLlBJUEUpCisgICAg
ICAgICAgICBzdGRvdXQsIF8gPSBwc19wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAg
IGZvciBsaW5lIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgICAgICAjIEluIHNvbWUgY2FzZXMgdGhlIGxpbmUgY2FuIGNvbnRhaW4g
b25lIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAgIyBsZWFkaW5nIHdoaXRlLXNwYWNlcywg
c28gc3RyaXAgaXQgYmVmb3JlIHNwbGl0LgorICAgICAgICAgICAgICAgICAgICBwaWQsIHByb2Nl
c3NfbmFtZSA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnICcsIDEpCisgICAgICAgICAgICAgICAgICAg
IGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19uYW1lKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJ1bm5pbmdfcGlkcy5hcHBlbmQoaW50KHBpZCkpCisgICAgICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBy
ZXR1cm4gc29ydGVkKHJ1bm5pbmdfcGlkcykKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkJKHJldmlzaW9uIDE1MTAxNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzUwLDYgKzEzNTAsMTAgQEAgY2xhc3MgUG9y
dChvYmplY3QpOgogICAgIGRlZiB2aXJ0dWFsX3Rlc3Rfc3VpdGVzKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gW10KIAorICAgIGRlZiBmaW5kX3N5c3RlbV9waWQoc2VsZiwgbmFtZSwgcGlkKToKKyAg
ICAgICAgIyBUaGlzIGlzIG9ubHkgb3ZlcnJpZGRlbiBvbiBXaW5kb3dzCisgICAgICAgIHJldHVy
biBwaWQKKwogICAgIEBtZW1vaXplZAogICAgIGRlZiBwb3B1bGF0ZWRfdmlydHVhbF90ZXN0X3N1
aXRlcyhzZWxmKToKICAgICAgICAgc3VpdGVzID0gc2VsZi52aXJ0dWFsX3Rlc3Rfc3VpdGVzKCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJ
KHJldmlzaW9uIDE1MTAxNikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEyMyw4IEBAIGNsYXNzIFNlcnZl
clByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRlcnIuZmls
ZW5vKCkKICAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCiAg
ICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJM
T0NLKQorICAgICAgICBpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX3dpbigpOgorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCksIHNlbGYuX3BpZCkKIAog
ICAgIGRlZiBfaGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKICAgICAgICAgIiIiVGhp
cyByb3V0aW5lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC93aW4ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkocmV2aXNpb24gMTUxMDIzKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsOSBAQCBpbXBvcnQgb3MKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgcmUKIGltcG9ydCBz
eXMKK2ltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3Mg
aW1wb3J0IENyYXNoTG9ncwogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Qg
aW1wb3J0IFN5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUg
aW1wb3J0IFNjcmlwdEVycm9yLCBFeGVjdXRpdmUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5wYXRoIGltcG9ydCBhYnNwYXRoX3RvX3VyaSwgY3lncGF0aApAQCAtMjAwLDcgKzIwMiw3IEBA
IGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgY29tbWFuZF9maWxlID0gc2VsZi5j
cmVhdGVfZGVidWdnZXJfY29tbWFuZF9maWxlKCkKICAgICAgICAgaWYgbm90IGNvbW1hbmRfZmls
ZToKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGRlYnVnZ2VyX29wdGlvbnMgPSAn
InswfSIgLXAgJWxkIC1lICVsZCAtZyAtbGluZXMgLWNmICJ7MX0iJy5mb3JtYXQoY3lncGF0aChu
dHNkX3BhdGgpLCBjeWdwYXRoKGNvbW1hbmRfZmlsZSkpCisgICAgICAgIGRlYnVnZ2VyX29wdGlv
bnMgPSAnInswfSIgLXAgJWxkIC1lICVsZCAtZyAtbm9pbyAtbGluZXMgLWNmICJ7MX0iJy5mb3Jt
YXQoY3lncGF0aChudHNkX3BhdGgpLCBjeWdwYXRoKGNvbW1hbmRfZmlsZSkpCiAgICAgICAgIHJl
Z2lzdHJ5X3NldHRpbmdzID0geydEZWJ1Z2dlcic6IGRlYnVnZ2VyX29wdGlvbnMsICdBdXRvJzog
IjEifQogICAgICAgICBmb3Iga2V5IGluIHJlZ2lzdHJ5X3NldHRpbmdzOgogICAgICAgICAgICAg
c2VsZi5wcmV2aW91c19kZWJ1Z2dlcl92YWx1ZXNba2V5XSA9IHNlbGYucmVhZF9yZWdpc3RyeV9z
dHJpbmcoa2V5KQpAQCAtMjE4LDMgKzIyMCw3MCBAQCBjbGFzcyBXaW5Qb3J0KEFwcGxlUG9ydCk6
CiAgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgogICAgICAgICBzZWxmLnJlc3RvcmVf
Y3Jhc2hfbG9nX3NhdmluZygpCiAgICAgICAgIHN1cGVyKFdpblBvcnQsIHNlbGYpLmNsZWFuX3Vw
X3Rlc3RfcnVuKCkKKworICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0
ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPU5vbmUsIHNsZWVwX2ZuPU5vbmUsIHdh
aXRfZm9yX2xvZz1UcnVlKToKKyAgICAgICAgIyBOb3RlIHRoYXQgd2UgZG8gc2xvdy1zcGluIGhl
cmUgYW5kIHdhaXQsIHNpbmNlIGl0IGFwcGVhcnMgdGhlIHRpbWUKKyAgICAgICAgIyBSZXBvcnRD
cmFzaCB0YWtlcyB0byBhY3R1YWxseSB3cml0ZSBhbmQgZmx1c2ggdGhlIGZpbGUgdmFyaWVzIHdo
ZW4gdGhlcmUgYXJlCisgICAgICAgICMgbG90cyBvZiBzaW11bHRhbmVvdXMgY3Jhc2hlcyBnb2lu
ZyBvbi4KKyAgICAgICAgIyBGSVhNRTogU2hvdWxkIG1vc3Qgb2YgdGhpcyBiZSBtb3ZlZCBpbnRv
IENyYXNoTG9ncygpPworICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKKyAg
ICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCisgICAgICAgIGNyYXNoX2xv
ZyA9ICcnCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQorICAgICAg
ICBub3cgPSB0aW1lX2ZuKCkKKyAgICAgICAgIyBGSVhNRTogZGVsZXRlIHRoaXMgYWZ0ZXIgd2Un
cmUgc3VyZSB0aGlzIGNvZGUgaXMgd29ya2luZyAuLi4KKyAgICAgICAgX2xvZy5kZWJ1ZygnbG9v
a2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQorICAgICAg
ICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNz
ZXMnLCAxKSkKKyAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5l
OgorICAgICAgICAgICAgIyBJZiB0aGUgd2luX3BpZCBoYXNuJ3QgYmVlbiBkZXRlcm1pbmVkIHll
dCwganVzdCB0cnkgd2l0aCB0aGUgcGFzc2VkIGluIHBpZC4gIFdlJ2xsIGJlIGNoZWNraW5nIGFn
YWluIGxhdGVyCisgICAgICAgICAgICB3aW5waWQgPSBzZWxmLl9leGVjdXRpdmUucGlkX3RvX3N5
c19waWQuZ2V0KHBpZCkKKyAgICAgICAgICAgIGlmIHdpbnBpZCA9PSBOb25lOgorICAgICAgICAg
ICAgICAgIGJyZWFrICAjIFdlIGhhdmVuJ3QgbWFwcGVkIGN5Z3dpbiBwaWQtPndpbiBwaWQgeWV0
CisgICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1l
LCB3aW5waWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbiwgcG9y
dD1zZWxmKQorICAgICAgICAgICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxp
bmUgaW4gY3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBpZiBsaW5lLnN0YXJ0c3dpdGgoJ3F1aXQ6Jyld
OgorICAgICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKKyAgICAgICAgICAgICAgICBub3cgPSB0
aW1lX2ZuKCkKKworICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgorICAgICAgICAgICAgcmV0dXJu
IChzdGRlcnIsIE5vbmUpCisgICAgICAgIHJldHVybiAoc3RkZXJyLCBjcmFzaF9sb2cpCisKKyAg
ICBkZWYgbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZiwgY3Jhc2hlZF9wcm9jZXNzZXMsIHN0
YXJ0X3RpbWUpOgorICAgICAgICAiIiJTaW5jZSBjcmFzaCBsb2dzIGNhbiB0YWtlIGEgbG9uZyB0
aW1lIHRvIGJlIHdyaXR0ZW4gb3V0IGlmIHRoZSBzeXN0ZW0gaXMKKyAgICAgICAgICAgdW5kZXIg
c3RyZXNzIGRvIGEgc2Vjb25kIHBhc3MgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCisKKyAg
ICAgICAgICAgY3Jhc2hlczogdGVzdF9uYW1lIC0+IHBpZCwgcHJvY2Vzc19uYW1lIHR1cGxlIG9m
IGNyYXNoZWQgcHJvY2VzcworICAgICAgICAgICBzdGFydF90aW1lOiB0aW1lIHRoZSB0ZXN0cyBz
dGFydGVkIGF0LiAgV2UncmUgbG9va2luZyBmb3IgY3Jhc2gKKyAgICAgICAgICAgICAgIGxvZ3Mg
YWZ0ZXIgdGhhdCB0aW1lLgorICAgICAgICAiIiIKKyAgICAgICAgY3Jhc2hfbG9ncyA9IHt9Cisg
ICAgICAgIGZvciAodGVzdF9uYW1lLCBwcm9jZXNzX25hbWUsIHBpZCkgaW4gY3Jhc2hlZF9wcm9j
ZXNzZXM6CisgICAgICAgICAgICAjIFBhc3NpbmcgTm9uZSBmb3Igb3V0cHV0LiAgVGhpcyBpcyBh
IHNlY29uZCBwYXNzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVkIHNvCisgICAgICAgICAgICAjIGlm
IHRoZSBvdXRwdXQgaGFkIGFueSBsb2dnaW5nIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjb2xsZWN0
ZWQgaXQuCisgICAgICAgICAgICBjcmFzaF9sb2cgPSBzZWxmLl9nZXRfY3Jhc2hfbG9nKHByb2Nl
c3NfbmFtZSwgcGlkLCBOb25lLCBOb25lLCBzdGFydF90aW1lLCB3YWl0X2Zvcl9sb2c9RmFsc2Up
WzFdCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBjcmFzaF9sb2cKKyAgICAg
ICAgcmV0dXJuIGNyYXNoX2xvZ3MKKworICAgIGRlZiBmaW5kX3N5c3RlbV9waWQoc2VsZiwgbmFt
ZSwgcGlkKToKKyAgICAgICAgc2VsZi53aW5fcGlkID0gaW50KHBpZCkKKyAgICAgICAgIyBXaW5k
b3dzIGFuZCBDeWd3aW4gUElEcyBhcmUgbm90IHRoZSBzYW1lLiAgV2UgbmVlZCB0byBmaW5kIHRo
ZSBXaW5kb3dzCisgICAgICAgICMgUElEIGZvciBvdXIgQ3lnd2luIHByb2Nlc3Mgc28gd2UgY2Fu
IG1hdGNoIGl0IGxhdGVyIHRvIGFueSBjcmFzaAorICAgICAgICAjIGZpbGVzIHdlIGVuZCB1cCBj
cmVhdGluZyAod2hpY2ggd2lsbCBiZSB0YWdnZWQgd2l0aCB0aGUgV2luZG93cyBQSUQpCisgICAg
ICAgIHBzX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWydwcycsICctZSdd
LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpCisgICAgICAgIGZvciBsaW5l
IGluIHBzX3Byb2Nlc3Muc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgdG9rZW5zID0gbGluZS5z
dHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjcGlkLCBw
cGlkLCBwZ2lkLCB3aW5waWQsIHR0eSwgdWlkLCBzdGltZSwgcHJvY2Vzc19uYW1lID0gdG9rZW5z
CisgICAgICAgICAgICAgICAgaWYgcHJvY2Vzc19uYW1lLmVuZHN3aXRoKG5hbWUpOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucGlkX3RvX3N5c19waWRbaW50KGNwaWQpXSA9
IGludCh3aW5waWQpCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnQocGlkKSA9PSBpbnQoY3Bp
ZCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53aW5fcGlkID0gaW50KHdpbnBpZCkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9y
LCBlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gc2VsZi53aW5fcGlk
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203618</attachid>
            <date>2013-06-03 12:20:25 -0700</date>
            <delta_ts>2013-06-03 17:27:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117098-20130603121904.patch</filename>
            <type>text/plain</type>
            <size>13253</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1MTEyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMxIEBACisyMDEzLTA2LTAzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgorCisgICAgICAgIFtXaW5kb3dzXSBOUldUIGlzIG5vdCBwdXR0aW5nIGNyYXNoIGxvZ3MgaW4g
cHJvcGVyIHBsYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTcwOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQcm92aWRlIHdpbmRvd3Mtc3BlY2lmaWMgb3ZlcmxvYWRzIGZvciB2YXJpb3VzIFBvcnQg
ZmVhdHVyZXMgbmVlZGVkIHRvIGNyZWF0ZSBhbmQgY2FwdHVyZQorICAgICAgICBjcmFzaCBsb2dz
LiAgVGhpcyBjaGFuZ2UgbWFrZXMgaXQgcG9zc2libGUgdG8gdmlldyBjcmFzaCBsb2dzICh3aGVu
IGNyZWF0ZWQpIGFzIHBhcnQgb2YgdGhlCisgICAgICAgIHN1bW1hcnkgcmVwb3J0IGF0IHRoZSBl
bmQgb2YgdGhlIE5SV1QgcnVuLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2NyYXNobG9ncy5weToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cp
OiBBZGQgc3VwcG9ydCBmb3Igd2luMzIgY3Jhc2ggbG9ncworICAgICAgICAoQ3Jhc2hMb2dzLl9m
aW5kX25ld2VzdF9sb2dfd2luKTogQWRkZWQKKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdl
c3RfbG9nX3dpbi5pc19jcmFzaF9sb2cpOiBBZGRlZAorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHk6CisgICAgICAgIChFeGVjdXRpdmUucnVubmlu
Z19waWRzKTogQWRkIHN1cHBvcnQgZm9yIEN5Z3dpbiB3aW4zMiBjcmFzaCBsb2dzCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LmZpbmRfc3lz
dGVtX3BpZCk6IEFkZGVkCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9w
cm9jZXNzLnB5OgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3RhcnQpOiBHYXRoZXIgd2luZG93
cyBQSURzIHRvIG1hdGNoIHVwIHdpdGggQ3lnd2luIFBJRHMKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9ydC5zZXR1cF9jcmFzaF9sb2dfc2F2
aW5nKTogRG9uJ3Qgb3BlbiB3aW5kb3dzIHNoZWxsICh3aGljaCBtaWdodCBnZXQgc3R1Y2sgd2Fp
dGluZworICAgICAgICBmb3IgdXNlciB0byBoaXQgZW50ZXIuCisgICAgICAgIChXaW5Qb3J0Ll9n
ZXRfY3Jhc2hfbG9nKTogQWRkZWQKKyAgICAgICAgKFdpblBvcnQubG9va19mb3JfbmV3X2NyYXNo
X2xvZ3MpOiBBZGRlZAorICAgICAgICAoV2luUG9ydC5maW5kX3N5c3RlbV9waWQpOiBBZGRlZAor
CiAyMDEzLTA2LTAzICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTUxMTA5LgpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CShyZXZpc2lv
biAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMjIgQEAKICMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBjb2RlY3MKIGltcG9ydCByZQogCiAKIGNsYXNzIENy
YXNoTG9ncyhvYmplY3QpOgorCisgICAgUElEX0xJTkVfUkVHRVggPSByZS5jb21waWxlKCdccytH
bG9iYWxccytQSUQ6XHMrXFsoP1A8cGlkPlxkKylcXScpCisKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgaG9zdCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAKLSAgICBkZWYgZmluZF9uZXdl
c3RfbG9nKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkPU5vbmUsIGluY2x1ZGVfZXJyb3JzPUZhbHNl
LCBuZXdlcl90aGFuPU5vbmUpOgorICAgIGRlZiBmaW5kX25ld2VzdF9sb2coc2VsZiwgcHJvY2Vz
c19uYW1lLCBwaWQ9Tm9uZSwgaW5jbHVkZV9lcnJvcnM9RmFsc2UsIG5ld2VyX3RoYW49Tm9uZSwg
cG9ydD1Ob25lKToKICAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc19tYWMoKToKICAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfZGFyd2luKHByb2Nlc3NfbmFt
ZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKKyAgICAgICAgZWxpZiBzZWxmLl9o
b3N0LnBsYXRmb3JtLmlzX3dpbigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbmV3
ZXN0X2xvZ193aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFu
LCBwb3J0KQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9sb2dfZGlyZWN0b3J5X2Rh
cndpbihzZWxmKToKQEAgLTcxLDQgKzc3LDQwIEBAIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgog
CiAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3JzIGFuZCBlcnJvcnM6CiAgICAgICAgICAgICByZXR1
cm4gZXJyb3JzCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX2ZpbmRfbmV3ZXN0X2xv
Z193aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzLCBuZXdlcl90aGFu
LCBwb3J0KToKKyAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGlycGF0aCwgYmFzZW5hbWUp
OgorICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgoIkNyYXNoTG9nIikKKwor
ICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHBvcnQucmVz
dWx0c19kaXJlY3RvcnkoKSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9nKQorICAgICAgICBlcnJv
cnMgPSAnJworICAgICAgICBmb3IgcGF0aCBpbiByZXZlcnNlZChzb3J0ZWQobG9ncykpOgorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdlcl90aGFuIG9yIHNlbGYu
X2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46CisgICAgICAgICAgICAg
ICAgICAgICMgbnRzZC5leGUgZHVtcCBmaWxlcyBlbWJlZCBub24tdXRmOCBjaGFyYWN0ZXJzIChz
cGVjaWZpY2FsbHksIHRoZQorICAgICAgICAgICAgICAgICAgICAjIHJlZ2lzdGVyZWQgbWFyayAo
Uikgc3ltYm9sKSwgd2hpY2ggY2F1c2VzIHRoZSBub3JtYWwgcmVhZF90ZXh0X2ZpbGUKKyAgICAg
ICAgICAgICAgICAgICAgIyBtZXRob2QgdG8gZmFpbC4gIFNvIGRvIHRoZSByZWFkIG1hbnVhbGx5
OgorICAgICAgICAgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsICdyJywgJ3V0Zjgn
LCAnaWdub3JlJykgYXMgZmY6CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gZmYucmVhZCgp
CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5QSURfTElORV9SRUdFWC5zZWFyY2go
ZikKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGludChtYXRjaC5ncm91
cCgncGlkJykpID09IHBpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcnMg
KyBmCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBwcmlu
dCAiSU9FcnJvciAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAgICAgICBpZiBpbmNsdWRlX2Vycm9y
czoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJFUlJPUjogRmFpbGVkIHRvIHJlYWQg
JyVzJzogJXNcbiIgJSAocGF0aCwgc3RyKGUpKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3Is
IGU6CisgICAgICAgICAgICAgICAgcHJpbnQgIk9TRXJyb3IgJXMiICUgc3RyKGUpCisgICAgICAg
ICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyAr
PSAiRVJST1I6IEZhaWxlZCB0byByZWFkICclcyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKKyAg
ICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAg
cHJpbnQgIlVuaWNvZGVEZWNvZGVFcnJvciAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAgICAgICBp
ZiBpbmNsdWRlX2Vycm9yczoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJFUlJPUjog
RmFpbGVkIHRvIGRlY29kZSAnJXMnIGFzIHV0Zjg6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKKwor
ICAgICAgICBpZiBpbmNsdWRlX2Vycm9ycyBhbmQgZXJyb3JzOgorICAgICAgICAgICAgcmV0dXJu
IGVycm9ycwogICAgICAgICByZXR1cm4gTm9uZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShyZXZpc2lvbiAxNTExMjEpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC04NCw2ICs4NCw5IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogICAg
IFBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKICAgICBTVERPVVQgPSBzdWJwcm9jZXNzLlNURE9VVAog
CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnBpZF90b19zeXN0ZW1fcGlk
ID0ge30KKwogICAgIGRlZiBfc2hvdWxkX2Nsb3NlX2ZkcyhzZWxmKToKICAgICAgICAgIyBXZSBu
ZWVkIHRvIHBhc3MgY2xvc2VfZmRzPVRydWUgdG8gd29yayBhcm91bmQgUHl0aG9uIGJ1ZyAjMjMy
MAogICAgICAgICAjIChvdGhlcndpc2Ugd2UgY2FuIGhhbmcgd2hlbiB3ZSBraWxsIER1bXBSZW5k
ZXJUcmVlIHdoZW4gd2UgYXJlIHJ1bm5pbmcKQEAgLTI3MywyMCArMjc2LDI4IEBAIGNsYXNzIEV4
ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICBydW5uaW5nX3BpZHMgPSBbXQogCiAgICAgICAgIGlm
IHN5cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwgImN5Z3dpbiIpOgotICAgICAgICAgICAgIyBGSVhN
RTogcnVubmluZ19waWRzIGlzbid0IGltcGxlbWVudGVkIG9uIFdpbmRvd3MgeWV0Li4uCi0gICAg
ICAgICAgICByZXR1cm4gW10KLQotICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5wb3BlbihbJ3Bz
JywgJy1lbycsICdwaWQsY29tbSddLCBzdGRvdXQ9c2VsZi5QSVBFLCBzdGRlcnI9c2VsZi5QSVBF
KQotICAgICAgICBzdGRvdXQsIF8gPSBwc19wcm9jZXNzLmNvbW11bmljYXRlKCkKLSAgICAgICAg
Zm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICAjIEluIHNvbWUgY2FzZXMgdGhlIGxpbmUgY2FuIGNvbnRhaW4gb25lIG9yIG1v
cmUKLSAgICAgICAgICAgICAgICAjIGxlYWRpbmcgd2hpdGUtc3BhY2VzLCBzbyBzdHJpcCBpdCBi
ZWZvcmUgc3BsaXQuCi0gICAgICAgICAgICAgICAgcGlkLCBwcm9jZXNzX25hbWUgPSBsaW5lLnN0
cmlwKCkuc3BsaXQoJyAnLCAxKQotICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0
ZXIocHJvY2Vzc19uYW1lKToKLSAgICAgICAgICAgICAgICAgICAgcnVubmluZ19waWRzLmFwcGVu
ZChpbnQocGlkKSkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgotICAgICAgICAg
ICAgICAgIHBhc3MKKyAgICAgICAgICAgIHBzX3Byb2Nlc3MgPSBzZWxmLnJ1bl9jb21tYW5kKFsn
cHMnLCAnLWUnXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKQorICAgICAg
ICAgICAgZm9yIGxpbmUgaW4gcHNfcHJvY2Vzcy5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICAg
ICAgdG9rZW5zID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAgICAgICAgIHBpZCwgcHBpZCwgcGdpZCwgd2lucGlkLCB0dHksIHVpZCwgc3Rp
bWUsIHByb2Nlc3NfbmFtZSA9IHRva2VucworICAgICAgICAgICAgICAgICAgICBpZiBwcm9jZXNz
X25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBydW5u
aW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5w
aWRfdG9fc3lzdGVtX3BpZFtpbnQocGlkKV0gPSBpbnQod2lucGlkKQorICAgICAgICAgICAgICAg
IGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5wb3BlbihbJ3BzJywgJy1lbycs
ICdwaWQsY29tbSddLCBzdGRvdXQ9c2VsZi5QSVBFLCBzdGRlcnI9c2VsZi5QSVBFKQorICAgICAg
ICAgICAgc3Rkb3V0LCBfID0gcHNfcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBm
b3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICAgICAgIyBJbiBzb21lIGNhc2VzIHRoZSBsaW5lIGNhbiBjb250YWluIG9u
ZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICMgbGVhZGluZyB3aGl0ZS1zcGFjZXMsIHNv
IHN0cmlwIGl0IGJlZm9yZSBzcGxpdC4KKyAgICAgICAgICAgICAgICAgICAgcGlkLCBwcm9jZXNz
X25hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJyAnLCAxKQorICAgICAgICAgICAgICAgICAgICBp
ZiBwcm9jZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBydW5uaW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQorICAgICAgICAgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgcmV0
dXJuIHNvcnRlZChydW5uaW5nX3BpZHMpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9i
YXNlLnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTM1MCw2ICsxMzUwLDEwIEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICBkZWYgdmlydHVhbF90ZXN0X3N1aXRlcyhzZWxmKToKICAgICAgICAgcmV0
dXJuIFtdCiAKKyAgICBkZWYgZmluZF9zeXN0ZW1fcGlkKHNlbGYsIG5hbWUsIHBpZCk6CisgICAg
ICAgICMgVGhpcyBpcyBvbmx5IG92ZXJyaWRkZW4gb24gV2luZG93cworICAgICAgICByZXR1cm4g
cGlkCisKICAgICBAbWVtb2l6ZWQKICAgICBkZWYgcG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0
ZXMoc2VsZik6CiAgICAgICAgIHN1aXRlcyA9IHNlbGYudmlydHVhbF90ZXN0X3N1aXRlcygpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CShy
ZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3By
b2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBjbGFzcyBTZXJ2ZXJQ
cm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICBlbnY9c2VsZi5fZW52LAogICAgICAgICAgICAg
dW5pdmVyc2FsX25ld2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKICAgICAgICAgc2Vs
Zi5fcGlkID0gc2VsZi5fcHJvYy5waWQKKyAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9w
aWQoc2VsZi5uYW1lKCksIHNlbGYuX3BpZCkKICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91
dC5maWxlbm8oKQogICAgICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CiAgICAgICAg
ICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2luLnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBAIGltcG9y
dCBvcwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUK
IAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dz
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9z
dAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJy
b3IsIEV4ZWN1dGl2ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBhdGggaW1wb3J0IGFi
c3BhdGhfdG9fdXJpLCBjeWdwYXRoCkBAIC0yMDAsNyArMjAyLDcgQEAgY2xhc3MgV2luUG9ydChB
cHBsZVBvcnQpOgogICAgICAgICBjb21tYW5kX2ZpbGUgPSBzZWxmLmNyZWF0ZV9kZWJ1Z2dlcl9j
b21tYW5kX2ZpbGUoKQogICAgICAgICBpZiBub3QgY29tbWFuZF9maWxlOgogICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLSAgICAgICAgZGVidWdnZXJfb3B0aW9ucyA9ICciezB9IiAtcCAlbGQgLWUg
JWxkIC1nIC1saW5lcyAtY2YgInsxfSInLmZvcm1hdChjeWdwYXRoKG50c2RfcGF0aCksIGN5Z3Bh
dGgoY29tbWFuZF9maWxlKSkKKyAgICAgICAgZGVidWdnZXJfb3B0aW9ucyA9ICciezB9IiAtcCAl
bGQgLWUgJWxkIC1nIC1ub2lvIC1saW5lcyAtY2YgInsxfSInLmZvcm1hdChjeWdwYXRoKG50c2Rf
cGF0aCksIGN5Z3BhdGgoY29tbWFuZF9maWxlKSkKICAgICAgICAgcmVnaXN0cnlfc2V0dGluZ3Mg
PSB7J0RlYnVnZ2VyJzogZGVidWdnZXJfb3B0aW9ucywgJ0F1dG8nOiAiMSJ9CiAgICAgICAgIGZv
ciBrZXkgaW4gcmVnaXN0cnlfc2V0dGluZ3M6CiAgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2Rl
YnVnZ2VyX3ZhbHVlc1trZXldID0gc2VsZi5yZWFkX3JlZ2lzdHJ5X3N0cmluZyhrZXkpCkBAIC0y
MTgsMyArMjIwLDY5IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICBkZWYgY2xlYW5f
dXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgIHNlbGYucmVzdG9yZV9jcmFzaF9sb2dfc2F2aW5n
KCkKICAgICAgICAgc3VwZXIoV2luUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQorCisg
ICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUp
OgorICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2lu
Y2UgaXQgYXBwZWFycyB0aGUgdGltZQorICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFj
dHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKKyAg
ICAgICAgIyBsb3RzIG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgorICAgICAgICAj
IEZJWE1FOiBTaG91bGQgbW9zdCBvZiB0aGlzIGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/Cisg
ICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9
IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKKyAgICAgICAgY3Jhc2hfbG9nID0gJycKKyAgICAgICAg
Y3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIG5vdyA9IHRpbWVfZm4o
KQorICAgICAgICAjIEZJWE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29k
ZSBpcyB3b3JraW5nIC4uLgorICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBs
b2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCisgICAgICAgIGRlYWRsaW5lID0gbm93
ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQorICAgICAg
ICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CisgICAgICAgICAgICAj
IElmIHRoZSBzeXN0ZW1fcGlkIGhhc24ndCBiZWVuIGRldGVybWluZWQgeWV0LCBqdXN0IHRyeSB3
aXRoIHRoZSBwYXNzZWQgaW4gcGlkLiAgV2UnbGwgYmUgY2hlY2tpbmcgYWdhaW4gbGF0ZXIKKyAg
ICAgICAgICAgIHN5c3RlbV9waWQgPSBzZWxmLl9leGVjdXRpdmUucGlkX3RvX3N5c3RlbV9waWQu
Z2V0KHBpZCkKKyAgICAgICAgICAgIGlmIHN5c3RlbV9waWQgPT0gTm9uZToKKyAgICAgICAgICAg
ICAgICBicmVhayAgIyBXZSBoYXZlbid0IG1hcHBlZCBjeWd3aW4gcGlkLT53aW4gcGlkIHlldAor
ICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwg
c3lzdGVtX3BpZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuLCBw
b3J0PXNlbGYpCisgICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgorICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3Ig
bGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3RhcnRzd2l0aCgncXVpdDon
KV06CisgICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQorICAgICAgICAgICAgICAgIG5vdyA9
IHRpbWVfZm4oKQorCisgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAgICAgICAgICByZXR1
cm4gKHN0ZGVyciwgTm9uZSkKKyAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNoX2xvZykKKwor
ICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywg
c3RhcnRfdGltZSk6CisgICAgICAgICIiIlNpbmNlIGNyYXNoIGxvZ3MgY2FuIHRha2UgYSBsb25n
IHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQgaWYgdGhlIHN5c3RlbSBpcworICAgICAgICAgICB1bmRl
ciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFzcyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KKwor
ICAgICAgICAgICBjcmFzaGVzOiB0ZXN0X25hbWUgLT4gcGlkLCBwcm9jZXNzX25hbWUgdHVwbGUg
b2YgY3Jhc2hlZCBwcm9jZXNzCisgICAgICAgICAgIHN0YXJ0X3RpbWU6IHRpbWUgdGhlIHRlc3Rz
IHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29raW5nIGZvciBjcmFzaAorICAgICAgICAgICAgICAgbG9n
cyBhZnRlciB0aGF0IHRpbWUuCisgICAgICAgICIiIgorICAgICAgICBjcmFzaF9sb2dzID0ge30K
KyAgICAgICAgZm9yICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVkX3By
b2Nlc3NlczoKKyAgICAgICAgICAgICMgUGFzc2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlzIGlz
IGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28KKyAgICAgICAgICAgICMg
aWYgdGhlIG91dHB1dCBoYWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNvbGxl
Y3RlZCBpdC4KKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2cocHJv
Y2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1GYWxz
ZSlbMV0KKyAgICAgICAgICAgIGlmIGNyYXNoX2xvZzoKKyAgICAgICAgICAgICAgICBjcmFzaF9s
b2dzW3Rlc3RfbmFtZV0gPSBjcmFzaF9sb2cKKyAgICAgICAgcmV0dXJuIGNyYXNoX2xvZ3MKKwor
ICAgIGRlZiBmaW5kX3N5c3RlbV9waWQoc2VsZiwgbmFtZSwgcGlkKToKKyAgICAgICAgc3lzdGVt
X3BpZCA9IGludChwaWQpCisgICAgICAgICMgV2luZG93cyBhbmQgQ3lnd2luIFBJRHMgYXJlIG5v
dCB0aGUgc2FtZS4gIFdlIG5lZWQgdG8gZmluZCB0aGUgV2luZG93cworICAgICAgICAjIFBJRCBm
b3Igb3VyIEN5Z3dpbiBwcm9jZXNzIHNvIHdlIGNhbiBtYXRjaCBpdCBsYXRlciB0byBhbnkgY3Jh
c2gKKyAgICAgICAgIyBmaWxlcyB3ZSBlbmQgdXAgY3JlYXRpbmcgKHdoaWNoIHdpbGwgYmUgdGFn
Z2VkIHdpdGggdGhlIFdpbmRvd3MgUElEKQorICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsncHMnLCAnLWUnXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUu
aWdub3JlX2Vycm9yKQorICAgICAgICBmb3IgbGluZSBpbiBwc19wcm9jZXNzLnNwbGl0bGluZXMo
KToKKyAgICAgICAgICAgIHRva2VucyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgY3BpZCwgcHBpZCwgcGdpZCwgd2lucGlkLCB0dHksIHVp
ZCwgc3RpbWUsIHByb2Nlc3NfbmFtZSA9IHRva2VucworICAgICAgICAgICAgICAgIGlmIHByb2Nl
c3NfbmFtZS5lbmRzd2l0aChuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0
aXZlLnBpZF90b19zeXN0ZW1fcGlkW2ludChjcGlkKV0gPSBpbnQod2lucGlkKQorICAgICAgICAg
ICAgICAgICAgICBpZiBpbnQocGlkKSA9PSBpbnQoY3BpZCk6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzeXN0ZW1fcGlkID0gaW50KHdpbnBpZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsK
KyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHBhc3MK
KworICAgICAgICByZXR1cm4gc3lzdGVtX3BpZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203635</attachid>
            <date>2013-06-03 17:27:42 -0700</date>
            <delta_ts>2013-06-03 20:51:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117098-20130603172619.patch</filename>
            <type>text/plain</type>
            <size>31986</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1MTE0NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ5IEBACisyMDEzLTA2LTAzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgorCisgICAgICAgIFtXaW5kb3dzXSBOUldUIGlzIG5vdCBwdXR0aW5nIGNyYXNoIGxvZ3MgaW4g
cHJvcGVyIHBsYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTcwOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQcm92aWRlIHdpbmRvd3Mtc3BlY2lmaWMgb3ZlcmxvYWRzIGZvciB2YXJpb3VzIFBvcnQg
ZmVhdHVyZXMgbmVlZGVkIHRvIGNyZWF0ZSBhbmQgY2FwdHVyZQorICAgICAgICBjcmFzaCBsb2dz
LiAgVGhpcyBjaGFuZ2UgbWFrZXMgaXQgcG9zc2libGUgdG8gdmlldyBjcmFzaCBsb2dzICh3aGVu
IGNyZWF0ZWQpIGFzIHBhcnQgb2YgdGhlCisgICAgICAgIHN1bW1hcnkgcmVwb3J0IGF0IHRoZSBl
bmQgb2YgdGhlIE5SV1QgcnVuLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2NyYXNobG9ncy5weToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cp
OiBBZGQgc3VwcG9ydCBmb3Igd2luMzIgY3Jhc2ggbG9ncworICAgICAgICAoQ3Jhc2hMb2dzLl9m
aW5kX25ld2VzdF9sb2dfd2luKTogQWRkZWQKKyAgICAgICAgKENyYXNoTG9ncy5fZmluZF9uZXdl
c3RfbG9nX3dpbi5pc19jcmFzaF9sb2cpOiBBZGRlZAorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9jcmFzaGxvZ3NfdW5pdHRlc3QucHk6CisgICAgICAgIChtYWtlX21v
Y2tfY3Jhc2hfcmVwb3J0X3dpbik6IEFkZGVkCisgICAgICAgIChDcmFzaExvZ3NUZXN0LnRlc3Rf
ZmluZF9sb2dfd2luKTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2V4ZWN1dGl2ZS5weToKKyAgICAgICAgKEV4ZWN1dGl2ZS5ydW5uaW5nX3BpZHMpOiBB
ZGQgc3VwcG9ydCBmb3IgQ3lnd2luIHdpbjMyIGNyYXNoIGxvZ3MKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHk6CisgICAgICAgIChNb2Nr
RXhlY3V0aXZlLl9faW5pdF9fKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZmlsZXN5c3RlbS5weToKKyAgICAgICAgKEZpbGVTeXN0ZW0ucmVhZF9iaW5hcnlfZmls
ZSk6IEFkZCBlcnJvciBoYW5kbGVyIGFyZ3VtZW50CisgICAgICAgIChGaWxlU3lzdGVtLndyaXRl
X2JpbmFyeV9maWxlKTogRGl0dG8KKyAgICAgICAgKEZpbGVTeXN0ZW0ucmVhZF90ZXh0X2ZpbGUp
OiBEaXR0bworICAgICAgICAoRmlsZVN5c3RlbS53cml0ZV90ZXh0X2ZpbGUpOiBEaXR0bworICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6
CisgICAgICAgIChNb2NrRmlsZVN5c3RlbS5yZWFkX3RleHRfZmlsZSk6IEFkZCBlcnJvciBoYW5k
bGVyIGFyZ3VtZW50LgorICAgICAgICAoTW9ja0ZpbGVTeXN0ZW0ud3JpdGVfdGV4dF9maWxlKTog
RGl0dG8KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3Rl
bV91bml0dGVzdC5weToKKyAgICAgICAgKFJlYWxGaWxlU3lzdGVtVGVzdC50ZXN0X3JlYWRfYW5k
X3dyaXRlX2ZpbGUpOiBBZGQgdGVzdHMgZm9yCisgICAgICAgIG1hbGZvcm1lZCBhc2NpaS91dGY4
IGhhbmRsaW5nIChpLmUuLCBXaW5kb3dzIGxvZyBmaWxlcykKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuZmluZF9zeXN0ZW1fcGlkKTogQWRk
ZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6Cisg
ICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9zdGFydCk6IEdhdGhlciB3aW5kb3dzIFBJRHMgdG8gbWF0
Y2ggdXAgd2l0aCBDeWd3aW4gUElEcworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93
aW4ucHk6CisgICAgICAgIChXaW5Qb3J0LnNldHVwX2NyYXNoX2xvZ19zYXZpbmcpOiBEb24ndCBv
cGVuIHdpbmRvd3Mgc2hlbGwgKHdoaWNoIG1pZ2h0IGdldCBzdHVjayB3YWl0aW5nCisgICAgICAg
IGZvciB1c2VyIHRvIGhpdCBlbnRlci4KKyAgICAgICAgKFdpblBvcnQuX2dldF9jcmFzaF9sb2cp
OiBBZGRlZAorICAgICAgICAoV2luUG9ydC5sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyk6IEFkZGVk
CisgICAgICAgIChXaW5Qb3J0LmZpbmRfc3lzdGVtX3BpZCk6IEFkZGVkCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3dpbl91bml0dGVzdC5weToKKyAgICAgICAgKFdpblBvcnRUZXN0
LnRlc3RfZ2V0X2NyYXNoX2xvZyk6IEFkZGVkIHRlc3QKKwogMjAxMy0wNi0wMyAgRXJpayB2YW4g
UGllbmJyb2VrICA8ZXBpZW5icm9AZmVkb3JhcHJvamVjdC5vcmc+CiAKICAgICAgICAgW0dUS10g
UmVzcGVjdCBQS0dfQ09ORklHIGVudiB2YXJpYWJsZSB3aGVuIGdlbmVyYXRpbmcgZ3RrLWRvYwpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzLnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMjIgQEAK
ICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBjb2RlY3MKIGltcG9ydCBy
ZQogCiAKIGNsYXNzIENyYXNoTG9ncyhvYmplY3QpOgorCisgICAgUElEX0xJTkVfUkVHRVggPSBy
ZS5jb21waWxlKCdccytHbG9iYWxccytQSUQ6XHMrXFsoP1A8cGlkPlxkKylcXScpCisKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgaG9zdCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAKLSAg
ICBkZWYgZmluZF9uZXdlc3RfbG9nKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkPU5vbmUsIGluY2x1
ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFuPU5vbmUpOgorICAgIGRlZiBmaW5kX25ld2VzdF9s
b2coc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQ9Tm9uZSwgaW5jbHVkZV9lcnJvcnM9RmFsc2UsIG5l
d2VyX3RoYW49Tm9uZSwgcG9ydD1Ob25lKToKICAgICAgICAgaWYgc2VsZi5faG9zdC5wbGF0Zm9y
bS5pc19tYWMoKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maW5kX25ld2VzdF9sb2dfZGFy
d2luKHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3ZXJfdGhhbikKKyAgICAg
ICAgZWxpZiBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX3dpbigpOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbmRfbmV3ZXN0X2xvZ193aW4ocHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJy
b3JzLCBuZXdlcl90aGFuLCBwb3J0KQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9s
b2dfZGlyZWN0b3J5X2RhcndpbihzZWxmKToKQEAgLTcxLDQgKzc3LDM2IEBAIGNsYXNzIENyYXNo
TG9ncyhvYmplY3QpOgogCiAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3JzIGFuZCBlcnJvcnM6CiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3JzCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYg
X2ZpbmRfbmV3ZXN0X2xvZ193aW4oc2VsZiwgcHJvY2Vzc19uYW1lLCBwaWQsIGluY2x1ZGVfZXJy
b3JzLCBuZXdlcl90aGFuLCBwb3J0KToKKyAgICAgICAgZGVmIGlzX2NyYXNoX2xvZyhmcywgZGly
cGF0aCwgYmFzZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGJhc2VuYW1lLnN0YXJ0c3dpdGgo
IkNyYXNoTG9nIikKKworICAgICAgICBsb2dzID0gc2VsZi5faG9zdC5maWxlc3lzdGVtLmZpbGVz
X3VuZGVyKHBvcnQucmVzdWx0c19kaXJlY3RvcnkoKSwgZmlsZV9maWx0ZXI9aXNfY3Jhc2hfbG9n
KQorICAgICAgICBlcnJvcnMgPSAnJworICAgICAgICBmb3IgcGF0aCBpbiByZXZlcnNlZChzb3J0
ZWQobG9ncykpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdl
cl90aGFuIG9yIHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5tdGltZShwYXRoKSA+IG5ld2VyX3RoYW46
CisgICAgICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0
X2ZpbGUocGF0aCwgJ2lnbm9yZScpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5Q
SURfTElORV9SRUdFWC5zZWFyY2goZikKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2ggaXMg
Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAg
ICAgIGlmIGludChtYXRjaC5ncm91cCgncGlkJykpID09IHBpZDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcnMgKyBmCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToK
KyAgICAgICAgICAgICAgICBwcmludCAiSU9FcnJvciAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAg
ICAgICBpZiBpbmNsdWRlX2Vycm9yczoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJF
UlJPUjogRmFpbGVkIHRvIHJlYWQgJyVzJzogJXNcbiIgJSAocGF0aCwgc3RyKGUpKQorICAgICAg
ICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcHJpbnQgIk9TRXJyb3Ig
JXMiICUgc3RyKGUpCisgICAgICAgICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcnM6CisgICAgICAg
ICAgICAgICAgICAgIGVycm9ycyArPSAiRVJST1I6IEZhaWxlZCB0byByZWFkICclcyc6ICVzXG4i
ICUgKHBhdGgsIHN0cihlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3Is
IGU6CisgICAgICAgICAgICAgICAgcHJpbnQgIlVuaWNvZGVEZWNvZGVFcnJvciAlcyIgJSBzdHIo
ZSkKKyAgICAgICAgICAgICAgICBpZiBpbmNsdWRlX2Vycm9yczoKKyAgICAgICAgICAgICAgICAg
ICAgZXJyb3JzICs9ICJFUlJPUjogRmFpbGVkIHRvIGRlY29kZSAnJXMnIGFzIHV0Zjg6ICVzXG4i
ICUgKHBhdGgsIHN0cihlKSkKKworICAgICAgICBpZiBpbmNsdWRlX2Vycm9ycyBhbmQgZXJyb3Jz
OgorICAgICAgICAgICAgcmV0dXJuIGVycm9ycwogICAgICAgICByZXR1cm4gTm9uZQpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jh
c2hsb2dzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw4IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0
IGkKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1v
Y2tTeXN0ZW1Ib3N0CiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawog
CisjIE5lZWRlZCB0byBzdXBwb3J0IFdpbmRvd3MgcG9ydCB0ZXN0cworZnJvbSB3ZWJraXRweS5w
b3J0LndpbiBpbXBvcnQgV2luUG9ydAogCiBkZWYgbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3
aW4ocHJvY2Vzc19uYW1lLCBwaWQpOgogICAgIHJldHVybiAiIiJQcm9jZXNzOiAgICAgICAgIHtw
cm9jZXNzX25hbWV9IFt7cGlkfV0KQEAgLTY4LDYgKzcwLDE2OCBAQCBQQ0kgQ2FyZDogTlZJRElB
IEdlRm9yY2UgR1QgMTIwLCBzcHBjaV9kCiBTZXJpYWwgQVRBIERldmljZTogT1BUSUFSQyBEVkQg
UlcgQUQtNTY3MFMKICIiIi5mb3JtYXQocHJvY2Vzc19uYW1lPXByb2Nlc3NfbmFtZSwgcGlkPXBp
ZCkKIAorCitkZWYgbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF93aW4ocHJvY2Vzc19uYW1lLCBwaWQp
OgorICAgIHJldHVybiAiIiJPcGVuZWQgbG9nIGZpbGUgJ0M6XFByb2plY3RzXFdlYktpdFxPcGVu
U291cmNlXFdlYktpdEJ1aWxkXFJlbGVhc2VcYmluMzJcbGF5b3V0LXRlc3QtcmVzdWx0c1xDcmFz
aExvZ18xZDU4XzIwMTMtMDYtMDNfMTItMjEtMjAtMTEwLnR4dCcKKzA6MDAwPiAuc3JjcGF0aCAi
QzpcUHJvamVjdHNcV2ViS2l0XE9wZW5Tb3VyY2UiCitTb3VyY2Ugc2VhcmNoIHBhdGggaXM6IEM6
XFByb2plY3RzXFdlYktpdFxPcGVuU291cmNlCiswOjAwMD4gIWFuYWx5emUgLXZ2CisqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAg
ICAgICAgICAgRXhjZXB0aW9uIEFuYWx5c2lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisK
KyoqKiBFUlJPUjogU3ltYm9sIGZpbGUgY291bGQgbm90IGJlIGZvdW5kLiAgRGVmYXVsdGVkIHRv
IGV4cG9ydCBzeW1ib2xzIGZvciBDOlxQcm9qZWN0c1xXZWJLaXRcT3BlblNvdXJjZVxXZWJLaXRC
dWlsZFxSZWxlYXNlXGJpbjMyXGxpYmRpc3BhdGNoLmRsbCAtCisqKiogRVJST1I6IFN5bWJvbCBm
aWxlIGNvdWxkIG5vdCBiZSBmb3VuZC4gIERlZmF1bHRlZCB0byBleHBvcnQgc3ltYm9scyBmb3Ig
QzpcV2luZG93c1xTWVNURU0zMlxhdGl1bWRhZy5kbGwgLQorCitGQVVMVElOR19JUDoKK0phdmFT
Y3JpcHRDb3JlIUpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QrMCBbYzpccHJv
amVjdHNcd2Via2l0XG9wZW5zb3VyY2Vcc291cmNlXGphdmFzY3JpcHRjb3JlXHJ1bnRpbWVcanNh
Y3RpdmF0aW9uLmNwcCBAIDE0Nl0KKzAxZTNkMDcwIDU1ICAgICAgICAgICAgICBwdXNoICAgIGVi
cAorCitFWENFUFRJT05fUkVDT1JEOiAgMDAwOTJjYzggLS0gKC5leHIgMHg5MmNjOCkKKy5leHIg
MHg5MmNjOAorRXhjZXB0aW9uQWRkcmVzczogMDFlM2QwNzAgKEphdmFTY3JpcHRDb3JlIUpTQzo6
SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QpCisgICBFeGNlcHRpb25Db2RlOiBjMDAw
MDBmZCAoU3RhY2sgb3ZlcmZsb3cpCisgIEV4Y2VwdGlvbkZsYWdzOiAwMDAwMDAwMAorTnVtYmVy
UGFyYW1ldGVyczogMgorICAgUGFyYW1ldGVyWzBdOiAwMDAwMDAwMQorICAgUGFyYW1ldGVyWzFd
OiAwMDA5MmZmYworCitGQVVMVElOR19USFJFQUQ6ICAwMDAwMGU2OAorUFJPQ0VTU19OQU1FOiAg
e3Byb2Nlc3NfbmFtZX0KK0VSUk9SX0NPREU6IChOVFNUQVRVUykgMHhjMDAwMDAwNSAtIFRoZSBp
bnN0cnVjdGlvbiBhdCAweCUwOGx4IHJlZmVyZW5jZWQgbWVtb3J5IGF0IDB4JTA4bHguIFRoZSBt
ZW1vcnkgY291bGQgbm90IGJlICVzLgorRVhDRVBUSU9OX0NPREU6IChOVFNUQVRVUykgMHhjMDAw
MDAwNSAtIFRoZSBpbnN0cnVjdGlvbiBhdCAweCUwOGx4IHJlZmVyZW5jZWQgbWVtb3J5IGF0IDB4
JTA4bHguIFRoZSBtZW1vcnkgY291bGQgbm90IGJlICVzLgorRVhDRVBUSU9OX0NPREVfU1RSOiAg
YzAwMDAwMDUKK0VYQ0VQVElPTl9QQVJBTUVURVIxOiAgMDAwMDAwMDAKK0VYQ0VQVElPTl9QQVJB
TUVURVIyOiAgMDAwOTAwMDAKK1JFQURfQUREUkVTUzogIDAwMDkwMDAwCisKK0ZPTExPV1VQX0lQ
OgorSmF2YVNjcmlwdENvcmUhSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCsw
IFtjOlxwcm9qZWN0c1x3ZWJraXRcb3BlbnNvdXJjZVxzb3VyY2VcamF2YXNjcmlwdGNvcmVccnVu
dGltZVxqc2FjdGl2YXRpb24uY3BwIEAgMTQ2XQorMDFlM2QwNzAgNTUgICAgICAgICAgICAgIHB1
c2ggICAgZWJwCisKK1dBVFNPTl9CS1RfUFJPQ1NUQU1QOiAgNTFhOGY5NzkKK1dBVFNPTl9CS1Rf
TU9EVUxFOiAgTVNWQ1IxMDAuZGxsCitXQVRTT05fQktUX01PRFZFUjogIDEwLjAuNDAyMTkuMzI1
CitXQVRTT05fQktUX01PRFNUQU1QOiAgNGRmMmJlMWUKK1dBVFNPTl9CS1RfTU9ET0ZGU0VUOiAg
MTYwZDcKK01PRFVMRV9WRVJfUFJPRFVDVDogIE1pY3Jvc29mdChSKSBWaXN1YWwgU3R1ZGlvKFIp
IDIwMTAKK0JVSUxEX1ZFUlNJT05fU1RSSU5HOiAgNi4yLjkyMDAuMTYzODQgKHdpbjhfcnRtLjEy
MDcyNS0xMjQ3KQorTlRHTE9CQUxGTEFHOiAgMAorQVBQTElDQVRJT05fVkVSSUZJRVJfRkxBR1M6
ICAwCitBUFA6ICB7cHJvY2Vzc19uYW1lfQorCitBTkFMWVNJU19TRVNTSU9OX0hPU1Q6ICBGVUxH
QlItUEMKKworQU5BTFlTSVNfU0VTU0lPTl9USU1FOiAgMDYtMDMtMjAxMyAxMjoyMToyMC4wMTEx
CisKK0NPTlRFWFQ6ICAwMDA5MmQxOCAtLSAoLmN4ciAweDkyZDE4KQorLmN4ciAweDkyZDE4Citl
YXg9MDFlM2QwNzAgZWJ4PTAwMDkzMGJjIGVjeD03ZmUwM2VkMCBlZHg9MDc1MWUxNjggZXNpPTA3
YTdmZjk4IGVkaT0wNzkxZmY3OAorZWlwPTAxZTNkMDcwIGVzcD0wMDA5MzAwMCBlYnA9MDAwOTMw
NmMgaW9wbD0wICAgICAgICAgbnYgdXAgZWkgbmcgbnogYWMgcG8gY3kKK2NzPTAwMjMgIHNzPTAw
MmIgIGRzPTAwMmIgIGVzPTAwMmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAw
MjEwMjkzCitKYXZhU2NyaXB0Q29yZSFKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlT
bG90OgorMDFlM2QwNzAgNTUgICAgICAgICAgICAgIHB1c2ggICAgZWJwCisuY3hyCitSZXNldHRp
bmcgZGVmYXVsdCBzY29wZQorCitSRUNVUlJJTkdfU1RBQ0s6IEZyb20gZnJhbWVzIDB4MTQgdG8g
MHgxZAorCitUSFJFQURfQVRUUklCVVRFUzoKKworWyBHTE9CQUwgXQorCisgICAgR2xvYmFsICAg
ICBQSUQ6IFt7cGlkfV0KKyAgICBHbG9iYWwgICAgIFRocmVhZF9Db3VudDogWzE5XQorICAgIEds
b2JhbCAgICAgUGFnZVNpemU6IFs0MDk2XQorICAgIEdsb2JhbCAgICAgTW9kTGlzdF9TSEExX0hh
c2g6IFthYWNlZjRlN2U4M2I5YmRkYzljZDBjYzA5NGRhYzg4ZDUzMWVhNGEzXQorICAgIEdsb2Jh
bCAgICAgQ29tbWFuZExpbmU6IFtDOlxQcm9qZWN0c1xXZWJLaXRcT3BlblNvdXJjZVxXZWJLaXRC
dWlsZFxSZWxlYXNlXGJpbjMyXHtwcm9jZXNzX25hbWV9IC1dCisgICAgR2xvYmFsICAgICBEZXNr
dG9wX05hbWU6IFtXaW5zdGEwXERlZmF1bHRdCisgICAgR2xvYmFsICAgICBQcm9jZXNzTmFtZTog
W3twcm9jZXNzX25hbWV9XQorICAgIEdsb2JhbCAgICAgRGVidWdnZXJfQ1BVX0FyY2hpdGVjdHVy
ZTogW1g4Nl0KKyAgICBHbG9iYWwgICAgIENQVV9Qcm9jZXNzb3JDb3VudDogWzI0XQorICAgIEds
b2JhbCAgICAgQ1BVX01IWjogWzE1OTZdCisgICAgR2xvYmFsICAgICBDUFVfQXJjaGl0ZWN0dXJl
OiBbWDg2XQorICAgIEdsb2JhbCAgICAgQ1BVX0ZhbWlseTogWzZdCisgICAgR2xvYmFsICAgICBD
UFVfTW9kZWw6IFsxMl0KKyAgICBHbG9iYWwgICAgIENQVV9TdGVwcGluZzogWzJdCisgICAgR2xv
YmFsICAgICBDUFVfVmVuZG9yU3RyaW5nOiBbR2VudWluZUludGVsXQorICAgIEdsb2JhbCAgICAg
TG9hZGVkTW9kdWxlX0NvdW50OiBbODJdCisgICAgR2xvYmFsICAgICBQcm9jZXNzQmVpbmdEZWJ1
Z2dlZAorICAgIEdsb2JhbCAgICAgR0ZsYWdzOiBbMF0KKyAgICBHbG9iYWwgICAgIEFwcGxpY2F0
aW9uX1ZlcmlmZXJfRmxhZ3M6IFswXQorICAgIEdsb2JhbCAgICAgRmluYWxFeGg6IFsyMDEyMDkz
OTQzXQorICAgIEdsb2JhbCAgICAgU3lzdGVtVXBUaW1lOiBbMyBkYXlzIDIzOjUyOjU2LjAwMF0K
KyAgICBHbG9iYWwgICAgIFN5c3RlbVVwVGltZTogWzM0NTE3Nl0KKyAgICBHbG9iYWwgICAgIFBy
b2Nlc3NVcFRpbWU6IFswIGRheXMgMDowMDowMC4wMDBdCisgICAgR2xvYmFsICAgICBQcm9jZXNz
VXBUaW1lOiBbMF0KKyAgICBHbG9iYWwgICAgIEN1cnJlbnRUaW1lRGF0ZTogW01vbiBKdW4gIDMg
MTI6MjE6MjAuMDAwIDIwMTMgKFVUQyAtIDc6MDApXQorICAgIEdsb2JhbCAgICAgQ3VycmVudFRp
bWVEYXRlOiBbMTM3MDI4NzI4MF0KKyAgICBHbG9iYWwgICAgIFByb2R1Y3RUeXBlOiBbMV0KKyAg
ICBHbG9iYWwgICAgIFN1aXRlTWFzazogWzI3Ml0KKyAgICBHbG9iYWwgICAgIEFwcGxpY2F0aW9u
TmFtZTogW3twcm9jZXNzX25hbWV9XQorICAgIEdsb2JhbCAgICAgQVNMUl9FbmFibGVkCisgICAg
R2xvYmFsICAgICBTYWZlU0VIX0VuYWJsZWQKKworRkFVTFRfSU5TVFJfQ09ERTogIDgzZWM4YjU1
CisKK0ZBVUxUSU5HX1NPVVJDRV9MSU5FOiAgYzpccHJvamVjdHNcd2Via2l0XG9wZW5zb3VyY2Vc
c291cmNlXGphdmFzY3JpcHRjb3JlXHJ1bnRpbWVcanNhY3RpdmF0aW9uLmNwcAorCitGQVVMVElO
R19TT1VSQ0VfRklMRTogIGM6XHByb2plY3RzXHdlYmtpdFxvcGVuc291cmNlXHNvdXJjZVxqYXZh
c2NyaXB0Y29yZVxydW50aW1lXGpzYWN0aXZhdGlvbi5jcHAKKworRkFVTFRJTkdfU09VUkNFX0xJ
TkVfTlVNQkVSOiAgMTQ2CisKK1NZTUJPTF9TVEFDS19JTkRFWDogIDAKKworU1lNQk9MX05BTUU6
ICBqYXZhc2NyaXB0Y29yZSFKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90Kzky
ZmZjCisKK0ZPTExPV1VQX05BTUU6ICBNYWNoaW5lT3duZXIKKworTU9EVUxFX05BTUU6IEphdmFT
Y3JpcHRDb3JlCisKK0lNQUdFX05BTUU6ICBKYXZhU2NyaXB0Q29yZS5kbGwKKworREVCVUdfRkxS
X0lNQUdFX1RJTUVTVEFNUDogIDUxYWNlNDczCisKK1NUQUNLX0NPTU1BTkQ6ICAuY3hyIDAwMDky
RDE4IDsga2IgOyBkcHMgOTMwMDAgOyBrYgorCitGQUlMVVJFX0JVQ0tFVF9JRDogIFNUQUNLX09W
RVJGTE9XX2MwMDAwMDA1X0phdmFTY3JpcHRDb3JlLmRsbCFKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90CisKK0JVQ0tFVF9JRDogIEFQUExJQ0FUSU9OX0ZBVUxUX1NUQUNLX09W
RVJGTE9XX0lOVkFMSURfUE9JTlRFUl9SRUFEX2phdmFzY3JpcHRjb3JlIUpTQzo6SlNBY3RpdmF0
aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QrOTJmZmMKKworQU5BTFlTSVNfU0VTU0lPTl9FTEFQU0VE
X1RJTUU6IDE4ZGYKKworRm9sbG93dXA6IE1hY2hpbmVPd25lcgorLS0tLS0tLS0tCisKKzA6MDAw
PiB+KmtwbgorCisuICAwICBJZDogMThlMC5lNjggU3VzcGVuZDogMSBUZWI6IDdmZmRkMDAwIFVu
ZnJvemVuCisgIyBDaGlsZEVCUCBSZXRBZGRyCiswMCAwMDA5MmEwOCA3MjYxZWNlMSBNU1ZDUjEw
MCFfYWxsb2NhX3Byb2JlKzB4MjcKKzAxIDAwMDkyYTRjIDcyNjFhNWQwIE1TVkNSMTAwIV93cml0
ZSsweDk1CiswMiAwMDA5MmE2YyA3MjYxZWY2YiBNU1ZDUjEwMCFfZmx1c2grMHgzYgorMDMgMDAw
OTJhN2MgNzI2MWVmMWMgTVNWQ1IxMDAhX2ZmbHVzaF9ub2xvY2srMHgxYworMDQgMDAwOTJhYjQg
MTAwMGY4MTQgTVNWQ1IxMDAhZmZsdXNoKzB4MzAKKzA1IDAwMDkyYWM4IDc3YzAwODRlIER1bXBS
ZW5kZXJUcmVlXzEwMDAwMDAwIWV4Y2VwdGlvbkZpbHRlcihzdHJ1Y3QgX0VYQ0VQVElPTl9QT0lO
VEVSUyAqIF9fZm9ybWFsID0gMHg4NTJhYzgwNykrMHgyNCBbYzpccHJvamVjdHNcd2Via2l0XG9w
ZW5zb3VyY2VcdG9vbHNcZHVtcHJlbmRlcnRyZWVcd2luXGR1bXByZW5kZXJ0cmVlLmNwcCBAIDEy
ODFdCiswNiAwMDA5MmI2MCA3N2U4YmYyYyBLRVJORUxCQVNFIVVuaGFuZGxlZEV4Y2VwdGlvbkZp
bHRlcisweDE2NAorMDcgMDAwOTJiNjggNzdlNTMwYjQgbnRkbGwhX19SdGxVc2VyVGhyZWFkU3Rh
cnQrMHg1NworMDggMDAwOTJiN2MgNzdlMTUyNDYgbnRkbGwhX0VINF9DYWxsRmlsdGVyRnVuYysw
eDEyCiswOSAwMDA5MmJhNCA3N2UxNTFiMSBudGRsbCFfZXhjZXB0X2hhbmRsZXI0X2NvbW1vbisw
eDhlCiswYSAwMDA5MmJjNCA3N2U1MmU3MSBudGRsbCFfZXhjZXB0X2hhbmRsZXI0KzB4MjAKKzBi
IDAwMDkyYmU4IDc3ZTUyZTQzIG50ZGxsIUV4ZWN1dGVIYW5kbGVyMisweDI2CiswYyAwMDA5MmNi
MCA3N2U1MmNiYiBudGRsbCFFeGVjdXRlSGFuZGxlcisweDI0CiswZCAwMDA5MmNiMCAwMWUzZDA3
MCBudGRsbCFLaVVzZXJFeGNlcHRpb25EaXNwYXRjaGVyKzB4ZgorMGUgMDAwOTJmZmMgMDFlNjdk
MjUgSmF2YVNjcmlwdENvcmUhSlNDOjpKU0FjdGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChj
bGFzcyBKU0M6OkpTQ2VsbCAqIGNlbGwgPSAweDA3YTdmZjk4LCBjbGFzcyBKU0M6OkV4ZWNTdGF0
ZSAqIGV4ZWMgPSAweDA3NTFlMTY4LCBjbGFzcyBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUgPSBjbGFzcyBKU0M6OlByb3BlcnR5TmFtZSwgY2xhc3MgSlNDOjpQcm9wZXJ0eVNsb3QgKiBz
bG90ID0gMHgwMDA5MzBiYykgW2M6XHByb2plY3RzXHdlYmtpdFxvcGVuc291cmNlXHNvdXJjZVxq
YXZhc2NyaXB0Y29yZVxydW50aW1lXGpzYWN0aXZhdGlvbi5jcHAgQCAxNDZdCiswZiAwMDA5MzA2
YyAwMWU2ODgzNyBKYXZhU2NyaXB0Q29yZSFKU0M6OkpTU2NvcGU6OnJlc29sdmVDb250YWluaW5n
U2NvcGVJbnRlcm5hbDwxLDI+KGNsYXNzIEpTQzo6RXhlY1N0YXRlICogY2FsbEZyYW1lID0gMHgw
NzUxZTE2OCwgY2xhc3MgSlNDOjpJZGVudGlmaWVyICogaWRlbnRpZmllciA9IDB4N2ZlMGViYzAs
IGNsYXNzIEpTQzo6UHJvcGVydHlTbG90ICogc2xvdCA9IDB4N2ZlMDNlZDAsIGNsYXNzIFdURjo6
VmVjdG9yPEpTQzo6UmVzb2x2ZU9wZXJhdGlvbiwwLFdURjo6Q3Jhc2hPbk92ZXJmbG93PiAqIG9w
ZXJhdGlvbnMgPSAweDdmZGExNmMwLCBzdHJ1Y3QgSlNDOjpQdXRUb0Jhc2VPcGVyYXRpb24gKiBw
dXRUb0Jhc2VPcGVyYXRpb24gPSAweDAwMDAwMDAwLCBib29sIF9fZm9ybWFsID0gZmFsc2UpKzB4
MjA1IFtjOlxwcm9qZWN0c1x3ZWJraXRcb3BlbnNvdXJjZVxzb3VyY2VcamF2YXNjcmlwdGNvcmVc
cnVudGltZVxqc3Njb3BlLmNwcCBAIDI0N10KKzEwIDAwMDkzMDkwIDAxZTY1ODYwIEphdmFTY3Jp
cHRDb3JlIUpTQzo6SlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZTwxPihjbGFzcyBKU0M6
OkV4ZWNTdGF0ZSAqIGNhbGxGcmFtZSA9IDB4MDc1MWUxNjgsIGNsYXNzIEpTQzo6SWRlbnRpZmll
ciAqIGlkZW50aWZpZXIgPSAweDdmZTBlYmMwLCBjbGFzcyBKU0M6OlByb3BlcnR5U2xvdCAqIHNs
b3QgPSAweDAwMDkzMGJjLCBjbGFzcyBXVEY6OlZlY3RvcjxKU0M6OlJlc29sdmVPcGVyYXRpb24s
MCxXVEY6OkNyYXNoT25PdmVyZmxvdz4gKiBvcGVyYXRpb25zID0gMHg3ZmRhMTZjMCwgc3RydWN0
IEpTQzo6UHV0VG9CYXNlT3BlcmF0aW9uICogcHV0VG9CYXNlT3BlcmF0aW9uID0gMHgwMDAwMDAw
MCwgYm9vbCBpc1N0cmljdCA9IGZhbHNlKSsweDI3IFtjOlxwcm9qZWN0c1x3ZWJraXRcb3BlbnNv
dXJjZVxzb3VyY2VcamF2YXNjcmlwdGNvcmVccnVudGltZVxqc3Njb3BlLmNwcCBAIDQyN10KKzEx
IDAwMDkzMTA0IDAxZGNlZWZmIEphdmFTY3JpcHRDb3JlIUpTQzo6SlNTY29wZTo6cmVzb2x2ZShj
bGFzcyBKU0M6OkV4ZWNTdGF0ZSAqIGNhbGxGcmFtZSA9IDB4MDc1MWUxNjgsIGNsYXNzIEpTQzo6
SWRlbnRpZmllciAqIGlkZW50aWZpZXIgPSAweDdmZTBlYmMwLCBjbGFzcyBXVEY6OlZlY3RvcjxK
U0M6OlJlc29sdmVPcGVyYXRpb24sMCxXVEY6OkNyYXNoT25PdmVyZmxvdz4gKiBvcGVyYXRpb25z
ID0gMHg3ZmRhMTZjMCkrMHhjMCBbYzpccHJvamVjdHNcd2Via2l0XG9wZW5zb3VyY2Vcc291cmNl
XGphdmFzY3JpcHRjb3JlXHJ1bnRpbWVcanNzY29wZS5jcHAgQCA0NDddCisKKzA6MDAwPiBxCitx
dWl0OgorIiIiLmZvcm1hdChwcm9jZXNzX25hbWU9cHJvY2Vzc19uYW1lLCBwaWQ9cGlkKQorCiBj
bGFzcyBDcmFzaExvZ3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9maW5k
X2xvZ19kYXJ3aW4oc2VsZik6CiAgICAgICAgIGlmIG5vdCBTeXN0ZW1Ib3N0KCkucGxhdGZvcm0u
aXNfbWFjKCk6CkBAIC05OCwxMCArMjYyLDEwIEBAIGNsYXNzIENyYXNoTG9nc1Rlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBsb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZygi
RHVtcFJlbmRlclRyZWUiLCBuZXdlcl90aGFuPTEuMCkKICAgICAgICAgc2VsZi5hc3NlcnRJc05v
bmUobG9nKQogCi0gICAgICAgIGRlZiBiYWRfcmVhZChwYXRoKToKKyAgICAgICAgZGVmIGJhZF9y
ZWFkKHBhdGgsIGVycm9ycz0nc3RyaWN0Jyk6CiAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdJ
T0Vycm9yOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykKIAotICAgICAgICBkZWYgYmFkX210
aW1lKHBhdGgpOgorICAgICAgICBkZWYgYmFkX210aW1lKHBhdGgsIGVycm9ycz0nc3RyaWN0Jyk6
CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdPU0Vycm9yOiBObyBzdWNoIGZpbGUgb3IgZGly
ZWN0b3J5JykKIAogICAgICAgICBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlID0gYmFkX3JlYWQK
QEAgLTExMywzICsyNzcsNDIgQEAgY2xhc3MgQ3Jhc2hMb2dzVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgIGZpbGVzeXN0ZW0ubXRpbWUgPSBiYWRfbXRpbWUKICAgICAgICAgbG9nID0g
Y3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2coIkR1bXBSZW5kZXJUcmVlIiwgbmV3ZXJfdGhhbj0x
LjAsIGluY2x1ZGVfZXJyb3JzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ09TRXJyb3I6
IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLCBsb2cpCisKKyAgICBkZWYgdGVzdF9maW5kX2xv
Z193aW4oc2VsZik6CisgICAgICAgIGlmIG5vdCBTeXN0ZW1Ib3N0KCkucGxhdGZvcm0uaXNfd2lu
KCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvbGRlcl9tb2NrX2NyYXNoX3JlcG9y
dCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfd2luKCdEdW1wUmVuZGVyVHJlZScsIDI4NTI4KQor
ICAgICAgICBtb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfd2luKCdE
dW1wUmVuZGVyVHJlZScsIDI4NTMwKQorICAgICAgICBuZXdlcl9tb2NrX2NyYXNoX3JlcG9ydCA9
IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfd2luKCdEdW1wUmVuZGVyVHJlZScsIDI4NTI5KQorICAg
ICAgICBvdGhlcl9wcm9jZXNzX21vY2tfY3Jhc2hfcmVwb3J0ID0gbWFrZV9tb2NrX2NyYXNoX3Jl
cG9ydF93aW4oJ0Zvb1Byb2Nlc3MnLCAyODUyNykKKyAgICAgICAgbWlzZm9ybWF0dGVkX21vY2tf
Y3Jhc2hfcmVwb3J0ID0gJ0p1bmsgdGhhdCBzaG91bGQgbm90IGFwcGVhciBpbiBhIGNyYXNoIHJl
cG9ydCcgKyBtYWtlX21vY2tfY3Jhc2hfcmVwb3J0X3dpbignRHVtcFJlbmRlclRyZWUnLCAyODUy
NilbMjAwOl0KKyAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICBmaWxlc1snfi9DcmFzaExvZ18x
ZDU4XzIwMTMtMDYtMDNfMTItMjEtMjAtMTEwLnR4dCddID0gb2xkZXJfbW9ja19jcmFzaF9yZXBv
cnQKKyAgICAgICAgZmlsZXNbJ34vQ3Jhc2hMb2dfYWJjZF8yMDEzLTA2LTAzXzEyLTIyLTE5LTEy
OS50eHQnXSA9IG1vY2tfY3Jhc2hfcmVwb3J0CisgICAgICAgIGZpbGVzWyd+L0NyYXNoTG9nXzJl
ZmZfMjAxMy0wNi0wM18xMi0yMy0yMC0xNTAudHh0J10gPSBuZXdlcl9tb2NrX2NyYXNoX3JlcG9y
dAorICAgICAgICBmaWxlc1snfi9DcmFzaExvZ18zMWEwXzIwMTMtMDYtMDNfMTItMjQtMjItMTE5
LnR4dCddID0gTm9uZQorICAgICAgICBmaWxlc1snfi9DcmFzaExvZ18wMWEzXzIwMTMtMDYtMDNf
MTItMjUtMjMtMTIwLnR4dCddID0gb3RoZXJfcHJvY2Vzc19tb2NrX2NyYXNoX3JlcG9ydAorICAg
ICAgICBmaWxlc1snfi9DcmFzaExvZ19hYWRkXzIwMTMtMDYtMDNfMTItMjYtMjQtMTIxLnR4dCdd
ID0gbWlzZm9ybWF0dGVkX21vY2tfY3Jhc2hfcmVwb3J0CisgICAgICAgIGZpbGVzeXN0ZW0gPSBN
b2NrRmlsZVN5c3RlbShmaWxlcykKKyAgICAgICAgbW9ja19ob3N0ID0gTW9ja1N5c3RlbUhvc3Qo
b3NfbmFtZT0nd2luJywgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQorICAgICAgICBjcmFzaF9sb2dz
ID0gQ3Jhc2hMb2dzKG1vY2tfaG9zdCkKKworICAgICAgICB3aW5wb3J0ID0gV2luUG9ydChtb2Nr
X2hvc3QsICd3aW4teHAnKQorICAgICAgICB3aW5wb3J0Ll9yZXN1bHRzX2RpcmVjdG9yeSA9ICJ+
IgorCisgICAgICAgIGxvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKCJEdW1wUmVuZGVy
VHJlZSIsIDI4NTI5LCBwb3J0PXdpbnBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5l
RXF1YWwobG9nLCBuZXdlcl9tb2NrX2NyYXNoX3JlcG9ydCkKKyAgICAgICAgbG9nID0gY3Jhc2hf
bG9ncy5maW5kX25ld2VzdF9sb2coIkR1bXBSZW5kZXJUcmVlIiwgMjg1MzAsIHBvcnQ9d2lucG9y
dCkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChsb2csIG1vY2tfY3Jhc2hfcmVw
b3J0KQorICAgICAgICBsb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZygiRHVtcFJlbmRl
clRyZWUiLCAyODUzMSwgcG9ydD13aW5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShs
b2cpCisgICAgICAgIGxvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKCJEdW1wUmVuZGVy
VHJlZSIsIG5ld2VyX3RoYW49MS4wLCBwb3J0PXdpbnBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0
SXNOb25lKGxvZykKKworICAgICAgICBkZWYgYmFkX3JlYWQocGF0aCwgZXJyb3JzKToKKyAgICAg
ICAgICAgIHJhaXNlIElPRXJyb3IoJ0lPRXJyb3I6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnkn
KQorCisgICAgICAgIGZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUgPSBiYWRfcmVhZAorICAgICAg
ICBsb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZygiRHVtcFJlbmRlclRyZWUiLCAyODUz
MSwgcG9ydD13aW5wb3J0LCBpbmNsdWRlX2Vycm9ycz1UcnVlKQorICAgICAgICBzZWxmLmFzc2Vy
dEluKCdJT0Vycm9yOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JywgbG9nKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CShy
ZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZXhlY3V0aXZlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw5IEBAIGNsYXNzIEV4ZWN1
dGl2ZShvYmplY3QpOgogICAgIFBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKICAgICBTVERPVVQgPSBz
dWJwcm9jZXNzLlNURE9VVAogCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxm
LnBpZF90b19zeXN0ZW1fcGlkID0ge30KKwogICAgIGRlZiBfc2hvdWxkX2Nsb3NlX2ZkcyhzZWxm
KToKICAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgY2xvc2VfZmRzPVRydWUgdG8gd29yayBhcm91
bmQgUHl0aG9uIGJ1ZyAjMjMyMAogICAgICAgICAjIChvdGhlcndpc2Ugd2UgY2FuIGhhbmcgd2hl
biB3ZSBraWxsIER1bXBSZW5kZXJUcmVlIHdoZW4gd2UgYXJlIHJ1bm5pbmcKQEAgLTI3MywyMCAr
Mjc2LDI4IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICBydW5uaW5nX3BpZHMg
PSBbXQogCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoIndpbjMyIiwgImN5Z3dpbiIpOgot
ICAgICAgICAgICAgIyBGSVhNRTogcnVubmluZ19waWRzIGlzbid0IGltcGxlbWVudGVkIG9uIFdp
bmRvd3MgeWV0Li4uCi0gICAgICAgICAgICByZXR1cm4gW10KLQotICAgICAgICBwc19wcm9jZXNz
ID0gc2VsZi5wb3BlbihbJ3BzJywgJy1lbycsICdwaWQsY29tbSddLCBzdGRvdXQ9c2VsZi5QSVBF
LCBzdGRlcnI9c2VsZi5QSVBFKQotICAgICAgICBzdGRvdXQsIF8gPSBwc19wcm9jZXNzLmNvbW11
bmljYXRlKCkKLSAgICAgICAgZm9yIGxpbmUgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKToKLSAgICAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIEluIHNvbWUgY2FzZXMgdGhlIGxpbmUgY2Fu
IGNvbnRhaW4gb25lIG9yIG1vcmUKLSAgICAgICAgICAgICAgICAjIGxlYWRpbmcgd2hpdGUtc3Bh
Y2VzLCBzbyBzdHJpcCBpdCBiZWZvcmUgc3BsaXQuCi0gICAgICAgICAgICAgICAgcGlkLCBwcm9j
ZXNzX25hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJyAnLCAxKQotICAgICAgICAgICAgICAgIGlm
IHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19uYW1lKToKLSAgICAgICAgICAgICAgICAgICAg
cnVubmluZ19waWRzLmFwcGVuZChpbnQocGlkKSkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yLCBlOgotICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHBzX3Byb2Nlc3MgPSBz
ZWxmLnJ1bl9jb21tYW5kKFsncHMnLCAnLWUnXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdu
b3JlX2Vycm9yKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcHNfcHJvY2Vzcy5zcGxpdGxpbmVz
KCk6CisgICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZS5zdHJpcCgpLnNwbGl0KCkKKyAgICAg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBpZCwgcHBpZCwgcGdpZCwgd2lu
cGlkLCB0dHksIHVpZCwgc3RpbWUsIHByb2Nlc3NfbmFtZSA9IHRva2VucworICAgICAgICAgICAg
ICAgICAgICBpZiBwcm9jZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6CisgICAgICAgICAg
ICAgICAgICAgICAgICBydW5uaW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5waWRfdG9fc3lzdGVtX3BpZFtpbnQocGlkKV0gPSBpbnQod2lucGlk
KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAg
ICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5w
b3BlbihbJ3BzJywgJy1lbycsICdwaWQsY29tbSddLCBzdGRvdXQ9c2VsZi5QSVBFLCBzdGRlcnI9
c2VsZi5QSVBFKQorICAgICAgICAgICAgc3Rkb3V0LCBfID0gcHNfcHJvY2Vzcy5jb21tdW5pY2F0
ZSgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgorICAgICAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBJbiBzb21lIGNhc2VzIHRoZSBs
aW5lIGNhbiBjb250YWluIG9uZSBvciBtb3JlCisgICAgICAgICAgICAgICAgICAgICMgbGVhZGlu
ZyB3aGl0ZS1zcGFjZXMsIHNvIHN0cmlwIGl0IGJlZm9yZSBzcGxpdC4KKyAgICAgICAgICAgICAg
ICAgICAgcGlkLCBwcm9jZXNzX25hbWUgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJyAnLCAxKQorICAg
ICAgICAgICAgICAgICAgICBpZiBwcm9jZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFtZSk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX3BpZHMuYXBwZW5kKGludChwaWQpKQorICAg
ICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICBw
YXNzCiAKICAgICAgICAgcmV0dXJuIHNvcnRlZChydW5uaW5nX3BpZHMpCiAKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21v
Y2sucHkJKHJldmlzaW9uIDE1MTEyMSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBA
QCBjbGFzcyBNb2NrRXhlY3V0aXZlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3J1bm5pbmdfcGlk
cyA9IHsndGVzdC13ZWJraXRweSc6IG9zLmdldHBpZCgpfQogICAgICAgICBzZWxmLl9wcm9jID0g
Tm9uZQogICAgICAgICBzZWxmLmNhbGxzID0gW10KKyAgICAgICAgc2VsZi5waWRfdG9fc3lzdGVt
X3BpZCA9IHt9CiAKICAgICBkZWYgY2hlY2tfcnVubmluZ19waWQoc2VsZiwgcGlkKToKICAgICAg
ICAgcmV0dXJuIHBpZCBpbiBzZWxmLl9ydW5uaW5nX3BpZHMudmFsdWVzKCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CShy
ZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbS5weQkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEyICsxODksMTIgQEAgY2xhc3Mg
RmlsZVN5c3RlbShvYmplY3QpOgogICAgIGRlZiBvcGVuX2JpbmFyeV9maWxlX2Zvcl9yZWFkaW5n
KHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gY29kZWNzLm9wZW4ocGF0aCwgJ3JiJykKIAot
ICAgIGRlZiByZWFkX2JpbmFyeV9maWxlKHNlbGYsIHBhdGgpOgorICAgIGRlZiByZWFkX2JpbmFy
eV9maWxlKHNlbGYsIHBhdGgsIGVycm9ycz0nc3RyaWN0Jyk6CiAgICAgICAgICIiIlJldHVybiB0
aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYXMgYSBieXRlIHN0cmlu
Zy4iIiIKICAgICAgICAgd2l0aCBmaWxlKHBhdGgsICdyYicpIGFzIGY6CiAgICAgICAgICAgICBy
ZXR1cm4gZi5yZWFkKCkKIAotICAgIGRlZiB3cml0ZV9iaW5hcnlfZmlsZShzZWxmLCBwYXRoLCBj
b250ZW50cyk6CisgICAgZGVmIHdyaXRlX2JpbmFyeV9maWxlKHNlbGYsIHBhdGgsIGNvbnRlbnRz
LCBlcnJvcnM9J3N0cmljdCcpOgogICAgICAgICB3aXRoIGZpbGUocGF0aCwgJ3diJykgYXMgZjoK
ICAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCiAKQEAgLTIwNiwxOCArMjA2LDE4IEBAIGNs
YXNzIEZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICBkZWYgb3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRp
bmcoc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBjb2RlY3Mub3BlbihwYXRoLCAndycsICd1
dGY4JykKIAotICAgIGRlZiByZWFkX3RleHRfZmlsZShzZWxmLCBwYXRoKToKKyAgICBkZWYgcmVh
ZF90ZXh0X2ZpbGUoc2VsZiwgcGF0aCwgZXJyb3JzPSdzdHJpY3QnKToKICAgICAgICAgIiIiUmV0
dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhcyBhIFVuaWNv
ZGUgc3RyaW5nLgogCiAgICAgICAgIFRoZSBmaWxlIGlzIHJlYWQgYXNzdW1pbmcgaXQgaXMgYSBV
VEYtOCBlbmNvZGVkIGZpbGUgd2l0aCBubyBCT00uIiIiCi0gICAgICAgIHdpdGggY29kZWNzLm9w
ZW4ocGF0aCwgJ3InLCAndXRmOCcpIGFzIGY6CisgICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0
aCwgJ3InLCAndXRmOCcsIGVycm9ycykgYXMgZjoKICAgICAgICAgICAgIHJldHVybiBmLnJlYWQo
KQogCi0gICAgZGVmIHdyaXRlX3RleHRfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cyk6CisgICAg
ZGVmIHdyaXRlX3RleHRfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cywgZXJyb3JzPSdzdHJpY3Qn
KToKICAgICAgICAgIiIiV3JpdGUgdGhlIGNvbnRlbnRzIHRvIHRoZSBmaWxlIGF0IHRoZSBnaXZl
biBsb2NhdGlvbi4KIAogICAgICAgICBUaGUgZmlsZSBpcyB3cml0dGVuIGVuY29kZWQgYXMgVVRG
LTggd2l0aCBubyBCT00uIiIiCi0gICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3cnLCAn
dXRmOCcpIGFzIGY6CisgICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3cnLCAndXRmOCcs
IGVycm9ycykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpCiAKICAgICBkZWYg
c2hhMShzZWxmLCBwYXRoKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9maWxlc3lzdGVtX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQkocmV2aXNpb24gMTUxMTIxKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzIxLDExICszMjEsMTEgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0
ZW0ob2JqZWN0KToKICAgICBkZWYgb3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcoc2VsZiwgcGF0
aCk6CiAgICAgICAgIHJldHVybiBXcml0YWJsZVRleHRGaWxlT2JqZWN0KHNlbGYsIHBhdGgpCiAK
LSAgICBkZWYgcmVhZF90ZXh0X2ZpbGUoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBzZWxm
LnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkuZGVjb2RlKCd1dGYtOCcpCisgICAgZGVmIHJlYWRfdGV4
dF9maWxlKHNlbGYsIHBhdGgsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBzZWxm
LnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkuZGVjb2RlKCd1dGYtOCcsIGVycm9ycykKIAotICAgIGRl
ZiB3cml0ZV90ZXh0X2ZpbGUoc2VsZiwgcGF0aCwgY29udGVudHMpOgotICAgICAgICByZXR1cm4g
c2VsZi53cml0ZV9iaW5hcnlfZmlsZShwYXRoLCBjb250ZW50cy5lbmNvZGUoJ3V0Zi04JykpCisg
ICAgZGVmIHdyaXRlX3RleHRfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50cywgZXJyb3JzPSdzdHJp
Y3QnKToKKyAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVfYmluYXJ5X2ZpbGUocGF0aCwgY29udGVu
dHMuZW5jb2RlKCd1dGYtOCcsIGVycm9ycykpCiAKICAgICBkZWYgc2hhMShzZWxmLCBwYXRoKToK
ICAgICAgICAgY29udGVudHMgPSBzZWxmLnJlYWRfYmluYXJ5X2ZpbGUocGF0aCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxl
c3lzdGVtX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weQkod29ya2luZyBjb3B5
KQpAQCAtMjA5LDYgKzIwOSw4IEBAIGNsYXNzIFJlYWxGaWxlU3lzdGVtVGVzdCh1bml0dGVzdC5U
ZXN0Q2EKIAogICAgICAgICB1bmljb2RlX3RleHRfc3RyaW5nID0gdSdcdTAxNkFuXHUwMTJEY1x1
MDE0RGRlXHUwMzNEJwogICAgICAgICBoZXhfZXF1aXZhbGVudCA9ICdceEM1XHhBQVx4NkVceEM0
XHhBRFx4NjNceEM1XHg4RFx4NjRceDY1XHhDQ1x4QkQnCisgICAgICAgIG1hbGZvcm1lZF90ZXh0
X2hleCA9ICdceDREXHg2OVx4NjNceDcyXHg2Rlx4NzNceDZGXHg2Nlx4NzRceEFFXHgyMFx4NTZc
eDY5XHg3M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4NzVceDY0XHg2OVx4NkZceEFFXHgyMFx4
MzJceDMwXHgzMVx4MzBceDBEXHgwQScKKyAgICAgICAgbWFsZm9ybWVkX2lnbm9yZWRfdGV4dF9o
ZXggPSAnXHg0RFx4NjlceDYzXHg3Mlx4NkZceDczXHg2Rlx4NjZceDc0XHgyMFx4NTZceDY5XHg3
M1x4NzVceDYxXHg2Q1x4MjBceDUzXHg3NFx4NzVceDY0XHg2OVx4NkZceDIwXHgzMlx4MzBceDMx
XHgzMFx4MERceDBBJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ZXh0X3BhdGggPSB0ZW1w
ZmlsZS5ta3RlbXAocHJlZml4PSd0cmVlX3VuaXR0ZXN0XycpCiAgICAgICAgICAgICBiaW5hcnlf
cGF0aCA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3RyZWVfdW5pdHRlc3RfJykKQEAgLTIxOSw2
ICsyMjEsMTIgQEAgY2xhc3MgUmVhbEZpbGVTeXN0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYQogICAg
ICAgICAgICAgZnMud3JpdGVfYmluYXJ5X2ZpbGUoYmluYXJ5X3BhdGgsIGhleF9lcXVpdmFsZW50
KQogICAgICAgICAgICAgdGV4dF9jb250ZW50cyA9IGZzLnJlYWRfdGV4dF9maWxlKGJpbmFyeV9w
YXRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0X2NvbnRlbnRzLCB1bmljb2Rl
X3RleHRfc3RyaW5nKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9y
LCBmcy53cml0ZV90ZXh0X2ZpbGUsIGJpbmFyeV9wYXRoLCBtYWxmb3JtZWRfdGV4dF9oZXgpCisg
ICAgICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZShiaW5hcnlfcGF0aCwgbWFsZm9ybWVkX3Rl
eHRfaGV4LCAnaWdub3JlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJy
b3IsIGZzLnJlYWRfdGV4dF9maWxlLCBiaW5hcnlfcGF0aCkKKyAgICAgICAgICAgIHRleHRfY29u
dGVudHMgPSBmcy5yZWFkX3RleHRfZmlsZShiaW5hcnlfcGF0aCwgJ2lnbm9yZScpCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXh0X2NvbnRlbnRzLCBtYWxmb3JtZWRfaWdub3JlZF90
ZXh0X2hleCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIHRleHRfcGF0aCBhbmQg
ZnMuaXNmaWxlKHRleHRfcGF0aCk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRleHRfcGF0
aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAxNTExMjEp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpA
QCAtMTM1MCw2ICsxMzUwLDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgdmlydHVh
bF90ZXN0X3N1aXRlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIFtdCiAKKyAgICBkZWYgZmluZF9z
eXN0ZW1fcGlkKHNlbGYsIG5hbWUsIHBpZCk6CisgICAgICAgICMgVGhpcyBpcyBvbmx5IG92ZXJy
aWRkZW4gb24gV2luZG93cworICAgICAgICByZXR1cm4gcGlkCisKICAgICBAbWVtb2l6ZWQKICAg
ICBkZWYgcG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoc2VsZik6CiAgICAgICAgIHN1aXRl
cyA9IHNlbGYudmlydHVhbF90ZXN0X3N1aXRlcygpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHdvcmtpbmcgY29weSkK
QEAgLTExNiw2ICsxMTYsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAg
ICAgICBlbnY9c2VsZi5fZW52LAogICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXNlbGYu
X3VuaXZlcnNhbF9uZXdsaW5lcykKICAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5waWQK
KyAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCksIHNlbGYuX3Bp
ZCkKICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQogICAgICAgICBpZiBu
b3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CiAgICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZk
LCBmY250bC5GX0dFVEZMKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbi5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CShyZXZp
c2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBAIGltcG9ydCBvcwogaW1wb3J0IGxvZ2dpbmcKIGlt
cG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKIAorZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAogZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IsIEV4ZWN1dGl2ZQogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLnBhdGggaW1wb3J0IGFic3BhdGhfdG9fdXJpLCBjeWdwYXRoCkBA
IC0yMDAsNyArMjAyLDcgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBjb21t
YW5kX2ZpbGUgPSBzZWxmLmNyZWF0ZV9kZWJ1Z2dlcl9jb21tYW5kX2ZpbGUoKQogICAgICAgICBp
ZiBub3QgY29tbWFuZF9maWxlOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZGVi
dWdnZXJfb3B0aW9ucyA9ICciezB9IiAtcCAlbGQgLWUgJWxkIC1nIC1saW5lcyAtY2YgInsxfSIn
LmZvcm1hdChjeWdwYXRoKG50c2RfcGF0aCksIGN5Z3BhdGgoY29tbWFuZF9maWxlKSkKKyAgICAg
ICAgZGVidWdnZXJfb3B0aW9ucyA9ICciezB9IiAtcCAlbGQgLWUgJWxkIC1nIC1ub2lvIC1saW5l
cyAtY2YgInsxfSInLmZvcm1hdChjeWdwYXRoKG50c2RfcGF0aCksIGN5Z3BhdGgoY29tbWFuZF9m
aWxlKSkKICAgICAgICAgcmVnaXN0cnlfc2V0dGluZ3MgPSB7J0RlYnVnZ2VyJzogZGVidWdnZXJf
b3B0aW9ucywgJ0F1dG8nOiAiMSJ9CiAgICAgICAgIGZvciBrZXkgaW4gcmVnaXN0cnlfc2V0dGlu
Z3M6CiAgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2RlYnVnZ2VyX3ZhbHVlc1trZXldID0gc2Vs
Zi5yZWFkX3JlZ2lzdHJ5X3N0cmluZyhrZXkpCkBAIC0yMTgsMyArMjIwLDY5IEBAIGNsYXNzIFdp
blBvcnQoQXBwbGVQb3J0KToKICAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CiAgICAg
ICAgIHNlbGYucmVzdG9yZV9jcmFzaF9sb2dfc2F2aW5nKCkKICAgICAgICAgc3VwZXIoV2luUG9y
dCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQorCisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49Tm9uZSwg
c2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgICAgICAjIE5vdGUgdGhhdCB3
ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFycyB0aGUgdGltZQor
ICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRlIGFuZCBmbHVzaCB0
aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKKyAgICAgICAgIyBsb3RzIG9mIHNpbXVsdGFu
ZW91cyBjcmFzaGVzIGdvaW5nIG9uLgorICAgICAgICAjIEZJWE1FOiBTaG91bGQgbW9zdCBvZiB0
aGlzIGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/CisgICAgICAgIHRpbWVfZm4gPSB0aW1lX2Zu
IG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAK
KyAgICAgICAgY3Jhc2hfbG9nID0gJycKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhz
ZWxmLmhvc3QpCisgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorICAgICAgICAjIEZJWE1FOiBkZWxl
dGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29kZSBpcyB3b3JraW5nIC4uLgorICAgICAg
ICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBz
dHIocGlkKSkpCisgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRp
b24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQorICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFu
ZCBub3cgPD0gZGVhZGxpbmU6CisgICAgICAgICAgICAjIElmIHRoZSBzeXN0ZW1fcGlkIGhhc24n
dCBiZWVuIGRldGVybWluZWQgeWV0LCBqdXN0IHRyeSB3aXRoIHRoZSBwYXNzZWQgaW4gcGlkLiAg
V2UnbGwgYmUgY2hlY2tpbmcgYWdhaW4gbGF0ZXIKKyAgICAgICAgICAgIHN5c3RlbV9waWQgPSBz
ZWxmLl9leGVjdXRpdmUucGlkX3RvX3N5c3RlbV9waWQuZ2V0KHBpZCkKKyAgICAgICAgICAgIGlm
IHN5c3RlbV9waWQgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBicmVhayAgIyBXZSBoYXZlbid0
IG1hcHBlZCBjeWd3aW4gcGlkLT53aW4gcGlkIHlldAorICAgICAgICAgICAgY3Jhc2hfbG9nID0g
Y3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwgc3lzdGVtX3BpZCwgaW5jbHVkZV9lcnJv
cnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuLCBwb3J0PXNlbGYpCisgICAgICAgICAgICBp
ZiBub3Qgd2FpdF9mb3JfbG9nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBp
ZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRs
aW5lcygpIGlmIGxpbmUuc3RhcnRzd2l0aCgncXVpdDonKV06CisgICAgICAgICAgICAgICAgc2xl
ZXBfZm4oMC4xKQorICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorCisgICAgICAgIGlm
IG5vdCBjcmFzaF9sb2c6CisgICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwgTm9uZSkKKyAgICAg
ICAgcmV0dXJuIChzdGRlcnIsIGNyYXNoX2xvZykKKworICAgIGRlZiBsb29rX2Zvcl9uZXdfY3Jh
c2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6CisgICAgICAgICIi
IlNpbmNlIGNyYXNoIGxvZ3MgY2FuIHRha2UgYSBsb25nIHRpbWUgdG8gYmUgd3JpdHRlbiBvdXQg
aWYgdGhlIHN5c3RlbSBpcworICAgICAgICAgICB1bmRlciBzdHJlc3MgZG8gYSBzZWNvbmQgcGFz
cyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICAgICBjcmFzaGVzOiB0ZXN0
X25hbWUgLT4gcGlkLCBwcm9jZXNzX25hbWUgdHVwbGUgb2YgY3Jhc2hlZCBwcm9jZXNzCisgICAg
ICAgICAgIHN0YXJ0X3RpbWU6IHRpbWUgdGhlIHRlc3RzIHN0YXJ0ZWQgYXQuICBXZSdyZSBsb29r
aW5nIGZvciBjcmFzaAorICAgICAgICAgICAgICAgbG9ncyBhZnRlciB0aGF0IHRpbWUuCisgICAg
ICAgICIiIgorICAgICAgICBjcmFzaF9sb2dzID0ge30KKyAgICAgICAgZm9yICh0ZXN0X25hbWUs
IHByb2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKKyAgICAgICAgICAgICMg
UGFzc2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBhc3MgYWZ0ZXIgdGhl
IHRlc3QgZmluaXNoZWQgc28KKyAgICAgICAgICAgICMgaWYgdGhlIG91dHB1dCBoYWQgYW55IGxv
Z2dpbmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KKyAgICAgICAgICAgIGNy
YXNoX2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBwaWQsIE5vbmUsIE5v
bmUsIHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1GYWxzZSlbMV0KKyAgICAgICAgICAgIGlmIGNy
YXNoX2xvZzoKKyAgICAgICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFtZV0gPSBjcmFzaF9s
b2cKKyAgICAgICAgcmV0dXJuIGNyYXNoX2xvZ3MKKworICAgIGRlZiBmaW5kX3N5c3RlbV9waWQo
c2VsZiwgbmFtZSwgcGlkKToKKyAgICAgICAgc3lzdGVtX3BpZCA9IGludChwaWQpCisgICAgICAg
ICMgV2luZG93cyBhbmQgQ3lnd2luIFBJRHMgYXJlIG5vdCB0aGUgc2FtZS4gIFdlIG5lZWQgdG8g
ZmluZCB0aGUgV2luZG93cworICAgICAgICAjIFBJRCBmb3Igb3VyIEN5Z3dpbiBwcm9jZXNzIHNv
IHdlIGNhbiBtYXRjaCBpdCBsYXRlciB0byBhbnkgY3Jhc2gKKyAgICAgICAgIyBmaWxlcyB3ZSBl
bmQgdXAgY3JlYXRpbmcgKHdoaWNoIHdpbGwgYmUgdGFnZ2VkIHdpdGggdGhlIFdpbmRvd3MgUElE
KQorICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsncHMn
LCAnLWUnXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9yKQorICAgICAgICBm
b3IgbGluZSBpbiBwc19wcm9jZXNzLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHRva2VucyA9
IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
Y3BpZCwgcHBpZCwgcGdpZCwgd2lucGlkLCB0dHksIHVpZCwgc3RpbWUsIHByb2Nlc3NfbmFtZSA9
IHRva2VucworICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZS5lbmRzd2l0aChuYW1lKToK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnBpZF90b19zeXN0ZW1fcGlkW2lu
dChjcGlkKV0gPSBpbnQod2lucGlkKQorICAgICAgICAgICAgICAgICAgICBpZiBpbnQocGlkKSA9
PSBpbnQoY3BpZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fcGlkID0gaW50KHdp
bnBpZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1
ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gc3lzdGVt
X3BpZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbl91bml0dGVzdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2luX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMyArMTA3LDEyIEBAIGNsYXNzIFdpblBv
cnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3QKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNf
ZmlsZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubWFrZV9wb3J0
KCkuZXhwZWN0YXRpb25zX2ZpbGVzKCkpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxl
bihzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKHdlYmtpdF90ZXN0X3J1bm5lcj1U
cnVlLCBjb25maWd1cmF0aW9uPSdSZWxlYXNlJykpLmV4cGVjdGF0aW9uc19maWxlcygpKSwgNSkK
KworICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6CisgICAgICAgICMgV2luIGNyYXNo
IGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgY3Jhc2guCisgICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKKyAgICAgICAgICAgIHRp
bWVzID0gWzAsIDIwLCA0MF0KKyAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgw
KQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSd3aW4nKQorICAgICAg
ICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsICcnLCAnJywgMCwK
KyAgICAgICAgICAgIHRpbWVfZm49ZmFrZV90aW1lX2NiKCksIHNsZWVwX2ZuPWxhbWJkYSBkZWxh
eTogTm9uZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203648</attachid>
            <date>2013-06-03 20:51:58 -0700</date>
            <delta_ts>2013-06-04 14:48:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117098-20130603205035.patch</filename>
            <type>text/plain</type>
            <size>28293</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1MTE0OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQwIEBACisyMDEzLTA2LTAzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgorCisgICAgICAgIFtXaW5kb3dzXSBOUldUIGlzIG5vdCBwdXR0aW5nIGNyYXNoIGxvZ3MgaW4g
cHJvcGVyIHBsYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTcwOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBQcm92aWRlIHdpbmRvd3Mtc3BlY2lmaWMgb3ZlcmxvYWRzIGZvciB2YXJpb3VzIFBvcnQg
ZmVhdHVyZXMgbmVlZGVkIHRvIGNyZWF0ZSBhbmQgY2FwdHVyZQorICAgICAgICBjcmFzaCBsb2dz
LiAgVGhpcyBjaGFuZ2UgbWFrZXMgaXQgcG9zc2libGUgdG8gdmlldyBjcmFzaCBsb2dzICh3aGVu
IGNyZWF0ZWQpIGFzIHBhcnQgb2YgdGhlCisgICAgICAgIHN1bW1hcnkgcmVwb3J0IGF0IHRoZSBl
bmQgb2YgdGhlIE5SV1QgcnVuLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2NyYXNobG9ncy5weToKKyAgICAgICAgKENyYXNoTG9ncy5maW5kX25ld2VzdF9sb2cp
OiBBZGQgc3VwcG9ydCBmb3Igd2luMzIgY3Jhc2ggbG9ncworICAgICAgICAoQ3Jhc2hMb2dzLl9m
aW5kX25ld2VzdF9sb2dfd2luKTogQWRkZWQKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5OgorICAgICAgICAobWFrZV9tb2NrX2Ny
YXNoX3JlcG9ydF93aW4pOiBBZGRlZAorICAgICAgICAoQ3Jhc2hMb2dzVGVzdC50ZXN0X2ZpbmRf
bG9nX3dpbik6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9leGVjdXRpdmUucHk6CisgICAgICAgIChFeGVjdXRpdmUucnVubmluZ19waWRzKTogQWRkIHN1
cHBvcnQgZm9yIEN5Z3dpbiB3aW4zMiBjcmFzaCBsb2dzCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5OgorICAgICAgICAoTW9ja0V4ZWN1
dGl2ZS5fX2luaXRfXyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHk6CisgICAgICAgIChSZWFsRmlsZVN5c3RlbVRlc3QudGVz
dF9yZWFkX2FuZF93cml0ZV9maWxlKTogQWRkIHRlc3RzIGZvcgorICAgICAgICBtYWxmb3JtZWQg
YXNjaWkvdXRmOCBoYW5kbGluZyAoaS5lLiwgV2luZG93cyBsb2cgZmlsZXMpCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LmZpbmRfc3lzdGVt
X3BpZCk6IEFkZGVkCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5OgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3RhcnQpOiBHYXRoZXIgd2luZG93cyBQ
SURzIHRvIG1hdGNoIHVwIHdpdGggQ3lnd2luIFBJRHMKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvd2luLnB5OgorICAgICAgICAoV2luUG9ydC5zZXR1cF9jcmFzaF9sb2dfc2F2aW5n
KTogRG9uJ3Qgb3BlbiB3aW5kb3dzIHNoZWxsICh3aGljaCBtaWdodCBnZXQgc3R1Y2sgd2FpdGlu
ZworICAgICAgICBmb3IgdXNlciB0byBoaXQgZW50ZXIuCisgICAgICAgIChXaW5Qb3J0Ll9nZXRf
Y3Jhc2hfbG9nKTogQWRkZWQKKyAgICAgICAgKFdpblBvcnQubG9va19mb3JfbmV3X2NyYXNoX2xv
Z3MpOiBBZGRlZAorICAgICAgICAoV2luUG9ydC5maW5kX3N5c3RlbV9waWQpOiBBZGRlZAorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC93aW5fdW5pdHRlc3QucHk6CisgICAgICAgIChX
aW5Qb3J0VGVzdC50ZXN0X2dldF9jcmFzaF9sb2cpOiBBZGRlZCB0ZXN0CisKIDIwMTMtMDYtMDMg
IEVkdWFyZG8gTGltYSBNaXRldiAgPGVsaW1hQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0VGTF0g
QWRkIEFUSyB2ZXJzaW9uIDIuOC4wIHRvIGVmbCBqaGJ1aWxkIG1vZHVsZXNldApJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2NyYXNobG9ncy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzLnB5CShy
ZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
Y3Jhc2hsb2dzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMjIgQEAKICMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBjb2RlY3MKIGltcG9ydCByZQogCiAKIGNs
YXNzIENyYXNoTG9ncyhvYmplY3QpOgorCisgICAgUElEX0xJTkVfUkVHRVggPSByZS5jb21waWxl
KHInXHMrR2xvYmFsXHMrUElEOlxzK1xbKD9QPHBpZD5cZCspXF0nKQorCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGhvc3QpOgogICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAogCi0gICAgZGVmIGZp
bmRfbmV3ZXN0X2xvZyhzZWxmLCBwcm9jZXNzX25hbWUsIHBpZD1Ob25lLCBpbmNsdWRlX2Vycm9y
cz1GYWxzZSwgbmV3ZXJfdGhhbj1Ob25lKToKKyAgICBkZWYgZmluZF9uZXdlc3RfbG9nKHNlbGYs
IHByb2Nlc3NfbmFtZSwgcGlkPU5vbmUsIGluY2x1ZGVfZXJyb3JzPUZhbHNlLCBuZXdlcl90aGFu
PU5vbmUsIHBvcnQ9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfbWFj
KCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmluZF9uZXdlc3RfbG9nX2Rhcndpbihwcm9j
ZXNzX25hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnMsIG5ld2VyX3RoYW4pCisgICAgICAgIGVsaWYg
c2VsZi5faG9zdC5wbGF0Zm9ybS5pc193aW4oKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9m
aW5kX25ld2VzdF9sb2dfd2luKHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3
ZXJfdGhhbiwgcG9ydCkKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfbG9nX2RpcmVj
dG9yeV9kYXJ3aW4oc2VsZik6CkBAIC03MSw0ICs3NywzNiBAQCBjbGFzcyBDcmFzaExvZ3Mob2Jq
ZWN0KToKIAogICAgICAgICBpZiBpbmNsdWRlX2Vycm9ycyBhbmQgZXJyb3JzOgogICAgICAgICAg
ICAgcmV0dXJuIGVycm9ycworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9maW5kX25l
d2VzdF9sb2dfd2luKHNlbGYsIHByb2Nlc3NfbmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycywgbmV3
ZXJfdGhhbiwgcG9ydCk6CisgICAgICAgIGRlZiBpc19jcmFzaF9sb2coZnMsIGRpcnBhdGgsIGJh
c2VuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZS5zdGFydHN3aXRoKCJDcmFzaExv
ZyIpCisKKyAgICAgICAgbG9ncyA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5maWxlc191bmRlcihw
b3J0LnJlc3VsdHNfZGlyZWN0b3J5KCksIGZpbGVfZmlsdGVyPWlzX2NyYXNoX2xvZykKKyAgICAg
ICAgZXJyb3JzID0gJycKKyAgICAgICAgZm9yIHBhdGggaW4gcmV2ZXJzZWQoc29ydGVkKGxvZ3Mp
KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3ZXJfdGhhbiBv
ciBzZWxmLl9ob3N0LmZpbGVzeXN0ZW0ubXRpbWUocGF0aCkgPiBuZXdlcl90aGFuOgorICAgICAg
ICAgICAgICAgICAgICBsb2dfZmlsZSA9IHNlbGYuX2hvc3QuZmlsZXN5c3RlbS5yZWFkX2JpbmFy
eV9maWxlKHBhdGgpLmRlY29kZSgndXRmOCcsICdpZ25vcmUnKQorICAgICAgICAgICAgICAgICAg
ICBtYXRjaCA9IHNlbGYuUElEX0xJTkVfUkVHRVguc2VhcmNoKGxvZ19maWxlKQorICAgICAgICAg
ICAgICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgaW50KG1hdGNoLmdyb3VwKCdwaWQnKSkgPT0g
cGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9ycyArIGxvZ19maWxlCisg
ICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBwcmludCAiSU9F
cnJvciAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAgICAgICBpZiBpbmNsdWRlX2Vycm9yczoKKyAg
ICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJFUlJPUjogRmFpbGVkIHRvIHJlYWQgJyVzJzog
JXNcbiIgJSAocGF0aCwgc3RyKGUpKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Cisg
ICAgICAgICAgICAgICAgcHJpbnQgIk9TRXJyb3IgJXMiICUgc3RyKGUpCisgICAgICAgICAgICAg
ICAgaWYgaW5jbHVkZV9lcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyArPSAiRVJS
T1I6IEZhaWxlZCB0byByZWFkICclcyc6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKKyAgICAgICAg
ICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgcHJpbnQg
IlVuaWNvZGVEZWNvZGVFcnJvciAlcyIgJSBzdHIoZSkKKyAgICAgICAgICAgICAgICBpZiBpbmNs
dWRlX2Vycm9yczoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzICs9ICJFUlJPUjogRmFpbGVk
IHRvIGRlY29kZSAnJXMnIGFzIHV0Zjg6ICVzXG4iICUgKHBhdGgsIHN0cihlKSkKKworICAgICAg
ICBpZiBpbmNsdWRlX2Vycm9ycyBhbmQgZXJyb3JzOgorICAgICAgICAgICAgcmV0dXJuIGVycm9y
cwogICAgICAgICByZXR1cm4gTm9uZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2NyYXNobG9nc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hsb2dzX3VuaXR0ZXN0LnB5CShyZXZpc2lv
biAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vY3Jhc2hs
b2dzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBAIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0IGkKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CiBmcm9tIHdlYmtpdHB5
LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogCisjIE5lZWRlZCB0byBzdXBwb3J0IFdpbmRv
d3MgcG9ydCB0ZXN0cworZnJvbSB3ZWJraXRweS5wb3J0LndpbiBpbXBvcnQgV2luUG9ydAogCiBk
ZWYgbWFrZV9tb2NrX2NyYXNoX3JlcG9ydF9kYXJ3aW4ocHJvY2Vzc19uYW1lLCBwaWQpOgogICAg
IHJldHVybiAiIiJQcm9jZXNzOiAgICAgICAgIHtwcm9jZXNzX25hbWV9IFt7cGlkfV0KQEAgLTY4
LDYgKzcwLDE2OCBAQCBQQ0kgQ2FyZDogTlZJRElBIEdlRm9yY2UgR1QgMTIwLCBzcHBjaV9kCiBT
ZXJpYWwgQVRBIERldmljZTogT1BUSUFSQyBEVkQgUlcgQUQtNTY3MFMKICIiIi5mb3JtYXQocHJv
Y2Vzc19uYW1lPXByb2Nlc3NfbmFtZSwgcGlkPXBpZCkKIAorCitkZWYgbWFrZV9tb2NrX2NyYXNo
X3JlcG9ydF93aW4ocHJvY2Vzc19uYW1lLCBwaWQpOgorICAgIHJldHVybiAiIiJPcGVuZWQgbG9n
IGZpbGUgJ0M6XFByb2plY3RzXFdlYktpdFxPcGVuU291cmNlXFdlYktpdEJ1aWxkXFJlbGVhc2Vc
YmluMzJcbGF5b3V0LXRlc3QtcmVzdWx0c1xDcmFzaExvZ18xZDU4XzIwMTMtMDYtMDNfMTItMjEt
MjAtMTEwLnR4dCcKKzA6MDAwPiAuc3JjcGF0aCAiQzpcUHJvamVjdHNcV2ViS2l0XE9wZW5Tb3Vy
Y2UiCitTb3VyY2Ugc2VhcmNoIHBhdGggaXM6IEM6XFByb2plY3RzXFdlYktpdFxPcGVuU291cmNl
CiswOjAwMD4gIWFuYWx5emUgLXZ2CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIEFuYWx5c2lz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqKiBFUlJPUjogU3ltYm9sIGZpbGUgY291
bGQgbm90IGJlIGZvdW5kLiAgRGVmYXVsdGVkIHRvIGV4cG9ydCBzeW1ib2xzIGZvciBDOlxQcm9q
ZWN0c1xXZWJLaXRcT3BlblNvdXJjZVxXZWJLaXRCdWlsZFxSZWxlYXNlXGJpbjMyXGxpYmRpc3Bh
dGNoLmRsbCAtCisqKiogRVJST1I6IFN5bWJvbCBmaWxlIGNvdWxkIG5vdCBiZSBmb3VuZC4gIERl
ZmF1bHRlZCB0byBleHBvcnQgc3ltYm9scyBmb3IgQzpcV2luZG93c1xTWVNURU0zMlxhdGl1bWRh
Zy5kbGwgLQorCitGQVVMVElOR19JUDoKK0phdmFTY3JpcHRDb3JlIUpTQzo6SlNBY3RpdmF0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3QrMCBbYzpccHJvamVjdHNcd2Via2l0XG9wZW5zb3VyY2Vcc291
cmNlXGphdmFzY3JpcHRjb3JlXHJ1bnRpbWVcanNhY3RpdmF0aW9uLmNwcCBAIDE0Nl0KKzAxZTNk
MDcwIDU1ICAgICAgICAgICAgICBwdXNoICAgIGVicAorCitFWENFUFRJT05fUkVDT1JEOiAgMDAw
OTJjYzggLS0gKC5leHIgMHg5MmNjOCkKKy5leHIgMHg5MmNjOAorRXhjZXB0aW9uQWRkcmVzczog
MDFlM2QwNzAgKEphdmFTY3JpcHRDb3JlIUpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0
eVNsb3QpCisgICBFeGNlcHRpb25Db2RlOiBjMDAwMDBmZCAoU3RhY2sgb3ZlcmZsb3cpCisgIEV4
Y2VwdGlvbkZsYWdzOiAwMDAwMDAwMAorTnVtYmVyUGFyYW1ldGVyczogMgorICAgUGFyYW1ldGVy
WzBdOiAwMDAwMDAwMQorICAgUGFyYW1ldGVyWzFdOiAwMDA5MmZmYworCitGQVVMVElOR19USFJF
QUQ6ICAwMDAwMGU2OAorUFJPQ0VTU19OQU1FOiAge3Byb2Nlc3NfbmFtZX0KK0VSUk9SX0NPREU6
IChOVFNUQVRVUykgMHhjMDAwMDAwNSAtIFRoZSBpbnN0cnVjdGlvbiBhdCAweCUwOGx4IHJlZmVy
ZW5jZWQgbWVtb3J5IGF0IDB4JTA4bHguIFRoZSBtZW1vcnkgY291bGQgbm90IGJlICVzLgorRVhD
RVBUSU9OX0NPREU6IChOVFNUQVRVUykgMHhjMDAwMDAwNSAtIFRoZSBpbnN0cnVjdGlvbiBhdCAw
eCUwOGx4IHJlZmVyZW5jZWQgbWVtb3J5IGF0IDB4JTA4bHguIFRoZSBtZW1vcnkgY291bGQgbm90
IGJlICVzLgorRVhDRVBUSU9OX0NPREVfU1RSOiAgYzAwMDAwMDUKK0VYQ0VQVElPTl9QQVJBTUVU
RVIxOiAgMDAwMDAwMDAKK0VYQ0VQVElPTl9QQVJBTUVURVIyOiAgMDAwOTAwMDAKK1JFQURfQURE
UkVTUzogIDAwMDkwMDAwCisKK0ZPTExPV1VQX0lQOgorSmF2YVNjcmlwdENvcmUhSlNDOjpKU0Fj
dGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdCswIFtjOlxwcm9qZWN0c1x3ZWJraXRcb3BlbnNv
dXJjZVxzb3VyY2VcamF2YXNjcmlwdGNvcmVccnVudGltZVxqc2FjdGl2YXRpb24uY3BwIEAgMTQ2
XQorMDFlM2QwNzAgNTUgICAgICAgICAgICAgIHB1c2ggICAgZWJwCisKK1dBVFNPTl9CS1RfUFJP
Q1NUQU1QOiAgNTFhOGY5NzkKK1dBVFNPTl9CS1RfTU9EVUxFOiAgTVNWQ1IxMDAuZGxsCitXQVRT
T05fQktUX01PRFZFUjogIDEwLjAuNDAyMTkuMzI1CitXQVRTT05fQktUX01PRFNUQU1QOiAgNGRm
MmJlMWUKK1dBVFNPTl9CS1RfTU9ET0ZGU0VUOiAgMTYwZDcKK01PRFVMRV9WRVJfUFJPRFVDVDog
IE1pY3Jvc29mdChSKSBWaXN1YWwgU3R1ZGlvKFIpIDIwMTAKK0JVSUxEX1ZFUlNJT05fU1RSSU5H
OiAgNi4yLjkyMDAuMTYzODQgKHdpbjhfcnRtLjEyMDcyNS0xMjQ3KQorTlRHTE9CQUxGTEFHOiAg
MAorQVBQTElDQVRJT05fVkVSSUZJRVJfRkxBR1M6ICAwCitBUFA6ICB7cHJvY2Vzc19uYW1lfQor
CitBTkFMWVNJU19TRVNTSU9OX0hPU1Q6ICBGVUxHQlItUEMKKworQU5BTFlTSVNfU0VTU0lPTl9U
SU1FOiAgMDYtMDMtMjAxMyAxMjoyMToyMC4wMTExCisKK0NPTlRFWFQ6ICAwMDA5MmQxOCAtLSAo
LmN4ciAweDkyZDE4KQorLmN4ciAweDkyZDE4CitlYXg9MDFlM2QwNzAgZWJ4PTAwMDkzMGJjIGVj
eD03ZmUwM2VkMCBlZHg9MDc1MWUxNjggZXNpPTA3YTdmZjk4IGVkaT0wNzkxZmY3OAorZWlwPTAx
ZTNkMDcwIGVzcD0wMDA5MzAwMCBlYnA9MDAwOTMwNmMgaW9wbD0wICAgICAgICAgbnYgdXAgZWkg
bmcgbnogYWMgcG8gY3kKK2NzPTAwMjMgIHNzPTAwMmIgIGRzPTAwMmIgIGVzPTAwMmIgIGZzPTAw
NTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMjEwMjkzCitKYXZhU2NyaXB0Q29yZSFKU0M6
OkpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90OgorMDFlM2QwNzAgNTUgICAgICAgICAg
ICAgIHB1c2ggICAgZWJwCisuY3hyCitSZXNldHRpbmcgZGVmYXVsdCBzY29wZQorCitSRUNVUlJJ
TkdfU1RBQ0s6IEZyb20gZnJhbWVzIDB4MTQgdG8gMHgxZAorCitUSFJFQURfQVRUUklCVVRFUzoK
KworWyBHTE9CQUwgXQorCisgICAgR2xvYmFsICAgICBQSUQ6IFt7cGlkfV0KKyAgICBHbG9iYWwg
ICAgIFRocmVhZF9Db3VudDogWzE5XQorICAgIEdsb2JhbCAgICAgUGFnZVNpemU6IFs0MDk2XQor
ICAgIEdsb2JhbCAgICAgTW9kTGlzdF9TSEExX0hhc2g6IFthYWNlZjRlN2U4M2I5YmRkYzljZDBj
YzA5NGRhYzg4ZDUzMWVhNGEzXQorICAgIEdsb2JhbCAgICAgQ29tbWFuZExpbmU6IFtDOlxQcm9q
ZWN0c1xXZWJLaXRcT3BlblNvdXJjZVxXZWJLaXRCdWlsZFxSZWxlYXNlXGJpbjMyXHtwcm9jZXNz
X25hbWV9IC1dCisgICAgR2xvYmFsICAgICBEZXNrdG9wX05hbWU6IFtXaW5zdGEwXERlZmF1bHRd
CisgICAgR2xvYmFsICAgICBQcm9jZXNzTmFtZTogW3twcm9jZXNzX25hbWV9XQorICAgIEdsb2Jh
bCAgICAgRGVidWdnZXJfQ1BVX0FyY2hpdGVjdHVyZTogW1g4Nl0KKyAgICBHbG9iYWwgICAgIENQ
VV9Qcm9jZXNzb3JDb3VudDogWzI0XQorICAgIEdsb2JhbCAgICAgQ1BVX01IWjogWzE1OTZdCisg
ICAgR2xvYmFsICAgICBDUFVfQXJjaGl0ZWN0dXJlOiBbWDg2XQorICAgIEdsb2JhbCAgICAgQ1BV
X0ZhbWlseTogWzZdCisgICAgR2xvYmFsICAgICBDUFVfTW9kZWw6IFsxMl0KKyAgICBHbG9iYWwg
ICAgIENQVV9TdGVwcGluZzogWzJdCisgICAgR2xvYmFsICAgICBDUFVfVmVuZG9yU3RyaW5nOiBb
R2VudWluZUludGVsXQorICAgIEdsb2JhbCAgICAgTG9hZGVkTW9kdWxlX0NvdW50OiBbODJdCisg
ICAgR2xvYmFsICAgICBQcm9jZXNzQmVpbmdEZWJ1Z2dlZAorICAgIEdsb2JhbCAgICAgR0ZsYWdz
OiBbMF0KKyAgICBHbG9iYWwgICAgIEFwcGxpY2F0aW9uX1ZlcmlmZXJfRmxhZ3M6IFswXQorICAg
IEdsb2JhbCAgICAgRmluYWxFeGg6IFsyMDEyMDkzOTQzXQorICAgIEdsb2JhbCAgICAgU3lzdGVt
VXBUaW1lOiBbMyBkYXlzIDIzOjUyOjU2LjAwMF0KKyAgICBHbG9iYWwgICAgIFN5c3RlbVVwVGlt
ZTogWzM0NTE3Nl0KKyAgICBHbG9iYWwgICAgIFByb2Nlc3NVcFRpbWU6IFswIGRheXMgMDowMDow
MC4wMDBdCisgICAgR2xvYmFsICAgICBQcm9jZXNzVXBUaW1lOiBbMF0KKyAgICBHbG9iYWwgICAg
IEN1cnJlbnRUaW1lRGF0ZTogW01vbiBKdW4gIDMgMTI6MjE6MjAuMDAwIDIwMTMgKFVUQyAtIDc6
MDApXQorICAgIEdsb2JhbCAgICAgQ3VycmVudFRpbWVEYXRlOiBbMTM3MDI4NzI4MF0KKyAgICBH
bG9iYWwgICAgIFByb2R1Y3RUeXBlOiBbMV0KKyAgICBHbG9iYWwgICAgIFN1aXRlTWFzazogWzI3
Ml0KKyAgICBHbG9iYWwgICAgIEFwcGxpY2F0aW9uTmFtZTogW3twcm9jZXNzX25hbWV9XQorICAg
IEdsb2JhbCAgICAgQVNMUl9FbmFibGVkCisgICAgR2xvYmFsICAgICBTYWZlU0VIX0VuYWJsZWQK
KworRkFVTFRfSU5TVFJfQ09ERTogIDgzZWM4YjU1CisKK0ZBVUxUSU5HX1NPVVJDRV9MSU5FOiAg
YzpccHJvamVjdHNcd2Via2l0XG9wZW5zb3VyY2Vcc291cmNlXGphdmFzY3JpcHRjb3JlXHJ1bnRp
bWVcanNhY3RpdmF0aW9uLmNwcAorCitGQVVMVElOR19TT1VSQ0VfRklMRTogIGM6XHByb2plY3Rz
XHdlYmtpdFxvcGVuc291cmNlXHNvdXJjZVxqYXZhc2NyaXB0Y29yZVxydW50aW1lXGpzYWN0aXZh
dGlvbi5jcHAKKworRkFVTFRJTkdfU09VUkNFX0xJTkVfTlVNQkVSOiAgMTQ2CisKK1NZTUJPTF9T
VEFDS19JTkRFWDogIDAKKworU1lNQk9MX05BTUU6ICBqYXZhc2NyaXB0Y29yZSFKU0M6OkpTQWN0
aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KzkyZmZjCisKK0ZPTExPV1VQX05BTUU6ICBNYWNo
aW5lT3duZXIKKworTU9EVUxFX05BTUU6IEphdmFTY3JpcHRDb3JlCisKK0lNQUdFX05BTUU6ICBK
YXZhU2NyaXB0Q29yZS5kbGwKKworREVCVUdfRkxSX0lNQUdFX1RJTUVTVEFNUDogIDUxYWNlNDcz
CisKK1NUQUNLX0NPTU1BTkQ6ICAuY3hyIDAwMDkyRDE4IDsga2IgOyBkcHMgOTMwMDAgOyBrYgor
CitGQUlMVVJFX0JVQ0tFVF9JRDogIFNUQUNLX09WRVJGTE9XX2MwMDAwMDA1X0phdmFTY3JpcHRD
b3JlLmRsbCFKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90CisKK0JVQ0tFVF9J
RDogIEFQUExJQ0FUSU9OX0ZBVUxUX1NUQUNLX09WRVJGTE9XX0lOVkFMSURfUE9JTlRFUl9SRUFE
X2phdmFzY3JpcHRjb3JlIUpTQzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QrOTJm
ZmMKKworQU5BTFlTSVNfU0VTU0lPTl9FTEFQU0VEX1RJTUU6IDE4ZGYKKworRm9sbG93dXA6IE1h
Y2hpbmVPd25lcgorLS0tLS0tLS0tCisKKzA6MDAwPiB+KmtwbgorCisuICAwICBJZDogMThlMC5l
NjggU3VzcGVuZDogMSBUZWI6IDdmZmRkMDAwIFVuZnJvemVuCisgIyBDaGlsZEVCUCBSZXRBZGRy
CiswMCAwMDA5MmEwOCA3MjYxZWNlMSBNU1ZDUjEwMCFfYWxsb2NhX3Byb2JlKzB4MjcKKzAxIDAw
MDkyYTRjIDcyNjFhNWQwIE1TVkNSMTAwIV93cml0ZSsweDk1CiswMiAwMDA5MmE2YyA3MjYxZWY2
YiBNU1ZDUjEwMCFfZmx1c2grMHgzYgorMDMgMDAwOTJhN2MgNzI2MWVmMWMgTVNWQ1IxMDAhX2Zm
bHVzaF9ub2xvY2srMHgxYworMDQgMDAwOTJhYjQgMTAwMGY4MTQgTVNWQ1IxMDAhZmZsdXNoKzB4
MzAKKzA1IDAwMDkyYWM4IDc3YzAwODRlIER1bXBSZW5kZXJUcmVlXzEwMDAwMDAwIWV4Y2VwdGlv
bkZpbHRlcihzdHJ1Y3QgX0VYQ0VQVElPTl9QT0lOVEVSUyAqIF9fZm9ybWFsID0gMHg4NTJhYzgw
NykrMHgyNCBbYzpccHJvamVjdHNcd2Via2l0XG9wZW5zb3VyY2VcdG9vbHNcZHVtcHJlbmRlcnRy
ZWVcd2luXGR1bXByZW5kZXJ0cmVlLmNwcCBAIDEyODFdCiswNiAwMDA5MmI2MCA3N2U4YmYyYyBL
RVJORUxCQVNFIVVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcisweDE2NAorMDcgMDAwOTJiNjggNzdl
NTMwYjQgbnRkbGwhX19SdGxVc2VyVGhyZWFkU3RhcnQrMHg1NworMDggMDAwOTJiN2MgNzdlMTUy
NDYgbnRkbGwhX0VINF9DYWxsRmlsdGVyRnVuYysweDEyCiswOSAwMDA5MmJhNCA3N2UxNTFiMSBu
dGRsbCFfZXhjZXB0X2hhbmRsZXI0X2NvbW1vbisweDhlCiswYSAwMDA5MmJjNCA3N2U1MmU3MSBu
dGRsbCFfZXhjZXB0X2hhbmRsZXI0KzB4MjAKKzBiIDAwMDkyYmU4IDc3ZTUyZTQzIG50ZGxsIUV4
ZWN1dGVIYW5kbGVyMisweDI2CiswYyAwMDA5MmNiMCA3N2U1MmNiYiBudGRsbCFFeGVjdXRlSGFu
ZGxlcisweDI0CiswZCAwMDA5MmNiMCAwMWUzZDA3MCBudGRsbCFLaVVzZXJFeGNlcHRpb25EaXNw
YXRjaGVyKzB4ZgorMGUgMDAwOTJmZmMgMDFlNjdkMjUgSmF2YVNjcmlwdENvcmUhSlNDOjpKU0Fj
dGl2YXRpb246OmdldE93blByb3BlcnR5U2xvdChjbGFzcyBKU0M6OkpTQ2VsbCAqIGNlbGwgPSAw
eDA3YTdmZjk4LCBjbGFzcyBKU0M6OkV4ZWNTdGF0ZSAqIGV4ZWMgPSAweDA3NTFlMTY4LCBjbGFz
cyBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBjbGFzcyBKU0M6OlByb3BlcnR5TmFt
ZSwgY2xhc3MgSlNDOjpQcm9wZXJ0eVNsb3QgKiBzbG90ID0gMHgwMDA5MzBiYykgW2M6XHByb2pl
Y3RzXHdlYmtpdFxvcGVuc291cmNlXHNvdXJjZVxqYXZhc2NyaXB0Y29yZVxydW50aW1lXGpzYWN0
aXZhdGlvbi5jcHAgQCAxNDZdCiswZiAwMDA5MzA2YyAwMWU2ODgzNyBKYXZhU2NyaXB0Q29yZSFK
U0M6OkpTU2NvcGU6OnJlc29sdmVDb250YWluaW5nU2NvcGVJbnRlcm5hbDwxLDI+KGNsYXNzIEpT
Qzo6RXhlY1N0YXRlICogY2FsbEZyYW1lID0gMHgwNzUxZTE2OCwgY2xhc3MgSlNDOjpJZGVudGlm
aWVyICogaWRlbnRpZmllciA9IDB4N2ZlMGViYzAsIGNsYXNzIEpTQzo6UHJvcGVydHlTbG90ICog
c2xvdCA9IDB4N2ZlMDNlZDAsIGNsYXNzIFdURjo6VmVjdG9yPEpTQzo6UmVzb2x2ZU9wZXJhdGlv
biwwLFdURjo6Q3Jhc2hPbk92ZXJmbG93PiAqIG9wZXJhdGlvbnMgPSAweDdmZGExNmMwLCBzdHJ1
Y3QgSlNDOjpQdXRUb0Jhc2VPcGVyYXRpb24gKiBwdXRUb0Jhc2VPcGVyYXRpb24gPSAweDAwMDAw
MDAwLCBib29sIF9fZm9ybWFsID0gZmFsc2UpKzB4MjA1IFtjOlxwcm9qZWN0c1x3ZWJraXRcb3Bl
bnNvdXJjZVxzb3VyY2VcamF2YXNjcmlwdGNvcmVccnVudGltZVxqc3Njb3BlLmNwcCBAIDI0N10K
KzEwIDAwMDkzMDkwIDAxZTY1ODYwIEphdmFTY3JpcHRDb3JlIUpTQzo6SlNTY29wZTo6cmVzb2x2
ZUNvbnRhaW5pbmdTY29wZTwxPihjbGFzcyBKU0M6OkV4ZWNTdGF0ZSAqIGNhbGxGcmFtZSA9IDB4
MDc1MWUxNjgsIGNsYXNzIEpTQzo6SWRlbnRpZmllciAqIGlkZW50aWZpZXIgPSAweDdmZTBlYmMw
LCBjbGFzcyBKU0M6OlByb3BlcnR5U2xvdCAqIHNsb3QgPSAweDAwMDkzMGJjLCBjbGFzcyBXVEY6
OlZlY3RvcjxKU0M6OlJlc29sdmVPcGVyYXRpb24sMCxXVEY6OkNyYXNoT25PdmVyZmxvdz4gKiBv
cGVyYXRpb25zID0gMHg3ZmRhMTZjMCwgc3RydWN0IEpTQzo6UHV0VG9CYXNlT3BlcmF0aW9uICog
cHV0VG9CYXNlT3BlcmF0aW9uID0gMHgwMDAwMDAwMCwgYm9vbCBpc1N0cmljdCA9IGZhbHNlKSsw
eDI3IFtjOlxwcm9qZWN0c1x3ZWJraXRcb3BlbnNvdXJjZVxzb3VyY2VcamF2YXNjcmlwdGNvcmVc
cnVudGltZVxqc3Njb3BlLmNwcCBAIDQyN10KKzExIDAwMDkzMTA0IDAxZGNlZWZmIEphdmFTY3Jp
cHRDb3JlIUpTQzo6SlNTY29wZTo6cmVzb2x2ZShjbGFzcyBKU0M6OkV4ZWNTdGF0ZSAqIGNhbGxG
cmFtZSA9IDB4MDc1MWUxNjgsIGNsYXNzIEpTQzo6SWRlbnRpZmllciAqIGlkZW50aWZpZXIgPSAw
eDdmZTBlYmMwLCBjbGFzcyBXVEY6OlZlY3RvcjxKU0M6OlJlc29sdmVPcGVyYXRpb24sMCxXVEY6
OkNyYXNoT25PdmVyZmxvdz4gKiBvcGVyYXRpb25zID0gMHg3ZmRhMTZjMCkrMHhjMCBbYzpccHJv
amVjdHNcd2Via2l0XG9wZW5zb3VyY2Vcc291cmNlXGphdmFzY3JpcHRjb3JlXHJ1bnRpbWVcanNz
Y29wZS5jcHAgQCA0NDddCisKKzA6MDAwPiBxCitxdWl0OgorIiIiLmZvcm1hdChwcm9jZXNzX25h
bWU9cHJvY2Vzc19uYW1lLCBwaWQ9cGlkKQorCiBjbGFzcyBDcmFzaExvZ3NUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9maW5kX2xvZ19kYXJ3aW4oc2VsZik6CiAgICAgICAg
IGlmIG5vdCBTeXN0ZW1Ib3N0KCkucGxhdGZvcm0uaXNfbWFjKCk6CkBAIC0xMTMsMyArMjc3LDQz
IEBAIGNsYXNzIENyYXNoTG9nc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBmaWxl
c3lzdGVtLm10aW1lID0gYmFkX210aW1lCiAgICAgICAgIGxvZyA9IGNyYXNoX2xvZ3MuZmluZF9u
ZXdlc3RfbG9nKCJEdW1wUmVuZGVyVHJlZSIsIG5ld2VyX3RoYW49MS4wLCBpbmNsdWRlX2Vycm9y
cz1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydEluKCdPU0Vycm9yOiBObyBzdWNoIGZpbGUgb3Ig
ZGlyZWN0b3J5JywgbG9nKQorCisgICAgZGVmIHRlc3RfZmluZF9sb2dfd2luKHNlbGYpOgorICAg
ICAgICBpZiBub3QgU3lzdGVtSG9zdCgpLnBsYXRmb3JtLmlzX3dpbigpOgorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgb2xkZXJfbW9ja19jcmFzaF9yZXBvcnQgPSBtYWtlX21vY2tfY3Jh
c2hfcmVwb3J0X3dpbignRHVtcFJlbmRlclRyZWUnLCAyODUyOCkKKyAgICAgICAgbW9ja19jcmFz
aF9yZXBvcnQgPSBtYWtlX21vY2tfY3Jhc2hfcmVwb3J0X3dpbignRHVtcFJlbmRlclRyZWUnLCAy
ODUzMCkKKyAgICAgICAgbmV3ZXJfbW9ja19jcmFzaF9yZXBvcnQgPSBtYWtlX21vY2tfY3Jhc2hf
cmVwb3J0X3dpbignRHVtcFJlbmRlclRyZWUnLCAyODUyOSkKKyAgICAgICAgb3RoZXJfcHJvY2Vz
c19tb2NrX2NyYXNoX3JlcG9ydCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfd2luKCdGb29Qcm9j
ZXNzJywgMjg1MjcpCisgICAgICAgIG1pc2Zvcm1hdHRlZF9tb2NrX2NyYXNoX3JlcG9ydCA9ICdK
dW5rIHRoYXQgc2hvdWxkIG5vdCBhcHBlYXIgaW4gYSBjcmFzaCByZXBvcnQnICsgbWFrZV9tb2Nr
X2NyYXNoX3JlcG9ydF93aW4oJ0R1bXBSZW5kZXJUcmVlJywgMjg1MjYpWzIwMDpdCisgICAgICAg
IGZpbGVzID0ge30KKyAgICAgICAgZmlsZXNbJ34vQ3Jhc2hMb2dfMWQ1OF8yMDEzLTA2LTAzXzEy
LTIxLTIwLTExMC50eHQnXSA9IG9sZGVyX21vY2tfY3Jhc2hfcmVwb3J0CisgICAgICAgIGZpbGVz
Wyd+L0NyYXNoTG9nX2FiY2RfMjAxMy0wNi0wM18xMi0yMi0xOS0xMjkudHh0J10gPSBtb2NrX2Ny
YXNoX3JlcG9ydAorICAgICAgICBmaWxlc1snfi9DcmFzaExvZ18yZWZmXzIwMTMtMDYtMDNfMTIt
MjMtMjAtMTUwLnR4dCddID0gbmV3ZXJfbW9ja19jcmFzaF9yZXBvcnQKKyAgICAgICAgZmlsZXNb
J34vQ3Jhc2hMb2dfMzFhMF8yMDEzLTA2LTAzXzEyLTI0LTIyLTExOS50eHQnXSA9IE5vbmUKKyAg
ICAgICAgZmlsZXNbJ34vQ3Jhc2hMb2dfMDFhM18yMDEzLTA2LTAzXzEyLTI1LTIzLTEyMC50eHQn
XSA9IG90aGVyX3Byb2Nlc3NfbW9ja19jcmFzaF9yZXBvcnQKKyAgICAgICAgZmlsZXNbJ34vQ3Jh
c2hMb2dfYWFkZF8yMDEzLTA2LTAzXzEyLTI2LTI0LTEyMS50eHQnXSA9IG1pc2Zvcm1hdHRlZF9t
b2NrX2NyYXNoX3JlcG9ydAorICAgICAgICBmaWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oZmls
ZXMpCisgICAgICAgIG1vY2tfaG9zdCA9IE1vY2tTeXN0ZW1Ib3N0KG9zX25hbWU9J3dpbicsIGZp
bGVzeXN0ZW09ZmlsZXN5c3RlbSkKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhtb2Nr
X2hvc3QpCisKKyAgICAgICAgd2lucG9ydCA9IFdpblBvcnQobW9ja19ob3N0LCAnd2luLXhwJykK
KyAgICAgICAgd2lucG9ydC5fcmVzdWx0c19kaXJlY3RvcnkgPSAifiIKKworICAgICAgICBsb2cg
PSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZygiRHVtcFJlbmRlclRyZWUiLCAyODUyOSwgcG9y
dD13aW5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKGxvZywgbmV3ZXJf
bW9ja19jcmFzaF9yZXBvcnQpCisgICAgICAgIGxvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3Rf
bG9nKCJEdW1wUmVuZGVyVHJlZSIsIDI4NTMwLCBwb3J0PXdpbnBvcnQpCisgICAgICAgIHNlbGYu
YXNzZXJ0TXVsdGlMaW5lRXF1YWwobG9nLCBtb2NrX2NyYXNoX3JlcG9ydCkKKyAgICAgICAgbG9n
ID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2coIkR1bXBSZW5kZXJUcmVlIiwgMjg1MzEsIHBv
cnQ9d2lucG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9nKQorICAgICAgICBsb2cg
PSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZygiRHVtcFJlbmRlclRyZWUiLCBuZXdlcl90aGFu
PTEuMCwgcG9ydD13aW5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2cpCisKKyAg
ICAgICAgZGVmIGJhZF9yZWFkKHBhdGgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignSU9F
cnJvcjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpCisKKyAgICAgICAgZmlsZXN5c3RlbS5y
ZWFkX3RleHRfZmlsZSA9IGJhZF9yZWFkCisgICAgICAgIGZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlf
ZmlsZSA9IGJhZF9yZWFkCisgICAgICAgIGxvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9n
KCJEdW1wUmVuZGVyVHJlZSIsIDI4NTMxLCBwb3J0PXdpbnBvcnQsIGluY2x1ZGVfZXJyb3JzPVRy
dWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0lPRXJyb3I6IE5vIHN1Y2ggZmlsZSBvciBkaXJl
Y3RvcnknLCBsb2cpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZXhlY3V0aXZlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9leGVjdXRpdmUucHkJKHJldmlzaW9uIDE1MTEyMSkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkJKHdvcmtpbmcgY29weSkKQEAgLTg0
LDYgKzg0LDkgQEAgY2xhc3MgRXhlY3V0aXZlKG9iamVjdCk6CiAgICAgUElQRSA9IHN1YnByb2Nl
c3MuUElQRQogICAgIFNURE9VVCA9IHN1YnByb2Nlc3MuU1RET1VUCiAKKyAgICBkZWYgX19pbml0
X18oc2VsZik6CisgICAgICAgIHNlbGYucGlkX3RvX3N5c3RlbV9waWQgPSB7fQorCiAgICAgZGVm
IF9zaG91bGRfY2xvc2VfZmRzKHNlbGYpOgogICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBjbG9z
ZV9mZHM9VHJ1ZSB0byB3b3JrIGFyb3VuZCBQeXRob24gYnVnICMyMzIwCiAgICAgICAgICMgKG90
aGVyd2lzZSB3ZSBjYW4gaGFuZyB3aGVuIHdlIGtpbGwgRHVtcFJlbmRlclRyZWUgd2hlbiB3ZSBh
cmUgcnVubmluZwpAQCAtMjcyLDIxICsyNzUsMjkgQEAgY2xhc3MgRXhlY3V0aXZlKG9iamVjdCk6
CiAKICAgICAgICAgcnVubmluZ19waWRzID0gW10KIAotICAgICAgICBpZiBzeXMucGxhdGZvcm0g
aW4gKCJ3aW4zMiIsICJjeWd3aW4iKToKLSAgICAgICAgICAgICMgRklYTUU6IHJ1bm5pbmdfcGlk
cyBpc24ndCBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIHlldC4uLgotICAgICAgICAgICAgcmV0dXJu
IFtdCi0KLSAgICAgICAgcHNfcHJvY2VzcyA9IHNlbGYucG9wZW4oWydwcycsICctZW8nLCAncGlk
LGNvbW0nXSwgc3Rkb3V0PXNlbGYuUElQRSwgc3RkZXJyPXNlbGYuUElQRSkKLSAgICAgICAgc3Rk
b3V0LCBfID0gcHNfcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCi0gICAgICAgIGZvciBsaW5lIGluIHN0
ZG91dC5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBJ
biBzb21lIGNhc2VzIHRoZSBsaW5lIGNhbiBjb250YWluIG9uZSBvciBtb3JlCi0gICAgICAgICAg
ICAgICAgIyBsZWFkaW5nIHdoaXRlLXNwYWNlcywgc28gc3RyaXAgaXQgYmVmb3JlIHNwbGl0Lgot
ICAgICAgICAgICAgICAgIHBpZCwgcHJvY2Vzc19uYW1lID0gbGluZS5zdHJpcCgpLnNwbGl0KCcg
JywgMSkKLSAgICAgICAgICAgICAgICBpZiBwcm9jZXNzX25hbWVfZmlsdGVyKHByb2Nlc3NfbmFt
ZSk6Ci0gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfcGlkcy5hcHBlbmQoaW50KHBpZCkpCi0g
ICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgICAgICBwYXNzCisg
ICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoImN5Z3dpbiIpOgorICAgICAgICAgICAgcHNfcHJv
Y2VzcyA9IHNlbGYucnVuX2NvbW1hbmQoWydwcycsICctZSddLCBlcnJvcl9oYW5kbGVyPUV4ZWN1
dGl2ZS5pZ25vcmVfZXJyb3IpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBwc19wcm9jZXNzLnNw
bGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICB0b2tlbnMgPSBsaW5lLnN0cmlwKCkuc3BsaXQo
KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGlkLCBwcGlkLCBw
Z2lkLCB3aW5waWQsIHR0eSwgdWlkLCBzdGltZSwgcHJvY2Vzc19uYW1lID0gdG9rZW5zCisgICAg
ICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19uYW1lKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfcGlkcy5hcHBlbmQoaW50KHBpZCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLnBpZF90b19zeXN0ZW1fcGlkW2ludChwaWQpXSA9IGlu
dCh3aW5waWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAg
ICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBzX3Byb2Nlc3Mg
PSBzZWxmLnBvcGVuKFsncHMnLCAnLWVvJywgJ3BpZCxjb21tJ10sIHN0ZG91dD1zZWxmLlBJUEUs
IHN0ZGVycj1zZWxmLlBJUEUpCisgICAgICAgICAgICBzdGRvdXQsIF8gPSBwc19wcm9jZXNzLmNv
bW11bmljYXRlKCkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHN0ZG91dC5zcGxpdGxpbmVzKCk6
CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIEluIHNvbWUgY2Fz
ZXMgdGhlIGxpbmUgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAgICAg
IyBsZWFkaW5nIHdoaXRlLXNwYWNlcywgc28gc3RyaXAgaXQgYmVmb3JlIHNwbGl0LgorICAgICAg
ICAgICAgICAgICAgICBwaWQsIHByb2Nlc3NfbmFtZSA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnICcs
IDEpCisgICAgICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZV9maWx0ZXIocHJvY2Vzc19u
YW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfcGlkcy5hcHBlbmQoaW50KHBp
ZCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICAg
ICAgICAgIHBhc3MKIAogICAgICAgICByZXR1cm4gc29ydGVkKHJ1bm5pbmdfcGlkcykKIApJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVj
dXRpdmVfbW9jay5weQkocmV2aXNpb24gMTUxMTIxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02Myw2
ICs2Myw3IEBAIGNsYXNzIE1vY2tFeGVjdXRpdmUob2JqZWN0KToKICAgICAgICAgc2VsZi5fcnVu
bmluZ19waWRzID0geyd0ZXN0LXdlYmtpdHB5Jzogb3MuZ2V0cGlkKCl9CiAgICAgICAgIHNlbGYu
X3Byb2MgPSBOb25lCiAgICAgICAgIHNlbGYuY2FsbHMgPSBbXQorICAgICAgICBzZWxmLnBpZF90
b19zeXN0ZW1fcGlkID0ge30KIAogICAgIGRlZiBjaGVja19ydW5uaW5nX3BpZChzZWxmLCBwaWQp
OgogICAgICAgICByZXR1cm4gcGlkIGluIHNlbGYuX3J1bm5pbmdfcGlkcy52YWx1ZXMoKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHkJKHJldmlzaW9uIDE1MTEyMSkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yMDksNiArMjA5LDggQEAgY2xhc3MgUmVhbEZpbGVTeXN0ZW1UZXN0KHVuaXR0
ZXN0LlRlc3RDYQogCiAgICAgICAgIHVuaWNvZGVfdGV4dF9zdHJpbmcgPSB1J1x1MDE2QW5cdTAx
MkRjXHUwMTREZGVcdTAzM0QnCiAgICAgICAgIGhleF9lcXVpdmFsZW50ID0gJ1x4QzVceEFBXHg2
RVx4QzRceEFEXHg2M1x4QzVceDhEXHg2NFx4NjVceENDXHhCRCcKKyAgICAgICAgbWFsZm9ybWVk
X3RleHRfaGV4ID0gJ1x4NERceDY5XHg2M1x4NzJceDZGXHg3M1x4NkZceDY2XHg3NFx4QUVceDIw
XHg1Nlx4NjlceDczXHg3NVx4NjFceDZDXHgyMFx4NTNceDc0XHg3NVx4NjRceDY5XHg2Rlx4QUVc
eDIwXHgzMlx4MzBceDMxXHgzMFx4MERceDBBJworICAgICAgICBtYWxmb3JtZWRfaWdub3JlZF90
ZXh0X2hleCA9ICdceDREXHg2OVx4NjNceDcyXHg2Rlx4NzNceDZGXHg2Nlx4NzRceDIwXHg1Nlx4
NjlceDczXHg3NVx4NjFceDZDXHgyMFx4NTNceDc0XHg3NVx4NjRceDY5XHg2Rlx4MjBceDMyXHgz
MFx4MzFceDMwXHgwRFx4MEEnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRleHRfcGF0aCA9
IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3RyZWVfdW5pdHRlc3RfJykKICAgICAgICAgICAgIGJp
bmFyeV9wYXRoID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0ndHJlZV91bml0dGVzdF8nKQpAQCAt
MjE5LDYgKzIyMSwxMiBAQCBjbGFzcyBSZWFsRmlsZVN5c3RlbVRlc3QodW5pdHRlc3QuVGVzdENh
CiAgICAgICAgICAgICBmcy53cml0ZV9iaW5hcnlfZmlsZShiaW5hcnlfcGF0aCwgaGV4X2VxdWl2
YWxlbnQpCiAgICAgICAgICAgICB0ZXh0X2NvbnRlbnRzID0gZnMucmVhZF90ZXh0X2ZpbGUoYmlu
YXJ5X3BhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHRfY29udGVudHMsIHVu
aWNvZGVfdGV4dF9zdHJpbmcpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVl
RXJyb3IsIGZzLndyaXRlX3RleHRfZmlsZSwgYmluYXJ5X3BhdGgsIG1hbGZvcm1lZF90ZXh0X2hl
eCkKKyAgICAgICAgICAgIGZzLndyaXRlX2JpbmFyeV9maWxlKGJpbmFyeV9wYXRoLCBtYWxmb3Jt
ZWRfdGV4dF9oZXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBm
cy5yZWFkX3RleHRfZmlsZSwgYmluYXJ5X3BhdGgpCisgICAgICAgICAgICB0ZXh0X2NvbnRlbnRz
ID0gZnMucmVhZF9iaW5hcnlfZmlsZShiaW5hcnlfcGF0aCkuZGVjb2RlKCd1dGY4JywgJ2lnbm9y
ZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0ZXh0X2NvbnRlbnRzLCBtYWxmb3Jt
ZWRfaWdub3JlZF90ZXh0X2hleCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIHRl
eHRfcGF0aCBhbmQgZnMuaXNmaWxlKHRleHRfcGF0aCk6CiAgICAgICAgICAgICAgICAgb3MucmVt
b3ZlKHRleHRfcGF0aCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZp
c2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29y
a2luZyBjb3B5KQpAQCAtMTM1MCw2ICsxMzUwLDEwIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICBkZWYgdmlydHVhbF90ZXN0X3N1aXRlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIFtdCiAKKyAg
ICBkZWYgZmluZF9zeXN0ZW1fcGlkKHNlbGYsIG5hbWUsIHBpZCk6CisgICAgICAgICMgVGhpcyBp
cyBvbmx5IG92ZXJyaWRkZW4gb24gV2luZG93cworICAgICAgICByZXR1cm4gcGlkCisKICAgICBA
bWVtb2l6ZWQKICAgICBkZWYgcG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoc2VsZik6CiAg
ICAgICAgIHN1aXRlcyA9IHNlbGYudmlydHVhbF90ZXN0X3N1aXRlcygpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CShyZXZpc2lvbiAxNTEx
MjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVj
dCk6CiAgICAgICAgICAgICBlbnY9c2VsZi5fZW52LAogICAgICAgICAgICAgdW5pdmVyc2FsX25l
d2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKICAgICAgICAgc2VsZi5fcGlkID0gc2Vs
Zi5fcHJvYy5waWQKKyAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1l
KCksIHNlbGYuX3BpZCkKICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQog
ICAgICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CiAgICAgICAgICAgICBmbCA9IGZj
bnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3dpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
d2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw5IEBAIGltcG9ydCBvcwogaW1wb3J0
IGxvZ2dpbmcKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKIAorZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IsIEV4ZWN1dGl2
ZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnBhdGggaW1wb3J0IGFic3BhdGhfdG9fdXJp
LCBjeWdwYXRoCkBAIC0yMDAsNyArMjAyLDcgQEAgY2xhc3MgV2luUG9ydChBcHBsZVBvcnQpOgog
ICAgICAgICBjb21tYW5kX2ZpbGUgPSBzZWxmLmNyZWF0ZV9kZWJ1Z2dlcl9jb21tYW5kX2ZpbGUo
KQogICAgICAgICBpZiBub3QgY29tbWFuZF9maWxlOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUK
LSAgICAgICAgZGVidWdnZXJfb3B0aW9ucyA9ICciezB9IiAtcCAlbGQgLWUgJWxkIC1nIC1saW5l
cyAtY2YgInsxfSInLmZvcm1hdChjeWdwYXRoKG50c2RfcGF0aCksIGN5Z3BhdGgoY29tbWFuZF9m
aWxlKSkKKyAgICAgICAgZGVidWdnZXJfb3B0aW9ucyA9ICciezB9IiAtcCAlbGQgLWUgJWxkIC1n
IC1ub2lvIC1saW5lcyAtY2YgInsxfSInLmZvcm1hdChjeWdwYXRoKG50c2RfcGF0aCksIGN5Z3Bh
dGgoY29tbWFuZF9maWxlKSkKICAgICAgICAgcmVnaXN0cnlfc2V0dGluZ3MgPSB7J0RlYnVnZ2Vy
JzogZGVidWdnZXJfb3B0aW9ucywgJ0F1dG8nOiAiMSJ9CiAgICAgICAgIGZvciBrZXkgaW4gcmVn
aXN0cnlfc2V0dGluZ3M6CiAgICAgICAgICAgICBzZWxmLnByZXZpb3VzX2RlYnVnZ2VyX3ZhbHVl
c1trZXldID0gc2VsZi5yZWFkX3JlZ2lzdHJ5X3N0cmluZyhrZXkpCkBAIC0yMTgsMyArMjIwLDY5
IEBAIGNsYXNzIFdpblBvcnQoQXBwbGVQb3J0KToKICAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4o
c2VsZik6CiAgICAgICAgIHNlbGYucmVzdG9yZV9jcmFzaF9sb2dfc2F2aW5nKCkKICAgICAgICAg
c3VwZXIoV2luUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQorCisgICAgZGVmIF9nZXRf
Y3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRp
bWVfZm49Tm9uZSwgc2xlZXBfZm49Tm9uZSwgd2FpdF9mb3JfbG9nPVRydWUpOgorICAgICAgICAj
IE5vdGUgdGhhdCB3ZSBkbyBzbG93LXNwaW4gaGVyZSBhbmQgd2FpdCwgc2luY2UgaXQgYXBwZWFy
cyB0aGUgdGltZQorICAgICAgICAjIFJlcG9ydENyYXNoIHRha2VzIHRvIGFjdHVhbGx5IHdyaXRl
IGFuZCBmbHVzaCB0aGUgZmlsZSB2YXJpZXMgd2hlbiB0aGVyZSBhcmUKKyAgICAgICAgIyBsb3Rz
IG9mIHNpbXVsdGFuZW91cyBjcmFzaGVzIGdvaW5nIG9uLgorICAgICAgICAjIEZJWE1FOiBTaG91
bGQgbW9zdCBvZiB0aGlzIGJlIG1vdmVkIGludG8gQ3Jhc2hMb2dzKCk/CisgICAgICAgIHRpbWVf
Zm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9y
IHRpbWUuc2xlZXAKKyAgICAgICAgY3Jhc2hfbG9nID0gJycKKyAgICAgICAgY3Jhc2hfbG9ncyA9
IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorICAgICAgICAj
IEZJWE1FOiBkZWxldGUgdGhpcyBhZnRlciB3ZSdyZSBzdXJlIHRoaXMgY29kZSBpcyB3b3JraW5n
IC4uLgorICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVz
JyAlIChuYW1lLCBzdHIocGlkKSkpCisgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChz
ZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQorICAgICAgICB3aGlsZSBub3Qg
Y3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CisgICAgICAgICAgICAjIElmIHRoZSBzeXN0
ZW1fcGlkIGhhc24ndCBiZWVuIGRldGVybWluZWQgeWV0LCBqdXN0IHRyeSB3aXRoIHRoZSBwYXNz
ZWQgaW4gcGlkLiAgV2UnbGwgYmUgY2hlY2tpbmcgYWdhaW4gbGF0ZXIKKyAgICAgICAgICAgIHN5
c3RlbV9waWQgPSBzZWxmLl9leGVjdXRpdmUucGlkX3RvX3N5c3RlbV9waWQuZ2V0KHBpZCkKKyAg
ICAgICAgICAgIGlmIHN5c3RlbV9waWQgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBicmVhayAg
IyBXZSBoYXZlbid0IG1hcHBlZCBjeWd3aW4gcGlkLT53aW4gcGlkIHlldAorICAgICAgICAgICAg
Y3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwgc3lzdGVtX3BpZCwg
aW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuLCBwb3J0PXNlbGYpCisg
ICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFz
aF9sb2cuc3BsaXRsaW5lcygpIGlmIGxpbmUuc3RhcnRzd2l0aCgncXVpdDonKV06CisgICAgICAg
ICAgICAgICAgc2xlZXBfZm4oMC4xKQorICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQor
CisgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAgICAgICAgICByZXR1cm4gKHN0ZGVyciwg
Tm9uZSkKKyAgICAgICAgcmV0dXJuIChzdGRlcnIsIGNyYXNoX2xvZykKKworICAgIGRlZiBsb29r
X2Zvcl9uZXdfY3Jhc2hfbG9ncyhzZWxmLCBjcmFzaGVkX3Byb2Nlc3Nlcywgc3RhcnRfdGltZSk6
CisgICAgICAgICIiIlNpbmNlIGNyYXNoIGxvZ3MgY2FuIHRha2UgYSBsb25nIHRpbWUgdG8gYmUg
d3JpdHRlbiBvdXQgaWYgdGhlIHN5c3RlbSBpcworICAgICAgICAgICB1bmRlciBzdHJlc3MgZG8g
YSBzZWNvbmQgcGFzcyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgICAgICBj
cmFzaGVzOiB0ZXN0X25hbWUgLT4gcGlkLCBwcm9jZXNzX25hbWUgdHVwbGUgb2YgY3Jhc2hlZCBw
cm9jZXNzCisgICAgICAgICAgIHN0YXJ0X3RpbWU6IHRpbWUgdGhlIHRlc3RzIHN0YXJ0ZWQgYXQu
ICBXZSdyZSBsb29raW5nIGZvciBjcmFzaAorICAgICAgICAgICAgICAgbG9ncyBhZnRlciB0aGF0
IHRpbWUuCisgICAgICAgICIiIgorICAgICAgICBjcmFzaF9sb2dzID0ge30KKyAgICAgICAgZm9y
ICh0ZXN0X25hbWUsIHByb2Nlc3NfbmFtZSwgcGlkKSBpbiBjcmFzaGVkX3Byb2Nlc3NlczoKKyAg
ICAgICAgICAgICMgUGFzc2luZyBOb25lIGZvciBvdXRwdXQuICBUaGlzIGlzIGEgc2Vjb25kIHBh
c3MgYWZ0ZXIgdGhlIHRlc3QgZmluaXNoZWQgc28KKyAgICAgICAgICAgICMgaWYgdGhlIG91dHB1
dCBoYWQgYW55IGxvZ2dpbmcgd2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNvbGxlY3RlZCBpdC4KKyAg
ICAgICAgICAgIGNyYXNoX2xvZyA9IHNlbGYuX2dldF9jcmFzaF9sb2cocHJvY2Vzc19uYW1lLCBw
aWQsIE5vbmUsIE5vbmUsIHN0YXJ0X3RpbWUsIHdhaXRfZm9yX2xvZz1GYWxzZSlbMV0KKyAgICAg
ICAgICAgIGlmIGNyYXNoX2xvZzoKKyAgICAgICAgICAgICAgICBjcmFzaF9sb2dzW3Rlc3RfbmFt
ZV0gPSBjcmFzaF9sb2cKKyAgICAgICAgcmV0dXJuIGNyYXNoX2xvZ3MKKworICAgIGRlZiBmaW5k
X3N5c3RlbV9waWQoc2VsZiwgbmFtZSwgcGlkKToKKyAgICAgICAgc3lzdGVtX3BpZCA9IGludChw
aWQpCisgICAgICAgICMgV2luZG93cyBhbmQgQ3lnd2luIFBJRHMgYXJlIG5vdCB0aGUgc2FtZS4g
IFdlIG5lZWQgdG8gZmluZCB0aGUgV2luZG93cworICAgICAgICAjIFBJRCBmb3Igb3VyIEN5Z3dp
biBwcm9jZXNzIHNvIHdlIGNhbiBtYXRjaCBpdCBsYXRlciB0byBhbnkgY3Jhc2gKKyAgICAgICAg
IyBmaWxlcyB3ZSBlbmQgdXAgY3JlYXRpbmcgKHdoaWNoIHdpbGwgYmUgdGFnZ2VkIHdpdGggdGhl
IFdpbmRvd3MgUElEKQorICAgICAgICBwc19wcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kKFsncHMnLCAnLWUnXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9y
KQorICAgICAgICBmb3IgbGluZSBpbiBwc19wcm9jZXNzLnNwbGl0bGluZXMoKToKKyAgICAgICAg
ICAgIHRva2VucyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgY3BpZCwgcHBpZCwgcGdpZCwgd2lucGlkLCB0dHksIHVpZCwgc3RpbWUsIHBy
b2Nlc3NfbmFtZSA9IHRva2VucworICAgICAgICAgICAgICAgIGlmIHByb2Nlc3NfbmFtZS5lbmRz
d2l0aChuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnBpZF90b19z
eXN0ZW1fcGlkW2ludChjcGlkKV0gPSBpbnQod2lucGlkKQorICAgICAgICAgICAgICAgICAgICBp
ZiBpbnQocGlkKSA9PSBpbnQoY3BpZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1f
cGlkID0gaW50KHdpbnBpZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAg
IGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBy
ZXR1cm4gc3lzdGVtX3BpZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3dpbl91
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvd2lu
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxNTExMjEpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvd2luX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMyArMTA3LDEyIEBA
IGNsYXNzIFdpblBvcnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3QKICAgICBkZWYgdGVzdF9l
eHBlY3RhdGlvbnNfZmlsZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNl
bGYubWFrZV9wb3J0KCkuZXhwZWN0YXRpb25zX2ZpbGVzKCkpLCAzKQogICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGxlbihzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tPcHRpb25zKHdlYmtpdF90
ZXN0X3J1bm5lcj1UcnVlLCBjb25maWd1cmF0aW9uPSdSZWxlYXNlJykpLmV4cGVjdGF0aW9uc19m
aWxlcygpKSwgNSkKKworICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6CisgICAgICAg
ICMgV2luIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBt
YWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCisgICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKKyAg
ICAgICAgICAgIHRpbWVzID0gWzAsIDIwLCA0MF0KKyAgICAgICAgICAgIHJldHVybiBsYW1iZGE6
IHRpbWVzLnBvcCgwKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSd3
aW4nKQorICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQs
ICcnLCAnJywgMCwKKyAgICAgICAgICAgIHRpbWVfZm49ZmFrZV90aW1lX2NiKCksIHNsZWVwX2Zu
PWxhbWJkYSBkZWxheTogTm9uZSkK
</data>
<flag name="review"
          id="225111"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>