<?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>32919</bug_id>
          
          <creation_ts>2009-12-24 09:44:41 -0800</creation_ts>
          <short_desc>svn-create-patch: fixChangeLogPatch does not work correctly in certain circumstances</short_desc>
          <delta_ts>2010-01-03 19:17:43 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>aroben</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>174782</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-24 09:44:41 -0800</bug_when>
    <thetext>fixChangeLogPatch in VCSUtils.pm seems to have a few issues.  Shinichiro first noticed something unusual here:

https://bugs.webkit.org/show_bug.cgi?id=32592#c16

To illustrate, on the following input,

$in = &lt;&lt;END;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52436)
+++ ChangeLog	(working copy)
@@ -1,5 +1,11 @@
 2009-12-20  Chris Jerdonek  &lt;chris.jerdonek@gmail.com&gt;
 
+        Reviewed by Shinichiro.
+
+        Changed some more code.
+
+2009-12-20  Chris Jerdonek  &lt;chris.jerdonek@gmail.com&gt;
+
         Reviewed by Eric.
 
         Changed some code.
END

fixChangeLogPatch returns only two lines of context at the end instead of three:

$out = &lt;&lt;END;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52436)
+++ ChangeLog	(working copy)
@@ -1,3 +1,9 @@
+2009-12-20  Chris Jerdonek  &lt;chris.jerdonek.com&gt;
+
+        Reviewed by Shinichiro.
+
+        Changed some more code.
+
 2009-12-20  Chris Jerdonek  &lt;chris.jerdonek.com&gt;
 
END

Also note that the 9 in +1,9 does not match with 8 lines in the chunk.

It also seems not to work against input like the following.  This can occur, for example, if the blank lines in the new ChangeLog entry include white space.

$in2 = &lt;&lt;END;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52436)
+++ ChangeLog	(working copy)
@@ -1,5 +1,11 @@
 2009-12-20  Chris Jerdonek  &lt;chris.jerdonek@gmail.com&gt;
+        
+        Reviewed by Shinichiro.
 
+        Changed some more code.
+
+2009-12-20  Chris Jerdonek  &lt;chris.jerdonek@gmail.com&gt;
+
         Reviewed by Eric.
 
         Changed some code.
END

In addition to fixing these issues, I&apos;d also like to simplify the code and add unit tests as suggested here:

https://bugs.webkit.org/show_bug.cgi?id=30683</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175051</commentid>
    <comment_count>1</comment_count>
      <attachid>45524</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-27 10:30:08 -0800</bug_when>
    <thetext>Created attachment 45524
Proposed patch

As a further check of the proposed revision, I ran the current fixChangeLogPatch against the 7 unit test cases in the patch.  The current version did not pass the last 5 for various reasons.  I inspected the output of each as a comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175052</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-27 10:32:21 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45524 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175075</commentid>
    <comment_count>3</comment_count>
      <attachid>45524</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-12-27 11:56:35 -0800</bug_when>
    <thetext>Comment on attachment 45524
Proposed patch

Thanks for this patch! Especially, adding a unittest for VCSUtils.pm is great, I think. I&apos;d like to put a few nitpicks. I&apos;m not good at Perl and I don&apos;t think they are very important. Please feel free to ignore some of my comments if they don&apos;s sound good to you.

&gt; +    $lines[$chunkStart - 1] =~ /^\@\@ -(\d+),(\d+) \+\d+,(\d+) \@\@/; # e.g. @@ -2,6 +2,18 @@

We may want to return $patch if this regexp doesn&apos;t match?

&gt; +    # If @overlappingNewLines &gt; 0, this is where we make use of the
&gt; +    # assumption that the beginning of the source file was not modified.
&gt; +    splice(@lines, $chunkStart, 0, @overlappingNewLines);
&gt; +    # Update chunk range.
&gt; +    my $numOriginalLines = $2 - $numLinesDeletedContext + @overlappingNewLines;
&gt; +    my $newChunkLength = $3 - $numLinesDeletedContext + @overlappingNewLines;

I slightly prefer to put these two lines before the splice call because I think the use of $2 and $3 should be near to the corresponding regexp as possible.

&gt; +# New test
&gt; +$text = &quot;fixChangeLogPatch: [no change] First line is new line.&quot;;

$description or something like this would be slightly better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175085</commentid>
    <comment_count>4</comment_count>
      <attachid>45532</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-27 13:29:15 -0800</bug_when>
    <thetext>Created attachment 45532
Proposed patch 2

Incorporated Shinichiro&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175086</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-27 13:33:03 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45532 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175144</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-27 20:06:04 -0800</bug_when>
    <thetext>I think this is more perl than my little brain can handle.

Thank you for adding the unit tests.  I should have done so originally.  I instinct was to avoid adding more perl code, but I should have made an exception for unit tests and added them anyway.  If we eventually convert this to another language, the unit tests will still be useful. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175145</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-27 20:42:40 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; instinct was to avoid adding more perl code,
&gt; ...
&gt; If we eventually convert this
&gt; to another language, the unit tests will still be useful. :)

Thanks, Eric.  A few questions about this since this is new to me.  Has WebKit made a conscious decision to move away from Perl?  If so, can you give a sense of the current status and plan of conversion to Python -- even if it&apos;s just your perspective. :)  Lastly, out of curiosity, what else would have to be rewritten before this function would be useful in another language, or would it be useful now?

In terms of converting, I think the learned logic might be useful, too.  I was originally aiming for something elegant, but after coming across some of the test cases, there are certain things that just can&apos;t be gotten around (without making rigid assumptions about the form of the input patch string).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175147</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-27 22:30:05 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Thanks, Eric.  A few questions about this since this is new to me.  Has WebKit
&gt; made a conscious decision to move away from Perl?

No, not that I&apos;m aware of.  The shift to using Python for tools has been more about the people writing the tools than any conscious decision (IMO).  Python is an approved language at Google, and more Google and/or Chromium developers have been writing/contributing new tools recently.

&gt; If so, can you give a sense
&gt; of the current status and plan of conversion to Python -- even if it&apos;s just
&gt; your perspective. :)

This question is probably best discussed on &lt;webkit-dev@lists.webkit.org&gt; rather than in this bug.

I&apos;ll try to review the patch tomorrow.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175151</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-27 22:46:38 -0800</bug_when>
    <thetext>For what it&apos;s worth, I agree with David Kilzer completely.  As far as I know there has never been an &quot;official&quot; script language for WebKit.  Just the personal preferences of whoever happens to be working on scripts at the time.  My current personal preference is Python, but I speak (and incidentally according to ohloh have touched 18k lines of WebKit&apos;s) perl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175153</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-27 22:51:23 -0800</bug_when>
    <thetext>The real perl experts in WebKit are Darin Adler, David Kilzer, Adam Roben and Mark Rowe.  Those are your most likely reviewers for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175337</commentid>
    <comment_count>11</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-28 17:28:58 -0800</bug_when>
    <thetext>Removed brackets from title to avoid confusion with patches needing specialized review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175405</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-28 22:30:12 -0800</bug_when>
    <thetext>A couple quick things:

Could someone explain what the original reasons were to have new ChangeLog entries at the top of patch files?  Is it just to improve human readability, or was there a more technical reason?  I&apos;d like to add this information to the comments at the beginning of fixChangeLogPatch.

Also, I&apos;m going to wait to hear back from webkit-dev before changing the name of run-webkit-unittests-perl to test-webkit-perl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175442</commentid>
    <comment_count>13</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-28 23:28:24 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Could someone explain what the original reasons were to have new ChangeLog
&gt; entries at the top of patch files?  Is it just to improve human readability, or
&gt; was there a more technical reason?  I&apos;d like to add this information to the
&gt; comments at the beginning of fixChangeLogPatch.

The ChangeLog entry is supposed to explain the changes that follow it, hence the reason for the ChangeLog patch being listed before other patches within the same section (JavaScriptCore, WebCore, WebKit/mac, etc.).

&gt; Also, I&apos;m going to wait to hear back from webkit-dev before changing the name
&gt; of run-webkit-unittests-perl to test-webkit-perl.

This can be landed and then renamed if necessary.  Sorry I didn&apos;t get the patch reviewed today.  Will try again tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175456</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-28 23:49:14 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Will try again tomorrow.

Thanks, David.

&gt; (In reply to comment #12)
&gt; &gt; Could someone explain what the original reasons were to have new ChangeLog
&gt; &gt; entries at the top of patch files?
&gt; The ChangeLog entry is supposed to explain the changes that follow it, hence
&gt; the reason for the ChangeLog patch being listed before other patches within the
&gt; same section (JavaScriptCore, WebCore, WebKit/mac, etc.).

I meant at the top of the portion of the patch corresponding to the diff of the ChangeLog files, so there is no leading context in that portion (i.e. what fixChangeLogPatch is meant to fix).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175598</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-29 09:34:16 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; Could someone explain what the original reasons were to have new ChangeLog
&gt; &gt; &gt; entries at the top of patch files?
&gt; &gt; 
&gt; &gt; The ChangeLog entry is supposed to explain the changes that follow it, hence
&gt; &gt; the reason for the ChangeLog patch being listed before other patches within the
&gt; &gt; same section (JavaScriptCore, WebCore, WebKit/mac, etc.).
&gt; 
&gt; I meant at the top of the portion of the patch corresponding to the diff of the
&gt; ChangeLog files, so there is no leading context in that portion (i.e. what
&gt; fixChangeLogPatch is meant to fix).

Each new ChangeLog entry should appear at the top of the ChangeLog file since the file is meant to be a local, in-order description of commits to the project.  (If you&apos;re thinking it&apos;s redundant to &apos;svn log&apos; or that git already provides local, offline history, it&apos;s all been discussed before on webkit-dev.  See the list archive at &lt;http://lists.webkit.org/&gt;.)

Fixing the patch so that it always applies to the top of the ChangeLog file makes it trivial to always apply in the correct location with the --fuzz=3 command-line switch for the patch command, which is what the svn-apply script does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175753</commentid>
    <comment_count>16</comment_count>
      <attachid>45532</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-29 18:49:19 -0800</bug_when>
    <thetext>Comment on attachment 45532
Proposed patch 2

Chris, thanks for writing test cases and tackling this code!

&gt; Index: WebKitTools/Scripts/VCSUtils.pm
&gt; +    my $i = 0; # We reuse the same index throughout.
&gt; +
&gt; +    # Skip to beginning of first chunk.
&gt; +    for (; $i &lt; @lines; ++$i) {
&gt; +        if (substr($lines[$i], 0, 1) eq &quot;@&quot;) {
&gt; +            last;
&gt; +        }
&gt; +    }
&gt; +    my $chunkStart = ++$i;

I&apos;d like to see this renamed to $chunkStartIndex.  Since Perl doesn&apos;t have variable types, it&apos;s important to make sure the variable names are descriptive.

&gt; +    # Skip to first line of newly added ChangeLog entry.
&gt; +    # For example, +2009-06-03  Eric Seidel  &lt;eric@webkit.org&gt;
&gt; +    my $dateStartRegEx = &apos;^\+(\d{4}-\d{2}-\d{2})&apos; # leading + and date
&gt; +                         . &apos;\s+(.+)\s+&apos; # name
&gt; +                         . &apos;&lt;([^&lt;&gt;]+)&gt;$&apos;; # e-mail address
&gt; +
&gt; +    for (; $i &lt; @lines; ++$i) {
&gt; +        my $line = $lines[$i];
&gt; +        my $first = substr($line, 0, 1);

I&apos;d like to see $first renamed to $firstChar or $firstCharacter.

&gt; +        if ($line =~ /$dateStartRegEx/) {
&gt; +            last;
&gt; +        } elsif ($first eq &quot; &quot; or $first eq &quot;+&quot;) {
&gt; +            next;
&gt; +        }
&gt; +        return $patch; # Do not change if, for example, &quot;-&quot; or &quot;@&quot; found.
&gt; +    }
&gt; +    if ($i &gt;= @lines) {
&gt; +        return $patch; # Do not change if date not found.
&gt; +    }
&gt; +    my $dateStart = $i;

Similar to $chunkStart, this should be renamed to $dateStartIndex.

&gt; +    # Rewrite overlapping lines to lead with &quot; &quot;.
&gt; +    my @overlappingNewLines = (); # These will include a leading +.

The words &quot;NewLines&quot; in @overlappingNewLines makes this variable name confusing to me.  (I think of overlapping &quot;\n&quot; characters when I read it.)  Maybe just @overlappingLine?

The &quot;+&quot; should be quoted in the comment.

&gt; +    for (; $i &lt; @lines; ++$i) {
&gt; +        my $line = $lines[$i];
&gt; +        if (substr($line, 0, 1) ne &quot;+&quot;) {
&gt; +          last;
&gt; +        }
&gt; +        push(@overlappingNewLines, $line);
&gt; +        $lines[$i] = &quot; &quot; . substr($line, 1);
&gt; +    }
&gt; +
&gt; +    # Remove excess ending context, if necessary.
&gt; +    my $trimContext = 1;

Please rename $trimContext to $shouldTrimContext as it&apos;s used as a boolean value.

&gt; +    for (; $i &lt; @lines; ++$i) {
&gt; +        my $first = substr($lines[$i], 0, 1);

Again, please change $first to $firstChar or $firstCharacter.

&gt; +        if ($first eq &quot; &quot;) {
&gt; +            next;
&gt; +        } elsif ($first eq &quot;@&quot;) {
&gt; +            last;
&gt; +        }
&gt; +        $trimContext = 0; # For example, if &quot;+&quot; or &quot;-&quot; encountered.
&gt; +        last;
&gt; +    }
&gt; +    my $numLinesDeletedContext = 0;

How about $deletedLineCount instead of $numLinesDeletedContext?

&gt; +    if ($trimContext) { # Also occurs if end of file reached.
&gt; +        splice(@lines, $i - @overlappingNewLines, @overlappingNewLines);
&gt; +        $numLinesDeletedContext = @overlappingNewLines;
&gt; +    }
&gt; +
&gt; +    # Work backwards, shifting overlapping lines towards front
&gt; +    # while checking that patch stays equivalent.
&gt; +    for ($i = $dateStart - 1; $i &gt;= $chunkStart; --$i) {
&gt; +        my $line = $lines[$i];
&gt; +        if (substr($line, 0, 1) ne &quot; &quot;) {
&gt; +            next;
&gt; +        }
&gt; +        my $text = substr($line, 1);
&gt; +        my $newLine = pop(@overlappingNewLines);

Again, $newLine makes me think of &quot;\n&quot; characters.  How about using $overlappingLine instead?

&gt; +        if ($text ne substr($newLine, 1)) {
&gt; +            return $patch; # Unexpected difference.
&gt; +        }
&gt; +        $lines[$i] = &quot;+$text&quot;;
&gt; +    }
&gt; +
&gt; +    # Finish moving whatever overlapping lines remain, and update
&gt; +    # the initial chunk range.
&gt; +    my $chunkRangeRegEx = &apos;^\@\@ -(\d+),(\d+) \+\d+,(\d+) \@\@$&apos;; # e.g. @@ -2,6 +2,18 @@
&gt; +    if ($lines[$chunkStart - 1] !~ /$chunkRangeRegEx/) {
&gt; +        # FIXME: Handle errors differently from ChangeLog files that
&gt; +        # are okay but should not be altered. That way we can find out
&gt; +        # if improvements to the script ever become necessary.
&gt; +        return $patch; # Error: unexpected patch string format.
&gt; +    }
&gt; +    my $numSkippedFirstLines = $1 - 1;
&gt; +    my $oldNumSourceLines = $2;
&gt; +    my $oldNumTargetLines = $3;

I prefer $fooLineCount over $numFooLines.

&gt; +    if (@overlappingNewLines != $numSkippedFirstLines) {
&gt; +        # This can happen, for example, when deliberately inserting
&gt; +        # a new ChangeLog entry earlier in the file.
&gt; +        return $patch;
&gt;      }
&gt; +    # If @overlappingNewLines &gt; 0, this is where we make use of the
&gt; +    # assumption that the beginning of the source file was not modified.
&gt; +    splice(@lines, $chunkStart, 0, @overlappingNewLines);
&gt; +
&gt; +    my $numSourceLines = $oldNumSourceLines + @overlappingNewLines
&gt; +                         - $numLinesDeletedContext;
&gt; +    my $numTargetLines = $oldNumTargetLines + @overlappingNewLines
&gt; +                         - $numLinesDeletedContext;

No need to wrap these two lines.

Using $sourceLineCount and $targetLineCount is a little clearer, I think.

&gt; +    $lines[$chunkStart - 1] = &quot;@@ -1,$numSourceLines +1,$numTargetLines @@&quot;;
&gt;  
&gt; +    return join($lineEnding, @lines) . &quot;\n&quot;; # patch(1) expects an extra trailing newline.
&gt;  }

&gt; Index: WebKitTools/Scripts/VCSUtils_unittest.pl
&gt; +#!/usr/bin/perl
&gt; +#
&gt; +# Copyright (C) 2009 Apple Inc. All rights reserved.

You don&apos;t have to assign the copyright to Apple.  You can assign it to yourself instead.

&gt; +use VCSUtils;
&gt; +
&gt; +sub fixChangeLogPatch($);

Redeclaring this should not be necessary.  Just use VCSUtils:: fixChangeLogPatch() in the tests below.

&gt; +# New test
&gt; +$title = &quot;fixChangeLogPatch: [no change] New entry inserted in middle.&quot;;
&gt; +
&gt; +$in = &lt;&lt;&apos;END&apos;;
&gt; +--- ChangeLog
&gt; ++++ ChangeLog
&gt; +@@ -11,6 +11,14 @@
&gt; + 
&gt; +         Reviewed by Ray.
&gt; + 
&gt; ++        Changed some more code on 2009-12-21.
&gt; ++
&gt; ++        * File:
&gt; ++
&gt; ++2009-12-21  Alice  &lt;alice@email.address&gt;
&gt; ++
&gt; ++        Reviewed by Ray.
&gt; ++
&gt; +         Changed some code on 2009-12-21.
&gt; + 
&gt; +         * File:
&gt; +END
&gt; +
&gt; +ok(fixChangeLogPatch($in) eq $in, $title);

This test case should work.  In this situation, it&apos;s okay to assume the previous ChangeLog entry started with the same date line.  All the context lines are ignored anyway when the patch is applied--the important part is to get the changed lines in order at the top of the patch.

&gt; Index: WebKitTools/Scripts/run-webkit-unittests-perl
&gt; +#!/usr/bin/perl
&gt; +#
&gt; +# Copyright (C) 2009 Apple Inc. All rights reserved.

Again, you can assign the copyright to yourself instead of Apple here.

r=me with the variable name changes.

I&apos;d really like to see the one test case above fixed, but if it doesn&apos;t work today, it&apos;s fine to land this patch first and open a new bug for this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175755</commentid>
    <comment_count>17</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-29 18:50:35 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 45532 [details])
&gt; &gt; +    # Rewrite overlapping lines to lead with &quot; &quot;.
&gt; &gt; +    my @overlappingNewLines = (); # These will include a leading +.
&gt; 
&gt; The words &quot;NewLines&quot; in @overlappingNewLines makes this variable name confusing
&gt; to me.  (I think of overlapping &quot;\n&quot; characters when I read it.)  Maybe just
&gt; @overlappingLine?

Err...make that @overlappingLines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175792</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-29 22:02:45 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 45532 [details])

Great suggestions, Dave.  Thanks.  I will also remember these for the future.

&gt; &gt; +# New test
&gt; &gt; +$title = &quot;fixChangeLogPatch: [no change] New entry inserted in middle.&quot;;
&gt; &gt; +
&gt; &gt; +$in = &lt;&lt;&apos;END&apos;;
&gt; &gt; +--- ChangeLog
&gt; &gt; ++++ ChangeLog
&gt; &gt; +@@ -11,6 +11,14 @@
&gt; &gt; + 
&gt; &gt; +         Reviewed by Ray.
&gt; &gt; + 
&gt; &gt; ++        Changed some more code on 2009-12-21.
&gt; &gt; ++
&gt; &gt; ++        * File:
&gt; &gt; ++
&gt; &gt; ++2009-12-21  Alice  &lt;alice@email.address&gt;
&gt; &gt; ++
&gt; &gt; ++        Reviewed by Ray.
&gt; &gt; ++
&gt; &gt; +         Changed some code on 2009-12-21.
&gt; &gt; + 
&gt; &gt; +         * File:
&gt; &gt; +END
&gt; &gt; +
&gt; &gt; +ok(fixChangeLogPatch($in) eq $in, $title);
&gt; 
&gt; This test case should work.  In this situation, it&apos;s okay to assume the
&gt; previous ChangeLog entry started with the same date line.

I believe the situation you have in mind is already covered by a later test case, where the input does get changed:

&gt; # New test
&gt; $title = &quot;fixChangeLogPatch: Leading context does not include first line.&quot;;
&gt; 
&gt; $in = &lt;&lt;&apos;END&apos;;
&gt; @@ -2,6 +2,14 @@
&gt;  
&gt;          Reviewed by Ray.
&gt;  
&gt; +        Changed some more code on 2009-12-22.
&gt; +
&gt; +        * File:
&gt; +
&gt; +2009-12-22  Alice  &lt;alice@email.address&gt;
&gt; +
&gt; +        Reviewed by Ray.
&gt; +
&gt;          Changed some code on 2009-12-22.
&gt;  
&gt;          * File:
&gt; END

The only difference between these two cases is in the location in the chunk range description (line 11 vs. line 2):

&gt; &gt; +@@ -11,6 +11,14 @@

and

&gt; @@ -2,6 +2,14 @@

The code uses the chunk range to check that the number of lines to insert at the beginning matches the number of lines skipped in the chunk range description.

(In the latter case this matches since we&apos;re inserting one line -- the date line -- and the chunk range starts at line 2.)

Leaving cases like the former unchanged is useful if we ever need to correct a ChangeLog file by inserting an entry into the middle that may have been mistakenly left out.  This special case will never come up when using prepare-ChangeLog and svn-create-patch though.

I will submit a revised patch with your suggestions shortly since I don&apos;t have commit access yet.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175806</commentid>
    <comment_count>19</comment_count>
      <attachid>45641</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-29 22:31:41 -0800</bug_when>
    <thetext>Created attachment 45641
Proposed patch 3

In addition to David&apos;s suggested changes, I also did the following:

- Added my name to the top of VCSUtils.pm (I assume this is okay since the 
  new code is about 20% of the file).
- Added to the comments preceding fixChangeLogPatch why the function is 
  needed (from the information that David provided in an earlier comment in 
  response to my question).
- Changed the name of the new file from run-webkit-unittests-perl to 
  test-webkit-perl (as mentioned in my e-mail to webkit-dev: 
  https://lists.webkit.org/pipermail/webkit-dev/2009-December/011104.html ).

Also, I left out the VCSUtils:: prefix from the calls to fixChangeLogPatch 
in VCSUtils_unittest.pl since the unit tests run okay without it.  Let me know 
if I should have included that for reasons of good practice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175809</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-29 22:35:26 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45641 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175813</commentid>
    <comment_count>21</comment_count>
      <attachid>45642</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-29 22:50:50 -0800</bug_when>
    <thetext>Created attachment 45642
Proposed patch 4

Overlooked changing $numSkippedFirstLines to $skippedFirstLineCount.  Also updated the test-webkit-perl file name in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175814</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-29 22:56:01 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45642 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175820</commentid>
    <comment_count>23</comment_count>
      <attachid>45642</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-29 23:19:28 -0800</bug_when>
    <thetext>Comment on attachment 45642
Proposed patch 4

Clearing flags on attachment: 45642

Committed r52646: &lt;http://trac.webkit.org/changeset/52646&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175821</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-29 23:19:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175837</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-30 00:47:50 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 45642 [details])
&gt; Clearing flags on attachment: 45642
&gt; 
&gt; Committed r52646: &lt;http://trac.webkit.org/changeset/52646&gt;

It looks like the &quot;execute&quot; mode didn&apos;t get set on the following two files--

- Scripts/VCSUtils_unittest.pl
- Scripts/test-webkit-perl 

Could someone correct this?

It looks like this is a known issue with svn-apply:

https://bugs.webkit.org/show_bug.cgi?id=27204#c4

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175851</commentid>
    <comment_count>26</comment_count>
      <attachid>45642</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-30 01:26:26 -0800</bug_when>
    <thetext>Comment on attachment 45642
Proposed patch 4

Rejecting patch 45642 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueueSVN/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;David Kilzer&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
geLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file WebKitTools/Scripts/VCSUtils.pm
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 357.
2 out of 2 hunks FAILED -- saving rejects to file WebKitTools/Scripts/VCSUtils.pm.rej
patching file WebKitTools/Scripts/VCSUtils_unittest.pl
svn: warning: &apos;WebKitTools/Scripts/VCSUtils_unittest.pl&apos; is already under version control
patching file WebKitTools/Scripts/test-webkit-perl
svn: warning: &apos;WebKitTools/Scripts/test-webkit-perl&apos; is already under version control

Full output: http://webkit-commit-queue.appspot.com/results/152183</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175898</commentid>
    <comment_count>27</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-30 06:17:42 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 45642 [details] [details])
&gt; &gt; Clearing flags on attachment: 45642
&gt; &gt; 
&gt; &gt; Committed r52646: &lt;http://trac.webkit.org/changeset/52646&gt;
&gt; 
&gt; It looks like the &quot;execute&quot; mode didn&apos;t get set on the following two files--
&gt; 
&gt; - Scripts/VCSUtils_unittest.pl
&gt; - Scripts/test-webkit-perl 
&gt; 
&gt; Could someone correct this?

Fixed in r52658:  &lt;http://trac.webkit.org/changeset/52658&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175940</commentid>
    <comment_count>28</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-30 09:30:33 -0800</bug_when>
    <thetext>I think this failure might be another variant of bug 28603.  I&apos;m tempted to switch the commit-queue back to git until bug 28603 can be resolved.  It affects SVN much worse than Git.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175961</commentid>
    <comment_count>29</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2009-12-30 10:04:06 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; I think this failure might be another variant of bug 28603.  I&apos;m tempted to
&gt; switch the commit-queue back to git until bug 28603 can be resolved.  It
&gt; affects SVN much worse than Git.

Just to be clear, I think the failure in comment 26 might be legitimate.  It looks like Dave may have set cq+after the change was already committed.  My e-mail shows the second cq+ happening at 11:22 PM which is after the change was committed at 11:19 PM (comment 24).  Or is there something about how the failure was handled that isn&apos;t right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176043</commentid>
    <comment_count>30</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-12-30 14:09:48 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; I think this failure might be another variant of bug 28603.  I&apos;m tempted to
&gt; switch the commit-queue back to git until bug 28603 can be resolved.  It
&gt; affects SVN much worse than Git.

No, this was an unfortunate sequence of events.  The commit queue is clearing flags after landing patches (I thought that was fixed?!), so I added the flags back after the bug was closed.  Then Chris reopened the bug to get the executable flag issue fixed, and the commit queue tried to land the patch again (and failed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176479</commentid>
    <comment_count>31</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-03 17:59:03 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; No, this was an unfortunate sequence of events.  The commit queue is clearing
&gt; flags after landing patches (I thought that was fixed?!), so I added the flags
&gt; back after the bug was closed.

You and I seem to disagree on correct behavior here.  Leaving r+ flags after landing a patch is bad, because then the patch shows up in http://webkit.org/pending-commit.  If we happen to close the bug at the same time as landing then it&apos;s &quot;OK&quot;, but only if that bug is never re-opened.  So bugzilla-tool &quot;correctly&quot; (at least in my mind) clears flags when it lands a patch.  If you disagree, we should hash it out in another bug or over webkit-dev.

It&apos;s easy to see who set r+ and cq+ by looking at a bug&apos;s history.  Every bug has a link in the upper-right hand corner (as I&apos;m certain you&apos;re aware of). :)

&gt; Then Chris reopened the bug to get the
&gt; executable flag issue fixed, and the commit queue tried to land the patch again
&gt; (and failed).

OK.  The executable flag issue is bug 27204. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176514</commentid>
    <comment_count>32</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-01-03 19:17:43 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; No, this was an unfortunate sequence of events.  The commit queue is clearing
&gt; &gt; flags after landing patches (I thought that was fixed?!), so I added the flags
&gt; &gt; back after the bug was closed.
&gt; 
&gt; You and I seem to disagree on correct behavior here.  Leaving r+ flags after
&gt; landing a patch is bad, because then the patch shows up in
&gt; http://webkit.org/pending-commit.  If we happen to close the bug at the same
&gt; time as landing then it&apos;s &quot;OK&quot;, but only if that bug is never re-opened.  So
&gt; bugzilla-tool &quot;correctly&quot; (at least in my mind) clears flags when it lands a
&gt; patch.  If you disagree, we should hash it out in another bug or over
&gt; webkit-dev.

I&apos;m pretty sure Darin Adler expressed concern about this in webkit-dev earlier.  I don&apos;t feel strongly enough about it to bring it up again, though.

&gt; It&apos;s easy to see who set r+ and cq+ by looking at a bug&apos;s history.  Every bug
&gt; has a link in the upper-right hand corner (as I&apos;m certain you&apos;re aware of). :)

Yep.  The history doesn&apos;t have the patch title, though, so it&apos;s a bit difficult to map the attachment id on that page back to the attachment on the main page.  (I realize you can click on the attachment from the history page, but you get the attachment instead of any description for patches.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45524</attachid>
            <date>2009-12-27 10:30:08 -0800</date>
            <delta_ts>2009-12-27 13:29:15 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch-tools4-1.txt</filename>
            <type>text/plain</type>
            <size>17910</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNTgwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMjcgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeGVkIGEgYnVnIGluIGZpeENoYW5nZUxvZ1BhdGNoLCBtYWRl
IGl0IHdvcmsgY29ycmVjdGx5IGluCisgICAgICAgIG1vcmUgY2lyY3Vtc3RhbmNlcywgYW5kIGFk
ZGVkIHVuaXQgdGVzdHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyOTE5CisKKyAgICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAg
ICAgIFJld3JvdGUgZml4Q2hhbmdlTG9nUGF0Y2guCisgICAgICAgICAgCisgICAgICAgICogU2Ny
aXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgNyB1bml0
IHRlc3RzIGZvciBmaXhDaGFuZ2VMb2dQYXRjaC4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLXdl
YmtpdC11bml0dGVzdHMtcGVybDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgdGVzdCBoYXJuZXNz
IGZvciB1bml0IHRlc3RzIG9mIFBlcmwgY29kZS4KKwogMjAwOS0xMi0yNyAgWWFlbCBBaGFyb24g
IDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHJldmlzaW9uIDUyNTY3KQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzU2LDY0ICsz
NTYsMTI0IEBAIHN1YiBnaXRkaWZmMnN2bmRpZmYoJCkKICAgICByZXR1cm4gJF87CiB9CiAKLSMg
VGhlIGRpZmYoMSkgY29tbWFuZCBpcyBncmVlZHkgd2hlbiBtYXRjaGluZyBsaW5lcywgc28gYSBu
ZXcgQ2hhbmdlTG9nIGVudHJ5IHdpbGwKLSMgaGF2ZSBsaW5lcyBvZiBjb250ZXh0IGF0IHRoZSB0
b3Agb2YgYSBwYXRjaCB3aGVuIHRoZSBleGlzdGluZyBlbnRyeSBoYXMgdGhlIHNhbWUKLSMgZGF0
ZSBhbmQgYXV0aG9yIGFzIHRoZSBuZXcgZW50cnkuICBBbHRlciB0aGUgQ2hhbmdlTG9nIHBhdGNo
IHNvCi0jIHRoYXQgdGhlIGFkZGVkIGxpbmVzICgiKyIpIGluIHRoZSBwYXRjaCBhbHdheXMgc3Rh
cnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSMgcGF0Y2ggYW5kIHRoZXJlIGFyZSBubyBpbml0
aWFsIGxpbmVzIG9mIGNvbnRleHQuCisjIElmIHBvc3NpYmxlLCByZXR1cm5zIGEgQ2hhbmdlTG9n
IHBhdGNoIGVxdWl2YWxlbnQgdG8gdGhlIGdpdmVuIG9uZSwKKyMgYnV0IHdpdGggdGhlIG5ld2Vz
dCBDaGFuZ2VMb2cgZW50cnkgaW5zZXJ0ZWQgYXQgdGhlIHRvcCBvZiB0aGUKKyMgZmlsZSAtLSBp
LmUuIG5vIGxlYWRpbmcgY29udGV4dCBhbmQgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggIisiLgor
IworIyBJZiBnaXZlbiBhIHBhdGNoIHN0cmluZyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIHBhdGNo
IHdpdGggdGhlIGFib3ZlCisjIHByb3BlcnRpZXMsIGl0IHJldHVybnMgdGhlIGlucHV0IGJhY2sg
dW5jaGFuZ2VkLgorIworIyBXQVJOSU5HOiBUaGlzIHN1YnJvdXRpbmUgY2FuIHJldHVybiBhbiBp
bmVxdWl2YWxlbnQgcGF0Y2ggc3RyaW5nIGlmCisjIGJvdGggdGhlIGJlZ2lubmluZyBvZiB0aGUg
bmV3IENoYW5nZUxvZyBmaWxlIG1hdGNoZXMgdGhlIGJlZ2lubmluZworIyBvZiB0aGUgc291cmNl
IENoYW5nZUxvZywgYW5kIHRoZSBzb3VyY2UgYmVnaW5uaW5nIHdhcyBtb2RpZmllZC4KKyMgT3Ro
ZXJ3aXNlLCBpdCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBlcXVpdmFsZW50IHBhdGNoIHN0
cmluZywKKyMgaWYgaXQgcmV0dXJucy4KKyMKKyMgVGhpcyBzdWJyb3V0aW5lIGlzIHVzZWZ1bCBi
ZWNhdXNlIHRoZSBkaWZmKDEpIGNvbW1hbmQgaXMgZ3JlZWR5IHdoZW4KKyMgbWF0Y2hpbmcgbGlu
ZXMuIEEgbmV3IENoYW5nZUxvZyBlbnRyeSB3aXRoIHRoZSBzYW1lIGRhdGUgYW5kIGF1dGhvcgor
IyBhcyB0aGUgcHJldmlvdXMgd2lsbCBtYXRjaCBhbmQgaGF2ZSBsaW5lcyBvZiBzdGFydGluZyBj
b250ZXh0LgorIworIyBUaGlzIHN1YnJvdXRpbmUgaGFzIHVuaXQgdGVzdHMgaW4gVkNTVXRpbHNf
dW5pdHRlc3QucGwuCiBzdWIgZml4Q2hhbmdlTG9nUGF0Y2goJCkKIHsKICAgICBteSAkcGF0Y2gg
PSBzaGlmdDsgIyAkcGF0Y2ggd2lsbCBvbmx5IGNvbnRhaW4gcGF0Y2ggZnJhZ21lbnRzIGZvciBD
aGFuZ2VMb2cuCiAKICAgICAkcGF0Y2ggPX4gLyhccj9cbikvOwogICAgIG15ICRsaW5lRW5kaW5n
ID0gJDE7Ci0gICAgbXkgQHBhdGNoTGluZXMgPSBzcGxpdCgvJGxpbmVFbmRpbmcvLCAkcGF0Y2gp
OworICAgIG15IEBsaW5lcyA9IHNwbGl0KC8kbGluZUVuZGluZy8sICRwYXRjaCk7CiAKLSAgICAj
IGUuZy4gMjAwOS0wNi0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+Ci0gICAgbXkg
JGRhdGVMaW5lUmVnZXhwU3RyaW5nID0gJ15cKyhcZHs0fS1cZHsyfS1cZHsyfSknICMgQ29uc3Vt
ZSB0aGUgbGVhZGluZyAnKycgYW5kIHRoZSBkYXRlLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuICdccysoLispXHMrJyAjIENvbnN1bWUgdGhlIG5hbWUuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4gJzwoW148Pl0rKT4kJzsgIyBBbmQgZmluYWxseSB0aGUgZW1haWwgYWRk
cmVzcy4KLQotICAgICMgRmlndXJlIG91dCB3aGVyZSB0aGUgcGF0Y2ggY29udGVudHMgc3RhcnQg
YW5kIHN0b3AuCi0gICAgbXkgJHBhdGNoSGVhZGVySW5kZXg7Ci0gICAgbXkgJGZpcnN0Q29udGVu
dEluZGV4OwotICAgIG15ICR0cmFpbGluZ0NvbnRleHRJbmRleDsKLSAgICBteSAkZGF0ZUluZGV4
OwotICAgIG15ICRwYXRjaEVuZEluZGV4ID0gc2NhbGFyKEBwYXRjaExpbmVzKTsKLSAgICBmb3Ig
KG15ICRpbmRleCA9IDA7ICRpbmRleCA8IEBwYXRjaExpbmVzOyArKyRpbmRleCkgewotICAgICAg
ICBteSAkbGluZSA9ICRwYXRjaExpbmVzWyRpbmRleF07Ci0gICAgICAgIGlmICgkbGluZSA9fiAv
XlxAXEAgLVxkKyxcZCsgXCtcZCssXGQrIFxAXEAkLykgeyAjIGUuZy4gQEAgLTEsNSArMSwxOCBA
QAotICAgICAgICAgICAgaWYgKCRwYXRjaEhlYWRlckluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
JHBhdGNoRW5kSW5kZXggPSAkaW5kZXg7ICMgV2Ugb25seSBib3RoZXIgdG8gZml4IHVwIHRoZSBm
aXJzdCBwYXRjaCBmcmFnbWVudC4KLSAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgJHBhdGNoSGVhZGVySW5kZXggPSAkaW5kZXg7Ci0gICAgICAgIH0KLSAg
ICAgICAgJGZpcnN0Q29udGVudEluZGV4ID0gJGluZGV4IGlmICgkcGF0Y2hIZWFkZXJJbmRleCAm
JiAhJGZpcnN0Q29udGVudEluZGV4ICYmICRsaW5lID1+IC9eXCtbXitdLyk7ICMgT25seSBtYXRj
aCBhZnRlciBmaW5kaW5nIHBhdGNoSGVhZGVySW5kZXgsIG90aGVyd2lzZSB3ZSdkIG1hdGNoICIr
KysiLgotICAgICAgICAkZGF0ZUluZGV4ID0gJGluZGV4IGlmICgkbGluZSA9fiAvJGRhdGVMaW5l
UmVnZXhwU3RyaW5nLyk7Ci0gICAgICAgICR0cmFpbGluZ0NvbnRleHRJbmRleCA9ICRpbmRleCBp
ZiAoJGZpcnN0Q29udGVudEluZGV4ICYmICEkdHJhaWxpbmdDb250ZXh0SW5kZXggJiYgJGxpbmUg
PX4gL14gLyk7Ci0gICAgfQotICAgIG15ICRjb250ZW50TGluZUNvdW50ID0gJHRyYWlsaW5nQ29u
dGV4dEluZGV4IC0gJGZpcnN0Q29udGVudEluZGV4OwotICAgIG15ICR0cmFpbGluZ0NvbnRleHRM
aW5lQ291bnQgPSAkcGF0Y2hFbmRJbmRleCAtICR0cmFpbGluZ0NvbnRleHRJbmRleDsKLQotICAg
ICMgSWYgd2UgZGlkbid0IGZpbmQgYSBkYXRlIGxpbmUgaW4gdGhlIGNvbnRlbnQgdGhlbiB0aGlz
IGlzIG5vdCBhIHBhdGNoIHdlIHNob3VsZCB0cnkgYW5kIGZpeC4KLSAgICByZXR1cm4gJHBhdGNo
IGlmICghJGRhdGVJbmRleCk7Ci0KLSAgICAjIFdlIG9ubHkgbmVlZCB0byBkbyBhbnl0aGluZyBp
ZiB0aGUgZGF0ZSBsaW5lIGlzIG5vdCB0aGUgZmlyc3QgY29udGVudCBsaW5lLgotICAgIHJldHVy
biAkcGF0Y2ggaWYgKCRkYXRlSW5kZXggPT0gJGZpcnN0Q29udGVudEluZGV4KTsKLQotICAgICMg
V3JpdGUgdGhlIG5ldyBwYXRjaC4KLSAgICBteSAkdG90YWxOZXdDb250ZW50TGluZXMgPSAkY29u
dGVudExpbmVDb3VudCArICR0cmFpbGluZ0NvbnRleHRMaW5lQ291bnQ7Ci0gICAgJHBhdGNoTGlu
ZXNbJHBhdGNoSGVhZGVySW5kZXhdID0gIkBAIC0xLCR0cmFpbGluZ0NvbnRleHRMaW5lQ291bnQg
KzEsJHRvdGFsTmV3Q29udGVudExpbmVzIEBAIjsgIyBXcml0ZSBhIG5ldyBoZWFkZXIuCi0gICAg
bXkgQHJlcGVhdGVkTGluZXMgPSBzcGxpY2UoQHBhdGNoTGluZXMsICRkYXRlSW5kZXgsICR0cmFp
bGluZ0NvbnRleHRJbmRleCAtICRkYXRlSW5kZXgpOyAjIFRoZSBkYXRlIGxpbmUgYW5kIGFsbCB0
aGUgY29udGVudCBhZnRlciBpdCB0aGF0IGRpZmYgc2F3IGFzIHJlcGVhdGVkLgotICAgIHNwbGlj
ZShAcGF0Y2hMaW5lcywgJGZpcnN0Q29udGVudEluZGV4LCAwLCBAcmVwZWF0ZWRMaW5lcyk7ICMg
TW92ZSB0aGUgcmVwZWF0ZWQgY29udGVudCB0byB0aGUgdG9wLgotICAgIGZvcmVhY2ggbXkgJGxp
bmUgKEByZXBlYXRlZExpbmVzKSB7Ci0gICAgICAgICRsaW5lID1+IHMvXlwrLyAvOworICAgIG15
ICRpID0gMDsgIyBXZSByZXVzZSB0aGUgc2FtZSBpbmRleCB0aHJvdWdob3V0LgorCisgICAgIyBT
a2lwIHRvIGJlZ2lubmluZyBvZiBmaXJzdCBjaHVuay4KKyAgICBmb3IgKDsgJGkgPCBAbGluZXM7
ICsrJGkpIHsKKyAgICAgICAgaWYgKHN1YnN0cigkbGluZXNbJGldLCAwLCAxKSBlcSAiQCIpIHsK
KyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgbXkgJGNodW5rU3RhcnQg
PSArKyRpOworCisgICAgIyBPcHRpbWl6YXRpb246IGRvIG5vdCBwcm9jZXNzIGlmIG5ldyBsaW5l
cyBhbHJlYWR5IGJlZ2luIHRoZSBjaHVuay4KKyAgICBpZiAoc3Vic3RyKCRsaW5lc1skaV0sIDAs
IDEpIGVxICIrIikgeworICAgICAgICByZXR1cm4gJHBhdGNoOworICAgIH0KKworICAgICMgU2tp
cCB0byBmaXJzdCBsaW5lIG9mIG5ld2x5IGFkZGVkIENoYW5nZUxvZyBlbnRyeS4KKyAgICAjIEZv
ciBleGFtcGxlLCArMjAwOS0wNi0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+Cisg
ICAgbXkgJGRhdGVTdGFydFJlZ0V4ID0gJ15cKyhcZHs0fS1cZHsyfS1cZHsyfSknICMgbGVhZGlu
ZyArIGFuZCBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgLiAnXHMrKC4rKVxzKycgIyBu
YW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgLiAnPChbXjw+XSspPiQnOyAjIGUtbWFpbCBh
ZGRyZXNzCisKKyAgICBmb3IgKDsgJGkgPCBAbGluZXM7ICsrJGkpIHsKKyAgICAgICAgbXkgJGxp
bmUgPSAkbGluZXNbJGldOworICAgICAgICBteSAkZmlyc3QgPSBzdWJzdHIoJGxpbmUsIDAsIDEp
OworICAgICAgICBpZiAoJGxpbmUgPX4gLyRkYXRlU3RhcnRSZWdFeC8pIHsKKyAgICAgICAgICAg
IGxhc3Q7CisgICAgICAgIH0gZWxzaWYgKCRmaXJzdCBlcSAiICIgb3IgJGZpcnN0IGVxICIrIikg
eworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJHBhdGNoOyAj
IERvIG5vdCBjaGFuZ2UgaWYsIGZvciBleGFtcGxlLCAiLSIgb3IgIkAiIGZvdW5kLgorICAgIH0K
KyAgICBpZiAoJGkgPj0gQGxpbmVzKSB7CisgICAgICAgIHJldHVybiAkcGF0Y2g7ICMgRG8gbm90
IGNoYW5nZSBpZiBkYXRlIG5vdCBmb3VuZC4KKyAgICB9CisgICAgbXkgJGRhdGVTdGFydCA9ICRp
OworCisgICAgIyBSZXdyaXRlIG92ZXJsYXBwaW5nIGxpbmVzIHRvIGxlYWQgd2l0aCAiICIuCisg
ICAgbXkgQG92ZXJsYXBwaW5nTmV3TGluZXMgPSAoKTsgIyBUaGVzZSB3aWxsIGluY2x1ZGUgYSBs
ZWFkaW5nICsuCisgICAgZm9yICg7ICRpIDwgQGxpbmVzOyArKyRpKSB7CisgICAgICAgIG15ICRs
aW5lID0gJGxpbmVzWyRpXTsKKyAgICAgICAgaWYgKHN1YnN0cigkbGluZSwgMCwgMSkgbmUgIisi
KSB7CisgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBvdmVybGFwcGlu
Z05ld0xpbmVzLCAkbGluZSk7CisgICAgICAgICRsaW5lc1skaV0gPSAiICIgLiBzdWJzdHIoJGxp
bmUsIDEpOworICAgIH0KKworICAgICMgUmVtb3ZlIGV4Y2VzcyBlbmRpbmcgY29udGV4dCwgaWYg
bmVjZXNzYXJ5LgorICAgIG15ICR0cmltQ29udGV4dCA9IDE7CisgICAgZm9yICg7ICRpIDwgQGxp
bmVzOyArKyRpKSB7CisgICAgICAgIG15ICRmaXJzdCA9IHN1YnN0cigkbGluZXNbJGldLCAwLCAx
KTsKKyAgICAgICAgaWYgKCRmaXJzdCBlcSAiICIpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAg
ICAgIH0gZWxzaWYgKCRmaXJzdCBlcSAiQCIpIHsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAg
IH0KKyAgICAgICAgJHRyaW1Db250ZXh0ID0gMDsgIyBGb3IgZXhhbXBsZSwgaWYgIisiIG9yICIt
IiBlbmNvdW50ZXJlZC4KKyAgICAgICAgbGFzdDsKKyAgICB9CisgICAgbXkgJG51bUxpbmVzRGVs
ZXRlZENvbnRleHQgPSAwOworICAgIGlmICgkdHJpbUNvbnRleHQpIHsgIyBBbHNvIG9jY3VycyBp
ZiBlbmQgb2YgZmlsZSByZWFjaGVkLgorICAgICAgICBzcGxpY2UoQGxpbmVzLCAkaSAtIEBvdmVy
bGFwcGluZ05ld0xpbmVzLCBAb3ZlcmxhcHBpbmdOZXdMaW5lcyk7CisgICAgICAgICRudW1MaW5l
c0RlbGV0ZWRDb250ZXh0ID0gQG92ZXJsYXBwaW5nTmV3TGluZXM7CisgICAgfQorCisgICAgIyBX
b3JrIGJhY2t3YXJkcywgc2hpZnRpbmcgb3ZlcmxhcHBpbmcgbGluZXMgdG93YXJkcyBmcm9udAor
ICAgICMgd2hpbGUgY2hlY2tpbmcgdGhhdCBwYXRjaCBzdGF5cyBlcXVpdmFsZW50LgorICAgIGZv
ciAoJGkgPSAkZGF0ZVN0YXJ0IC0gMTsgJGkgPj0gJGNodW5rU3RhcnQ7IC0tJGkpIHsKKyAgICAg
ICAgbXkgJGxpbmUgPSAkbGluZXNbJGldOworICAgICAgICBpZiAoc3Vic3RyKCRsaW5lLCAwLCAx
KSBuZSAiICIpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgbXkgJHRl
eHQgPSBzdWJzdHIoJGxpbmUsIDEpOworICAgICAgICBteSAkbmV3TGluZSA9IHBvcChAb3Zlcmxh
cHBpbmdOZXdMaW5lcyk7CisgICAgICAgIGlmICgkdGV4dCBuZSBzdWJzdHIoJG5ld0xpbmUsIDEp
KSB7CisgICAgICAgICAgICByZXR1cm4gJHBhdGNoOyAjIFVuZXhwZWN0ZWQgZGlmZmVyZW5jZS4K
KyAgICAgICAgfQorICAgICAgICAkbGluZXNbJGldID0gIiskdGV4dCI7CisgICAgfQorICAgICRs
aW5lc1skY2h1bmtTdGFydCAtIDFdID1+IC9eXEBcQCAtKFxkKyksKFxkKykgXCtcZCssKFxkKykg
XEBcQC87ICMgZS5nLiBAQCAtMiw2ICsyLDE4IEBACisgICAgaWYgKEBvdmVybGFwcGluZ05ld0xp
bmVzICE9ICQxIC0gMSkgeyAjIE51bWJlciBvZiBza2lwcGVkIGZpcnN0IGxpbmVzLgorICAgICAg
ICByZXR1cm4gJHBhdGNoOyAjIFVuZXhwZWN0ZWQgZGlmZmVyZW5jZS4KICAgICB9Ci0gICAgc3Bs
aWNlKEBwYXRjaExpbmVzLCAkdHJhaWxpbmdDb250ZXh0SW5kZXgsICRwYXRjaEVuZEluZGV4LCBA
cmVwZWF0ZWRMaW5lcyk7ICMgUmVwbGFjZSB0cmFpbGluZyBjb250ZXh0IHdpdGggdGhlIHJlcGVh
dGVkIGNvbnRlbnQuCi0gICAgc3BsaWNlKEBwYXRjaExpbmVzLCAkcGF0Y2hIZWFkZXJJbmRleCAr
IDEsICRmaXJzdENvbnRlbnRJbmRleCAtICRwYXRjaEhlYWRlckluZGV4IC0gMSk7ICMgUmVtb3Zl
IGFueSBsZWFkaW5nIGNvbnRleHQuCisgICAgIyBJZiBAb3ZlcmxhcHBpbmdOZXdMaW5lcyA+IDAs
IHRoaXMgaXMgd2hlcmUgd2UgbWFrZSB1c2Ugb2YgdGhlCisgICAgIyBhc3N1bXB0aW9uIHRoYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgc291cmNlIGZpbGUgd2FzIG5vdCBtb2RpZmllZC4KKyAgICBz
cGxpY2UoQGxpbmVzLCAkY2h1bmtTdGFydCwgMCwgQG92ZXJsYXBwaW5nTmV3TGluZXMpOworICAg
ICMgVXBkYXRlIGNodW5rIHJhbmdlLgorICAgIG15ICRudW1PcmlnaW5hbExpbmVzID0gJDIgLSAk
bnVtTGluZXNEZWxldGVkQ29udGV4dCArIEBvdmVybGFwcGluZ05ld0xpbmVzOworICAgIG15ICRu
ZXdDaHVua0xlbmd0aCA9ICQzIC0gJG51bUxpbmVzRGVsZXRlZENvbnRleHQgKyBAb3ZlcmxhcHBp
bmdOZXdMaW5lczsKKyAgICAkbGluZXNbJGNodW5rU3RhcnQgLSAxXSA9ICJAQCAtMSwkbnVtT3Jp
Z2luYWxMaW5lcyArMSwkbmV3Q2h1bmtMZW5ndGggQEAiOwogCi0gICAgcmV0dXJuIGpvaW4oJGxp
bmVFbmRpbmcsIEBwYXRjaExpbmVzKSAuICJcbiI7ICMgcGF0Y2goMSkgZXhwZWN0cyBhbiBleHRy
YSB0cmFpbGluZyBuZXdsaW5lLgorICAgIHJldHVybiBqb2luKCRsaW5lRW5kaW5nLCBAbGluZXMp
IC4gIlxuIjsgIyBwYXRjaCgxKSBleHBlY3RzIGFuIGV4dHJhIHRyYWlsaW5nIG5ld2xpbmUuCiB9
CiAKIHN1YiBnaXRDb25maWcoJCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNf
dW5pdHRlc3QucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlsc191
bml0dGVzdC5wbAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNf
dW5pdHRlc3QucGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjk2IEBACisjIS91c3IvYmluL3Bl
cmwKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBVbml0IHRlc3RzIG9mIFZDU1V0aWxzLnBtLgor
Cit1c2UgVGVzdDo6U2ltcGxlIHRlc3RzID0+IDc7CisKK3VzZSBWQ1NVdGlsczsKKworc3ViIGZp
eENoYW5nZUxvZ1BhdGNoKCQpOworCisjIGZpeENoYW5nZUxvZ1BhdGNoCisjCisjIFRoZSBzb3Vy
Y2UgQ2hhbmdlTG9nIGZvciB0aGVzZSB0ZXN0cyBpcyB0aGUgZm9sbG93aW5nOgorIyAKKyMgMjAw
OS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgorIyAKKyMgICAgICAgICBSZXZp
ZXdlZCBieSBSYXkuCisjIAorIyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTIt
MjIuCisjIAorIyAgICAgICAgICogRmlsZToKKyMgICAgICAgICAqIEZpbGUyOgorIyAKKyMgMjAw
OS0xMi0yMSAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgorIyAKKyMgICAgICAgICBSZXZp
ZXdlZCBieSBSYXkuCisjIAorIyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTIt
MjEuCisjIAorIyAgICAgICAgICogRmlsZToKKyMgICAgICAgICAqIEZpbGUyOgorCitteSAkdGV4
dDsKK215ICRpbjsKK215ICRvdXQ7CisKKyMgTmV3IHRlc3QKKyR0ZXh0ID0gImZpeENoYW5nZUxv
Z1BhdGNoOiBbbm8gY2hhbmdlXSBGaXJzdCBsaW5lIGlzIG5ldyBsaW5lLiI7CisKKyRpbiA9IDw8
J0VORCc7CistLS0gQ2hhbmdlTG9nCisrKysgQ2hhbmdlTG9nCitAQCAtMSwzICsxLDExIEBACisr
MjAwOS0xMi0yMiAgQm9iICA8Ym9iQGVtYWlsLmFkZHJlc3M+CisrCisrICAgICAgICBSZXZpZXdl
ZCBieSBSYXkuCisrCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBjb2RlIG9uIDIwMDktMTIt
MjIuCisrCisrICAgICAgICAqIEZpbGU6CisrCisgMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBl
bWFpbC5hZGRyZXNzPgorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorRU5ECisKK29rKGZp
eENoYW5nZUxvZ1BhdGNoKCRpbikgZXEgJGluLCAkdGV4dCk7CisKKyMgTmV3IHRlc3QKKyR0ZXh0
ID0gImZpeENoYW5nZUxvZ1BhdGNoOiBbbm8gY2hhbmdlXSBObyBkYXRlIHN0cmluZy4iOworCisk
aW4gPSA8PCdFTkQnOworLS0tIENoYW5nZUxvZworKysrIENoYW5nZUxvZworQEAgLTYsNiArNiw3
IEBACisgCisgICAgICAgICAqIEZpbGU6CisgICAgICAgICAqIEZpbGUyOgorKyAgICAgICAgKiBG
aWxlMzoKKyAKKyAyMDA5LTEyLTIxICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisgCitF
TkQKKworb2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkaW4sICR0ZXh0KTsKKworIyBOZXcg
dGVzdAorJHRleHQgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IFtubyBjaGFuZ2VdIE5ldyBlbnRyeSBp
bnNlcnRlZCBpbiBtaWRkbGUuIjsKKworJGluID0gPDwnRU5EJzsKKy0tLSBDaGFuZ2VMb2cKKysr
KyBDaGFuZ2VMb2cKK0BAIC0xMSw2ICsxMSwxNCBAQAorIAorICAgICAgICAgUmV2aWV3ZWQgYnkg
UmF5LgorIAorKyAgICAgICAgQ2hhbmdlZCBzb21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIxLgor
KworKyAgICAgICAgKiBGaWxlOgorKworKzIwMDktMTItMjEgIEFsaWNlICA8YWxpY2VAZW1haWwu
YWRkcmVzcz4KKysKKysgICAgICAgIFJldmlld2VkIGJ5IFJheS4KKysKKyAgICAgICAgIENoYW5n
ZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjEuCisgCisgICAgICAgICAqIEZpbGU6CitFTkQKKwor
b2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkaW4sICR0ZXh0KTsKKworIyBOZXcgdGVzdAor
JHRleHQgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IExlYWRpbmcgY29udGV4dCBpbmNsdWRlcyBmaXJz
dCBsaW5lLiI7CisKKyRpbiA9IDw8J0VORCc7CistLS0gQ2hhbmdlTG9nCisrKysgQ2hhbmdlTG9n
CitAQCAtMSw1ICsxLDEzIEBACisgMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRy
ZXNzPgorIAorKyAgICAgICAgUmV2aWV3ZWQgYnkgU3VlLgorKworKyAgICAgICAgQ2hhbmdlZCBz
b21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworKzIw
MDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKyAgICAgICAgIFJldmll
d2VkIGJ5IFJheS4KKyAKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjIu
CitFTkQKKworJG91dCA9IDw8J0VORCc7CistLS0gQ2hhbmdlTG9nCisrKysgQ2hhbmdlTG9nCitA
QCAtMSwzICsxLDExIEBACisrMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNz
PgorKworKyAgICAgICAgUmV2aWV3ZWQgYnkgU3VlLgorKworKyAgICAgICAgQ2hhbmdlZCBzb21l
IG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworIDIwMDkt
MTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmlld2Vk
IGJ5IFJheS4KK0VORAorCitvayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVxICRvdXQsICR0ZXh0
KTsKKworIyBOZXcgdGVzdAorJHRleHQgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IExlYWRpbmcgY29u
dGV4dCBkb2VzIG5vdCBpbmNsdWRlIGZpcnN0IGxpbmUuIjsKKworJGluID0gPDwnRU5EJzsKK0BA
IC0yLDYgKzIsMTQgQEAKKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IFJheS4KKyAKKysgICAgICAg
IENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0yMi4KKysKKysgICAgICAgICogRmls
ZToKKysKKysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrCisrICAg
ICAgICBSZXZpZXdlZCBieSBSYXkuCisrCisgICAgICAgICBDaGFuZ2VkIHNvbWUgY29kZSBvbiAy
MDA5LTEyLTIyLgorIAorICAgICAgICAgKiBGaWxlOgorRU5ECisKKyRvdXQgPSA8PCdFTkQnOwor
QEAgLTEsMyArMSwxMSBAQAorKzIwMDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVz
cz4KKysKKysgICAgICAgIFJldmlld2VkIGJ5IFJheS4KKysKKysgICAgICAgIENoYW5nZWQgc29t
ZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0yMi4KKysKKysgICAgICAgICogRmlsZToKKysKKyAyMDA5
LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisgCisgICAgICAgICBSZXZpZXdl
ZCBieSBSYXkuCitFTkQKKworb2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGV4
dCk7CisKKyMgTmV3IHRlc3QKKyR0ZXh0ID0gImZpeENoYW5nZUxvZ1BhdGNoOiBOb24tY29uc2Vj
dXRpdmUgbGluZSBhZGRpdGlvbnMuIjsKKworIyBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUs
IGlmIHRoZSBuZXcgQ2hhbmdlTG9nIGVudHJ5IGluY2x1ZGVzCisjIHRyYWlsaW5nIHdoaXRlIHNw
YWNlIGluIHRoZSBmaXJzdCBibGFuayBsaW5lIGJ1dCBub3QgdGhlIHNlY29uZC4KKyMgQSBkaWZm
IGNvbW1hbmQgY2FuIHRoZW4gbWF0Y2ggdGhlIHNlY29uZCBibGFuayBsaW5lIG9mIHRoZSBuZXcK
KyMgQ2hhbmdlTG9nIGVudHJ5IHdpdGggdGhlIGZpcnN0IGJsYW5rIGxpbmUgb2YgdGhlIG9sZC4K
KyMgVGhlIHN2biBkaWZmIGNvbW1hbmQgd2l0aCB0aGUgZGVmYXVsdCAtLWRpZmYtY21kIGhhcyBk
b25lIHRoaXMuCiskaW4gPSA8PCdFTkQnOworQEAgLTEsNSArMSwxMSBAQAorIDIwMDktMTItMjIg
IEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysgPHByZXRlbmQtd2hpdGVzcGFjZT4KKysg
ICAgICAgIFJldmlld2VkIGJ5IFJheS4KKyAKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNv
ZGUgb24gMjAwOS0xMi0yMi4KKysKKysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFk
ZHJlc3M+CisrCisgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisgCisgICAgICAgICBDaGFuZ2Vk
IHNvbWUgY29kZSBvbiAyMDA5LTEyLTIyLgorRU5ECisKKyRvdXQgPSA8PCdFTkQnOworQEAgLTEs
MyArMSw5IEBACisrMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgorKyA8
cHJldGVuZC13aGl0ZXNwYWNlPgorKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorKworKyAgICAg
ICAgQ2hhbmdlZCBzb21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworIDIwMDktMTItMjIg
IEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IFJh
eS4KK0VORAorCitvayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVxICRvdXQsICR0ZXh0KTsKKwor
IyBOZXcgdGVzdAorJHRleHQgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IEFkZGl0aW9uYWwgZWRpdHMg
YWZ0ZXIgbmV3IGVudHJ5LiI7CisKKyRpbiA9IDw8J0VORCc7CitAQCAtMiwxMCArMiwxNyBAQAor
IAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorIAorKyAgICAgICAgQ2hhbmdlZCBzb21lIG1v
cmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworKzIwMDktMTIt
MjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKysgICAgICAgIFJldmlld2VkIGJ5
IFJheS4KKysKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjIuCisgCisg
ICAgICAgICAqIEZpbGU6CistICAgICAgICAqIEZpbGUyOgorIAorIDIwMDktMTItMjEgIEFsaWNl
ICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKK0VORAorCiskb3V0ID0gPDwnRU5EJzsKK0BAIC0x
LDExICsxLDE4IEBACisrMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgor
KworKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorKworKyAgICAgICAgQ2hhbmdlZCBzb21lIG1v
cmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworIDIwMDktMTIt
MjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmlld2VkIGJ5
IFJheS4KKyAKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjIuCisgCisg
ICAgICAgICAqIEZpbGU6CistICAgICAgICAqIEZpbGUyOgorIAorIDIwMDktMTItMjEgIEFsaWNl
ICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKK0VORAorCitvayhmaXhDaGFuZ2VMb2dQYXRjaCgk
aW4pIGVxICRvdXQsICR0ZXh0KTsKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMv
U2NyaXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdW5pdHRl
c3RzLXBlcmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXVu
aXR0ZXN0cy1wZXJsCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Vi
a2l0LXVuaXR0ZXN0cy1wZXJsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACisjIS91c3Iv
YmluL3BlcmwKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBSdW5zIHVuaXQgdGVzdHMgb2YgV2Vi
S2l0IFBlcmwgY29kZS4KKwordXNlIFRlc3Q6Okhhcm5lc3M7CisKK3J1bnRlc3RzKCJWQ1NVdGls
c191bml0dGVzdC5wbCIpOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0
cy9ydW4td2Via2l0LXVuaXR0ZXN0cy1wZXJsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45532</attachid>
            <date>2009-12-27 13:29:15 -0800</date>
            <delta_ts>2009-12-29 23:10:38 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>patch-tools4-2.txt</filename>
            <type>text/plain</type>
            <size>18601</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNTgwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMjcgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeGVkIGEgYnVnIGluIGZpeENoYW5nZUxvZ1BhdGNoLCBtYWRl
IGl0IHdvcmsgY29ycmVjdGx5IGluCisgICAgICAgIG1vcmUgY2lyY3Vtc3RhbmNlcywgYW5kIGFk
ZGVkIHVuaXQgdGVzdHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyOTE5CisKKyAgICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAg
ICAgIFJld3JvdGUgZml4Q2hhbmdlTG9nUGF0Y2guCisgICAgICAgICAgCisgICAgICAgICogU2Ny
aXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgNyB1bml0
IHRlc3RzIGZvciBmaXhDaGFuZ2VMb2dQYXRjaC4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLXdl
YmtpdC11bml0dGVzdHMtcGVybDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgdGVzdCBoYXJuZXNz
IGZvciB1bml0IHRlc3RzIG9mIFBlcmwgY29kZS4KKwogMjAwOS0xMi0yNyAgWWFlbCBBaGFyb24g
IDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHJldmlzaW9uIDUyNTY3KQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzU2LDY0ICsz
NTYsMTQxIEBAIHN1YiBnaXRkaWZmMnN2bmRpZmYoJCkKICAgICByZXR1cm4gJF87CiB9CiAKLSMg
VGhlIGRpZmYoMSkgY29tbWFuZCBpcyBncmVlZHkgd2hlbiBtYXRjaGluZyBsaW5lcywgc28gYSBu
ZXcgQ2hhbmdlTG9nIGVudHJ5IHdpbGwKLSMgaGF2ZSBsaW5lcyBvZiBjb250ZXh0IGF0IHRoZSB0
b3Agb2YgYSBwYXRjaCB3aGVuIHRoZSBleGlzdGluZyBlbnRyeSBoYXMgdGhlIHNhbWUKLSMgZGF0
ZSBhbmQgYXV0aG9yIGFzIHRoZSBuZXcgZW50cnkuICBBbHRlciB0aGUgQ2hhbmdlTG9nIHBhdGNo
IHNvCi0jIHRoYXQgdGhlIGFkZGVkIGxpbmVzICgiKyIpIGluIHRoZSBwYXRjaCBhbHdheXMgc3Rh
cnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSMgcGF0Y2ggYW5kIHRoZXJlIGFyZSBubyBpbml0
aWFsIGxpbmVzIG9mIGNvbnRleHQuCisjIElmIHBvc3NpYmxlLCByZXR1cm5zIGEgQ2hhbmdlTG9n
IHBhdGNoIGVxdWl2YWxlbnQgdG8gdGhlIGdpdmVuIG9uZSwKKyMgYnV0IHdpdGggdGhlIG5ld2Vz
dCBDaGFuZ2VMb2cgZW50cnkgaW5zZXJ0ZWQgYXQgdGhlIHRvcCBvZiB0aGUKKyMgZmlsZSAtLSBp
LmUuIG5vIGxlYWRpbmcgY29udGV4dCBhbmQgYWxsIGxpbmVzIHN0YXJ0aW5nIHdpdGggIisiLgor
IworIyBJZiBnaXZlbiBhIHBhdGNoIHN0cmluZyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIHBhdGNo
IHdpdGggdGhlIGFib3ZlCisjIHByb3BlcnRpZXMsIGl0IHJldHVybnMgdGhlIGlucHV0IGJhY2sg
dW5jaGFuZ2VkLgorIworIyBXQVJOSU5HOiBUaGlzIHN1YnJvdXRpbmUgY2FuIHJldHVybiBhbiBp
bmVxdWl2YWxlbnQgcGF0Y2ggc3RyaW5nIGlmCisjIGJvdGggdGhlIGJlZ2lubmluZyBvZiB0aGUg
bmV3IENoYW5nZUxvZyBmaWxlIG1hdGNoZXMgdGhlIGJlZ2lubmluZworIyBvZiB0aGUgc291cmNl
IENoYW5nZUxvZywgYW5kIHRoZSBzb3VyY2UgYmVnaW5uaW5nIHdhcyBtb2RpZmllZC4KKyMgT3Ro
ZXJ3aXNlLCBpdCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBlcXVpdmFsZW50IHBhdGNoIHN0
cmluZywKKyMgaWYgaXQgcmV0dXJucy4KKyMKKyMgVGhpcyBzdWJyb3V0aW5lIGlzIHVzZWZ1bCBi
ZWNhdXNlIHRoZSBkaWZmKDEpIGNvbW1hbmQgaXMgZ3JlZWR5IHdoZW4KKyMgbWF0Y2hpbmcgbGlu
ZXMuIEEgbmV3IENoYW5nZUxvZyBlbnRyeSB3aXRoIHRoZSBzYW1lIGRhdGUgYW5kIGF1dGhvcgor
IyBhcyB0aGUgcHJldmlvdXMgd2lsbCBtYXRjaCBhbmQgaGF2ZSBsaW5lcyBvZiBzdGFydGluZyBj
b250ZXh0LgorIworIyBUaGlzIHN1YnJvdXRpbmUgaGFzIHVuaXQgdGVzdHMgaW4gVkNTVXRpbHNf
dW5pdHRlc3QucGwuCiBzdWIgZml4Q2hhbmdlTG9nUGF0Y2goJCkKIHsKICAgICBteSAkcGF0Y2gg
PSBzaGlmdDsgIyAkcGF0Y2ggd2lsbCBvbmx5IGNvbnRhaW4gcGF0Y2ggZnJhZ21lbnRzIGZvciBD
aGFuZ2VMb2cuCiAKICAgICAkcGF0Y2ggPX4gLyhccj9cbikvOwogICAgIG15ICRsaW5lRW5kaW5n
ID0gJDE7Ci0gICAgbXkgQHBhdGNoTGluZXMgPSBzcGxpdCgvJGxpbmVFbmRpbmcvLCAkcGF0Y2gp
OworICAgIG15IEBsaW5lcyA9IHNwbGl0KC8kbGluZUVuZGluZy8sICRwYXRjaCk7CiAKLSAgICAj
IGUuZy4gMjAwOS0wNi0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+Ci0gICAgbXkg
JGRhdGVMaW5lUmVnZXhwU3RyaW5nID0gJ15cKyhcZHs0fS1cZHsyfS1cZHsyfSknICMgQ29uc3Vt
ZSB0aGUgbGVhZGluZyAnKycgYW5kIHRoZSBkYXRlLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuICdccysoLispXHMrJyAjIENvbnN1bWUgdGhlIG5hbWUuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4gJzwoW148Pl0rKT4kJzsgIyBBbmQgZmluYWxseSB0aGUgZW1haWwgYWRk
cmVzcy4KLQotICAgICMgRmlndXJlIG91dCB3aGVyZSB0aGUgcGF0Y2ggY29udGVudHMgc3RhcnQg
YW5kIHN0b3AuCi0gICAgbXkgJHBhdGNoSGVhZGVySW5kZXg7Ci0gICAgbXkgJGZpcnN0Q29udGVu
dEluZGV4OwotICAgIG15ICR0cmFpbGluZ0NvbnRleHRJbmRleDsKLSAgICBteSAkZGF0ZUluZGV4
OwotICAgIG15ICRwYXRjaEVuZEluZGV4ID0gc2NhbGFyKEBwYXRjaExpbmVzKTsKLSAgICBmb3Ig
KG15ICRpbmRleCA9IDA7ICRpbmRleCA8IEBwYXRjaExpbmVzOyArKyRpbmRleCkgewotICAgICAg
ICBteSAkbGluZSA9ICRwYXRjaExpbmVzWyRpbmRleF07Ci0gICAgICAgIGlmICgkbGluZSA9fiAv
XlxAXEAgLVxkKyxcZCsgXCtcZCssXGQrIFxAXEAkLykgeyAjIGUuZy4gQEAgLTEsNSArMSwxOCBA
QAotICAgICAgICAgICAgaWYgKCRwYXRjaEhlYWRlckluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
JHBhdGNoRW5kSW5kZXggPSAkaW5kZXg7ICMgV2Ugb25seSBib3RoZXIgdG8gZml4IHVwIHRoZSBm
aXJzdCBwYXRjaCBmcmFnbWVudC4KLSAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgJHBhdGNoSGVhZGVySW5kZXggPSAkaW5kZXg7Ci0gICAgICAgIH0KLSAg
ICAgICAgJGZpcnN0Q29udGVudEluZGV4ID0gJGluZGV4IGlmICgkcGF0Y2hIZWFkZXJJbmRleCAm
JiAhJGZpcnN0Q29udGVudEluZGV4ICYmICRsaW5lID1+IC9eXCtbXitdLyk7ICMgT25seSBtYXRj
aCBhZnRlciBmaW5kaW5nIHBhdGNoSGVhZGVySW5kZXgsIG90aGVyd2lzZSB3ZSdkIG1hdGNoICIr
KysiLgotICAgICAgICAkZGF0ZUluZGV4ID0gJGluZGV4IGlmICgkbGluZSA9fiAvJGRhdGVMaW5l
UmVnZXhwU3RyaW5nLyk7Ci0gICAgICAgICR0cmFpbGluZ0NvbnRleHRJbmRleCA9ICRpbmRleCBp
ZiAoJGZpcnN0Q29udGVudEluZGV4ICYmICEkdHJhaWxpbmdDb250ZXh0SW5kZXggJiYgJGxpbmUg
PX4gL14gLyk7Ci0gICAgfQotICAgIG15ICRjb250ZW50TGluZUNvdW50ID0gJHRyYWlsaW5nQ29u
dGV4dEluZGV4IC0gJGZpcnN0Q29udGVudEluZGV4OwotICAgIG15ICR0cmFpbGluZ0NvbnRleHRM
aW5lQ291bnQgPSAkcGF0Y2hFbmRJbmRleCAtICR0cmFpbGluZ0NvbnRleHRJbmRleDsKLQotICAg
ICMgSWYgd2UgZGlkbid0IGZpbmQgYSBkYXRlIGxpbmUgaW4gdGhlIGNvbnRlbnQgdGhlbiB0aGlz
IGlzIG5vdCBhIHBhdGNoIHdlIHNob3VsZCB0cnkgYW5kIGZpeC4KLSAgICByZXR1cm4gJHBhdGNo
IGlmICghJGRhdGVJbmRleCk7Ci0KLSAgICAjIFdlIG9ubHkgbmVlZCB0byBkbyBhbnl0aGluZyBp
ZiB0aGUgZGF0ZSBsaW5lIGlzIG5vdCB0aGUgZmlyc3QgY29udGVudCBsaW5lLgotICAgIHJldHVy
biAkcGF0Y2ggaWYgKCRkYXRlSW5kZXggPT0gJGZpcnN0Q29udGVudEluZGV4KTsKLQotICAgICMg
V3JpdGUgdGhlIG5ldyBwYXRjaC4KLSAgICBteSAkdG90YWxOZXdDb250ZW50TGluZXMgPSAkY29u
dGVudExpbmVDb3VudCArICR0cmFpbGluZ0NvbnRleHRMaW5lQ291bnQ7Ci0gICAgJHBhdGNoTGlu
ZXNbJHBhdGNoSGVhZGVySW5kZXhdID0gIkBAIC0xLCR0cmFpbGluZ0NvbnRleHRMaW5lQ291bnQg
KzEsJHRvdGFsTmV3Q29udGVudExpbmVzIEBAIjsgIyBXcml0ZSBhIG5ldyBoZWFkZXIuCi0gICAg
bXkgQHJlcGVhdGVkTGluZXMgPSBzcGxpY2UoQHBhdGNoTGluZXMsICRkYXRlSW5kZXgsICR0cmFp
bGluZ0NvbnRleHRJbmRleCAtICRkYXRlSW5kZXgpOyAjIFRoZSBkYXRlIGxpbmUgYW5kIGFsbCB0
aGUgY29udGVudCBhZnRlciBpdCB0aGF0IGRpZmYgc2F3IGFzIHJlcGVhdGVkLgotICAgIHNwbGlj
ZShAcGF0Y2hMaW5lcywgJGZpcnN0Q29udGVudEluZGV4LCAwLCBAcmVwZWF0ZWRMaW5lcyk7ICMg
TW92ZSB0aGUgcmVwZWF0ZWQgY29udGVudCB0byB0aGUgdG9wLgotICAgIGZvcmVhY2ggbXkgJGxp
bmUgKEByZXBlYXRlZExpbmVzKSB7Ci0gICAgICAgICRsaW5lID1+IHMvXlwrLyAvOworICAgIG15
ICRpID0gMDsgIyBXZSByZXVzZSB0aGUgc2FtZSBpbmRleCB0aHJvdWdob3V0LgorCisgICAgIyBT
a2lwIHRvIGJlZ2lubmluZyBvZiBmaXJzdCBjaHVuay4KKyAgICBmb3IgKDsgJGkgPCBAbGluZXM7
ICsrJGkpIHsKKyAgICAgICAgaWYgKHN1YnN0cigkbGluZXNbJGldLCAwLCAxKSBlcSAiQCIpIHsK
KyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgbXkgJGNodW5rU3RhcnQg
PSArKyRpOworCisgICAgIyBPcHRpbWl6YXRpb246IGRvIG5vdCBwcm9jZXNzIGlmIG5ldyBsaW5l
cyBhbHJlYWR5IGJlZ2luIHRoZSBjaHVuay4KKyAgICBpZiAoc3Vic3RyKCRsaW5lc1skaV0sIDAs
IDEpIGVxICIrIikgeworICAgICAgICByZXR1cm4gJHBhdGNoOworICAgIH0KKworICAgICMgU2tp
cCB0byBmaXJzdCBsaW5lIG9mIG5ld2x5IGFkZGVkIENoYW5nZUxvZyBlbnRyeS4KKyAgICAjIEZv
ciBleGFtcGxlLCArMjAwOS0wNi0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+Cisg
ICAgbXkgJGRhdGVTdGFydFJlZ0V4ID0gJ15cKyhcZHs0fS1cZHsyfS1cZHsyfSknICMgbGVhZGlu
ZyArIGFuZCBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgLiAnXHMrKC4rKVxzKycgIyBu
YW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgLiAnPChbXjw+XSspPiQnOyAjIGUtbWFpbCBh
ZGRyZXNzCisKKyAgICBmb3IgKDsgJGkgPCBAbGluZXM7ICsrJGkpIHsKKyAgICAgICAgbXkgJGxp
bmUgPSAkbGluZXNbJGldOworICAgICAgICBteSAkZmlyc3QgPSBzdWJzdHIoJGxpbmUsIDAsIDEp
OworICAgICAgICBpZiAoJGxpbmUgPX4gLyRkYXRlU3RhcnRSZWdFeC8pIHsKKyAgICAgICAgICAg
IGxhc3Q7CisgICAgICAgIH0gZWxzaWYgKCRmaXJzdCBlcSAiICIgb3IgJGZpcnN0IGVxICIrIikg
eworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJHBhdGNoOyAj
IERvIG5vdCBjaGFuZ2UgaWYsIGZvciBleGFtcGxlLCAiLSIgb3IgIkAiIGZvdW5kLgorICAgIH0K
KyAgICBpZiAoJGkgPj0gQGxpbmVzKSB7CisgICAgICAgIHJldHVybiAkcGF0Y2g7ICMgRG8gbm90
IGNoYW5nZSBpZiBkYXRlIG5vdCBmb3VuZC4KKyAgICB9CisgICAgbXkgJGRhdGVTdGFydCA9ICRp
OworCisgICAgIyBSZXdyaXRlIG92ZXJsYXBwaW5nIGxpbmVzIHRvIGxlYWQgd2l0aCAiICIuCisg
ICAgbXkgQG92ZXJsYXBwaW5nTmV3TGluZXMgPSAoKTsgIyBUaGVzZSB3aWxsIGluY2x1ZGUgYSBs
ZWFkaW5nICsuCisgICAgZm9yICg7ICRpIDwgQGxpbmVzOyArKyRpKSB7CisgICAgICAgIG15ICRs
aW5lID0gJGxpbmVzWyRpXTsKKyAgICAgICAgaWYgKHN1YnN0cigkbGluZSwgMCwgMSkgbmUgIisi
KSB7CisgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBvdmVybGFwcGlu
Z05ld0xpbmVzLCAkbGluZSk7CisgICAgICAgICRsaW5lc1skaV0gPSAiICIgLiBzdWJzdHIoJGxp
bmUsIDEpOworICAgIH0KKworICAgICMgUmVtb3ZlIGV4Y2VzcyBlbmRpbmcgY29udGV4dCwgaWYg
bmVjZXNzYXJ5LgorICAgIG15ICR0cmltQ29udGV4dCA9IDE7CisgICAgZm9yICg7ICRpIDwgQGxp
bmVzOyArKyRpKSB7CisgICAgICAgIG15ICRmaXJzdCA9IHN1YnN0cigkbGluZXNbJGldLCAwLCAx
KTsKKyAgICAgICAgaWYgKCRmaXJzdCBlcSAiICIpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAg
ICAgIH0gZWxzaWYgKCRmaXJzdCBlcSAiQCIpIHsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAg
IH0KKyAgICAgICAgJHRyaW1Db250ZXh0ID0gMDsgIyBGb3IgZXhhbXBsZSwgaWYgIisiIG9yICIt
IiBlbmNvdW50ZXJlZC4KKyAgICAgICAgbGFzdDsKKyAgICB9CisgICAgbXkgJG51bUxpbmVzRGVs
ZXRlZENvbnRleHQgPSAwOworICAgIGlmICgkdHJpbUNvbnRleHQpIHsgIyBBbHNvIG9jY3VycyBp
ZiBlbmQgb2YgZmlsZSByZWFjaGVkLgorICAgICAgICBzcGxpY2UoQGxpbmVzLCAkaSAtIEBvdmVy
bGFwcGluZ05ld0xpbmVzLCBAb3ZlcmxhcHBpbmdOZXdMaW5lcyk7CisgICAgICAgICRudW1MaW5l
c0RlbGV0ZWRDb250ZXh0ID0gQG92ZXJsYXBwaW5nTmV3TGluZXM7CisgICAgfQorCisgICAgIyBX
b3JrIGJhY2t3YXJkcywgc2hpZnRpbmcgb3ZlcmxhcHBpbmcgbGluZXMgdG93YXJkcyBmcm9udAor
ICAgICMgd2hpbGUgY2hlY2tpbmcgdGhhdCBwYXRjaCBzdGF5cyBlcXVpdmFsZW50LgorICAgIGZv
ciAoJGkgPSAkZGF0ZVN0YXJ0IC0gMTsgJGkgPj0gJGNodW5rU3RhcnQ7IC0tJGkpIHsKKyAgICAg
ICAgbXkgJGxpbmUgPSAkbGluZXNbJGldOworICAgICAgICBpZiAoc3Vic3RyKCRsaW5lLCAwLCAx
KSBuZSAiICIpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgbXkgJHRl
eHQgPSBzdWJzdHIoJGxpbmUsIDEpOworICAgICAgICBteSAkbmV3TGluZSA9IHBvcChAb3Zlcmxh
cHBpbmdOZXdMaW5lcyk7CisgICAgICAgIGlmICgkdGV4dCBuZSBzdWJzdHIoJG5ld0xpbmUsIDEp
KSB7CisgICAgICAgICAgICByZXR1cm4gJHBhdGNoOyAjIFVuZXhwZWN0ZWQgZGlmZmVyZW5jZS4K
KyAgICAgICAgfQorICAgICAgICAkbGluZXNbJGldID0gIiskdGV4dCI7CisgICAgfQorCisgICAg
IyBGaW5pc2ggbW92aW5nIHdoYXRldmVyIG92ZXJsYXBwaW5nIGxpbmVzIHJlbWFpbiwgYW5kIHVw
ZGF0ZQorICAgICMgdGhlIGluaXRpYWwgY2h1bmsgcmFuZ2UuCisgICAgbXkgJGNodW5rUmFuZ2VS
ZWdFeCA9ICdeXEBcQCAtKFxkKyksKFxkKykgXCtcZCssKFxkKykgXEBcQCQnOyAjIGUuZy4gQEAg
LTIsNiArMiwxOCBAQAorICAgIGlmICgkbGluZXNbJGNodW5rU3RhcnQgLSAxXSAhfiAvJGNodW5r
UmFuZ2VSZWdFeC8pIHsKKyAgICAgICAgIyBGSVhNRTogSGFuZGxlIGVycm9ycyBkaWZmZXJlbnRs
eSBmcm9tIENoYW5nZUxvZyBmaWxlcyB0aGF0CisgICAgICAgICMgYXJlIG9rYXkgYnV0IHNob3Vs
ZCBub3QgYmUgYWx0ZXJlZC4gVGhhdCB3YXkgd2UgY2FuIGZpbmQgb3V0CisgICAgICAgICMgaWYg
aW1wcm92ZW1lbnRzIHRvIHRoZSBzY3JpcHQgZXZlciBiZWNvbWUgbmVjZXNzYXJ5LgorICAgICAg
ICByZXR1cm4gJHBhdGNoOyAjIEVycm9yOiB1bmV4cGVjdGVkIHBhdGNoIHN0cmluZyBmb3JtYXQu
CisgICAgfQorICAgIG15ICRudW1Ta2lwcGVkRmlyc3RMaW5lcyA9ICQxIC0gMTsKKyAgICBteSAk
b2xkTnVtU291cmNlTGluZXMgPSAkMjsKKyAgICBteSAkb2xkTnVtVGFyZ2V0TGluZXMgPSAkMzsK
KworICAgIGlmIChAb3ZlcmxhcHBpbmdOZXdMaW5lcyAhPSAkbnVtU2tpcHBlZEZpcnN0TGluZXMp
IHsKKyAgICAgICAgIyBUaGlzIGNhbiBoYXBwZW4sIGZvciBleGFtcGxlLCB3aGVuIGRlbGliZXJh
dGVseSBpbnNlcnRpbmcKKyAgICAgICAgIyBhIG5ldyBDaGFuZ2VMb2cgZW50cnkgZWFybGllciBp
biB0aGUgZmlsZS4KKyAgICAgICAgcmV0dXJuICRwYXRjaDsKICAgICB9Ci0gICAgc3BsaWNlKEBw
YXRjaExpbmVzLCAkdHJhaWxpbmdDb250ZXh0SW5kZXgsICRwYXRjaEVuZEluZGV4LCBAcmVwZWF0
ZWRMaW5lcyk7ICMgUmVwbGFjZSB0cmFpbGluZyBjb250ZXh0IHdpdGggdGhlIHJlcGVhdGVkIGNv
bnRlbnQuCi0gICAgc3BsaWNlKEBwYXRjaExpbmVzLCAkcGF0Y2hIZWFkZXJJbmRleCArIDEsICRm
aXJzdENvbnRlbnRJbmRleCAtICRwYXRjaEhlYWRlckluZGV4IC0gMSk7ICMgUmVtb3ZlIGFueSBs
ZWFkaW5nIGNvbnRleHQuCisgICAgIyBJZiBAb3ZlcmxhcHBpbmdOZXdMaW5lcyA+IDAsIHRoaXMg
aXMgd2hlcmUgd2UgbWFrZSB1c2Ugb2YgdGhlCisgICAgIyBhc3N1bXB0aW9uIHRoYXQgdGhlIGJl
Z2lubmluZyBvZiB0aGUgc291cmNlIGZpbGUgd2FzIG5vdCBtb2RpZmllZC4KKyAgICBzcGxpY2Uo
QGxpbmVzLCAkY2h1bmtTdGFydCwgMCwgQG92ZXJsYXBwaW5nTmV3TGluZXMpOworCisgICAgbXkg
JG51bVNvdXJjZUxpbmVzID0gJG9sZE51bVNvdXJjZUxpbmVzICsgQG92ZXJsYXBwaW5nTmV3TGlu
ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAtICRudW1MaW5lc0RlbGV0ZWRDb250ZXh0Owor
ICAgIG15ICRudW1UYXJnZXRMaW5lcyA9ICRvbGROdW1UYXJnZXRMaW5lcyArIEBvdmVybGFwcGlu
Z05ld0xpbmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgLSAkbnVtTGluZXNEZWxldGVkQ29u
dGV4dDsKKyAgICAkbGluZXNbJGNodW5rU3RhcnQgLSAxXSA9ICJAQCAtMSwkbnVtU291cmNlTGlu
ZXMgKzEsJG51bVRhcmdldExpbmVzIEBAIjsKIAotICAgIHJldHVybiBqb2luKCRsaW5lRW5kaW5n
LCBAcGF0Y2hMaW5lcykgLiAiXG4iOyAjIHBhdGNoKDEpIGV4cGVjdHMgYW4gZXh0cmEgdHJhaWxp
bmcgbmV3bGluZS4KKyAgICByZXR1cm4gam9pbigkbGluZUVuZGluZywgQGxpbmVzKSAuICJcbiI7
ICMgcGF0Y2goMSkgZXhwZWN0cyBhbiBleHRyYSB0cmFpbGluZyBuZXdsaW5lLgogfQogCiBzdWIg
Z2l0Q29uZmlnKCQpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0
LnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3Qu
cGwJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3VuaXR0ZXN0
LnBsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisj
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyMgVW5pdCB0ZXN0cyBvZiBWQ1NVdGlscy5wbS4KKwordXNlIFRl
c3Q6OlNpbXBsZSB0ZXN0cyA9PiA3OworCit1c2UgVkNTVXRpbHM7CisKK3N1YiBmaXhDaGFuZ2VM
b2dQYXRjaCgkKTsKKworIyBmaXhDaGFuZ2VMb2dQYXRjaAorIworIyBUaGUgc291cmNlIENoYW5n
ZUxvZyBmb3IgdGhlc2UgdGVzdHMgaXMgdGhlIGZvbGxvd2luZzoKKyMgCisjIDIwMDktMTItMjIg
IEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyMgCisjICAgICAgICAgUmV2aWV3ZWQgYnkg
UmF5LgorIyAKKyMgICAgICAgICBDaGFuZ2VkIHNvbWUgY29kZSBvbiAyMDA5LTEyLTIyLgorIyAK
KyMgICAgICAgICAqIEZpbGU6CisjICAgICAgICAgKiBGaWxlMjoKKyMgCisjIDIwMDktMTItMjEg
IEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyMgCisjICAgICAgICAgUmV2aWV3ZWQgYnkg
UmF5LgorIyAKKyMgICAgICAgICBDaGFuZ2VkIHNvbWUgY29kZSBvbiAyMDA5LTEyLTIxLgorIyAK
KyMgICAgICAgICAqIEZpbGU6CisjICAgICAgICAgKiBGaWxlMjoKKworbXkgJHRpdGxlOworbXkg
JGluOworbXkgJG91dDsKKworIyBOZXcgdGVzdAorJHRpdGxlID0gImZpeENoYW5nZUxvZ1BhdGNo
OiBbbm8gY2hhbmdlXSBGaXJzdCBsaW5lIGlzIG5ldyBsaW5lLiI7CisKKyRpbiA9IDw8J0VORCc7
CistLS0gQ2hhbmdlTG9nCisrKysgQ2hhbmdlTG9nCitAQCAtMSwzICsxLDExIEBACisrMjAwOS0x
Mi0yMiAgQm9iICA8Ym9iQGVtYWlsLmFkZHJlc3M+CisrCisrICAgICAgICBSZXZpZXdlZCBieSBS
YXkuCisrCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBjb2RlIG9uIDIwMDktMTItMjIuCisr
CisrICAgICAgICAqIEZpbGU6CisrCisgMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5h
ZGRyZXNzPgorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorRU5ECisKK29rKGZpeENoYW5n
ZUxvZ1BhdGNoKCRpbikgZXEgJGluLCAkdGl0bGUpOworCisjIE5ldyB0ZXN0CiskdGl0bGUgPSAi
Zml4Q2hhbmdlTG9nUGF0Y2g6IFtubyBjaGFuZ2VdIE5vIGRhdGUgc3RyaW5nLiI7CisKKyRpbiA9
IDw8J0VORCc7CistLS0gQ2hhbmdlTG9nCisrKysgQ2hhbmdlTG9nCitAQCAtNiw2ICs2LDcgQEAK
KyAKKyAgICAgICAgICogRmlsZToKKyAgICAgICAgICogRmlsZTI6CisrICAgICAgICAqIEZpbGUz
OgorIAorIDIwMDktMTItMjEgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKK0VORAor
CitvayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVxICRpbiwgJHRpdGxlKTsKKworIyBOZXcgdGVz
dAorJHRpdGxlID0gImZpeENoYW5nZUxvZ1BhdGNoOiBbbm8gY2hhbmdlXSBOZXcgZW50cnkgaW5z
ZXJ0ZWQgaW4gbWlkZGxlLiI7CisKKyRpbiA9IDw8J0VORCc7CistLS0gQ2hhbmdlTG9nCisrKysg
Q2hhbmdlTG9nCitAQCAtMTEsNiArMTEsMTQgQEAKKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IFJh
eS4KKyAKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0yMS4KKysK
KysgICAgICAgICogRmlsZToKKysKKysyMDA5LTEyLTIxICBBbGljZSAgPGFsaWNlQGVtYWlsLmFk
ZHJlc3M+CisrCisrICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisrCisgICAgICAgICBDaGFuZ2Vk
IHNvbWUgY29kZSBvbiAyMDA5LTEyLTIxLgorIAorICAgICAgICAgKiBGaWxlOgorRU5ECisKK29r
KGZpeENoYW5nZUxvZ1BhdGNoKCRpbikgZXEgJGluLCAkdGl0bGUpOworCisjIE5ldyB0ZXN0Cisk
dGl0bGUgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IExlYWRpbmcgY29udGV4dCBpbmNsdWRlcyBmaXJz
dCBsaW5lLiI7CisKKyRpbiA9IDw8J0VORCc7CistLS0gQ2hhbmdlTG9nCisrKysgQ2hhbmdlTG9n
CitAQCAtMSw1ICsxLDEzIEBACisgMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRy
ZXNzPgorIAorKyAgICAgICAgUmV2aWV3ZWQgYnkgU3VlLgorKworKyAgICAgICAgQ2hhbmdlZCBz
b21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworKzIw
MDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKyAgICAgICAgIFJldmll
d2VkIGJ5IFJheS4KKyAKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjIu
CitFTkQKKworJG91dCA9IDw8J0VORCc7CistLS0gQ2hhbmdlTG9nCisrKysgQ2hhbmdlTG9nCitA
QCAtMSwzICsxLDExIEBACisrMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNz
PgorKworKyAgICAgICAgUmV2aWV3ZWQgYnkgU3VlLgorKworKyAgICAgICAgQ2hhbmdlZCBzb21l
IG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworIDIwMDkt
MTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmlld2Vk
IGJ5IFJheS4KK0VORAorCitvayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVxICRvdXQsICR0aXRs
ZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJmaXhDaGFuZ2VMb2dQYXRjaDogTGVhZGluZyBj
b250ZXh0IGRvZXMgbm90IGluY2x1ZGUgZmlyc3QgbGluZS4iOworCiskaW4gPSA8PCdFTkQnOwor
QEAgLTIsNiArMiwxNCBAQAorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorIAorKyAgICAg
ICAgQ2hhbmdlZCBzb21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBG
aWxlOgorKworKzIwMDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKysg
ICAgICAgIFJldmlld2VkIGJ5IFJheS4KKysKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9u
IDIwMDktMTItMjIuCisgCisgICAgICAgICAqIEZpbGU6CitFTkQKKworJG91dCA9IDw8J0VORCc7
CitAQCAtMSwzICsxLDExIEBACisrMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRy
ZXNzPgorKworKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorKworKyAgICAgICAgQ2hhbmdlZCBz
b21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworIDIw
MDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmll
d2VkIGJ5IFJheS4KK0VORAorCitvayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVxICRvdXQsICR0
aXRsZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJmaXhDaGFuZ2VMb2dQYXRjaDogTm9uLWNv
bnNlY3V0aXZlIGxpbmUgYWRkaXRpb25zLiI7CisKKyMgVGhpcyBjYW4gb2NjdXIsIGZvciBleGFt
cGxlLCBpZiB0aGUgbmV3IENoYW5nZUxvZyBlbnRyeSBpbmNsdWRlcworIyB0cmFpbGluZyB3aGl0
ZSBzcGFjZSBpbiB0aGUgZmlyc3QgYmxhbmsgbGluZSBidXQgbm90IHRoZSBzZWNvbmQuCisjIEEg
ZGlmZiBjb21tYW5kIGNhbiB0aGVuIG1hdGNoIHRoZSBzZWNvbmQgYmxhbmsgbGluZSBvZiB0aGUg
bmV3CisjIENoYW5nZUxvZyBlbnRyeSB3aXRoIHRoZSBmaXJzdCBibGFuayBsaW5lIG9mIHRoZSBv
bGQuCisjIFRoZSBzdm4gZGlmZiBjb21tYW5kIHdpdGggdGhlIGRlZmF1bHQgLS1kaWZmLWNtZCBo
YXMgZG9uZSB0aGlzLgorJGluID0gPDwnRU5EJzsKK0BAIC0xLDUgKzEsMTEgQEAKKyAyMDA5LTEy
LTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrIDxwcmV0ZW5kLXdoaXRlc3BhY2U+
CisrICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisgCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9y
ZSBjb2RlIG9uIDIwMDktMTItMjIuCisrCisrMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFp
bC5hZGRyZXNzPgorKworICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorIAorICAgICAgICAgQ2hh
bmdlZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMi4KK0VORAorCiskb3V0ID0gPDwnRU5EJzsKK0BA
IC0xLDMgKzEsOSBAQAorKzIwMDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4K
KysgPHByZXRlbmQtd2hpdGVzcGFjZT4KKysgICAgICAgIFJldmlld2VkIGJ5IFJheS4KKysKKysg
ICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0yMi4KKysKKyAyMDA5LTEy
LTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisgCisgICAgICAgICBSZXZpZXdlZCBi
eSBSYXkuCitFTkQKKworb2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGl0bGUp
OworCisjIE5ldyB0ZXN0CiskdGl0bGUgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IEFkZGl0aW9uYWwg
ZWRpdHMgYWZ0ZXIgbmV3IGVudHJ5LiI7CisKKyRpbiA9IDw8J0VORCc7CitAQCAtMiwxMCArMiwx
NyBAQAorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorIAorKyAgICAgICAgQ2hhbmdlZCBz
b21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworKzIw
MDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKysgICAgICAgIFJldmll
d2VkIGJ5IFJheS4KKysKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjIu
CisgCisgICAgICAgICAqIEZpbGU6CistICAgICAgICAqIEZpbGUyOgorIAorIDIwMDktMTItMjEg
IEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKK0VORAorCiskb3V0ID0gPDwnRU5EJzsK
K0BAIC0xLDExICsxLDE4IEBACisrMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRy
ZXNzPgorKworKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorKworKyAgICAgICAgQ2hhbmdlZCBz
b21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworIDIw
MDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmll
d2VkIGJ5IFJheS4KKyAKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjIu
CisgCisgICAgICAgICAqIEZpbGU6CistICAgICAgICAqIEZpbGUyOgorIAorIDIwMDktMTItMjEg
IEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKK0VORAorCitvayhmaXhDaGFuZ2VMb2dQ
YXRjaCgkaW4pIGVxICRvdXQsICR0aXRsZSk7CisKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktp
dFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3QucGwKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0
LXVuaXR0ZXN0cy1wZXJsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdl
YmtpdC11bml0dGVzdHMtcGVybAkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMv
cnVuLXdlYmtpdC11bml0dGVzdHMtcGVybAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAor
IyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgUnVucyB1bml0IHRlc3Rz
IG9mIFdlYktpdCBQZXJsIGNvZGUuCisKK3VzZSBUZXN0OjpIYXJuZXNzOworCitydW50ZXN0cygi
VkNTVXRpbHNfdW5pdHRlc3QucGwiKTsKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYktpdFRvb2xz
L1NjcmlwdHMvcnVuLXdlYmtpdC11bml0dGVzdHMtcGVybApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCg==
</data>
<flag name="commit-queue"
          id="27718"
          type_id="3"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45641</attachid>
            <date>2009-12-29 22:31:41 -0800</date>
            <delta_ts>2009-12-29 22:50:50 -0800</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>patch-tools4-3.txt</filename>
            <type>text/plain</type>
            <size>19015</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNTgwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMjcgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeGVkIGEgYnVnIGluIGZpeENoYW5nZUxvZ1BhdGNoLCBtYWRl
IGl0IHdvcmsgY29ycmVjdGx5IGluCisgICAgICAgIG1vcmUgY2lyY3Vtc3RhbmNlcywgYW5kIGFk
ZGVkIHVuaXQgdGVzdHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyOTE5CisKKyAgICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAg
ICAgIFJld3JvdGUgZml4Q2hhbmdlTG9nUGF0Y2guCisgICAgICAgICAgCisgICAgICAgICogU2Ny
aXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgNyB1bml0
IHRlc3RzIGZvciBmaXhDaGFuZ2VMb2dQYXRjaC4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLXdl
YmtpdC11bml0dGVzdHMtcGVybDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgdGVzdCBoYXJuZXNz
IGZvciB1bml0IHRlc3RzIG9mIFBlcmwgY29kZS4KKwogMjAwOS0xMi0yNyAgWWFlbCBBaGFyb24g
IDx5YWVsLmFoYXJvbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHJldmlzaW9uIDUyNTY3KQorKysgV2Vi
S2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUg
QEAKICMgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwOSBDaHJpcyBKZXJkb25layAoY2hyaXMu
amVyZG9uZWtAZ21haWwuY29tKQogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTYs
NjQgKzM1NywxNDMgQEAgc3ViIGdpdGRpZmYyc3ZuZGlmZigkKQogICAgIHJldHVybiAkXzsKIH0K
IAotIyBUaGUgZGlmZigxKSBjb21tYW5kIGlzIGdyZWVkeSB3aGVuIG1hdGNoaW5nIGxpbmVzLCBz
byBhIG5ldyBDaGFuZ2VMb2cgZW50cnkgd2lsbAotIyBoYXZlIGxpbmVzIG9mIGNvbnRleHQgYXQg
dGhlIHRvcCBvZiBhIHBhdGNoIHdoZW4gdGhlIGV4aXN0aW5nIGVudHJ5IGhhcyB0aGUgc2FtZQot
IyBkYXRlIGFuZCBhdXRob3IgYXMgdGhlIG5ldyBlbnRyeS4gIEFsdGVyIHRoZSBDaGFuZ2VMb2cg
cGF0Y2ggc28KLSMgdGhhdCB0aGUgYWRkZWQgbGluZXMgKCIrIikgaW4gdGhlIHBhdGNoIGFsd2F5
cyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQotIyBwYXRjaCBhbmQgdGhlcmUgYXJlIG5v
IGluaXRpYWwgbGluZXMgb2YgY29udGV4dC4KKyMgSWYgcG9zc2libGUsIHJldHVybnMgYSBDaGFu
Z2VMb2cgcGF0Y2ggZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gb25lLAorIyBidXQgd2l0aCB0aGUg
bmV3ZXN0IENoYW5nZUxvZyBlbnRyeSBpbnNlcnRlZCBhdCB0aGUgdG9wIG9mIHRoZQorIyBmaWxl
IC0tIGkuZS4gbm8gbGVhZGluZyBjb250ZXh0IGFuZCBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAi
KyIuCisjCisjIElmIGdpdmVuIGEgcGF0Y2ggc3RyaW5nIG5vdCByZXByZXNlbnRhYmxlIGFzIGEg
cGF0Y2ggd2l0aCB0aGUgYWJvdmUKKyMgcHJvcGVydGllcywgaXQgcmV0dXJucyB0aGUgaW5wdXQg
YmFjayB1bmNoYW5nZWQuCisjCisjIFdBUk5JTkc6IFRoaXMgc3Vicm91dGluZSBjYW4gcmV0dXJu
IGFuIGluZXF1aXZhbGVudCBwYXRjaCBzdHJpbmcgaWYKKyMgYm90aCB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBuZXcgQ2hhbmdlTG9nIGZpbGUgbWF0Y2hlcyB0aGUgYmVnaW5uaW5nCisjIG9mIHRoZSBz
b3VyY2UgQ2hhbmdlTG9nLCBhbmQgdGhlIHNvdXJjZSBiZWdpbm5pbmcgd2FzIG1vZGlmaWVkLgor
IyBPdGhlcndpc2UsIGl0IGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIGVxdWl2YWxlbnQgcGF0
Y2ggc3RyaW5nLAorIyBpZiBpdCByZXR1cm5zLgorIworIyBBcHBseWluZyB0aGlzIHN1YnJvdXRp
bmUgdG8gQ2hhbmdlTG9nIHBhdGNoZXMgYWxsb3dzIHN2bi1hcHBseSB0bworIyBpbnNlcnQgbmV3
IENoYW5nZUxvZyBlbnRyaWVzIGF0IHRoZSB0b3Agb2YgdGhlIENoYW5nZUxvZyBmaWxlLgorIyBz
dm4tYXBwbHkgdXNlcyBwYXRjaCB3aXRoIC0tZnV6ej0zIHRvIGRvIHRoaXMuIFdlIG5lZWQgdG8g
YXBwbHkKKyMgdGhpcyBzdWJyb3V0aW5lIGJlY2F1c2UgdGhlIGRpZmYoMSkgY29tbWFuZCBpcyBn
cmVlZHkgd2hlbiBtYXRjaGluZworIyBsaW5lcy4gQSBuZXcgQ2hhbmdlTG9nIGVudHJ5IHdpdGgg
dGhlIHNhbWUgZGF0ZSBhbmQgYXV0aG9yIGFzIHRoZQorIyBwcmV2aW91cyB3aWxsIG1hdGNoIGFu
ZCBjYXVzZSB0aGUgZGlmZiB0byBoYXZlIGxpbmVzIG9mIHN0YXJ0aW5nCisjIGNvbnRleHQuCisj
CisjIFRoaXMgc3Vicm91dGluZSBoYXMgdW5pdCB0ZXN0cyBpbiBWQ1NVdGlsc191bml0dGVzdC5w
bC4KIHN1YiBmaXhDaGFuZ2VMb2dQYXRjaCgkKQogewogICAgIG15ICRwYXRjaCA9IHNoaWZ0OyAj
ICRwYXRjaCB3aWxsIG9ubHkgY29udGFpbiBwYXRjaCBmcmFnbWVudHMgZm9yIENoYW5nZUxvZy4K
IAogICAgICRwYXRjaCA9fiAvKFxyP1xuKS87CiAgICAgbXkgJGxpbmVFbmRpbmcgPSAkMTsKLSAg
ICBteSBAcGF0Y2hMaW5lcyA9IHNwbGl0KC8kbGluZUVuZGluZy8sICRwYXRjaCk7CisgICAgbXkg
QGxpbmVzID0gc3BsaXQoLyRsaW5lRW5kaW5nLywgJHBhdGNoKTsKIAotICAgICMgZS5nLiAyMDA5
LTA2LTAzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KLSAgICBteSAkZGF0ZUxpbmVS
ZWdleHBTdHJpbmcgPSAnXlwrKFxkezR9LVxkezJ9LVxkezJ9KScgIyBDb25zdW1lIHRoZSBsZWFk
aW5nICcrJyBhbmQgdGhlIGRhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ1xz
KyguKylccysnICMgQ29uc3VtZSB0aGUgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLiAnPChbXjw+XSspPiQnOyAjIEFuZCBmaW5hbGx5IHRoZSBlbWFpbCBhZGRyZXNzLgotCi0g
ICAgIyBGaWd1cmUgb3V0IHdoZXJlIHRoZSBwYXRjaCBjb250ZW50cyBzdGFydCBhbmQgc3RvcC4K
LSAgICBteSAkcGF0Y2hIZWFkZXJJbmRleDsKLSAgICBteSAkZmlyc3RDb250ZW50SW5kZXg7Ci0g
ICAgbXkgJHRyYWlsaW5nQ29udGV4dEluZGV4OwotICAgIG15ICRkYXRlSW5kZXg7Ci0gICAgbXkg
JHBhdGNoRW5kSW5kZXggPSBzY2FsYXIoQHBhdGNoTGluZXMpOwotICAgIGZvciAobXkgJGluZGV4
ID0gMDsgJGluZGV4IDwgQHBhdGNoTGluZXM7ICsrJGluZGV4KSB7Ci0gICAgICAgIG15ICRsaW5l
ID0gJHBhdGNoTGluZXNbJGluZGV4XTsKLSAgICAgICAgaWYgKCRsaW5lID1+IC9eXEBcQCAtXGQr
LFxkKyBcK1xkKyxcZCsgXEBcQCQvKSB7ICMgZS5nLiBAQCAtMSw1ICsxLDE4IEBACi0gICAgICAg
ICAgICBpZiAoJHBhdGNoSGVhZGVySW5kZXgpIHsKLSAgICAgICAgICAgICAgICAkcGF0Y2hFbmRJ
bmRleCA9ICRpbmRleDsgIyBXZSBvbmx5IGJvdGhlciB0byBmaXggdXAgdGhlIGZpcnN0IHBhdGNo
IGZyYWdtZW50LgotICAgICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAkcGF0Y2hIZWFkZXJJbmRleCA9ICRpbmRleDsKKyAgICBteSAkaSA9IDA7ICMgV2UgcmV1
c2UgdGhlIHNhbWUgaW5kZXggdGhyb3VnaG91dC4KKworICAgICMgU2tpcCB0byBiZWdpbm5pbmcg
b2YgZmlyc3QgY2h1bmsuCisgICAgZm9yICg7ICRpIDwgQGxpbmVzOyArKyRpKSB7CisgICAgICAg
IGlmIChzdWJzdHIoJGxpbmVzWyRpXSwgMCwgMSkgZXEgIkAiKSB7CisgICAgICAgICAgICBsYXN0
OwogICAgICAgICB9Ci0gICAgICAgICRmaXJzdENvbnRlbnRJbmRleCA9ICRpbmRleCBpZiAoJHBh
dGNoSGVhZGVySW5kZXggJiYgISRmaXJzdENvbnRlbnRJbmRleCAmJiAkbGluZSA9fiAvXlwrW14r
XS8pOyAjIE9ubHkgbWF0Y2ggYWZ0ZXIgZmluZGluZyBwYXRjaEhlYWRlckluZGV4LCBvdGhlcndp
c2Ugd2UnZCBtYXRjaCAiKysrIi4KLSAgICAgICAgJGRhdGVJbmRleCA9ICRpbmRleCBpZiAoJGxp
bmUgPX4gLyRkYXRlTGluZVJlZ2V4cFN0cmluZy8pOwotICAgICAgICAkdHJhaWxpbmdDb250ZXh0
SW5kZXggPSAkaW5kZXggaWYgKCRmaXJzdENvbnRlbnRJbmRleCAmJiAhJHRyYWlsaW5nQ29udGV4
dEluZGV4ICYmICRsaW5lID1+IC9eIC8pOwogICAgIH0KLSAgICBteSAkY29udGVudExpbmVDb3Vu
dCA9ICR0cmFpbGluZ0NvbnRleHRJbmRleCAtICRmaXJzdENvbnRlbnRJbmRleDsKLSAgICBteSAk
dHJhaWxpbmdDb250ZXh0TGluZUNvdW50ID0gJHBhdGNoRW5kSW5kZXggLSAkdHJhaWxpbmdDb250
ZXh0SW5kZXg7CisgICAgbXkgJGNodW5rU3RhcnRJbmRleCA9ICsrJGk7CiAKLSAgICAjIElmIHdl
IGRpZG4ndCBmaW5kIGEgZGF0ZSBsaW5lIGluIHRoZSBjb250ZW50IHRoZW4gdGhpcyBpcyBub3Qg
YSBwYXRjaCB3ZSBzaG91bGQgdHJ5IGFuZCBmaXguCi0gICAgcmV0dXJuICRwYXRjaCBpZiAoISRk
YXRlSW5kZXgpOworICAgICMgT3B0aW1pemF0aW9uOiBkbyBub3QgcHJvY2VzcyBpZiBuZXcgbGlu
ZXMgYWxyZWFkeSBiZWdpbiB0aGUgY2h1bmsuCisgICAgaWYgKHN1YnN0cigkbGluZXNbJGldLCAw
LCAxKSBlcSAiKyIpIHsKKyAgICAgICAgcmV0dXJuICRwYXRjaDsKKyAgICB9CisKKyAgICAjIFNr
aXAgdG8gZmlyc3QgbGluZSBvZiBuZXdseSBhZGRlZCBDaGFuZ2VMb2cgZW50cnkuCisgICAgIyBG
b3IgZXhhbXBsZSwgKzIwMDktMDYtMDMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgor
ICAgIG15ICRkYXRlU3RhcnRSZWdFeCA9ICdeXCsoXGR7NH0tXGR7Mn0tXGR7Mn0pJyAjIGxlYWRp
bmcgIisiIGFuZCBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgLiAnXHMrKC4rKVxzKycg
IyBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgLiAnPChbXjw+XSspPiQnOyAjIGUtbWFp
bCBhZGRyZXNzCisKKyAgICBmb3IgKDsgJGkgPCBAbGluZXM7ICsrJGkpIHsKKyAgICAgICAgbXkg
JGxpbmUgPSAkbGluZXNbJGldOworICAgICAgICBteSAkZmlyc3RDaGFyID0gc3Vic3RyKCRsaW5l
LCAwLCAxKTsKKyAgICAgICAgaWYgKCRsaW5lID1+IC8kZGF0ZVN0YXJ0UmVnRXgvKSB7CisgICAg
ICAgICAgICBsYXN0OworICAgICAgICB9IGVsc2lmICgkZmlyc3RDaGFyIGVxICIgIiBvciAkZmly
c3RDaGFyIGVxICIrIikgeworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gJHBhdGNoOyAjIERvIG5vdCBjaGFuZ2UgaWYsIGZvciBleGFtcGxlLCAiLSIgb3IgIkAi
IGZvdW5kLgorICAgIH0KKyAgICBpZiAoJGkgPj0gQGxpbmVzKSB7CisgICAgICAgIHJldHVybiAk
cGF0Y2g7ICMgRG8gbm90IGNoYW5nZSBpZiBkYXRlIG5vdCBmb3VuZC4KKyAgICB9CisgICAgbXkg
JGRhdGVTdGFydEluZGV4ID0gJGk7CiAKLSAgICAjIFdlIG9ubHkgbmVlZCB0byBkbyBhbnl0aGlu
ZyBpZiB0aGUgZGF0ZSBsaW5lIGlzIG5vdCB0aGUgZmlyc3QgY29udGVudCBsaW5lLgotICAgIHJl
dHVybiAkcGF0Y2ggaWYgKCRkYXRlSW5kZXggPT0gJGZpcnN0Q29udGVudEluZGV4KTsKKyAgICAj
IFJld3JpdGUgb3ZlcmxhcHBpbmcgbGluZXMgdG8gbGVhZCB3aXRoICIgIi4KKyAgICBteSBAb3Zl
cmxhcHBpbmdMaW5lcyA9ICgpOyAjIFRoZXNlIHdpbGwgaW5jbHVkZSBhIGxlYWRpbmcgIisiLgor
ICAgIGZvciAoOyAkaSA8IEBsaW5lczsgKyskaSkgeworICAgICAgICBteSAkbGluZSA9ICRsaW5l
c1skaV07CisgICAgICAgIGlmIChzdWJzdHIoJGxpbmUsIDAsIDEpIG5lICIrIikgeworICAgICAg
ICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAb3ZlcmxhcHBpbmdMaW5lcywgJGxp
bmUpOworICAgICAgICAkbGluZXNbJGldID0gIiAiIC4gc3Vic3RyKCRsaW5lLCAxKTsKKyAgICB9
CiAKLSAgICAjIFdyaXRlIHRoZSBuZXcgcGF0Y2guCi0gICAgbXkgJHRvdGFsTmV3Q29udGVudExp
bmVzID0gJGNvbnRlbnRMaW5lQ291bnQgKyAkdHJhaWxpbmdDb250ZXh0TGluZUNvdW50OwotICAg
ICRwYXRjaExpbmVzWyRwYXRjaEhlYWRlckluZGV4XSA9ICJAQCAtMSwkdHJhaWxpbmdDb250ZXh0
TGluZUNvdW50ICsxLCR0b3RhbE5ld0NvbnRlbnRMaW5lcyBAQCI7ICMgV3JpdGUgYSBuZXcgaGVh
ZGVyLgotICAgIG15IEByZXBlYXRlZExpbmVzID0gc3BsaWNlKEBwYXRjaExpbmVzLCAkZGF0ZUlu
ZGV4LCAkdHJhaWxpbmdDb250ZXh0SW5kZXggLSAkZGF0ZUluZGV4KTsgIyBUaGUgZGF0ZSBsaW5l
IGFuZCBhbGwgdGhlIGNvbnRlbnQgYWZ0ZXIgaXQgdGhhdCBkaWZmIHNhdyBhcyByZXBlYXRlZC4K
LSAgICBzcGxpY2UoQHBhdGNoTGluZXMsICRmaXJzdENvbnRlbnRJbmRleCwgMCwgQHJlcGVhdGVk
TGluZXMpOyAjIE1vdmUgdGhlIHJlcGVhdGVkIGNvbnRlbnQgdG8gdGhlIHRvcC4KLSAgICBmb3Jl
YWNoIG15ICRsaW5lIChAcmVwZWF0ZWRMaW5lcykgewotICAgICAgICAkbGluZSA9fiBzL15cKy8g
LzsKKyAgICAjIFJlbW92ZSBleGNlc3MgZW5kaW5nIGNvbnRleHQsIGlmIG5lY2Vzc2FyeS4KKyAg
ICBteSAkc2hvdWxkVHJpbUNvbnRleHQgPSAxOworICAgIGZvciAoOyAkaSA8IEBsaW5lczsgKysk
aSkgeworICAgICAgICBteSAkZmlyc3RDaGFyID0gc3Vic3RyKCRsaW5lc1skaV0sIDAsIDEpOwor
ICAgICAgICBpZiAoJGZpcnN0Q2hhciBlcSAiICIpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAg
ICAgIH0gZWxzaWYgKCRmaXJzdENoYXIgZXEgIkAiKSB7CisgICAgICAgICAgICBsYXN0OworICAg
ICAgICB9CisgICAgICAgICRzaG91bGRUcmltQ29udGV4dCA9IDA7ICMgRm9yIGV4YW1wbGUsIGlm
ICIrIiBvciAiLSIgZW5jb3VudGVyZWQuCisgICAgICAgIGxhc3Q7CiAgICAgfQotICAgIHNwbGlj
ZShAcGF0Y2hMaW5lcywgJHRyYWlsaW5nQ29udGV4dEluZGV4LCAkcGF0Y2hFbmRJbmRleCwgQHJl
cGVhdGVkTGluZXMpOyAjIFJlcGxhY2UgdHJhaWxpbmcgY29udGV4dCB3aXRoIHRoZSByZXBlYXRl
ZCBjb250ZW50LgotICAgIHNwbGljZShAcGF0Y2hMaW5lcywgJHBhdGNoSGVhZGVySW5kZXggKyAx
LCAkZmlyc3RDb250ZW50SW5kZXggLSAkcGF0Y2hIZWFkZXJJbmRleCAtIDEpOyAjIFJlbW92ZSBh
bnkgbGVhZGluZyBjb250ZXh0LgorICAgIG15ICRkZWxldGVkTGluZUNvdW50ID0gMDsKKyAgICBp
ZiAoJHNob3VsZFRyaW1Db250ZXh0KSB7ICMgQWxzbyBvY2N1cnMgaWYgZW5kIG9mIGZpbGUgcmVh
Y2hlZC4KKyAgICAgICAgc3BsaWNlKEBsaW5lcywgJGkgLSBAb3ZlcmxhcHBpbmdMaW5lcywgQG92
ZXJsYXBwaW5nTGluZXMpOworICAgICAgICAkZGVsZXRlZExpbmVDb3VudCA9IEBvdmVybGFwcGlu
Z0xpbmVzOworICAgIH0KKworICAgICMgV29yayBiYWNrd2FyZHMsIHNoaWZ0aW5nIG92ZXJsYXBw
aW5nIGxpbmVzIHRvd2FyZHMgZnJvbnQKKyAgICAjIHdoaWxlIGNoZWNraW5nIHRoYXQgcGF0Y2gg
c3RheXMgZXF1aXZhbGVudC4KKyAgICBmb3IgKCRpID0gJGRhdGVTdGFydEluZGV4IC0gMTsgJGkg
Pj0gJGNodW5rU3RhcnRJbmRleDsgLS0kaSkgeworICAgICAgICBteSAkbGluZSA9ICRsaW5lc1sk
aV07CisgICAgICAgIGlmIChzdWJzdHIoJGxpbmUsIDAsIDEpIG5lICIgIikgeworICAgICAgICAg
ICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICBteSAkdGV4dCA9IHN1YnN0cigkbGluZSwgMSk7
CisgICAgICAgIG15ICRuZXdMaW5lID0gcG9wKEBvdmVybGFwcGluZ0xpbmVzKTsKKyAgICAgICAg
aWYgKCR0ZXh0IG5lIHN1YnN0cigkbmV3TGluZSwgMSkpIHsKKyAgICAgICAgICAgIHJldHVybiAk
cGF0Y2g7ICMgVW5leHBlY3RlZCBkaWZmZXJlbmNlLgorICAgICAgICB9CisgICAgICAgICRsaW5l
c1skaV0gPSAiKyR0ZXh0IjsKKyAgICB9CisKKyAgICAjIEZpbmlzaCBtb3Zpbmcgd2hhdGV2ZXIg
b3ZlcmxhcHBpbmcgbGluZXMgcmVtYWluLCBhbmQgdXBkYXRlCisgICAgIyB0aGUgaW5pdGlhbCBj
aHVuayByYW5nZS4KKyAgICBteSAkY2h1bmtSYW5nZVJlZ0V4ID0gJ15cQFxAIC0oXGQrKSwoXGQr
KSBcK1xkKywoXGQrKSBcQFxAJCc7ICMgZS5nLiBAQCAtMiw2ICsyLDE4IEBACisgICAgaWYgKCRs
aW5lc1skY2h1bmtTdGFydEluZGV4IC0gMV0gIX4gLyRjaHVua1JhbmdlUmVnRXgvKSB7CisgICAg
ICAgICMgRklYTUU6IEhhbmRsZSBlcnJvcnMgZGlmZmVyZW50bHkgZnJvbSBDaGFuZ2VMb2cgZmls
ZXMgdGhhdAorICAgICAgICAjIGFyZSBva2F5IGJ1dCBzaG91bGQgbm90IGJlIGFsdGVyZWQuIFRo
YXQgd2F5IHdlIGNhbiBmaW5kIG91dAorICAgICAgICAjIGlmIGltcHJvdmVtZW50cyB0byB0aGUg
c2NyaXB0IGV2ZXIgYmVjb21lIG5lY2Vzc2FyeS4KKyAgICAgICAgcmV0dXJuICRwYXRjaDsgIyBF
cnJvcjogdW5leHBlY3RlZCBwYXRjaCBzdHJpbmcgZm9ybWF0LgorICAgIH0KKyAgICBteSAkbnVt
U2tpcHBlZEZpcnN0TGluZXMgPSAkMSAtIDE7CisgICAgbXkgJG9sZFNvdXJjZUxpbmVDb3VudCA9
ICQyOworICAgIG15ICRvbGRUYXJnZXRMaW5lQ291bnQgPSAkMzsKKworICAgIGlmIChAb3Zlcmxh
cHBpbmdMaW5lcyAhPSAkbnVtU2tpcHBlZEZpcnN0TGluZXMpIHsKKyAgICAgICAgIyBUaGlzIGNh
biBoYXBwZW4sIGZvciBleGFtcGxlLCB3aGVuIGRlbGliZXJhdGVseSBpbnNlcnRpbmcKKyAgICAg
ICAgIyBhIG5ldyBDaGFuZ2VMb2cgZW50cnkgZWFybGllciBpbiB0aGUgZmlsZS4KKyAgICAgICAg
cmV0dXJuICRwYXRjaDsKKyAgICB9CisgICAgIyBJZiBAb3ZlcmxhcHBpbmdMaW5lcyA+IDAsIHRo
aXMgaXMgd2hlcmUgd2UgbWFrZSB1c2Ugb2YgdGhlCisgICAgIyBhc3N1bXB0aW9uIHRoYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgc291cmNlIGZpbGUgd2FzIG5vdCBtb2RpZmllZC4KKyAgICBzcGxp
Y2UoQGxpbmVzLCAkY2h1bmtTdGFydEluZGV4LCAwLCBAb3ZlcmxhcHBpbmdMaW5lcyk7CisKKyAg
ICBteSAkc291cmNlTGluZUNvdW50ID0gJG9sZFNvdXJjZUxpbmVDb3VudCArIEBvdmVybGFwcGlu
Z0xpbmVzIC0gJGRlbGV0ZWRMaW5lQ291bnQ7CisgICAgbXkgJHRhcmdldExpbmVDb3VudCA9ICRv
bGRUYXJnZXRMaW5lQ291bnQgKyBAb3ZlcmxhcHBpbmdMaW5lcyAtICRkZWxldGVkTGluZUNvdW50
OworICAgICRsaW5lc1skY2h1bmtTdGFydEluZGV4IC0gMV0gPSAiQEAgLTEsJHNvdXJjZUxpbmVD
b3VudCArMSwkdGFyZ2V0TGluZUNvdW50IEBAIjsKIAotICAgIHJldHVybiBqb2luKCRsaW5lRW5k
aW5nLCBAcGF0Y2hMaW5lcykgLiAiXG4iOyAjIHBhdGNoKDEpIGV4cGVjdHMgYW4gZXh0cmEgdHJh
aWxpbmcgbmV3bGluZS4KKyAgICByZXR1cm4gam9pbigkbGluZUVuZGluZywgQGxpbmVzKSAuICJc
biI7ICMgcGF0Y2goMSkgZXhwZWN0cyBhbiBleHRyYSB0cmFpbGluZyBuZXdsaW5lLgogfQogCiBz
dWIgZ2l0Q29uZmlnKCQpCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3VuaXR0
ZXN0LnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRl
c3QucGwJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3VuaXR0
ZXN0LnBsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisj
CisjIENvcHlyaWdodCAoQykgMjAwOSBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21h
aWwuY29tKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRp
c3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFVuaXQgdGVzdHMgb2YgVkNTVXRpbHMu
cG0uCisKK3VzZSBUZXN0OjpTaW1wbGUgdGVzdHMgPT4gNzsKKwordXNlIFZDU1V0aWxzOworCisj
IGZpeENoYW5nZUxvZ1BhdGNoCisjCisjIFRoZSBzb3VyY2UgQ2hhbmdlTG9nIGZvciB0aGVzZSB0
ZXN0cyBpcyB0aGUgZm9sbG93aW5nOgorIyAKKyMgMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBl
bWFpbC5hZGRyZXNzPgorIyAKKyMgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisjIAorIyAgICAg
ICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjIuCisjIAorIyAgICAgICAgICogRmls
ZToKKyMgICAgICAgICAqIEZpbGUyOgorIyAKKyMgMjAwOS0xMi0yMSAgQWxpY2UgIDxhbGljZUBl
bWFpbC5hZGRyZXNzPgorIyAKKyMgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisjIAorIyAgICAg
ICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTItMjEuCisjIAorIyAgICAgICAgICogRmls
ZToKKyMgICAgICAgICAqIEZpbGUyOgorCitteSAkdGl0bGU7CitteSAkaW47CitteSAkb3V0Owor
CisjIE5ldyB0ZXN0CiskdGl0bGUgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IFtubyBjaGFuZ2VdIEZp
cnN0IGxpbmUgaXMgbmV3IGxpbmUuIjsKKworJGluID0gPDwnRU5EJzsKKy0tLSBDaGFuZ2VMb2cK
KysrKyBDaGFuZ2VMb2cKK0BAIC0xLDMgKzEsMTEgQEAKKysyMDA5LTEyLTIyICBCb2IgIDxib2JA
ZW1haWwuYWRkcmVzcz4KKysKKysgICAgICAgIFJldmlld2VkIGJ5IFJheS4KKysKKysgICAgICAg
IENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0yMi4KKysKKysgICAgICAgICogRmls
ZToKKysKKyAyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisgCisgICAg
ICAgICBSZXZpZXdlZCBieSBSYXkuCitFTkQKKworb2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBl
cSAkaW4sICR0aXRsZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJmaXhDaGFuZ2VMb2dQYXRj
aDogW25vIGNoYW5nZV0gTm8gZGF0ZSBzdHJpbmcuIjsKKworJGluID0gPDwnRU5EJzsKKy0tLSBD
aGFuZ2VMb2cKKysrKyBDaGFuZ2VMb2cKK0BAIC02LDYgKzYsNyBAQAorIAorICAgICAgICAgKiBG
aWxlOgorICAgICAgICAgKiBGaWxlMjoKKysgICAgICAgICogRmlsZTM6CisgCisgMjAwOS0xMi0y
MSAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgorIAorRU5ECisKK29rKGZpeENoYW5nZUxv
Z1BhdGNoKCRpbikgZXEgJGluLCAkdGl0bGUpOworCisjIE5ldyB0ZXN0CiskdGl0bGUgPSAiZml4
Q2hhbmdlTG9nUGF0Y2g6IFtubyBjaGFuZ2VdIE5ldyBlbnRyeSBpbnNlcnRlZCBpbiBtaWRkbGUu
IjsKKworJGluID0gPDwnRU5EJzsKKy0tLSBDaGFuZ2VMb2cKKysrKyBDaGFuZ2VMb2cKK0BAIC0x
MSw2ICsxMSwxNCBAQAorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorIAorKyAgICAgICAg
Q2hhbmdlZCBzb21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIxLgorKworKyAgICAgICAgKiBGaWxl
OgorKworKzIwMDktMTItMjEgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKysgICAg
ICAgIFJldmlld2VkIGJ5IFJheS4KKysKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIw
MDktMTItMjEuCisgCisgICAgICAgICAqIEZpbGU6CitFTkQKKworb2soZml4Q2hhbmdlTG9nUGF0
Y2goJGluKSBlcSAkaW4sICR0aXRsZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJmaXhDaGFu
Z2VMb2dQYXRjaDogTGVhZGluZyBjb250ZXh0IGluY2x1ZGVzIGZpcnN0IGxpbmUuIjsKKworJGlu
ID0gPDwnRU5EJzsKKy0tLSBDaGFuZ2VMb2cKKysrKyBDaGFuZ2VMb2cKK0BAIC0xLDUgKzEsMTMg
QEAKKyAyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisgCisrICAgICAg
ICBSZXZpZXdlZCBieSBTdWUuCisrCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBjb2RlIG9u
IDIwMDktMTItMjIuCisrCisrICAgICAgICAqIEZpbGU6CisrCisrMjAwOS0xMi0yMiAgQWxpY2Ug
IDxhbGljZUBlbWFpbC5hZGRyZXNzPgorKworICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorIAor
ICAgICAgICAgQ2hhbmdlZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMi4KK0VORAorCiskb3V0ID0g
PDwnRU5EJzsKKy0tLSBDaGFuZ2VMb2cKKysrKyBDaGFuZ2VMb2cKK0BAIC0xLDMgKzEsMTEgQEAK
KysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrCisrICAgICAgICBS
ZXZpZXdlZCBieSBTdWUuCisrCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBjb2RlIG9uIDIw
MDktMTItMjIuCisrCisrICAgICAgICAqIEZpbGU6CisrCisgMjAwOS0xMi0yMiAgQWxpY2UgIDxh
bGljZUBlbWFpbC5hZGRyZXNzPgorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorRU5ECisK
K29rKGZpeENoYW5nZUxvZ1BhdGNoKCRpbikgZXEgJG91dCwgJHRpdGxlKTsKKworIyBOZXcgdGVz
dAorJHRpdGxlID0gImZpeENoYW5nZUxvZ1BhdGNoOiBMZWFkaW5nIGNvbnRleHQgZG9lcyBub3Qg
aW5jbHVkZSBmaXJzdCBsaW5lLiI7CisKKyRpbiA9IDw8J0VORCc7CitAQCAtMiw2ICsyLDE0IEBA
CisgCisgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisgCisrICAgICAgICBDaGFuZ2VkIHNvbWUg
bW9yZSBjb2RlIG9uIDIwMDktMTItMjIuCisrCisrICAgICAgICAqIEZpbGU6CisrCisrMjAwOS0x
Mi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgorKworKyAgICAgICAgUmV2aWV3ZWQg
YnkgUmF5LgorKworICAgICAgICAgQ2hhbmdlZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMi4KKyAK
KyAgICAgICAgICogRmlsZToKK0VORAorCiskb3V0ID0gPDwnRU5EJzsKK0BAIC0xLDMgKzEsMTEg
QEAKKysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrCisrICAgICAg
ICBSZXZpZXdlZCBieSBSYXkuCisrCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBjb2RlIG9u
IDIwMDktMTItMjIuCisrCisrICAgICAgICAqIEZpbGU6CisrCisgMjAwOS0xMi0yMiAgQWxpY2Ug
IDxhbGljZUBlbWFpbC5hZGRyZXNzPgorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorRU5E
CisKK29rKGZpeENoYW5nZUxvZ1BhdGNoKCRpbikgZXEgJG91dCwgJHRpdGxlKTsKKworIyBOZXcg
dGVzdAorJHRpdGxlID0gImZpeENoYW5nZUxvZ1BhdGNoOiBOb24tY29uc2VjdXRpdmUgbGluZSBh
ZGRpdGlvbnMuIjsKKworIyBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIGlmIHRoZSBuZXcg
Q2hhbmdlTG9nIGVudHJ5IGluY2x1ZGVzCisjIHRyYWlsaW5nIHdoaXRlIHNwYWNlIGluIHRoZSBm
aXJzdCBibGFuayBsaW5lIGJ1dCBub3QgdGhlIHNlY29uZC4KKyMgQSBkaWZmIGNvbW1hbmQgY2Fu
IHRoZW4gbWF0Y2ggdGhlIHNlY29uZCBibGFuayBsaW5lIG9mIHRoZSBuZXcKKyMgQ2hhbmdlTG9n
IGVudHJ5IHdpdGggdGhlIGZpcnN0IGJsYW5rIGxpbmUgb2YgdGhlIG9sZC4KKyMgVGhlIHN2biBk
aWZmIGNvbW1hbmQgd2l0aCB0aGUgZGVmYXVsdCAtLWRpZmYtY21kIGhhcyBkb25lIHRoaXMuCisk
aW4gPSA8PCdFTkQnOworQEAgLTEsNSArMSwxMSBAQAorIDIwMDktMTItMjIgIEFsaWNlICA8YWxp
Y2VAZW1haWwuYWRkcmVzcz4KKysgPHByZXRlbmQtd2hpdGVzcGFjZT4KKysgICAgICAgIFJldmll
d2VkIGJ5IFJheS4KKyAKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0x
Mi0yMi4KKysKKysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrCisg
ICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisgCisgICAgICAgICBDaGFuZ2VkIHNvbWUgY29kZSBv
biAyMDA5LTEyLTIyLgorRU5ECisKKyRvdXQgPSA8PCdFTkQnOworQEAgLTEsMyArMSw5IEBACisr
MjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgorKyA8cHJldGVuZC13aGl0
ZXNwYWNlPgorKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorKworKyAgICAgICAgQ2hhbmdlZCBz
b21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworIDIwMDktMTItMjIgIEFsaWNlICA8YWxp
Y2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmlld2VkIGJ5IFJheS4KK0VORAorCitv
ayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVxICRvdXQsICR0aXRsZSk7CisKKyMgTmV3IHRlc3QK
KyR0aXRsZSA9ICJmaXhDaGFuZ2VMb2dQYXRjaDogQWRkaXRpb25hbCBlZGl0cyBhZnRlciBuZXcg
ZW50cnkuIjsKKworJGluID0gPDwnRU5EJzsKK0BAIC0yLDEwICsyLDE3IEBACisgCisgICAgICAg
ICBSZXZpZXdlZCBieSBSYXkuCisgCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBjb2RlIG9u
IDIwMDktMTItMjIuCisrCisrICAgICAgICAqIEZpbGU6CisrCisrMjAwOS0xMi0yMiAgQWxpY2Ug
IDxhbGljZUBlbWFpbC5hZGRyZXNzPgorKworKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorKwor
ICAgICAgICAgQ2hhbmdlZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMi4KKyAKKyAgICAgICAgICog
RmlsZToKKy0gICAgICAgICogRmlsZTI6CisgCisgMjAwOS0xMi0yMSAgQWxpY2UgIDxhbGljZUBl
bWFpbC5hZGRyZXNzPgorIAorRU5ECisKKyRvdXQgPSA8PCdFTkQnOworQEAgLTEsMTEgKzEsMTgg
QEAKKysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrCisrICAgICAg
ICBSZXZpZXdlZCBieSBSYXkuCisrCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBjb2RlIG9u
IDIwMDktMTItMjIuCisrCisrICAgICAgICAqIEZpbGU6CisrCisgMjAwOS0xMi0yMiAgQWxpY2Ug
IDxhbGljZUBlbWFpbC5hZGRyZXNzPgorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorIAor
ICAgICAgICAgQ2hhbmdlZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMi4KKyAKKyAgICAgICAgICog
RmlsZToKKy0gICAgICAgICogRmlsZTI6CisgCisgMjAwOS0xMi0yMSAgQWxpY2UgIDxhbGljZUBl
bWFpbC5hZGRyZXNzPgorIAorRU5ECisKK29rKGZpeENoYW5nZUxvZ1BhdGNoKCRpbikgZXEgJG91
dCwgJHRpdGxlKTsKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9vbHMvU2NyaXB0cy9W
Q1NVdGlsc191bml0dGVzdC5wbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICAr
ICoKCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0LXBlcmwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdC1wZXJsCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdC1wZXJsCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM1IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IENo
cmlzIEplcmRvbmVrIChjaHJpcy5qZXJkb25la0BnbWFpbC5jb20pCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyMgUnVucyB1bml0IHRlc3RzIG9mIFdlYktpdCBQZXJsIGNvZGUuCisKK3VzZSBUZXN0
OjpIYXJuZXNzOworCitydW50ZXN0cygiVkNTVXRpbHNfdW5pdHRlc3QucGwiKTsKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXQtcGVybApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45642</attachid>
            <date>2009-12-29 22:50:50 -0800</date>
            <delta_ts>2009-12-30 01:26:26 -0800</delta_ts>
            <desc>Proposed patch 4</desc>
            <filename>patch-tools4-4.txt</filename>
            <type>text/plain</type>
            <size>19005</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUyNjQ0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDktMTItMjkgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeGVkIGEgYnVnIGluIGZpeENoYW5nZUxvZ1BhdGNoLCBtYWRl
IGl0IHdvcmsgY29ycmVjdGx5IGluCisgICAgICAgIG1vcmUgY2lyY3Vtc3RhbmNlcywgYW5kIGFk
ZGVkIHVuaXQgdGVzdHMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyOTE5CisKKyAgICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAg
ICAgIFJld3JvdGUgZml4Q2hhbmdlTG9nUGF0Y2guCisgICAgICAgICAgCisgICAgICAgICogU2Ny
aXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgNyB1bml0
IHRlc3RzIGZvciBmaXhDaGFuZ2VMb2dQYXRjaC4KKworICAgICAgICAqIFNjcmlwdHMvdGVzdC13
ZWJraXQtcGVybDogQWRkZWQuCisgICAgICAgICAgQWRkZWQgdGVzdCBoYXJuZXNzIGZvciB1bml0
IHRlc3RzIG9mIFBlcmwgY29kZS4KKwogMjAwOS0xMi0yOSAgRGFuaWVsIEJhdGVzICA8ZGJhdGVz
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBX
ZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L1NjcmlwdHMvVkNTVXRpbHMucG0JKHJldmlzaW9uIDUyNjQ0KQorKysgV2ViS2l0VG9vbHMvU2Ny
aXB0cy9WQ1NVdGlscy5wbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAKICMgQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAwOSBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21h
aWwuY29tKQogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNTYsNjQgKzM1NywxNDMg
QEAgc3ViIGdpdGRpZmYyc3ZuZGlmZigkKQogICAgIHJldHVybiAkXzsKIH0KIAotIyBUaGUgZGlm
ZigxKSBjb21tYW5kIGlzIGdyZWVkeSB3aGVuIG1hdGNoaW5nIGxpbmVzLCBzbyBhIG5ldyBDaGFu
Z2VMb2cgZW50cnkgd2lsbAotIyBoYXZlIGxpbmVzIG9mIGNvbnRleHQgYXQgdGhlIHRvcCBvZiBh
IHBhdGNoIHdoZW4gdGhlIGV4aXN0aW5nIGVudHJ5IGhhcyB0aGUgc2FtZQotIyBkYXRlIGFuZCBh
dXRob3IgYXMgdGhlIG5ldyBlbnRyeS4gIEFsdGVyIHRoZSBDaGFuZ2VMb2cgcGF0Y2ggc28KLSMg
dGhhdCB0aGUgYWRkZWQgbGluZXMgKCIrIikgaW4gdGhlIHBhdGNoIGFsd2F5cyBzdGFydCBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoZQotIyBwYXRjaCBhbmQgdGhlcmUgYXJlIG5vIGluaXRpYWwgbGlu
ZXMgb2YgY29udGV4dC4KKyMgSWYgcG9zc2libGUsIHJldHVybnMgYSBDaGFuZ2VMb2cgcGF0Y2gg
ZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gb25lLAorIyBidXQgd2l0aCB0aGUgbmV3ZXN0IENoYW5n
ZUxvZyBlbnRyeSBpbnNlcnRlZCBhdCB0aGUgdG9wIG9mIHRoZQorIyBmaWxlIC0tIGkuZS4gbm8g
bGVhZGluZyBjb250ZXh0IGFuZCBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAiKyIuCisjCisjIElm
IGdpdmVuIGEgcGF0Y2ggc3RyaW5nIG5vdCByZXByZXNlbnRhYmxlIGFzIGEgcGF0Y2ggd2l0aCB0
aGUgYWJvdmUKKyMgcHJvcGVydGllcywgaXQgcmV0dXJucyB0aGUgaW5wdXQgYmFjayB1bmNoYW5n
ZWQuCisjCisjIFdBUk5JTkc6IFRoaXMgc3Vicm91dGluZSBjYW4gcmV0dXJuIGFuIGluZXF1aXZh
bGVudCBwYXRjaCBzdHJpbmcgaWYKKyMgYm90aCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgQ2hh
bmdlTG9nIGZpbGUgbWF0Y2hlcyB0aGUgYmVnaW5uaW5nCisjIG9mIHRoZSBzb3VyY2UgQ2hhbmdl
TG9nLCBhbmQgdGhlIHNvdXJjZSBiZWdpbm5pbmcgd2FzIG1vZGlmaWVkLgorIyBPdGhlcndpc2Us
IGl0IGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIGVxdWl2YWxlbnQgcGF0Y2ggc3RyaW5nLAor
IyBpZiBpdCByZXR1cm5zLgorIworIyBBcHBseWluZyB0aGlzIHN1YnJvdXRpbmUgdG8gQ2hhbmdl
TG9nIHBhdGNoZXMgYWxsb3dzIHN2bi1hcHBseSB0bworIyBpbnNlcnQgbmV3IENoYW5nZUxvZyBl
bnRyaWVzIGF0IHRoZSB0b3Agb2YgdGhlIENoYW5nZUxvZyBmaWxlLgorIyBzdm4tYXBwbHkgdXNl
cyBwYXRjaCB3aXRoIC0tZnV6ej0zIHRvIGRvIHRoaXMuIFdlIG5lZWQgdG8gYXBwbHkKKyMgdGhp
cyBzdWJyb3V0aW5lIGJlY2F1c2UgdGhlIGRpZmYoMSkgY29tbWFuZCBpcyBncmVlZHkgd2hlbiBt
YXRjaGluZworIyBsaW5lcy4gQSBuZXcgQ2hhbmdlTG9nIGVudHJ5IHdpdGggdGhlIHNhbWUgZGF0
ZSBhbmQgYXV0aG9yIGFzIHRoZQorIyBwcmV2aW91cyB3aWxsIG1hdGNoIGFuZCBjYXVzZSB0aGUg
ZGlmZiB0byBoYXZlIGxpbmVzIG9mIHN0YXJ0aW5nCisjIGNvbnRleHQuCisjCisjIFRoaXMgc3Vi
cm91dGluZSBoYXMgdW5pdCB0ZXN0cyBpbiBWQ1NVdGlsc191bml0dGVzdC5wbC4KIHN1YiBmaXhD
aGFuZ2VMb2dQYXRjaCgkKQogewogICAgIG15ICRwYXRjaCA9IHNoaWZ0OyAjICRwYXRjaCB3aWxs
IG9ubHkgY29udGFpbiBwYXRjaCBmcmFnbWVudHMgZm9yIENoYW5nZUxvZy4KIAogICAgICRwYXRj
aCA9fiAvKFxyP1xuKS87CiAgICAgbXkgJGxpbmVFbmRpbmcgPSAkMTsKLSAgICBteSBAcGF0Y2hM
aW5lcyA9IHNwbGl0KC8kbGluZUVuZGluZy8sICRwYXRjaCk7CisgICAgbXkgQGxpbmVzID0gc3Bs
aXQoLyRsaW5lRW5kaW5nLywgJHBhdGNoKTsKIAotICAgICMgZS5nLiAyMDA5LTA2LTAzICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KLSAgICBteSAkZGF0ZUxpbmVSZWdleHBTdHJpbmcg
PSAnXlwrKFxkezR9LVxkezJ9LVxkezJ9KScgIyBDb25zdW1lIHRoZSBsZWFkaW5nICcrJyBhbmQg
dGhlIGRhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ1xzKyguKylccysnICMg
Q29uc3VtZSB0aGUgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnPChbXjw+
XSspPiQnOyAjIEFuZCBmaW5hbGx5IHRoZSBlbWFpbCBhZGRyZXNzLgotCi0gICAgIyBGaWd1cmUg
b3V0IHdoZXJlIHRoZSBwYXRjaCBjb250ZW50cyBzdGFydCBhbmQgc3RvcC4KLSAgICBteSAkcGF0
Y2hIZWFkZXJJbmRleDsKLSAgICBteSAkZmlyc3RDb250ZW50SW5kZXg7Ci0gICAgbXkgJHRyYWls
aW5nQ29udGV4dEluZGV4OwotICAgIG15ICRkYXRlSW5kZXg7Ci0gICAgbXkgJHBhdGNoRW5kSW5k
ZXggPSBzY2FsYXIoQHBhdGNoTGluZXMpOwotICAgIGZvciAobXkgJGluZGV4ID0gMDsgJGluZGV4
IDwgQHBhdGNoTGluZXM7ICsrJGluZGV4KSB7Ci0gICAgICAgIG15ICRsaW5lID0gJHBhdGNoTGlu
ZXNbJGluZGV4XTsKLSAgICAgICAgaWYgKCRsaW5lID1+IC9eXEBcQCAtXGQrLFxkKyBcK1xkKyxc
ZCsgXEBcQCQvKSB7ICMgZS5nLiBAQCAtMSw1ICsxLDE4IEBACi0gICAgICAgICAgICBpZiAoJHBh
dGNoSGVhZGVySW5kZXgpIHsKLSAgICAgICAgICAgICAgICAkcGF0Y2hFbmRJbmRleCA9ICRpbmRl
eDsgIyBXZSBvbmx5IGJvdGhlciB0byBmaXggdXAgdGhlIGZpcnN0IHBhdGNoIGZyYWdtZW50Lgot
ICAgICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAkcGF0Y2hI
ZWFkZXJJbmRleCA9ICRpbmRleDsKKyAgICBteSAkaSA9IDA7ICMgV2UgcmV1c2UgdGhlIHNhbWUg
aW5kZXggdGhyb3VnaG91dC4KKworICAgICMgU2tpcCB0byBiZWdpbm5pbmcgb2YgZmlyc3QgY2h1
bmsuCisgICAgZm9yICg7ICRpIDwgQGxpbmVzOyArKyRpKSB7CisgICAgICAgIGlmIChzdWJzdHIo
JGxpbmVzWyRpXSwgMCwgMSkgZXEgIkAiKSB7CisgICAgICAgICAgICBsYXN0OwogICAgICAgICB9
Ci0gICAgICAgICRmaXJzdENvbnRlbnRJbmRleCA9ICRpbmRleCBpZiAoJHBhdGNoSGVhZGVySW5k
ZXggJiYgISRmaXJzdENvbnRlbnRJbmRleCAmJiAkbGluZSA9fiAvXlwrW14rXS8pOyAjIE9ubHkg
bWF0Y2ggYWZ0ZXIgZmluZGluZyBwYXRjaEhlYWRlckluZGV4LCBvdGhlcndpc2Ugd2UnZCBtYXRj
aCAiKysrIi4KLSAgICAgICAgJGRhdGVJbmRleCA9ICRpbmRleCBpZiAoJGxpbmUgPX4gLyRkYXRl
TGluZVJlZ2V4cFN0cmluZy8pOwotICAgICAgICAkdHJhaWxpbmdDb250ZXh0SW5kZXggPSAkaW5k
ZXggaWYgKCRmaXJzdENvbnRlbnRJbmRleCAmJiAhJHRyYWlsaW5nQ29udGV4dEluZGV4ICYmICRs
aW5lID1+IC9eIC8pOwogICAgIH0KLSAgICBteSAkY29udGVudExpbmVDb3VudCA9ICR0cmFpbGlu
Z0NvbnRleHRJbmRleCAtICRmaXJzdENvbnRlbnRJbmRleDsKLSAgICBteSAkdHJhaWxpbmdDb250
ZXh0TGluZUNvdW50ID0gJHBhdGNoRW5kSW5kZXggLSAkdHJhaWxpbmdDb250ZXh0SW5kZXg7Cisg
ICAgbXkgJGNodW5rU3RhcnRJbmRleCA9ICsrJGk7CiAKLSAgICAjIElmIHdlIGRpZG4ndCBmaW5k
IGEgZGF0ZSBsaW5lIGluIHRoZSBjb250ZW50IHRoZW4gdGhpcyBpcyBub3QgYSBwYXRjaCB3ZSBz
aG91bGQgdHJ5IGFuZCBmaXguCi0gICAgcmV0dXJuICRwYXRjaCBpZiAoISRkYXRlSW5kZXgpOwor
ICAgICMgT3B0aW1pemF0aW9uOiBkbyBub3QgcHJvY2VzcyBpZiBuZXcgbGluZXMgYWxyZWFkeSBi
ZWdpbiB0aGUgY2h1bmsuCisgICAgaWYgKHN1YnN0cigkbGluZXNbJGldLCAwLCAxKSBlcSAiKyIp
IHsKKyAgICAgICAgcmV0dXJuICRwYXRjaDsKKyAgICB9CisKKyAgICAjIFNraXAgdG8gZmlyc3Qg
bGluZSBvZiBuZXdseSBhZGRlZCBDaGFuZ2VMb2cgZW50cnkuCisgICAgIyBGb3IgZXhhbXBsZSwg
KzIwMDktMDYtMDMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorICAgIG15ICRkYXRl
U3RhcnRSZWdFeCA9ICdeXCsoXGR7NH0tXGR7Mn0tXGR7Mn0pJyAjIGxlYWRpbmcgIisiIGFuZCBk
YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgLiAnXHMrKC4rKVxzKycgIyBuYW1lCisgICAg
ICAgICAgICAgICAgICAgICAgICAgLiAnPChbXjw+XSspPiQnOyAjIGUtbWFpbCBhZGRyZXNzCisK
KyAgICBmb3IgKDsgJGkgPCBAbGluZXM7ICsrJGkpIHsKKyAgICAgICAgbXkgJGxpbmUgPSAkbGlu
ZXNbJGldOworICAgICAgICBteSAkZmlyc3RDaGFyID0gc3Vic3RyKCRsaW5lLCAwLCAxKTsKKyAg
ICAgICAgaWYgKCRsaW5lID1+IC8kZGF0ZVN0YXJ0UmVnRXgvKSB7CisgICAgICAgICAgICBsYXN0
OworICAgICAgICB9IGVsc2lmICgkZmlyc3RDaGFyIGVxICIgIiBvciAkZmlyc3RDaGFyIGVxICIr
IikgeworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gJHBhdGNo
OyAjIERvIG5vdCBjaGFuZ2UgaWYsIGZvciBleGFtcGxlLCAiLSIgb3IgIkAiIGZvdW5kLgorICAg
IH0KKyAgICBpZiAoJGkgPj0gQGxpbmVzKSB7CisgICAgICAgIHJldHVybiAkcGF0Y2g7ICMgRG8g
bm90IGNoYW5nZSBpZiBkYXRlIG5vdCBmb3VuZC4KKyAgICB9CisgICAgbXkgJGRhdGVTdGFydElu
ZGV4ID0gJGk7CiAKLSAgICAjIFdlIG9ubHkgbmVlZCB0byBkbyBhbnl0aGluZyBpZiB0aGUgZGF0
ZSBsaW5lIGlzIG5vdCB0aGUgZmlyc3QgY29udGVudCBsaW5lLgotICAgIHJldHVybiAkcGF0Y2gg
aWYgKCRkYXRlSW5kZXggPT0gJGZpcnN0Q29udGVudEluZGV4KTsKKyAgICAjIFJld3JpdGUgb3Zl
cmxhcHBpbmcgbGluZXMgdG8gbGVhZCB3aXRoICIgIi4KKyAgICBteSBAb3ZlcmxhcHBpbmdMaW5l
cyA9ICgpOyAjIFRoZXNlIHdpbGwgaW5jbHVkZSBhIGxlYWRpbmcgIisiLgorICAgIGZvciAoOyAk
aSA8IEBsaW5lczsgKyskaSkgeworICAgICAgICBteSAkbGluZSA9ICRsaW5lc1skaV07CisgICAg
ICAgIGlmIChzdWJzdHIoJGxpbmUsIDAsIDEpIG5lICIrIikgeworICAgICAgICAgIGxhc3Q7Cisg
ICAgICAgIH0KKyAgICAgICAgcHVzaChAb3ZlcmxhcHBpbmdMaW5lcywgJGxpbmUpOworICAgICAg
ICAkbGluZXNbJGldID0gIiAiIC4gc3Vic3RyKCRsaW5lLCAxKTsKKyAgICB9CiAKLSAgICAjIFdy
aXRlIHRoZSBuZXcgcGF0Y2guCi0gICAgbXkgJHRvdGFsTmV3Q29udGVudExpbmVzID0gJGNvbnRl
bnRMaW5lQ291bnQgKyAkdHJhaWxpbmdDb250ZXh0TGluZUNvdW50OwotICAgICRwYXRjaExpbmVz
WyRwYXRjaEhlYWRlckluZGV4XSA9ICJAQCAtMSwkdHJhaWxpbmdDb250ZXh0TGluZUNvdW50ICsx
LCR0b3RhbE5ld0NvbnRlbnRMaW5lcyBAQCI7ICMgV3JpdGUgYSBuZXcgaGVhZGVyLgotICAgIG15
IEByZXBlYXRlZExpbmVzID0gc3BsaWNlKEBwYXRjaExpbmVzLCAkZGF0ZUluZGV4LCAkdHJhaWxp
bmdDb250ZXh0SW5kZXggLSAkZGF0ZUluZGV4KTsgIyBUaGUgZGF0ZSBsaW5lIGFuZCBhbGwgdGhl
IGNvbnRlbnQgYWZ0ZXIgaXQgdGhhdCBkaWZmIHNhdyBhcyByZXBlYXRlZC4KLSAgICBzcGxpY2Uo
QHBhdGNoTGluZXMsICRmaXJzdENvbnRlbnRJbmRleCwgMCwgQHJlcGVhdGVkTGluZXMpOyAjIE1v
dmUgdGhlIHJlcGVhdGVkIGNvbnRlbnQgdG8gdGhlIHRvcC4KLSAgICBmb3JlYWNoIG15ICRsaW5l
IChAcmVwZWF0ZWRMaW5lcykgewotICAgICAgICAkbGluZSA9fiBzL15cKy8gLzsKKyAgICAjIFJl
bW92ZSBleGNlc3MgZW5kaW5nIGNvbnRleHQsIGlmIG5lY2Vzc2FyeS4KKyAgICBteSAkc2hvdWxk
VHJpbUNvbnRleHQgPSAxOworICAgIGZvciAoOyAkaSA8IEBsaW5lczsgKyskaSkgeworICAgICAg
ICBteSAkZmlyc3RDaGFyID0gc3Vic3RyKCRsaW5lc1skaV0sIDAsIDEpOworICAgICAgICBpZiAo
JGZpcnN0Q2hhciBlcSAiICIpIHsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0gZWxzaWYg
KCRmaXJzdENoYXIgZXEgIkAiKSB7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAg
ICAgICRzaG91bGRUcmltQ29udGV4dCA9IDA7ICMgRm9yIGV4YW1wbGUsIGlmICIrIiBvciAiLSIg
ZW5jb3VudGVyZWQuCisgICAgICAgIGxhc3Q7CiAgICAgfQotICAgIHNwbGljZShAcGF0Y2hMaW5l
cywgJHRyYWlsaW5nQ29udGV4dEluZGV4LCAkcGF0Y2hFbmRJbmRleCwgQHJlcGVhdGVkTGluZXMp
OyAjIFJlcGxhY2UgdHJhaWxpbmcgY29udGV4dCB3aXRoIHRoZSByZXBlYXRlZCBjb250ZW50Lgot
ICAgIHNwbGljZShAcGF0Y2hMaW5lcywgJHBhdGNoSGVhZGVySW5kZXggKyAxLCAkZmlyc3RDb250
ZW50SW5kZXggLSAkcGF0Y2hIZWFkZXJJbmRleCAtIDEpOyAjIFJlbW92ZSBhbnkgbGVhZGluZyBj
b250ZXh0LgorICAgIG15ICRkZWxldGVkTGluZUNvdW50ID0gMDsKKyAgICBpZiAoJHNob3VsZFRy
aW1Db250ZXh0KSB7ICMgQWxzbyBvY2N1cnMgaWYgZW5kIG9mIGZpbGUgcmVhY2hlZC4KKyAgICAg
ICAgc3BsaWNlKEBsaW5lcywgJGkgLSBAb3ZlcmxhcHBpbmdMaW5lcywgQG92ZXJsYXBwaW5nTGlu
ZXMpOworICAgICAgICAkZGVsZXRlZExpbmVDb3VudCA9IEBvdmVybGFwcGluZ0xpbmVzOworICAg
IH0KKworICAgICMgV29yayBiYWNrd2FyZHMsIHNoaWZ0aW5nIG92ZXJsYXBwaW5nIGxpbmVzIHRv
d2FyZHMgZnJvbnQKKyAgICAjIHdoaWxlIGNoZWNraW5nIHRoYXQgcGF0Y2ggc3RheXMgZXF1aXZh
bGVudC4KKyAgICBmb3IgKCRpID0gJGRhdGVTdGFydEluZGV4IC0gMTsgJGkgPj0gJGNodW5rU3Rh
cnRJbmRleDsgLS0kaSkgeworICAgICAgICBteSAkbGluZSA9ICRsaW5lc1skaV07CisgICAgICAg
IGlmIChzdWJzdHIoJGxpbmUsIDAsIDEpIG5lICIgIikgeworICAgICAgICAgICAgbmV4dDsKKyAg
ICAgICAgfQorICAgICAgICBteSAkdGV4dCA9IHN1YnN0cigkbGluZSwgMSk7CisgICAgICAgIG15
ICRuZXdMaW5lID0gcG9wKEBvdmVybGFwcGluZ0xpbmVzKTsKKyAgICAgICAgaWYgKCR0ZXh0IG5l
IHN1YnN0cigkbmV3TGluZSwgMSkpIHsKKyAgICAgICAgICAgIHJldHVybiAkcGF0Y2g7ICMgVW5l
eHBlY3RlZCBkaWZmZXJlbmNlLgorICAgICAgICB9CisgICAgICAgICRsaW5lc1skaV0gPSAiKyR0
ZXh0IjsKKyAgICB9CisKKyAgICAjIEZpbmlzaCBtb3Zpbmcgd2hhdGV2ZXIgb3ZlcmxhcHBpbmcg
bGluZXMgcmVtYWluLCBhbmQgdXBkYXRlCisgICAgIyB0aGUgaW5pdGlhbCBjaHVuayByYW5nZS4K
KyAgICBteSAkY2h1bmtSYW5nZVJlZ0V4ID0gJ15cQFxAIC0oXGQrKSwoXGQrKSBcK1xkKywoXGQr
KSBcQFxAJCc7ICMgZS5nLiBAQCAtMiw2ICsyLDE4IEBACisgICAgaWYgKCRsaW5lc1skY2h1bmtT
dGFydEluZGV4IC0gMV0gIX4gLyRjaHVua1JhbmdlUmVnRXgvKSB7CisgICAgICAgICMgRklYTUU6
IEhhbmRsZSBlcnJvcnMgZGlmZmVyZW50bHkgZnJvbSBDaGFuZ2VMb2cgZmlsZXMgdGhhdAorICAg
ICAgICAjIGFyZSBva2F5IGJ1dCBzaG91bGQgbm90IGJlIGFsdGVyZWQuIFRoYXQgd2F5IHdlIGNh
biBmaW5kIG91dAorICAgICAgICAjIGlmIGltcHJvdmVtZW50cyB0byB0aGUgc2NyaXB0IGV2ZXIg
YmVjb21lIG5lY2Vzc2FyeS4KKyAgICAgICAgcmV0dXJuICRwYXRjaDsgIyBFcnJvcjogdW5leHBl
Y3RlZCBwYXRjaCBzdHJpbmcgZm9ybWF0LgorICAgIH0KKyAgICBteSAkc2tpcHBlZEZpcnN0TGlu
ZUNvdW50ID0gJDEgLSAxOworICAgIG15ICRvbGRTb3VyY2VMaW5lQ291bnQgPSAkMjsKKyAgICBt
eSAkb2xkVGFyZ2V0TGluZUNvdW50ID0gJDM7CisKKyAgICBpZiAoQG92ZXJsYXBwaW5nTGluZXMg
IT0gJHNraXBwZWRGaXJzdExpbmVDb3VudCkgeworICAgICAgICAjIFRoaXMgY2FuIGhhcHBlbiwg
Zm9yIGV4YW1wbGUsIHdoZW4gZGVsaWJlcmF0ZWx5IGluc2VydGluZworICAgICAgICAjIGEgbmV3
IENoYW5nZUxvZyBlbnRyeSBlYXJsaWVyIGluIHRoZSBmaWxlLgorICAgICAgICByZXR1cm4gJHBh
dGNoOworICAgIH0KKyAgICAjIElmIEBvdmVybGFwcGluZ0xpbmVzID4gMCwgdGhpcyBpcyB3aGVy
ZSB3ZSBtYWtlIHVzZSBvZiB0aGUKKyAgICAjIGFzc3VtcHRpb24gdGhhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBzb3VyY2UgZmlsZSB3YXMgbm90IG1vZGlmaWVkLgorICAgIHNwbGljZShAbGluZXMs
ICRjaHVua1N0YXJ0SW5kZXgsIDAsIEBvdmVybGFwcGluZ0xpbmVzKTsKKworICAgIG15ICRzb3Vy
Y2VMaW5lQ291bnQgPSAkb2xkU291cmNlTGluZUNvdW50ICsgQG92ZXJsYXBwaW5nTGluZXMgLSAk
ZGVsZXRlZExpbmVDb3VudDsKKyAgICBteSAkdGFyZ2V0TGluZUNvdW50ID0gJG9sZFRhcmdldExp
bmVDb3VudCArIEBvdmVybGFwcGluZ0xpbmVzIC0gJGRlbGV0ZWRMaW5lQ291bnQ7CisgICAgJGxp
bmVzWyRjaHVua1N0YXJ0SW5kZXggLSAxXSA9ICJAQCAtMSwkc291cmNlTGluZUNvdW50ICsxLCR0
YXJnZXRMaW5lQ291bnQgQEAiOwogCi0gICAgcmV0dXJuIGpvaW4oJGxpbmVFbmRpbmcsIEBwYXRj
aExpbmVzKSAuICJcbiI7ICMgcGF0Y2goMSkgZXhwZWN0cyBhbiBleHRyYSB0cmFpbGluZyBuZXds
aW5lLgorICAgIHJldHVybiBqb2luKCRsaW5lRW5kaW5nLCBAbGluZXMpIC4gIlxuIjsgIyBwYXRj
aCgxKSBleHBlY3RzIGFuIGV4dHJhIHRyYWlsaW5nIG5ld2xpbmUuCiB9CiAKIHN1YiBnaXRDb25m
aWcoJCkKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3QucGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGlsc191bml0dGVzdC5wbAkocmV2
aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHNfdW5pdHRlc3QucGwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjk0IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgQ29weXJp
Z2h0IChDKSAyMDA5IENocmlzIEplcmRvbmVrIChjaHJpcy5qZXJkb25la0BnbWFpbC5jb20pCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVW5pdCB0ZXN0cyBvZiBWQ1NVdGlscy5wbS4KKwordXNl
IFRlc3Q6OlNpbXBsZSB0ZXN0cyA9PiA3OworCit1c2UgVkNTVXRpbHM7CisKKyMgZml4Q2hhbmdl
TG9nUGF0Y2gKKyMKKyMgVGhlIHNvdXJjZSBDaGFuZ2VMb2cgZm9yIHRoZXNlIHRlc3RzIGlzIHRo
ZSBmb2xsb3dpbmc6CisjIAorIyAyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJl
c3M+CisjIAorIyAgICAgICAgIFJldmlld2VkIGJ5IFJheS4KKyMgCisjICAgICAgICAgQ2hhbmdl
ZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMi4KKyMgCisjICAgICAgICAgKiBGaWxlOgorIyAgICAg
ICAgICogRmlsZTI6CisjIAorIyAyMDA5LTEyLTIxICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJl
c3M+CisjIAorIyAgICAgICAgIFJldmlld2VkIGJ5IFJheS4KKyMgCisjICAgICAgICAgQ2hhbmdl
ZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMS4KKyMgCisjICAgICAgICAgKiBGaWxlOgorIyAgICAg
ICAgICogRmlsZTI6CisKK215ICR0aXRsZTsKK215ICRpbjsKK215ICRvdXQ7CisKKyMgTmV3IHRl
c3QKKyR0aXRsZSA9ICJmaXhDaGFuZ2VMb2dQYXRjaDogW25vIGNoYW5nZV0gRmlyc3QgbGluZSBp
cyBuZXcgbGluZS4iOworCiskaW4gPSA8PCdFTkQnOworLS0tIENoYW5nZUxvZworKysrIENoYW5n
ZUxvZworQEAgLTEsMyArMSwxMSBAQAorKzIwMDktMTItMjIgIEJvYiAgPGJvYkBlbWFpbC5hZGRy
ZXNzPgorKworKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorKworKyAgICAgICAgQ2hhbmdlZCBz
b21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKworKyAgICAgICAgKiBGaWxlOgorKworIDIw
MDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKyAgICAgICAgIFJldmll
d2VkIGJ5IFJheS4KK0VORAorCitvayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVxICRpbiwgJHRp
dGxlKTsKKworIyBOZXcgdGVzdAorJHRpdGxlID0gImZpeENoYW5nZUxvZ1BhdGNoOiBbbm8gY2hh
bmdlXSBObyBkYXRlIHN0cmluZy4iOworCiskaW4gPSA8PCdFTkQnOworLS0tIENoYW5nZUxvZwor
KysrIENoYW5nZUxvZworQEAgLTYsNiArNiw3IEBACisgCisgICAgICAgICAqIEZpbGU6CisgICAg
ICAgICAqIEZpbGUyOgorKyAgICAgICAgKiBGaWxlMzoKKyAKKyAyMDA5LTEyLTIxICBBbGljZSAg
PGFsaWNlQGVtYWlsLmFkZHJlc3M+CisgCitFTkQKKworb2soZml4Q2hhbmdlTG9nUGF0Y2goJGlu
KSBlcSAkaW4sICR0aXRsZSk7CisKKyMgTmV3IHRlc3QKKyR0aXRsZSA9ICJmaXhDaGFuZ2VMb2dQ
YXRjaDogW25vIGNoYW5nZV0gTmV3IGVudHJ5IGluc2VydGVkIGluIG1pZGRsZS4iOworCiskaW4g
PSA8PCdFTkQnOworLS0tIENoYW5nZUxvZworKysrIENoYW5nZUxvZworQEAgLTExLDYgKzExLDE0
IEBACisgCisgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisgCisrICAgICAgICBDaGFuZ2VkIHNv
bWUgbW9yZSBjb2RlIG9uIDIwMDktMTItMjEuCisrCisrICAgICAgICAqIEZpbGU6CisrCisrMjAw
OS0xMi0yMSAgQWxpY2UgIDxhbGljZUBlbWFpbC5hZGRyZXNzPgorKworKyAgICAgICAgUmV2aWV3
ZWQgYnkgUmF5LgorKworICAgICAgICAgQ2hhbmdlZCBzb21lIGNvZGUgb24gMjAwOS0xMi0yMS4K
KyAKKyAgICAgICAgICogRmlsZToKK0VORAorCitvayhmaXhDaGFuZ2VMb2dQYXRjaCgkaW4pIGVx
ICRpbiwgJHRpdGxlKTsKKworIyBOZXcgdGVzdAorJHRpdGxlID0gImZpeENoYW5nZUxvZ1BhdGNo
OiBMZWFkaW5nIGNvbnRleHQgaW5jbHVkZXMgZmlyc3QgbGluZS4iOworCiskaW4gPSA8PCdFTkQn
OworLS0tIENoYW5nZUxvZworKysrIENoYW5nZUxvZworQEAgLTEsNSArMSwxMyBAQAorIDIwMDkt
MTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKyAKKysgICAgICAgIFJldmlld2Vk
IGJ5IFN1ZS4KKysKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0y
Mi4KKysKKysgICAgICAgICogRmlsZToKKysKKysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVt
YWlsLmFkZHJlc3M+CisrCisgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisgCisgICAgICAgICBD
aGFuZ2VkIHNvbWUgY29kZSBvbiAyMDA5LTEyLTIyLgorRU5ECisKKyRvdXQgPSA8PCdFTkQnOwor
LS0tIENoYW5nZUxvZworKysrIENoYW5nZUxvZworQEAgLTEsMyArMSwxMSBAQAorKzIwMDktMTIt
MjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKysgICAgICAgIFJldmlld2VkIGJ5
IFN1ZS4KKysKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0yMi4K
KysKKysgICAgICAgICogRmlsZToKKysKKyAyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVtYWls
LmFkZHJlc3M+CisgCisgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCitFTkQKKworb2soZml4Q2hh
bmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGl0bGUpOworCisjIE5ldyB0ZXN0CiskdGl0bGUg
PSAiZml4Q2hhbmdlTG9nUGF0Y2g6IExlYWRpbmcgY29udGV4dCBkb2VzIG5vdCBpbmNsdWRlIGZp
cnN0IGxpbmUuIjsKKworJGluID0gPDwnRU5EJzsKK0BAIC0yLDYgKzIsMTQgQEAKKyAKKyAgICAg
ICAgIFJldmlld2VkIGJ5IFJheS4KKyAKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUg
b24gMjAwOS0xMi0yMi4KKysKKysgICAgICAgICogRmlsZToKKysKKysyMDA5LTEyLTIyICBBbGlj
ZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrCisrICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisr
CisgICAgICAgICBDaGFuZ2VkIHNvbWUgY29kZSBvbiAyMDA5LTEyLTIyLgorIAorICAgICAgICAg
KiBGaWxlOgorRU5ECisKKyRvdXQgPSA8PCdFTkQnOworQEAgLTEsMyArMSwxMSBAQAorKzIwMDkt
MTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKysgICAgICAgIFJldmlld2Vk
IGJ5IFJheS4KKysKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0y
Mi4KKysKKysgICAgICAgICogRmlsZToKKysKKyAyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVt
YWlsLmFkZHJlc3M+CisgCisgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCitFTkQKKworb2soZml4
Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGl0bGUpOworCisjIE5ldyB0ZXN0CiskdGl0
bGUgPSAiZml4Q2hhbmdlTG9nUGF0Y2g6IE5vbi1jb25zZWN1dGl2ZSBsaW5lIGFkZGl0aW9ucy4i
OworCisjIFRoaXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgaWYgdGhlIG5ldyBDaGFuZ2VMb2cg
ZW50cnkgaW5jbHVkZXMKKyMgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaW4gdGhlIGZpcnN0IGJsYW5r
IGxpbmUgYnV0IG5vdCB0aGUgc2Vjb25kLgorIyBBIGRpZmYgY29tbWFuZCBjYW4gdGhlbiBtYXRj
aCB0aGUgc2Vjb25kIGJsYW5rIGxpbmUgb2YgdGhlIG5ldworIyBDaGFuZ2VMb2cgZW50cnkgd2l0
aCB0aGUgZmlyc3QgYmxhbmsgbGluZSBvZiB0aGUgb2xkLgorIyBUaGUgc3ZuIGRpZmYgY29tbWFu
ZCB3aXRoIHRoZSBkZWZhdWx0IC0tZGlmZi1jbWQgaGFzIGRvbmUgdGhpcy4KKyRpbiA9IDw8J0VO
RCc7CitAQCAtMSw1ICsxLDExIEBACisgMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5h
ZGRyZXNzPgorKyA8cHJldGVuZC13aGl0ZXNwYWNlPgorKyAgICAgICAgUmV2aWV3ZWQgYnkgUmF5
LgorIAorKyAgICAgICAgQ2hhbmdlZCBzb21lIG1vcmUgY29kZSBvbiAyMDA5LTEyLTIyLgorKwor
KzIwMDktMTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKyAgICAgICAgIFJl
dmlld2VkIGJ5IFJheS4KKyAKKyAgICAgICAgIENoYW5nZWQgc29tZSBjb2RlIG9uIDIwMDktMTIt
MjIuCitFTkQKKworJG91dCA9IDw8J0VORCc7CitAQCAtMSwzICsxLDkgQEAKKysyMDA5LTEyLTIy
ICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJlc3M+CisrIDxwcmV0ZW5kLXdoaXRlc3BhY2U+Cisr
ICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisrCisrICAgICAgICBDaGFuZ2VkIHNvbWUgbW9yZSBj
b2RlIG9uIDIwMDktMTItMjIuCisrCisgMjAwOS0xMi0yMiAgQWxpY2UgIDxhbGljZUBlbWFpbC5h
ZGRyZXNzPgorIAorICAgICAgICAgUmV2aWV3ZWQgYnkgUmF5LgorRU5ECisKK29rKGZpeENoYW5n
ZUxvZ1BhdGNoKCRpbikgZXEgJG91dCwgJHRpdGxlKTsKKworIyBOZXcgdGVzdAorJHRpdGxlID0g
ImZpeENoYW5nZUxvZ1BhdGNoOiBBZGRpdGlvbmFsIGVkaXRzIGFmdGVyIG5ldyBlbnRyeS4iOwor
CiskaW4gPSA8PCdFTkQnOworQEAgLTIsMTAgKzIsMTcgQEAKKyAKKyAgICAgICAgIFJldmlld2Vk
IGJ5IFJheS4KKyAKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0y
Mi4KKysKKysgICAgICAgICogRmlsZToKKysKKysyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVt
YWlsLmFkZHJlc3M+CisrCisrICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisrCisgICAgICAgICBD
aGFuZ2VkIHNvbWUgY29kZSBvbiAyMDA5LTEyLTIyLgorIAorICAgICAgICAgKiBGaWxlOgorLSAg
ICAgICAgKiBGaWxlMjoKKyAKKyAyMDA5LTEyLTIxICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJl
c3M+CisgCitFTkQKKworJG91dCA9IDw8J0VORCc7CitAQCAtMSwxMSArMSwxOCBAQAorKzIwMDkt
MTItMjIgIEFsaWNlICA8YWxpY2VAZW1haWwuYWRkcmVzcz4KKysKKysgICAgICAgIFJldmlld2Vk
IGJ5IFJheS4KKysKKysgICAgICAgIENoYW5nZWQgc29tZSBtb3JlIGNvZGUgb24gMjAwOS0xMi0y
Mi4KKysKKysgICAgICAgICogRmlsZToKKysKKyAyMDA5LTEyLTIyICBBbGljZSAgPGFsaWNlQGVt
YWlsLmFkZHJlc3M+CisgCisgICAgICAgICBSZXZpZXdlZCBieSBSYXkuCisgCisgICAgICAgICBD
aGFuZ2VkIHNvbWUgY29kZSBvbiAyMDA5LTEyLTIyLgorIAorICAgICAgICAgKiBGaWxlOgorLSAg
ICAgICAgKiBGaWxlMjoKKyAKKyAyMDA5LTEyLTIxICBBbGljZSAgPGFsaWNlQGVtYWlsLmFkZHJl
c3M+CisgCitFTkQKKworb2soZml4Q2hhbmdlTG9nUGF0Y2goJGluKSBlcSAkb3V0LCAkdGl0bGUp
OworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzX3Vu
aXR0ZXN0LnBsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFdlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXQtcGVybAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0LXBlcmwJKHJldmlzaW9uIDApCisrKyBXZWJLaXRU
b29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0LXBlcmwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUg
QEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgQ2hyaXMgSmVyZG9u
ZWsgKGNocmlzLmplcmRvbmVrQGdtYWlsLmNvbSkKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBS
dW5zIHVuaXQgdGVzdHMgb2YgV2ViS2l0IFBlcmwgY29kZS4KKwordXNlIFRlc3Q6Okhhcm5lc3M7
CisKK3J1bnRlc3RzKCJWQ1NVdGlsc191bml0dGVzdC5wbCIpOwoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdC1wZXJsCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>
<flag name="review"
          id="27739"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="27740"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>