<?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>14590</bug_id>
          
          <creation_ts>2007-07-12 01:52:56 -0700</creation_ts>
          <short_desc>svn-create-patch fails when svn mv is used on directory trees</short_desc>
          <delta_ts>2018-09-06 05:44:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>523.x (Safari 3)</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>12023</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>jbedard</cc>
    
    <cc>pkasting</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>4964</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-12 01:52:56 -0700</bug_when>
    <thetext>The most simple example is the following:
svn mv Bakefiles Foofiles
WebKitTools/Scripts/svn-create-patch

The resulting patch will remove all of Bakefiles but will not create Foofiles or any other commands. So it is highly likely svn-create-patch can&apos;t track or wrongly tracks moving.

WebKit is from ToT and version of svn is Version 1.4.3 (r23084)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4961</commentid>
    <comment_count>1</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-12 02:16:05 -0700</bug_when>
    <thetext>I had a look at prepare-Changelog as it reicgnized the copy/move and it invokes svn info on candidates:

svn st
A  +   Blafiles
D      Bakefiles
D      Bakefiles/update-file-lists.py
D      Bakefiles/ChangeLog
D      Bakefiles/Bakefiles.bkgen
D      Bakefiles/Readme.txt
D      Bakefiles/presets.bkl

holger-freythers-computer:/space/hacking/webkit/WebKit-svn ich$ LC_ALL=C svn info Blafiles/
Path: Blafiles
URL: http://svn.webkit.org/repository/webkit/trunk/Blafiles
Repository Root: http://svn.webkit.org/repository/webkit
Repository UUID: 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Revision: 24235
Node Kind: directory
Schedule: add
Copied From URL: http://svn.webkit.org/repository/webkit/trunk/Bakefiles
Copied From Rev: 24235
Last Changed Author: ddkilzer
Last Changed Rev: 17735
Last Changed Date: 2006-11-11 22:28:20 +0100 (Sat, 11 Nov 2006)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4959</commentid>
    <comment_count>2</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-12 02:17:41 -0700</bug_when>
    <thetext>And reading the header of svn-apply reveals the following:

# Missing features:
#
#   Handle property changes.
#   Handle copied and moved directories (would require patches made by svn-create-patch).
#   When doing a removal, check that old file matches what&apos;s being removed.
#   Notice a patch that&apos;s being applied at the &quot;wrong level&quot; and make it work anyway.
#   Do a dry run on the whole patch and don&apos;t do anything if part of the patch is
#       going to fail (probably too strict unless we exclude ChangeLog).

So it is known that svn-create-patch doesn&apos;t track moved directories.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4779</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-07-14 13:11:55 -0700</bug_when>
    <thetext>How do you propose handling moved (or copied) directories in svn-create-patch (and svn-apply and svn-unapply)?

Handling copied/moved files was fixed in r18513 (Bug 12023) by doing the following:

- For files created by &apos;svn cp&apos;, extra information was added to the patch (in a way that plain old patch(1) would ignore) that svn-apply and svn-unapply read and &quot;do the right thing&quot; with.  This generates a single &apos;add file&apos; patch.

- For files created by &apos;svn mv&apos;, the extra information is added in the same way as &apos;svn cp&apos;.  Two patches get created:  one to add the moved file (with the extra info), and one to delete the old file. 

- In the special case where the moved or copied file also had local modifications, a *third* patch is created (after the initial add) which captures the local changes.

http://trac.webkit.org/projects/webkit/changeset/18513

For moved or copied directories, I see two approaches:

1. For each file in the moved/copied directory hierarchy, do the same thing for an individual moved/copied file.  Then svn-appy and svn-unapply would have to &quot;recognize&quot; that an entire directory tree had changed.

2. Come up with a way to describe the directory tree move/copy so that patch(1) would ignore it, but svn-appy and svn-unapply would handle it properly.

Any ideas or suggestions?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4780</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-07-14 13:13:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; - In the special case where the moved or copied file also had local
&gt; modifications, a *third* patch is created (after the initial add) which
&gt; captures the local changes.

For &apos;svn cp&apos;, a *second* file is added, while for &apos;svn mv&apos; it&apos;s a *third* file.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4781</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-07-14 13:14:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; 1. For each file in the moved/copied directory hierarchy, do the same thing for
&gt; an individual moved/copied file.  Then svn-appy and svn-unapply would have to
&gt; &quot;recognize&quot; that an entire directory tree had changed.

Obviously this doesn&apos;t scale well at all, so it should not be done.

&gt; 2. Come up with a way to describe the directory tree move/copy so that patch(1)
&gt; would ignore it, but svn-appy and svn-unapply would handle it properly.

This is the better approach.  Although patch(1) would ignore this, it&apos;s probably okay because a directory move/rename is really outside the scope of what patch(1) was intended to be used for.  The only question is:  What should this look like?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160547</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2009-11-04 12:05:59 -0800</bug_when>
    <thetext>svn-create-patch has changed a lot in the past few years.  Is this still an issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160581</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-11-04 13:09:38 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; svn-create-patch has changed a lot in the past few years.  Is this still an
&gt; issue?

Yes.

$ svn mv WebKitTools/mangleme WebKitTools/mangleyou
A         WebKitTools/mangleyou
D         WebKitTools/mangleme/LICENSE
D         WebKitTools/mangleme/tags.h
D         WebKitTools/mangleme/mangle.cgi.c
D         WebKitTools/mangleme/remangle.cgi.c
D         WebKitTools/mangleme/Makefile
D         WebKitTools/mangleme/README
D         WebKitTools/mangleme

$ ./WebKitTools/Scripts/svn-create-patch WebKitTools &gt; diff

$ svn revert --recursive WebKitTools
Reverted &apos;WebKitTools/mangleme&apos;
Reverted &apos;WebKitTools/mangleme/LICENSE&apos;
Reverted &apos;WebKitTools/mangleme/tags.h&apos;
Reverted &apos;WebKitTools/mangleme/mangle.cgi.c&apos;
Reverted &apos;WebKitTools/mangleme/remangle.cgi.c&apos;
Reverted &apos;WebKitTools/mangleme/Makefile&apos;
Reverted &apos;WebKitTools/mangleme/README&apos;
Reverted &apos;WebKitTools/mangleyou&apos;

$ rm -rf WebKitTools/mangleyou

$ ./WebKitTools/Scripts/svn-apply diff
patching file WebKitTools/mangleme/LICENSE
D         WebKitTools/mangleme/LICENSE
patching file WebKitTools/mangleme/Makefile
D         WebKitTools/mangleme/Makefile
patching file WebKitTools/mangleme/README
D         WebKitTools/mangleme/README
patching file WebKitTools/mangleme/mangle.cgi.c
D         WebKitTools/mangleme/mangle.cgi.c
patching file WebKitTools/mangleme/remangle.cgi.c
D         WebKitTools/mangleme/remangle.cgi.c
patching file WebKitTools/mangleme/tags.h
D         WebKitTools/mangleme/tags.h
D         WebKitTools/mangleme

$ svn stat WebKitTools
D       WebKitTools/mangleme
D       WebKitTools/mangleme/LICENSE
D       WebKitTools/mangleme/tags.h
D       WebKitTools/mangleme/mangle.cgi.c
D       WebKitTools/mangleme/remangle.cgi.c
D       WebKitTools/mangleme/Makefile
D       WebKitTools/mangleme/README

As you can see, the patch only contains the removed files.  It doesn&apos;t contain the &quot;added&quot; files in the renamed directory, and it doesn&apos;t even &quot;understand&quot; that the directory was renamed (with no other changes).

Because git only cares about files (and not directories), doing the same thing in git results in just a &quot;rename&quot; patch for each file moved:

$ git mv WebKitTools/mangleme WebKitTools/mangleyou

$ git status
# On branch master
# Your branch is ahead of &apos;origin/master&apos; by 1 commit.
#
# Changes to be committed:
#   (use &quot;git reset HEAD &lt;file&gt;...&quot; to unstage)
#
#	renamed:    WebKitTools/mangleme/LICENSE -&gt; WebKitTools/mangleyou/LICENSE
#	renamed:    WebKitTools/mangleme/Makefile -&gt; WebKitTools/mangleyou/Makefile
#	renamed:    WebKitTools/mangleme/README -&gt; WebKitTools/mangleyou/README
#	renamed:    WebKitTools/mangleme/mangle.cgi.c -&gt; WebKitTools/mangleyou/mangle.cgi.c
#	renamed:    WebKitTools/mangleme/remangle.cgi.c -&gt; WebKitTools/mangleyou/remangle.cgi.c
#	renamed:    WebKitTools/mangleme/tags.h -&gt; WebKitTools/mangleyou/tags.h

If we make svn-create-patch mimic what git does, then we&apos;d have a series of rename patches for each file (although svn-create-patch does those differently--it puts a full delete and a full add patch in for each file, plus a third patch if the source was changed after the move).  However, you still have to have some logic in svn-apply (and svn-unapply) that can figure out that we renamed an entire directory before it applies the individual patches.

One approach would be to add a special patch entry (similar to a property change &quot;patch&quot;, except it would denote directory moves/renames) that does nothing when used with patch(1), but provides a hint to svn-apply and svn-unapply that whole directories were renamed or moved.  Then we could &quot;ignore&quot; the whole-file-delete and whole-file-add patches and only apply the &quot;changes-after-move&quot; patch for any given file under that directory.

Does that make any sense?  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160582</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-11-04 13:16:24 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; If we make svn-create-patch mimic what git does, then we&apos;d have a series of
&gt; rename patches for each file (although svn-create-patch does those
&gt; differently--it puts a full delete and a full add patch in for each file, plus
&gt; a third patch if the source was changed after the move).  However, you still
&gt; have to have some logic in svn-apply (and svn-unapply) that can figure out that
&gt; we renamed an entire directory before it applies the individual patches.
&gt; 
&gt; One approach would be to add a special patch entry (similar to a property
&gt; change &quot;patch&quot;, except it would denote directory moves/renames) that does
&gt; nothing when used with patch(1), but provides a hint to svn-apply and
&gt; svn-unapply that whole directories were renamed or moved.  Then we could
&gt; &quot;ignore&quot; the whole-file-delete and whole-file-add patches and only apply the
&gt; &quot;changes-after-move&quot; patch for any given file under that directory.

BTW, the reason the &quot;whole-file-delete&quot; and &quot;whole-file-add&quot; patches (followed optionally by a &quot;changes-after-move&quot; patch) are included in the output of svn-create-patch was so that if you don&apos;t have svn-apply available, you have some chance of still using the patch file with the patch(1) command.

In practice, patch(1) sometimes chokes when it has a patch that creates a new file, followed immediately by a second patch that changes that file.  (I just tried it on Snow Leopard and my test patch applied without any issues, so maybe this issue was fixed or I misremembered the problem.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456149</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-03 04:52:10 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #5)
&gt; (In reply to comment #3)
&gt; &gt; 1. For each file in the moved/copied directory hierarchy, do the same thing for
&gt; &gt; an individual moved/copied file.  Then svn-appy and svn-unapply would have to
&gt; &gt; &quot;recognize&quot; that an entire directory tree had changed.
&gt; 
&gt; Obviously this doesn&apos;t scale well at all, so it should not be done.
&gt; 
&gt; &gt; 2. Come up with a way to describe the directory tree move/copy so that patch(1)
&gt; &gt; would ignore it, but svn-appy and svn-unapply would handle it properly.
&gt; 
&gt; This is the better approach.  Although patch(1) would ignore this, it&apos;s
&gt; probably okay because a directory move/rename is really outside the scope of
&gt; what patch(1) was intended to be used for.  The only question is:  What
&gt; should this look like?

I&apos;ve been thinking about this again since I started cleaning up projects for tidy-Xcode-project-file (see Bug 188754).

The Tools/TestWebKitAPI/Tests/WTF/BlockPtr.mm source file really should be in Tools/TestWebKitAPI/Tests/WTF/ns/, and that directory should be named /cocoa/ instead of /ns/, so I made these changes in an svn repo (including a directory rename) that looked like this:

$ svn mv Tools/TestWebKitAPI/Tests/WTF/ns Tools/TestWebKitAPI/Tests/WTF/cocoa
$ svn mv Tools/TestWebKitAPI/Tests/WTF/BlockPtr.mm Tools/TestWebKitAPI/Tests/WTF/cocoa/BlockPtr.mm
$ vi Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
$ svn stat Tools
M       Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
D       Tools/TestWebKitAPI/Tests/WTF/BlockPtr.mm
        &gt; moved to Tools/TestWebKitAPI/Tests/WTF/cocoa/BlockPtr.mm
A  +    Tools/TestWebKitAPI/Tests/WTF/cocoa
        &gt; moved from Tools/TestWebKitAPI/Tests/WTF/ns
A  +    Tools/TestWebKitAPI/Tests/WTF/cocoa/BlockPtr.mm
        &gt; moved from Tools/TestWebKitAPI/Tests/WTF/BlockPtr.mm
D       Tools/TestWebKitAPI/Tests/WTF/ns
        &gt; moved to Tools/TestWebKitAPI/Tests/WTF/cocoa

However, svn-create-patch could not handle this because it currently doesn&apos;t &quot;see&quot; the file (RetainPtr.mm) inside the moved ns -&gt; cocoa directory, and plain old patch(1) doesn&apos;t have a way to describe moved directories anyway.

I think the only way to support moved directories is actually #1 above.

The reason is that if you do #2, these are the challenges:

- It will never work with plain old patch(1).
- If you try to apply the patch and just rename the directory without checking which files are in it, then you run the risk of performing the rename after new files have been added or existing files have been changed or deleted.
- If you look at creating a patch from the &quot;git&quot; approach, it&apos;s all about changes to individual files, so enumerating all the moved files under the renamed/moved directory is the approach that is required anyway if you want to be able to make the equivalent changes in a git repo.

Thus the challenges with implementing #1 are:

- When creating a patch from svn, make sure the patch includes all the files inside the moved directory structure (for when applying to a git repo or to a clean svn repo).
- Changes to moved files also need to be captured (although we should get that &quot;for free&quot; after enumerating the list of files and creating a patch).
- Each patch for an individual file needs to capture it&apos;s original moved-from location (although we should have that information from the history of the moved directory).

Note that when applying a patch created from a git-svn repo to an svn repo, it&apos;s not strictly necessary to recreate any directory moves because you just can move all the files individually (with their history in tact).  It may be strictly less efficient, but you also don&apos;t have to worry about modifications to the directory structure (like files being added, changed or deleted) since the patch was created, since those will &quot;fall out&quot; and be obvious after the patch is applied (resulting in conflicts or files left in the &quot;moved&quot; directory structure).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456150</commentid>
    <comment_count>10</comment_count>
      <attachid>348766</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-03 04:53:46 -0700</bug_when>
    <thetext>Created attachment 348766
Patch v1 - WIP

This needs more testing.  It works for the simple example in Comment #9, but I haven&apos;t tried moving multiple directories into one another, or making modifications to moved files (that were inside or outside the moved directory structure).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456151</commentid>
    <comment_count>11</comment_count>
      <attachid>348766</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-03 04:58:55 -0700</bug_when>
    <thetext>Comment on attachment 348766
Patch v1 - WIP

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

&gt; Tools/Scripts/svn-create-patch:355
&gt; +        print STDERR &quot;Performing \&quot;svn diff --diff-cmd diff -x -$diffOptions &apos;$escapedDirectory&apos;\&quot;\n&quot; if $verbose;
&gt; +        open DIFF, &quot;svn diff --diff-cmd diff -x -$diffOptions &apos;$escapedDirectory&apos; |&quot; or die;

The funny part about this command is that it simply lists the new files in the moved directory using patch headers with empty bodies:

$ svn diff --diff-cmd diff -x -uap &apos;Tools/TestWebKitAPI/Tests/WTF/cocoa&apos;
Index: Tools/TestWebKitAPI/Tests/WTF/cocoa/BlockPtr.mm
===================================================================
Index: Tools/TestWebKitAPI/Tests/WTF/cocoa/RetainPtr.mm
===================================================================

I&apos;m not sure if this is documented or expected behavior, but it was the best way I found to enumerate the files in the moved directory (both new and moved-from-elsewhere).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456192</commentid>
    <comment_count>12</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-03 11:10:19 -0700</bug_when>
    <thetext>*** Bug 167906 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456198</commentid>
    <comment_count>13</comment_count>
      <attachid>348782</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-03 11:24:22 -0700</bug_when>
    <thetext>Created attachment 348782
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456200</commentid>
    <comment_count>14</comment_count>
      <attachid>348784</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-03 11:32:52 -0700</bug_when>
    <thetext>Created attachment 348784
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456201</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-03 11:35:35 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #14)
&gt; Created attachment 348784 [details]
&gt; Patch v3

Just updated the ChangeLog and the license header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456219</commentid>
    <comment_count>16</comment_count>
      <attachid>348784</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-09-03 15:02:22 -0700</bug_when>
    <thetext>Comment on attachment 348784
Patch v3

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

r=me

&gt; Tools/Scripts/svn-create-patch:356
&gt; +            if (m/^Index: (.*)$/) {

This regular expression does not account for Windows CRLF line endings and will capture the CR. We should make use of VCSUtils::parseDiffStartLine() (it parses an SVN diff start and a Git diff start line in that order). If you do not like the idea of it falling back to trying to parse a Git diff start line then we can extract out the SVN parsing into an exported helper, say parseSvnDiffStartLine(), and implement parseDiffStartLine() in terms of it and then make use of parseSvnDiffStartLine() here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456471</commentid>
    <comment_count>17</comment_count>
      <attachid>348853</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-04 15:07:47 -0700</bug_when>
    <thetext>Created attachment 348853
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456491</commentid>
    <comment_count>18</comment_count>
      <attachid>348862</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-04 16:01:18 -0700</bug_when>
    <thetext>Created attachment 348862
Patch v5

Fixed comment in parseDiffStartLine.pl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456848</commentid>
    <comment_count>19</comment_count>
      <attachid>348961</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-05 13:51:27 -0700</bug_when>
    <thetext>Created attachment 348961
Patch v6

Updated text in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456994</commentid>
    <comment_count>20</comment_count>
      <attachid>348961</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-09-05 22:04:55 -0700</bug_when>
    <thetext>Comment on attachment 348961
Patch v6

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

&gt; Tools/ChangeLog:12
&gt; +        when parsing git patches using `git diff --no-prefix` non-native

git  =&gt; Git

This sentence does not read well. I think it needs a “that have non-native...”

(“git” is the name of a command line tool. The proper noun “Git” refers to the version control system. This sentence seems to refer to the latter.)

&gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffStartLine.pl:39
&gt; +my @testCases = (

For your consideration, I suggest that we order the keys in these test cases such that the keys testName and input (in that order) come before expected. The bandit of this is that for and English speaker they first read testName and gain an understanding of what the test is testing then they read the value of key input and see the diff line that is being tested and finally they see the expected result. This makes it straightforward to read and understand each test.

Another benefit is that it would make the order of the keys consistent with the ordering used in other Perl tests.

&gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffStartLine.pl:43
&gt; +    isGit =&gt; 1,

When I first read the name of this key I got the impression that this was part of the expected result as opposed to forcing Git parsing of the input. Can we come up with a more descriptive name for this? Maybe parseAsGitDiffStartLine? If we do decide to rename this then we should similarly rename isSvn.

&gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffStartLine.pl:45
&gt; +    testName =&gt; &quot;Git&quot;,

Can we come up with a more descriptive name for this test case? Maybe “Git simple”? Or “Git prefixed modified file”?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1457035</commentid>
    <comment_count>21</comment_count>
      <attachid>348961</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-06 05:38:21 -0700</bug_when>
    <thetext>Comment on attachment 348961
Patch v6

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

&gt;&gt; Tools/ChangeLog:12
&gt;&gt; +        when parsing git patches using `git diff --no-prefix` non-native
&gt; 
&gt; git  =&gt; Git
&gt; 
&gt; This sentence does not read well. I think it needs a “that have non-native...”
&gt; 
&gt; (“git” is the name of a command line tool. The proper noun “Git” refers to the version control system. This sentence seems to refer to the latter.)

Fixed.  Thanks!

&gt;&gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffStartLine.pl:39
&gt;&gt; +my @testCases = (
&gt; 
&gt; For your consideration, I suggest that we order the keys in these test cases such that the keys testName and input (in that order) come before expected. The bandit of this is that for and English speaker they first read testName and gain an understanding of what the test is testing then they read the value of key input and see the diff line that is being tested and finally they see the expected result. This makes it straightforward to read and understand each test.
&gt; 
&gt; Another benefit is that it would make the order of the keys consistent with the ordering used in other Perl tests.

Changed order to:
    testName
    input
    expected
    isGit/isSvn [renamed below]
    isValid

&gt;&gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffStartLine.pl:43
&gt;&gt; +    isGit =&gt; 1,
&gt; 
&gt; When I first read the name of this key I got the impression that this was part of the expected result as opposed to forcing Git parsing of the input. Can we come up with a more descriptive name for this? Maybe parseAsGitDiffStartLine? If we do decide to rename this then we should similarly rename isSvn.

Changed to:
    isGitDiffStartLine/isSvnDiffStartLine

&gt;&gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseDiffStartLine.pl:45
&gt;&gt; +    testName =&gt; &quot;Git&quot;,
&gt; 
&gt; Can we come up with a more descriptive name for this test case? Maybe “Git simple”? Or “Git prefixed modified file”?

Changed to &quot;Git diff start line&quot;, and changed other test names similarly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1457036</commentid>
    <comment_count>22</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-06 05:39:18 -0700</bug_when>
    <thetext>Committed r235733: &lt;https://trac.webkit.org/changeset/235733&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1457037</commentid>
    <comment_count>23</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-06 05:41:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/44178718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1457038</commentid>
    <comment_count>24</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2018-09-06 05:44:05 -0700</bug_when>
    <thetext>Perhaps this goes without saying, but this fix also works for copied directory paths using `svn cp`.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348766</attachid>
            <date>2018-09-03 04:53:46 -0700</date>
            <delta_ts>2018-09-03 11:24:03 -0700</delta_ts>
            <desc>Patch v1 - WIP</desc>
            <filename>bug-14590-v1.diff</filename>
            <type>text/plain</type>
            <size>3399</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gJKHJldmlzaW9uIDIzNTU4NCkKKysrIFRvb2xzL1Nj
cmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDcgQEAK
ICMgICBIYW5kbGVzIGJpbmFyeSBmaWxlcyAoZW5jb2RlZCBhcyBhIGJhc2U2NCBjaHVuayBvZiB0
ZXh0KS4KICMgICBTb3J0cyB0aGUgZGlmZnMgYWxwaGFiZXRpY2FsbHkgYnkgdGV4dCBmaWxlcywg
dGhlbiBiaW5hcnkgZmlsZXMuCiAjICAgSGFuZGxlcyBjb3BpZWQgYW5kIG1vdmVkIGZpbGVzLgot
IwotIyBNaXNzaW5nIGZlYXR1cmVzOgotIwotIyAgIEhhbmRsZSBjb3BpZWQgYW5kIG1vdmVkIGRp
cmVjdG9yaWVzLgorIyAgIEhhbmRsZXMgY29waWVkIGFuZCBtb3ZlZCBkaXJlY3Rvcmllcy4KIAog
dXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKQEAgLTI1Miw2ICsyNDksOCBAQAogICAgIG15ICRw
YXRjaCA9ICIiOwogICAgIG15ICRpc0FkZGl0aW9uV2l0aEhpc3RvcnkgPSAkZmlsZURhdGEtPntt
b2RpZmljYXRpb25UeXBlfSBlcSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CiAgICAgaWYgKCRpc0Fk
ZGl0aW9uV2l0aEhpc3RvcnkpIHsKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvIGZvciBhIG1vdmVk
IGRpcmVjdG9yeSBzaW5jZSBlYWNoIG1vdmVkIGZpbGUgaXMgaGFuZGxlZCBpbmRpdmlkdWFsbHku
CisgICAgICAgIHJldHVybiBpZiAtZCAkZmlsZURhdGEtPntwYXRofTsKICAgICAgICAgbWFudWZh
Y3R1cmVQYXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvcnkoJGZpbGVEYXRhLCAkcHJlZml4KTsKICAg
ICB9CiAKQEAgLTI4Myw2ICsyODIsNyBAQAogICAgIG15ICV0ZXN0RGlyZWN0b3JpZXMgPSBtYXAg
eyAkXyA9PiAxIH0gcXcoTGF5b3V0VGVzdHMpOwogICAgIG15ICRlc2NhcGVkU3RhdFBhdGggPSBl
c2NhcGVTdWJ2ZXJzaW9uUGF0aCgkc3RhdFBhdGgpOwogICAgIG15IEBkZWxldGVkRmlsZXM7Cisg
ICAgbXkgQGFkZGl0aW9uV2l0aEhpc3RvcnlEaXJlY3RvcmllczsKIAogICAgIHByaW50IFNUREVS
UiAiUGVyZm9ybWluZyBcInN2biBzdGF0ICckZXNjYXBlZFN0YXRQYXRoJ1wiXG4iIGlmICR2ZXJi
b3NlOwogCkBAIC0zMDUsOCArMzA1LDYgQEAKICAgICAgICAgICAgICRwYXRoID0gc3Vic3RyKCRs
aW5lLCA3KTsKICAgICAgICAgfQogCi0gICAgICAgIG5leHQgaWYgLWQgJHBhdGg7Ci0KICAgICAg
ICAgbXkgJG1vZGlmaWNhdGlvblR5cGUgPSBmaW5kTW9kaWZpY2F0aW9uVHlwZSgkc3RhdCk7CiAK
ICAgICAgICAgaWYgKCRtb2RpZmljYXRpb25UeXBlIGVxICJtaXNzaW5nIikgewpAQCAtMzQzLDEw
ICszNDEsMzUgQEAKICAgICAgICAgICAgIG15ICgkc291cmNlRmlsZSwgJHNvdXJjZVJldmlzaW9u
KSA9IGZpbmRTb3VyY2VGaWxlQW5kUmV2aXNpb24oJHBhdGgpOwogICAgICAgICAgICAgJGRpZmZG
aWxlcy0+eyRwYXRofS0+e3NvdXJjZUZpbGV9ID0gJHNvdXJjZUZpbGU7CiAgICAgICAgICAgICAk
ZGlmZkZpbGVzLT57JHBhdGh9LT57c291cmNlUmV2aXNpb259ID0gJHNvdXJjZVJldmlzaW9uOwor
ICAgICAgICAgICAgcHVzaChAYWRkaXRpb25XaXRoSGlzdG9yeURpcmVjdG9yaWVzLCAkcGF0aCkg
aWYgLWQgJHBhdGg7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2xvc2UgU1RBVDsKIAorICAgIGZv
cmVhY2ggbXkgJGRpcmVjdG9yeSAoQGFkZGl0aW9uV2l0aEhpc3RvcnlEaXJlY3Rvcmllcykgewor
ICAgICAgICBteSAoJHNvdXJjZURpcmVjdG9yeSwgJHNvdXJjZVJldmlzaW9uKSA9IGZpbmRTb3Vy
Y2VGaWxlQW5kUmV2aXNpb24oJGRpcmVjdG9yeSk7CisgICAgICAgICMgR2F0aGVyIGEgaGllcmFy
Y2hpY2FsIGxpc3Qgb2YgZmlsZXMgaW5zaWRlIHRoZSBtb3ZlZCBkaXJlY3RvcnkuCisgICAgICAg
IG15ICRkaWZmT3B0aW9ucyA9IGRpZmZPcHRpb25zRm9yRmlsZSgkc291cmNlRGlyZWN0b3J5KTsK
KyAgICAgICAgbXkgJGVzY2FwZWREaXJlY3RvcnkgPSBlc2NhcGVTdWJ2ZXJzaW9uUGF0aCgkZGly
ZWN0b3J5KTsKKyAgICAgICAgcHJpbnQgU1RERVJSICJQZXJmb3JtaW5nIFwic3ZuIGRpZmYgLS1k
aWZmLWNtZCBkaWZmIC14IC0kZGlmZk9wdGlvbnMgJyRlc2NhcGVkRGlyZWN0b3J5J1wiXG4iIGlm
ICR2ZXJib3NlOworICAgICAgICBvcGVuIERJRkYsICJzdm4gZGlmZiAtLWRpZmYtY21kIGRpZmYg
LXggLSRkaWZmT3B0aW9ucyAnJGVzY2FwZWREaXJlY3RvcnknIHwiIG9yIGRpZTsKKyAgICAgICAg
d2hpbGUgKDxESUZGPikgeworICAgICAgICAgICAgaWYgKG0vXkluZGV4OiAoLiopJC8pIHsKKyAg
ICAgICAgICAgICAgICBteSAkbW92ZWRGaWxlID0gJDE7CisgICAgICAgICAgICAgICAgIyBJZ25v
cmUgb3RoZXIgZmlsZXMgYWRkZWQvbW92ZWQgaW50byB0aGUgbW92ZWQgZGlyZWN0b3J5LgorICAg
ICAgICAgICAgICAgIG5leHQgaWYgZXhpc3RzICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfTsKKyAg
ICAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntwYXRofSA9ICRtb3ZlZEZp
bGU7CisgICAgICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57bW9kaWZpY2F0
aW9uVHlwZX0gPSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CisgICAgICAgICAgICAgICAgJGRpZmZG
aWxlcy0+eyRtb3ZlZEZpbGV9LT57aXNCaW5hcnl9ID0gaXNCaW5hcnlNaW1lVHlwZSgkbW92ZWRG
aWxlKTsKKyAgICAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntpc1Rlc3RG
aWxlfSA9IGV4aXN0cyAkdGVzdERpcmVjdG9yaWVzeyhGaWxlOjpTcGVjLT5zcGxpdGRpcigkbW92
ZWRGaWxlKSlbMF19ID8gMSA6IDA7CisgICAgICAgICAgICAgICAgbXkgJHJlbGF0aXZlUGF0aCA9
IEZpbGU6OlNwZWMtPmFiczJyZWwoIi8iIC4gJG1vdmVkRmlsZSwgIi8iIC4gJGRpcmVjdG9yeSk7
CisgICAgICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57c291cmNlRmlsZX0g
PSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRzb3VyY2VEaXJlY3RvcnksICRyZWxhdGl2ZVBhdGgpOwor
ICAgICAgICAgICAgICAgICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfS0+e3NvdXJjZVJldmlzaW9u
fSA9ICRzb3VyY2VSZXZpc2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBj
bG9zZSBESUZGOworICAgIH0KKwogICAgIGZvcmVhY2ggbXkgJHBhdGggKEBkZWxldGVkRmlsZXMp
IHsKICAgICAgICAgbXkgJGlzSW5zaWRlRGVsZXRlZERpcmVjdG9yeSA9IDA7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGNvbXBhcmUgKEBkZWxldGVkRmlsZXMpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348782</attachid>
            <date>2018-09-03 11:24:22 -0700</date>
            <delta_ts>2018-09-03 11:32:51 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-14590-20180903112421.patch</filename>
            <type>text/plain</type>
            <size>5307</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzNTYwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDE4LTA5LTAzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CisKKyAgICAgICAgc3ZuLWNyZWF0ZS1wYXRjaCBmYWlscyB3aGVuIHN2biBtdiBpcyB1c2VkIG9u
IGRpcmVjdG9yeSB0cmVlcworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ1OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L3N2bi1jcmVhdGUtcGF0Y2g6CisgICAgICAgIChnZW5lcmF0ZURpZmYpOiBSZXR1cm4gZWFybHkg
Zm9yIG1vdmVkIGRpcmVjdG9yaWVzIHNpbmNlCisgICAgICAgIGluZGl2aWR1YWwgZmlsZXMgd2l0
aGluIHRoZSBkaXJlY3RvcnkgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4KKyAgICAgICAgKGdlbmVy
YXRlRmlsZUxpc3QpOiBLZWVwIHRyYWNrIG9mIG1vdmVkIGRpcmVjdG9yaWVzIGluIHRoZQorICAg
ICAgICBAYWRkaXRpb25XaXRoSGlzdG9yeURpcmVjdG9yaWVzIGFycmF5LCB0aGVuIHByb2Nlc3Mg
dGhpcyBhcnJheQorICAgICAgICBpbiByZXZlcnNlIG9yZGVyIHRvIGNyZWF0ZSBkZWxldGUvYWRk
IHBhdGNoZXMgZm9yIGVhY2ggZmlsZSBpbgorICAgICAgICBhIG1vdmVkIGRpcmVjdG9yeS4KKyAg
ICAgICAgKG1hbnVmYWN0dXJlUGF0Y2hGb3JBZGRpdGlvbldpdGhIaXN0b3J5KTogRml4IGEgbG9u
Zy1zdGFuZGluZworICAgICAgICBidWcgd2hlcmUgdGhlIHBhdGggdXNlZCB0byBkZXNjcmliZSBw
cm9wZXJ0eSBjaGFuZ2VzIGNvbnRhaW5lZAorICAgICAgICB0aGUgb3JpZ2luYWwgKG1vdmVkLWZy
b20pIHBhdGggaW5zdGVhZCBvZiB0aGUgbmV3IChtb3ZlZC10bykKKyAgICAgICAgcGF0aC4gVGhp
cyBjb3VsZCBjYXVzZSBzdm4tYXBwbHkgdG8gZmFpbCBteXN0ZXJpb3VzbHkgd2hlbgorICAgICAg
ICB0cnlpbmcgdG8gYXBwbHkgYW4gZW1wdHkgcGF0Y2guCisKIDIwMTgtMDktMDEgIE1pY2hhZWwg
Q2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIDIuMjEu
OTEgZmFpbHMgdG8gYnVpbGQgd2l0aCBFTkFCTEVfTUlOSUJST1dTRVIKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3N2bi1j
cmVhdGUtcGF0Y2gJKHJldmlzaW9uIDIzNTU4NCkKKysrIFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0
ZS1wYXRjaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDcgQEAKICMgICBIYW5kbGVzIGJp
bmFyeSBmaWxlcyAoZW5jb2RlZCBhcyBhIGJhc2U2NCBjaHVuayBvZiB0ZXh0KS4KICMgICBTb3J0
cyB0aGUgZGlmZnMgYWxwaGFiZXRpY2FsbHkgYnkgdGV4dCBmaWxlcywgdGhlbiBiaW5hcnkgZmls
ZXMuCiAjICAgSGFuZGxlcyBjb3BpZWQgYW5kIG1vdmVkIGZpbGVzLgotIwotIyBNaXNzaW5nIGZl
YXR1cmVzOgotIwotIyAgIEhhbmRsZSBjb3BpZWQgYW5kIG1vdmVkIGRpcmVjdG9yaWVzLgorIyAg
IEhhbmRsZXMgY29waWVkIGFuZCBtb3ZlZCBkaXJlY3Rvcmllcy4KIAogdXNlIHN0cmljdDsKIHVz
ZSB3YXJuaW5nczsKQEAgLTI1Miw2ICsyNDksOCBAQCBzdWIgZ2VuZXJhdGVEaWZmKCQkKQogICAg
IG15ICRwYXRjaCA9ICIiOwogICAgIG15ICRpc0FkZGl0aW9uV2l0aEhpc3RvcnkgPSAkZmlsZURh
dGEtPnttb2RpZmljYXRpb25UeXBlfSBlcSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CiAgICAgaWYg
KCRpc0FkZGl0aW9uV2l0aEhpc3RvcnkpIHsKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvIGZvciBh
IG1vdmVkIGRpcmVjdG9yeSBzaW5jZSBlYWNoIG1vdmVkIGZpbGUgaXMgaGFuZGxlZCBpbmRpdmlk
dWFsbHkuCisgICAgICAgIHJldHVybiBpZiAtZCAkZmlsZURhdGEtPntwYXRofTsKICAgICAgICAg
bWFudWZhY3R1cmVQYXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvcnkoJGZpbGVEYXRhLCAkcHJlZml4
KTsKICAgICB9CiAKQEAgLTI4Myw2ICsyODIsNyBAQCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUp
CiAgICAgbXkgJXRlc3REaXJlY3RvcmllcyA9IG1hcCB7ICRfID0+IDEgfSBxdyhMYXlvdXRUZXN0
cyk7CiAgICAgbXkgJGVzY2FwZWRTdGF0UGF0aCA9IGVzY2FwZVN1YnZlcnNpb25QYXRoKCRzdGF0
UGF0aCk7CiAgICAgbXkgQGRlbGV0ZWRGaWxlczsKKyAgICBteSBAYWRkaXRpb25XaXRoSGlzdG9y
eURpcmVjdG9yaWVzOwogCiAgICAgcHJpbnQgU1RERVJSICJQZXJmb3JtaW5nIFwic3ZuIHN0YXQg
JyRlc2NhcGVkU3RhdFBhdGgnXCJcbiIgaWYgJHZlcmJvc2U7CiAKQEAgLTMwNSw4ICszMDUsNiBA
QCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUpCiAgICAgICAgICAgICAkcGF0aCA9IHN1YnN0cigk
bGluZSwgNyk7CiAgICAgICAgIH0KIAotICAgICAgICBuZXh0IGlmIC1kICRwYXRoOwotCiAgICAg
ICAgIG15ICRtb2RpZmljYXRpb25UeXBlID0gZmluZE1vZGlmaWNhdGlvblR5cGUoJHN0YXQpOwog
CiAgICAgICAgIGlmICgkbW9kaWZpY2F0aW9uVHlwZSBlcSAibWlzc2luZyIpIHsKQEAgLTM0Mywx
MCArMzQxLDM4IEBAIHN1YiBnZW5lcmF0ZUZpbGVMaXN0KCRcJSkKICAgICAgICAgICAgIG15ICgk
c291cmNlRmlsZSwgJHNvdXJjZVJldmlzaW9uKSA9IGZpbmRTb3VyY2VGaWxlQW5kUmV2aXNpb24o
JHBhdGgpOwogICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRwYXRofS0+e3NvdXJjZUZpbGV9ID0g
JHNvdXJjZUZpbGU7CiAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JHBhdGh9LT57c291cmNlUmV2
aXNpb259ID0gJHNvdXJjZVJldmlzaW9uOworICAgICAgICAgICAgcHVzaChAYWRkaXRpb25XaXRo
SGlzdG9yeURpcmVjdG9yaWVzLCAkcGF0aCkgaWYgLWQgJHBhdGg7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2xvc2UgU1RBVDsKIAorICAgICMgSGFuZGxlIHRoZXNlIGluIHJldmVyc2Ugb3JkZXIg
c28gdGhhdCB0aGUgZGVlcGVzdCBkaXJlY3RvcnkgbW92ZXMgYXJlIHByb2Nlc3NlZCBmaXJzdC4K
KyAgICAjIFNoYWxsb3cgZGlyZWN0b3J5IG1vdmVzIGluY2x1ZGUgY2hhbmdlcyBmb3IgZGVlcGVy
IGRpcmVjdG9yaWVzLCB3aGljaCBjYXVzZXMgZG91YmxlCisgICAgIyBwcm9jZXNzaW5nIGFuZCBj
YXVzZXMgdGhlIHdyb25nIG9yaWdpbmFsIHBhdGggdG8gYmUgdXNlZC4KKyAgICBmb3JlYWNoIG15
ICRkaXJlY3RvcnkgKHJldmVyc2UgQGFkZGl0aW9uV2l0aEhpc3RvcnlEaXJlY3Rvcmllcykgewor
ICAgICAgICBteSAoJHNvdXJjZURpcmVjdG9yeSwgJHNvdXJjZVJldmlzaW9uKSA9IGZpbmRTb3Vy
Y2VGaWxlQW5kUmV2aXNpb24oJGRpcmVjdG9yeSk7CisgICAgICAgICMgR2F0aGVyIGEgaGllcmFy
Y2hpY2FsIGxpc3Qgb2YgZmlsZXMgaW5zaWRlIHRoZSBtb3ZlZCBkaXJlY3RvcnkuCisgICAgICAg
IG15ICRkaWZmT3B0aW9ucyA9IGRpZmZPcHRpb25zRm9yRmlsZSgkc291cmNlRGlyZWN0b3J5KTsK
KyAgICAgICAgbXkgJGVzY2FwZWREaXJlY3RvcnkgPSBlc2NhcGVTdWJ2ZXJzaW9uUGF0aCgkZGly
ZWN0b3J5KTsKKyAgICAgICAgcHJpbnQgU1RERVJSICJQZXJmb3JtaW5nIFwic3ZuIGRpZmYgLS1k
aWZmLWNtZCBkaWZmIC14IC0kZGlmZk9wdGlvbnMgJyRlc2NhcGVkRGlyZWN0b3J5J1wiXG4iIGlm
ICR2ZXJib3NlOworICAgICAgICBvcGVuIERJRkYsICJzdm4gZGlmZiAtLWRpZmYtY21kIGRpZmYg
LXggLSRkaWZmT3B0aW9ucyAnJGVzY2FwZWREaXJlY3RvcnknIHwiIG9yIGRpZTsKKyAgICAgICAg
d2hpbGUgKDxESUZGPikgeworICAgICAgICAgICAgaWYgKG0vXkluZGV4OiAoLiopJC8pIHsKKyAg
ICAgICAgICAgICAgICBteSAkbW92ZWRGaWxlID0gJDE7CisgICAgICAgICAgICAgICAgIyBJZ25v
cmUgb3RoZXIgZmlsZXMgYWRkZWQvbW92ZWQgaW50byB0aGUgbW92ZWQgZGlyZWN0b3J5LgorICAg
ICAgICAgICAgICAgIG5leHQgaWYgZXhpc3RzICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfTsKKyAg
ICAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntwYXRofSA9ICRtb3ZlZEZp
bGU7CisgICAgICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57bW9kaWZpY2F0
aW9uVHlwZX0gPSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CisgICAgICAgICAgICAgICAgJGRpZmZG
aWxlcy0+eyRtb3ZlZEZpbGV9LT57aXNCaW5hcnl9ID0gaXNCaW5hcnlNaW1lVHlwZSgkbW92ZWRG
aWxlKTsKKyAgICAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntpc1Rlc3RG
aWxlfSA9IGV4aXN0cyAkdGVzdERpcmVjdG9yaWVzeyhGaWxlOjpTcGVjLT5zcGxpdGRpcigkbW92
ZWRGaWxlKSlbMF19ID8gMSA6IDA7CisgICAgICAgICAgICAgICAgbXkgJHJlbGF0aXZlUGF0aCA9
IEZpbGU6OlNwZWMtPmFiczJyZWwoIi8iIC4gJG1vdmVkRmlsZSwgIi8iIC4gJGRpcmVjdG9yeSk7
CisgICAgICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57c291cmNlRmlsZX0g
PSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRzb3VyY2VEaXJlY3RvcnksICRyZWxhdGl2ZVBhdGgpOwor
ICAgICAgICAgICAgICAgICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfS0+e3NvdXJjZVJldmlzaW9u
fSA9ICRzb3VyY2VSZXZpc2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBj
bG9zZSBESUZGOworICAgIH0KKwogICAgIGZvcmVhY2ggbXkgJHBhdGggKEBkZWxldGVkRmlsZXMp
IHsKICAgICAgICAgbXkgJGlzSW5zaWRlRGVsZXRlZERpcmVjdG9yeSA9IDA7CiAgICAgICAgIGZv
cmVhY2ggbXkgJGNvbXBhcmUgKEBkZWxldGVkRmlsZXMpIHsKQEAgLTQwOCw2ICs0MzQsNyBAQCBz
dWIgbWFudWZhY3R1cmVQYXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvCiAgICAgICAgIHdoaWxlICg8
RElGRj4pIHsKICAgICAgICAgICAgICMgU2tpcCB0aGUgZGlmZiBoZWFkZXIsIHNpbmNlIGl0IHdh
cyBtYW51ZmFjdHVyZWQgYWJvdmVkLgogICAgICAgICAgICAgbmV4dCBpZiArKyRjb3VudCA8IDU7
CisgICAgICAgICAgICBzL14oUHJvcGVydHkgY2hhbmdlcyBvbjpccyspJHNvdXJjZUZpbGUkLyQx
JGZpbGUvOwogICAgICAgICAgICAgcHJpbnQgJF87CiAgICAgICAgIH0KICAgICAgICAgY2xvc2Ug
RElGRjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348784</attachid>
            <date>2018-09-03 11:32:52 -0700</date>
            <delta_ts>2018-09-04 15:07:46 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>bug-14590-20180903113252.patch</filename>
            <type>text/plain</type>
            <size>7736</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzNTYwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDE4LTA5LTAzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CisKKyAgICAgICAgc3ZuLWNyZWF0ZS1wYXRjaCBmYWlscyB3aGVuIHN2biBtdiBpcyB1c2VkIG9u
IGRpcmVjdG9yeSB0cmVlcworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ1OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L3N2bi1jcmVhdGUtcGF0Y2g6IFVwZGF0ZSBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuCisgICAgICAg
IChnZW5lcmF0ZURpZmYpOiBSZXR1cm4gZWFybHkgZm9yIG1vdmVkIGRpcmVjdG9yaWVzIHNpbmNl
CisgICAgICAgIGluZGl2aWR1YWwgZmlsZXMgd2l0aGluIHRoZSBkaXJlY3RvcnkgYXJlIGhhbmRs
ZWQgc2VwYXJhdGVseS4KKyAgICAgICAgKGdlbmVyYXRlRmlsZUxpc3QpOiBLZWVwIHRyYWNrIG9m
IG1vdmVkIGRpcmVjdG9yaWVzIGluIHRoZQorICAgICAgICBAYWRkaXRpb25XaXRoSGlzdG9yeURp
cmVjdG9yaWVzIGFycmF5LCB0aGVuIHByb2Nlc3MgdGhpcyBhcnJheQorICAgICAgICBpbiByZXZl
cnNlIG9yZGVyIHRvIGNyZWF0ZSBkZWxldGUvYWRkIHBhdGNoZXMgZm9yIGVhY2ggZmlsZSBpbgor
ICAgICAgICBhIG1vdmVkIGRpcmVjdG9yeS4gIFRoaXMgYWxzbyBwcmV2ZW50cyBkdXBsaWNhdGUg
cGF0Y2hlcy4KKyAgICAgICAgKG1hbnVmYWN0dXJlUGF0Y2hGb3JBZGRpdGlvbldpdGhIaXN0b3J5
KTogRml4IGEgbG9uZy1zdGFuZGluZworICAgICAgICBidWcgd2hlcmUgdGhlIHBhdGggdXNlZCB0
byBkZXNjcmliZSBwcm9wZXJ0eSBjaGFuZ2VzIGNvbnRhaW5lZAorICAgICAgICB0aGUgb3JpZ2lu
YWwgKG1vdmVkLWZyb20pIHBhdGggaW5zdGVhZCBvZiB0aGUgbmV3IChtb3ZlZC10bykKKyAgICAg
ICAgcGF0aC4gVGhpcyBjb3VsZCBjYXVzZSBzdm4tYXBwbHkgdG8gZmFpbCBteXN0ZXJpb3VzbHkg
d2hlbgorICAgICAgICB0cnlpbmcgdG8gYXBwbHkgYW4gZW1wdHkgcGF0Y2guCisKIDIwMTgtMDkt
MDEgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtXUEVdIDIuMjEuOTEgZmFpbHMgdG8gYnVpbGQgd2l0aCBFTkFCTEVfTUlOSUJST1dTRVIKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gJKHJldmlzaW9uIDIzNTU4NCkKKysrIFRvb2xzL1Njcmlw
dHMvc3ZuLWNyZWF0ZS1wYXRjaAkod29ya2luZyBjb3B5KQpAQCAtMSwzMCArMSwyNiBAQAogIyEv
dXNyL2Jpbi9lbnYgcGVybAogCi0jIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAj
IGFyZSBtZXQ6Ci0jCiAjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CiAjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSMgMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
IyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAjCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQogIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CiAjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKICMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKICMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotIyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0j
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogIyBFeHRlbmRlZCAic3ZuIGRpZmYiIHNjcmlw
dCBmb3IgV2ViS2l0IE9wZW4gU291cmNlIFByb2plY3QsIHVzZWQgdG8gbWFrZSBwYXRjaGVzLgog
CkBAIC0zNSwxMCArMzEsNyBAQAogIyAgIEhhbmRsZXMgYmluYXJ5IGZpbGVzIChlbmNvZGVkIGFz
IGEgYmFzZTY0IGNodW5rIG9mIHRleHQpLgogIyAgIFNvcnRzIHRoZSBkaWZmcyBhbHBoYWJldGlj
YWxseSBieSB0ZXh0IGZpbGVzLCB0aGVuIGJpbmFyeSBmaWxlcy4KICMgICBIYW5kbGVzIGNvcGll
ZCBhbmQgbW92ZWQgZmlsZXMuCi0jCi0jIE1pc3NpbmcgZmVhdHVyZXM6Ci0jCi0jICAgSGFuZGxl
IGNvcGllZCBhbmQgbW92ZWQgZGlyZWN0b3JpZXMuCisjICAgSGFuZGxlcyBjb3BpZWQgYW5kIG1v
dmVkIGRpcmVjdG9yaWVzLgogCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwpAQCAtMjUyLDYg
KzI0NSw4IEBAIHN1YiBnZW5lcmF0ZURpZmYoJCQpCiAgICAgbXkgJHBhdGNoID0gIiI7CiAgICAg
bXkgJGlzQWRkaXRpb25XaXRoSGlzdG9yeSA9ICRmaWxlRGF0YS0+e21vZGlmaWNhdGlvblR5cGV9
IGVxICJhZGRpdGlvbldpdGhIaXN0b3J5IjsKICAgICBpZiAoJGlzQWRkaXRpb25XaXRoSGlzdG9y
eSkgeworICAgICAgICAjIE5vdGhpbmcgdG8gZG8gZm9yIGEgbW92ZWQgZGlyZWN0b3J5IHNpbmNl
IGVhY2ggbW92ZWQgZmlsZSBpcyBoYW5kbGVkIGluZGl2aWR1YWxseS4KKyAgICAgICAgcmV0dXJu
IGlmIC1kICRmaWxlRGF0YS0+e3BhdGh9OwogICAgICAgICBtYW51ZmFjdHVyZVBhdGNoRm9yQWRk
aXRpb25XaXRoSGlzdG9yeSgkZmlsZURhdGEsICRwcmVmaXgpOwogICAgIH0KIApAQCAtMjgzLDYg
KzI3OCw3IEBAIHN1YiBnZW5lcmF0ZUZpbGVMaXN0KCRcJSkKICAgICBteSAldGVzdERpcmVjdG9y
aWVzID0gbWFwIHsgJF8gPT4gMSB9IHF3KExheW91dFRlc3RzKTsKICAgICBteSAkZXNjYXBlZFN0
YXRQYXRoID0gZXNjYXBlU3VidmVyc2lvblBhdGgoJHN0YXRQYXRoKTsKICAgICBteSBAZGVsZXRl
ZEZpbGVzOworICAgIG15IEBhZGRpdGlvbldpdGhIaXN0b3J5RGlyZWN0b3JpZXM7CiAKICAgICBw
cmludCBTVERFUlIgIlBlcmZvcm1pbmcgXCJzdm4gc3RhdCAnJGVzY2FwZWRTdGF0UGF0aCdcIlxu
IiBpZiAkdmVyYm9zZTsKIApAQCAtMzA1LDggKzMwMSw2IEBAIHN1YiBnZW5lcmF0ZUZpbGVMaXN0
KCRcJSkKICAgICAgICAgICAgICRwYXRoID0gc3Vic3RyKCRsaW5lLCA3KTsKICAgICAgICAgfQog
Ci0gICAgICAgIG5leHQgaWYgLWQgJHBhdGg7Ci0KICAgICAgICAgbXkgJG1vZGlmaWNhdGlvblR5
cGUgPSBmaW5kTW9kaWZpY2F0aW9uVHlwZSgkc3RhdCk7CiAKICAgICAgICAgaWYgKCRtb2RpZmlj
YXRpb25UeXBlIGVxICJtaXNzaW5nIikgewpAQCAtMzQzLDEwICszMzcsMzggQEAgc3ViIGdlbmVy
YXRlRmlsZUxpc3QoJFwlKQogICAgICAgICAgICAgbXkgKCRzb3VyY2VGaWxlLCAkc291cmNlUmV2
aXNpb24pID0gZmluZFNvdXJjZUZpbGVBbmRSZXZpc2lvbigkcGF0aCk7CiAgICAgICAgICAgICAk
ZGlmZkZpbGVzLT57JHBhdGh9LT57c291cmNlRmlsZX0gPSAkc291cmNlRmlsZTsKICAgICAgICAg
ICAgICRkaWZmRmlsZXMtPnskcGF0aH0tPntzb3VyY2VSZXZpc2lvbn0gPSAkc291cmNlUmV2aXNp
b247CisgICAgICAgICAgICBwdXNoKEBhZGRpdGlvbldpdGhIaXN0b3J5RGlyZWN0b3JpZXMsICRw
YXRoKSBpZiAtZCAkcGF0aDsKICAgICAgICAgfQogICAgIH0KICAgICBjbG9zZSBTVEFUOwogCisg
ICAgIyBIYW5kbGUgdGhlc2UgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IHRoZSBkZWVwZXN0IGRp
cmVjdG9yeSBtb3ZlcyBhcmUgcHJvY2Vzc2VkIGZpcnN0LgorICAgICMgU2hhbGxvdyBkaXJlY3Rv
cnkgbW92ZXMgaW5jbHVkZSBjaGFuZ2VzIGZvciBkZWVwZXIgZGlyZWN0b3JpZXMsIHdoaWNoIGNh
dXNlcyBkb3VibGUKKyAgICAjIHByb2Nlc3NpbmcgYW5kIGNhdXNlcyB0aGUgd3Jvbmcgb3JpZ2lu
YWwgcGF0aCB0byBiZSB1c2VkLgorICAgIGZvcmVhY2ggbXkgJGRpcmVjdG9yeSAocmV2ZXJzZSBA
YWRkaXRpb25XaXRoSGlzdG9yeURpcmVjdG9yaWVzKSB7CisgICAgICAgIG15ICgkc291cmNlRGly
ZWN0b3J5LCAkc291cmNlUmV2aXNpb24pID0gZmluZFNvdXJjZUZpbGVBbmRSZXZpc2lvbigkZGly
ZWN0b3J5KTsKKyAgICAgICAgIyBHYXRoZXIgYSBoaWVyYXJjaGljYWwgbGlzdCBvZiBmaWxlcyBp
bnNpZGUgdGhlIG1vdmVkIGRpcmVjdG9yeS4KKyAgICAgICAgbXkgJGRpZmZPcHRpb25zID0gZGlm
Zk9wdGlvbnNGb3JGaWxlKCRzb3VyY2VEaXJlY3RvcnkpOworICAgICAgICBteSAkZXNjYXBlZERp
cmVjdG9yeSA9IGVzY2FwZVN1YnZlcnNpb25QYXRoKCRkaXJlY3RvcnkpOworICAgICAgICBwcmlu
dCBTVERFUlIgIlBlcmZvcm1pbmcgXCJzdm4gZGlmZiAtLWRpZmYtY21kIGRpZmYgLXggLSRkaWZm
T3B0aW9ucyAnJGVzY2FwZWREaXJlY3RvcnknXCJcbiIgaWYgJHZlcmJvc2U7CisgICAgICAgIG9w
ZW4gRElGRiwgInN2biBkaWZmIC0tZGlmZi1jbWQgZGlmZiAteCAtJGRpZmZPcHRpb25zICckZXNj
YXBlZERpcmVjdG9yeScgfCIgb3IgZGllOworICAgICAgICB3aGlsZSAoPERJRkY+KSB7CisgICAg
ICAgICAgICBpZiAobS9eSW5kZXg6ICguKikkLykgeworICAgICAgICAgICAgICAgIG15ICRtb3Zl
ZEZpbGUgPSAkMTsKKyAgICAgICAgICAgICAgICAjIElnbm9yZSBvdGhlciBmaWxlcyBhZGRlZC9t
b3ZlZCBpbnRvIHRoZSBtb3ZlZCBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgbmV4dCBpZiBl
eGlzdHMgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9OworICAgICAgICAgICAgICAgICRkaWZmRmls
ZXMtPnskbW92ZWRGaWxlfS0+e3BhdGh9ID0gJG1vdmVkRmlsZTsKKyAgICAgICAgICAgICAgICAk
ZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPnttb2RpZmljYXRpb25UeXBlfSA9ICJhZGRpdGlvbldp
dGhIaXN0b3J5IjsKKyAgICAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntp
c0JpbmFyeX0gPSBpc0JpbmFyeU1pbWVUeXBlKCRtb3ZlZEZpbGUpOworICAgICAgICAgICAgICAg
ICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfS0+e2lzVGVzdEZpbGV9ID0gZXhpc3RzICR0ZXN0RGly
ZWN0b3JpZXN7KEZpbGU6OlNwZWMtPnNwbGl0ZGlyKCRtb3ZlZEZpbGUpKVswXX0gPyAxIDogMDsK
KyAgICAgICAgICAgICAgICBteSAkcmVsYXRpdmVQYXRoID0gRmlsZTo6U3BlYy0+YWJzMnJlbCgi
LyIgLiAkbW92ZWRGaWxlLCAiLyIgLiAkZGlyZWN0b3J5KTsKKyAgICAgICAgICAgICAgICAkZGlm
ZkZpbGVzLT57JG1vdmVkRmlsZX0tPntzb3VyY2VGaWxlfSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUo
JHNvdXJjZURpcmVjdG9yeSwgJHJlbGF0aXZlUGF0aCk7CisgICAgICAgICAgICAgICAgJGRpZmZG
aWxlcy0+eyRtb3ZlZEZpbGV9LT57c291cmNlUmV2aXNpb259ID0gJHNvdXJjZVJldmlzaW9uOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNsb3NlIERJRkY7CisgICAgfQorCiAg
ICAgZm9yZWFjaCBteSAkcGF0aCAoQGRlbGV0ZWRGaWxlcykgewogICAgICAgICBteSAkaXNJbnNp
ZGVEZWxldGVkRGlyZWN0b3J5ID0gMDsKICAgICAgICAgZm9yZWFjaCBteSAkY29tcGFyZSAoQGRl
bGV0ZWRGaWxlcykgewpAQCAtNDA4LDYgKzQzMCw3IEBAIHN1YiBtYW51ZmFjdHVyZVBhdGNoRm9y
QWRkaXRpb25XaXRoSGlzdG8KICAgICAgICAgd2hpbGUgKDxESUZGPikgewogICAgICAgICAgICAg
IyBTa2lwIHRoZSBkaWZmIGhlYWRlciwgc2luY2UgaXQgd2FzIG1hbnVmYWN0dXJlZCBhYm92ZWQu
CiAgICAgICAgICAgICBuZXh0IGlmICsrJGNvdW50IDwgNTsKKyAgICAgICAgICAgIHMvXihQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOlxzKykkc291cmNlRmlsZSQvJDEkZmlsZS87CiAgICAgICAgICAgICBw
cmludCAkXzsKICAgICAgICAgfQogICAgICAgICBjbG9zZSBESUZGOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348853</attachid>
            <date>2018-09-04 15:07:47 -0700</date>
            <delta_ts>2018-09-04 16:01:16 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>bug-14590-20180904150747.patch</filename>
            <type>text/plain</type>
            <size>17693</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzNTYyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM4IEBACisyMDE4LTA5LTA0ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CisKKyAgICAgICAgc3ZuLWNyZWF0ZS1wYXRjaCBmYWlscyB3aGVuIHN2biBtdiBpcyB1c2VkIG9u
IGRpcmVjdG9yeSB0cmVlcworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ1OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L1ZDU1V0aWxzLnBtOiBFeHBvcnQgcGFyc2VTdm5EaWZmU3RhcnRMaW5lKCkgZm9yCisgICAgICAg
IHN2bi1jcmVhdGUtcGF0Y2guCisgICAgICAgIChwYXJzZURpZmZTdGFydExpbmUpOiBVc2UgcGFy
c2VTdm5EaWZmU3RhcnRMaW5lKCkuCisgICAgICAgIChwYXJzZUdpdERpZmZTdGFydExpbmUpOiBE
b2N1bWVudCBhIHByZXJlcXVpc2l0ZS4gIEZpeCBhIGJ1ZworICAgICAgICB3aGVuIHBhcnNpbmcg
Z2l0IHBhdGNoZXMgdXNpbmcgLS1uby1wcmVmaXggd2l0aCBDRkxGIG9yIExGIGxpbmUKKyAgICAg
ICAgZW5kaW5ncy4gIEZvdW5kIGJ5IG5ldyB0ZXN0cyB3cml0dGVuIGZvcgorICAgICAgICBTY3Jp
cHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmU3RhcnRMaW5lLnBsLgor
ICAgICAgICAocGFyc2VTdm5EaWZmU3RhcnRMaW5lKTogQWRkLiAgRXh0cmFjdCBsb2dpYyBmcm9t
CisgICAgICAgIHBhcnNlRGlmZlN0YXJ0TGluZSgpIGZvciB1c2Ugd2l0aCBzdm4tY3JlYXRlLXBh
dGNoLgorCisgICAgICAgICogU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoOiBVcGRhdGUgY29weXJp
Z2h0IGFuZCBsaWNlbnNlLgorICAgICAgICAoZ2VuZXJhdGVEaWZmKTogUmV0dXJuIGVhcmx5IGZv
ciBtb3ZlZCBkaXJlY3RvcmllcyBzaW5jZQorICAgICAgICBpbmRpdmlkdWFsIGZpbGVzIHdpdGhp
biB0aGUgZGlyZWN0b3J5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgICAgICAgIChnZW5lcmF0
ZUZpbGVMaXN0KTogS2VlcCB0cmFjayBvZiBtb3ZlZCBkaXJlY3RvcmllcyBpbiB0aGUKKyAgICAg
ICAgQGFkZGl0aW9uV2l0aEhpc3RvcnlEaXJlY3RvcmllcyBhcnJheSwgdGhlbiBwcm9jZXNzIHRo
aXMgYXJyYXkKKyAgICAgICAgaW4gcmV2ZXJzZSBvcmRlciB0byBjcmVhdGUgZGVsZXRlL2FkZCBw
YXRjaGVzIGZvciBlYWNoIGZpbGUgaW4KKyAgICAgICAgYSBtb3ZlZCBkaXJlY3RvcnkuICBUaGlz
IGFsc28gcHJldmVudHMgZHVwbGljYXRlIHBhdGNoZXMuCisgICAgICAgIChtYW51ZmFjdHVyZVBh
dGNoRm9yQWRkaXRpb25XaXRoSGlzdG9yeSk6IEZpeCBhIGxvbmctc3RhbmRpbmcKKyAgICAgICAg
YnVnIHdoZXJlIHRoZSBwYXRoIHVzZWQgdG8gZGVzY3JpYmUgcHJvcGVydHkgY2hhbmdlcyBjb250
YWluZWQKKyAgICAgICAgdGhlIG9yaWdpbmFsIChtb3ZlZC1mcm9tKSBwYXRoIGluc3RlYWQgb2Yg
dGhlIG5ldyAobW92ZWQtdG8pCisgICAgICAgIHBhdGguIFRoaXMgY291bGQgY2F1c2Ugc3ZuLWFw
cGx5IHRvIGZhaWwgbXlzdGVyaW91c2x5IHdoZW4KKyAgICAgICAgdHJ5aW5nIHRvIGFwcGx5IGFu
IGVtcHR5IHBhdGNoIGNyZWF0ZWQgYnkgdGhlIHByb3BlcnR5IGNoYW5nZQorICAgICAgICBjb250
YWluaW5nIHRoZSBtb3ZlZC1mcm9tIHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBl
cmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmU3RhcnRMaW5lLnBsOiBBZGQuCisgICAgICAg
IFRlc3RzIGZvciBwYXJzZURpZmZTdGFydExpbmUoKSwgcGFyc2VHaXREaWZmU3RhcnRMaW5lKCkg
YW5kCisgICAgICAgIHBhcnNlU3ZuRGlmZlN0YXJ0TGluZSgpLgorCiAyMDE4LTA5LTA0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMzQw
ODEpOiBUZXN0V2ViS2l0QVBJLlZpZGVvQ29udHJvbHNNYW5hZ2VyLlZpZGVvQ29udHJvbHNNYW5h
Z2VyQXVkaW9FbGVtZW50Rm9sbG93aW5nVXNlckludGVyYWN0aW9uIGlzIGEgZmxha3kgdGltZW91
dApJbmRleDogVG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiAyMzU1ODQpCisrKyBUb29scy9TY3JpcHRzL1ZD
U1V0aWxzLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxMywgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdt
YWlsLmNvbSkKICMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTIgRGFuaWVs
IEJhdGVzIChkYmF0ZXNAaW50dWRhdGEuY29tKQpAQCAtODIsNiArODIsNyBAQCBCRUdJTiB7CiAg
ICAgICAgICZwYXJzZURpZmZTdGFydExpbmUKICAgICAgICAgJnBhcnNlRmlyc3RFT0wKICAgICAg
ICAgJnBhcnNlUGF0Y2gKKyAgICAgICAgJnBhcnNlU3ZuRGlmZlN0YXJ0TGluZQogICAgICAgICAm
cGF0aFJlbGF0aXZlVG9TVk5SZXBvc2l0b3J5Um9vdEZvclBhdGgKICAgICAgICAgJnBvc3NpYmx5
Q29sb3JlZAogICAgICAgICAmcHJlcGFyZVBhcnNlZFBhdGNoCkBAIC03MjMsMTQgKzcyNCwxNCBA
QCBzdWIgaXNFeGVjdXRhYmxlKCQpCiAjIFBhcnNlcyBhbiBTVk4gb3IgR2l0IGRpZmYgaGVhZGVy
IHN0YXJ0IGxpbmUuCiAjCiAjIEFyZ3M6Ci0jICAgJGxpbmU6ICJJbmRleDogIiBsaW5lIG9yICJk
aWZmIC0tZ2l0IiBsaW5lCisjICAgJGxpbmU6ICJJbmRleDogIiBsaW5lIG9yICJkaWZmIC0tZ2l0
IiBsaW5lLgogIwogIyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgZmlsZSBvciB1bmRl
ZiBpZiB0aGUgJGxpbmUgaXMgdW5yZWNvZ25pemVkLgogc3ViIHBhcnNlRGlmZlN0YXJ0TGluZSgk
KQogewogICAgIG15ICgkbGluZSkgPSBAXzsKLSAgICByZXR1cm4gJDEgaWYgJGxpbmUgPX4gLyRz
dm5EaWZmU3RhcnRSZWdFeC87CiAgICAgcmV0dXJuIHBhcnNlR2l0RGlmZlN0YXJ0TGluZSgkbGlu
ZSkgaWYgJGxpbmUgPX4gLyRnaXREaWZmU3RhcnRSZWdFeC87CisgICAgcmV0dXJuIHBhcnNlU3Zu
RGlmZlN0YXJ0TGluZSgkbGluZSk7CiB9CiAKICMgUGFyc2UgdGhlIEdpdCBkaWZmIGhlYWRlciBz
dGFydCBsaW5lLgpAQCAtNzM4LDYgKzczOSw5IEBAIHN1YiBwYXJzZURpZmZTdGFydExpbmUoJCkK
ICMgQXJnczoKICMgICAkbGluZTogImRpZmYgLS1naXQiIGxpbmUuCiAjCisjIFByZXJlcXVpc2l0
ZXM6CisjICAgJGxpbmUgYXJndW1lbnQgbWF0Y2hlcyAvJGdpdERpZmZTdGFydFJlZ0V4Ly4KKyMK
ICMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0IGZpbGUuCiBzdWIgcGFyc2VHaXREaWZm
U3RhcnRMaW5lKCQpCiB7CkBAIC03NTIsMTMgKzc1NiwyNiBAQCBzdWIgcGFyc2VHaXREaWZmU3Rh
cnRMaW5lKCQpCiAgICAgICAgIGRpZSgiQ291bGQgbm90IGZpbmQgJy8nIGluIFwiZGlmZiAtLWdp
dFwiIGxpbmU6IFwiJGxpbmVcIjsgb25seSBub24tcHJlZml4ZWQgZ2l0IGRpZmZzIChpLmUuIG5v
dCBnZW5lcmF0ZWQgd2l0aCAtLW5vLXByZWZpeCkgdGhhdCBtb3ZlIGEgdG9wLWxldmVsIGRpcmVj
dG9yeSBmaWxlIGFyZSBzdXBwb3J0ZWQuIik7CiAgICAgfQogICAgIG15ICRwYXRoUHJlZml4ID0g
JDE7Ci0gICAgaWYgKCEvXmRpZmYgLS1naXQgXFEkcGF0aFByZWZpeFxFLisgKFxRJHBhdGhQcmVm
aXhcRS4rKSQvKSB7CisgICAgaWYgKCEvXmRpZmYgLS1naXQgXFEkcGF0aFByZWZpeFxFLisgKFxR
JHBhdGhQcmVmaXhcRVteXHJcbl0rKS8pIHsKICAgICAgICAgIyBGSVhNRTogTW92aW5nIGEgZmls
ZSB0aHJvdWdoIHN1YiBkaXJlY3RvcmllcyBvZiB0b3AgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0
ZWQgKGUuZyBkaWZmIC0tZ2l0IEEvQi50eHQgQy9CLnR4dCkuCiAgICAgICAgIGRpZSgiQ291bGQg
bm90IGZpbmQgJy8nIGluIFwiZGlmZiAtLWdpdFwiIGxpbmU6IFwiJGxpbmVcIjsgb25seSBub24t
cHJlZml4ZWQgZ2l0IGRpZmZzIChpLmUuIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLW5vLXByZWZpeCkg
dGhhdCBtb3ZlIGEgZmlsZSBiZXR3ZWVuIHRvcC1sZXZlbCBkaXJlY3RvcmllcyBhcmUgc3VwcG9y
dGVkLiIpOwogICAgIH0KICAgICByZXR1cm4gJDE7CiB9CiAKKyMgUGFyc2VzIGFuIFNWTiBkaWZm
IGhlYWRlciBzdGFydCBsaW5lLgorIworIyBBcmdzOgorIyAgICRsaW5lOiAiSW5kZXg6ICIgbGlu
ZS4KKyMKKyMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0IGZpbGUgb3IgdW5kZWYgaWYg
dGhlICRsaW5lIGlzIHVucmVjb2duaXplZC4KK3N1YiBwYXJzZVN2bkRpZmZTdGFydExpbmUoJCkK
K3sKKyAgICBteSAoJGxpbmUpID0gQF87CisgICAgcmV0dXJuICQxIGlmICRsaW5lID1+IC8kc3Zu
RGlmZlN0YXJ0UmVnRXgvOworICAgIHJldHVybiB1bmRlZjsKK30KKwogIyBQYXJzZSB0aGUgbmV4
dCBHaXQgZGlmZiBoZWFkZXIgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBoYW5kbGUsIGFuZCBhZHZhbmNl
CiAjIHRoZSBoYW5kbGUgc28gdGhlIGxhc3QgbGluZSByZWFkIGlzIHRoZSBmaXJzdCBsaW5lIGFm
dGVyIHRoZSBoZWFkZXIuCiAjCkluZGV4OiBUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoCShyZXZpc2lvbiAy
MzU1ODQpCisrKyBUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzAgKzEsMjYgQEAKICMhL3Vzci9iaW4vZW52IHBlcmwKIAotIyBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwogIyBhcmUgbWV0OgotIwogIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCiAjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0jIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSMgICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKICMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAogIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAjIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICMgRXh0
ZW5kZWQgInN2biBkaWZmIiBzY3JpcHQgZm9yIFdlYktpdCBPcGVuIFNvdXJjZSBQcm9qZWN0LCB1
c2VkIHRvIG1ha2UgcGF0Y2hlcy4KIApAQCAtMzUsMTAgKzMxLDcgQEAKICMgICBIYW5kbGVzIGJp
bmFyeSBmaWxlcyAoZW5jb2RlZCBhcyBhIGJhc2U2NCBjaHVuayBvZiB0ZXh0KS4KICMgICBTb3J0
cyB0aGUgZGlmZnMgYWxwaGFiZXRpY2FsbHkgYnkgdGV4dCBmaWxlcywgdGhlbiBiaW5hcnkgZmls
ZXMuCiAjICAgSGFuZGxlcyBjb3BpZWQgYW5kIG1vdmVkIGZpbGVzLgotIwotIyBNaXNzaW5nIGZl
YXR1cmVzOgotIwotIyAgIEhhbmRsZSBjb3BpZWQgYW5kIG1vdmVkIGRpcmVjdG9yaWVzLgorIyAg
IEhhbmRsZXMgY29waWVkIGFuZCBtb3ZlZCBkaXJlY3Rvcmllcy4KIAogdXNlIHN0cmljdDsKIHVz
ZSB3YXJuaW5nczsKQEAgLTI1Miw2ICsyNDUsOCBAQCBzdWIgZ2VuZXJhdGVEaWZmKCQkKQogICAg
IG15ICRwYXRjaCA9ICIiOwogICAgIG15ICRpc0FkZGl0aW9uV2l0aEhpc3RvcnkgPSAkZmlsZURh
dGEtPnttb2RpZmljYXRpb25UeXBlfSBlcSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CiAgICAgaWYg
KCRpc0FkZGl0aW9uV2l0aEhpc3RvcnkpIHsKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvIGZvciBh
IG1vdmVkIGRpcmVjdG9yeSBzaW5jZSBlYWNoIG1vdmVkIGZpbGUgaXMgaGFuZGxlZCBpbmRpdmlk
dWFsbHkuCisgICAgICAgIHJldHVybiBpZiAtZCAkZmlsZURhdGEtPntwYXRofTsKICAgICAgICAg
bWFudWZhY3R1cmVQYXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvcnkoJGZpbGVEYXRhLCAkcHJlZml4
KTsKICAgICB9CiAKQEAgLTI4Myw2ICsyNzgsNyBAQCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUp
CiAgICAgbXkgJXRlc3REaXJlY3RvcmllcyA9IG1hcCB7ICRfID0+IDEgfSBxdyhMYXlvdXRUZXN0
cyk7CiAgICAgbXkgJGVzY2FwZWRTdGF0UGF0aCA9IGVzY2FwZVN1YnZlcnNpb25QYXRoKCRzdGF0
UGF0aCk7CiAgICAgbXkgQGRlbGV0ZWRGaWxlczsKKyAgICBteSBAYWRkaXRpb25XaXRoSGlzdG9y
eURpcmVjdG9yaWVzOwogCiAgICAgcHJpbnQgU1RERVJSICJQZXJmb3JtaW5nIFwic3ZuIHN0YXQg
JyRlc2NhcGVkU3RhdFBhdGgnXCJcbiIgaWYgJHZlcmJvc2U7CiAKQEAgLTMwNSw4ICszMDEsNiBA
QCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUpCiAgICAgICAgICAgICAkcGF0aCA9IHN1YnN0cigk
bGluZSwgNyk7CiAgICAgICAgIH0KIAotICAgICAgICBuZXh0IGlmIC1kICRwYXRoOwotCiAgICAg
ICAgIG15ICRtb2RpZmljYXRpb25UeXBlID0gZmluZE1vZGlmaWNhdGlvblR5cGUoJHN0YXQpOwog
CiAgICAgICAgIGlmICgkbW9kaWZpY2F0aW9uVHlwZSBlcSAibWlzc2luZyIpIHsKQEAgLTM0Mywx
MCArMzM3LDM4IEBAIHN1YiBnZW5lcmF0ZUZpbGVMaXN0KCRcJSkKICAgICAgICAgICAgIG15ICgk
c291cmNlRmlsZSwgJHNvdXJjZVJldmlzaW9uKSA9IGZpbmRTb3VyY2VGaWxlQW5kUmV2aXNpb24o
JHBhdGgpOwogICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRwYXRofS0+e3NvdXJjZUZpbGV9ID0g
JHNvdXJjZUZpbGU7CiAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JHBhdGh9LT57c291cmNlUmV2
aXNpb259ID0gJHNvdXJjZVJldmlzaW9uOworICAgICAgICAgICAgcHVzaChAYWRkaXRpb25XaXRo
SGlzdG9yeURpcmVjdG9yaWVzLCAkcGF0aCkgaWYgLWQgJHBhdGg7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2xvc2UgU1RBVDsKIAorICAgICMgSGFuZGxlIHRoZXNlIGluIHJldmVyc2Ugb3JkZXIg
c28gdGhhdCB0aGUgZGVlcGVzdCBkaXJlY3RvcnkgbW92ZXMgYXJlIHByb2Nlc3NlZCBmaXJzdC4K
KyAgICAjIFNoYWxsb3cgZGlyZWN0b3J5IG1vdmVzIGluY2x1ZGUgY2hhbmdlcyBmb3IgZGVlcGVy
IGRpcmVjdG9yaWVzLCB3aGljaCBjYXVzZXMgZG91YmxlCisgICAgIyBwcm9jZXNzaW5nIGFuZCBj
YXVzZXMgdGhlIHdyb25nIG9yaWdpbmFsIHBhdGggdG8gYmUgdXNlZCBpZiB0aGUgb3JkZXIgaXMg
bm90IHJldmVyc2VkLgorICAgIGZvcmVhY2ggbXkgJGRpcmVjdG9yeSAocmV2ZXJzZSBAYWRkaXRp
b25XaXRoSGlzdG9yeURpcmVjdG9yaWVzKSB7CisgICAgICAgIG15ICgkc291cmNlRGlyZWN0b3J5
LCAkc291cmNlUmV2aXNpb24pID0gZmluZFNvdXJjZUZpbGVBbmRSZXZpc2lvbigkZGlyZWN0b3J5
KTsKKyAgICAgICAgIyBHYXRoZXIgYSBoaWVyYXJjaGljYWwgbGlzdCBvZiBmaWxlcyBpbnNpZGUg
dGhlIG1vdmVkIGRpcmVjdG9yeS4KKyAgICAgICAgbXkgJGRpZmZPcHRpb25zID0gZGlmZk9wdGlv
bnNGb3JGaWxlKCRzb3VyY2VEaXJlY3RvcnkpOworICAgICAgICBteSAkZXNjYXBlZERpcmVjdG9y
eSA9IGVzY2FwZVN1YnZlcnNpb25QYXRoKCRkaXJlY3RvcnkpOworICAgICAgICBwcmludCBTVERF
UlIgIlBlcmZvcm1pbmcgXCJzdm4gZGlmZiAtLWRpZmYtY21kIGRpZmYgLXggLSRkaWZmT3B0aW9u
cyAnJGVzY2FwZWREaXJlY3RvcnknXCJcbiIgaWYgJHZlcmJvc2U7CisgICAgICAgIG9wZW4gRElG
RiwgInN2biBkaWZmIC0tZGlmZi1jbWQgZGlmZiAteCAtJGRpZmZPcHRpb25zICckZXNjYXBlZERp
cmVjdG9yeScgfCIgb3IgZGllOworICAgICAgICB3aGlsZSAoPERJRkY+KSB7CisgICAgICAgICAg
ICBteSAkbW92ZWRGaWxlID0gcGFyc2VTdm5EaWZmU3RhcnRMaW5lKCRfKTsKKyAgICAgICAgICAg
IGlmICgkbW92ZWRGaWxlKSB7CisgICAgICAgICAgICAgICAgIyBJZ25vcmUgb3RoZXIgZmlsZXMg
YWRkZWQvbW92ZWQgaW50byB0aGUgbW92ZWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIG5l
eHQgaWYgZXhpc3RzICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfTsKKyAgICAgICAgICAgICAgICAk
ZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntwYXRofSA9ICRtb3ZlZEZpbGU7CisgICAgICAgICAg
ICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57bW9kaWZpY2F0aW9uVHlwZX0gPSAiYWRk
aXRpb25XaXRoSGlzdG9yeSI7CisgICAgICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZp
bGV9LT57aXNCaW5hcnl9ID0gaXNCaW5hcnlNaW1lVHlwZSgkbW92ZWRGaWxlKTsKKyAgICAgICAg
ICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntpc1Rlc3RGaWxlfSA9IGV4aXN0cyAk
dGVzdERpcmVjdG9yaWVzeyhGaWxlOjpTcGVjLT5zcGxpdGRpcigkbW92ZWRGaWxlKSlbMF19ID8g
MSA6IDA7CisgICAgICAgICAgICAgICAgbXkgJHJlbGF0aXZlUGF0aCA9IEZpbGU6OlNwZWMtPmFi
czJyZWwoIi8iIC4gJG1vdmVkRmlsZSwgIi8iIC4gJGRpcmVjdG9yeSk7CisgICAgICAgICAgICAg
ICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57c291cmNlRmlsZX0gPSBGaWxlOjpTcGVjLT5j
YXRmaWxlKCRzb3VyY2VEaXJlY3RvcnksICRyZWxhdGl2ZVBhdGgpOworICAgICAgICAgICAgICAg
ICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfS0+e3NvdXJjZVJldmlzaW9ufSA9ICRzb3VyY2VSZXZp
c2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbG9zZSBESUZGOworICAg
IH0KKwogICAgIGZvcmVhY2ggbXkgJHBhdGggKEBkZWxldGVkRmlsZXMpIHsKICAgICAgICAgbXkg
JGlzSW5zaWRlRGVsZXRlZERpcmVjdG9yeSA9IDA7CiAgICAgICAgIGZvcmVhY2ggbXkgJGNvbXBh
cmUgKEBkZWxldGVkRmlsZXMpIHsKQEAgLTQwOCw2ICs0MzAsNyBAQCBzdWIgbWFudWZhY3R1cmVQ
YXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvCiAgICAgICAgIHdoaWxlICg8RElGRj4pIHsKICAgICAg
ICAgICAgICMgU2tpcCB0aGUgZGlmZiBoZWFkZXIsIHNpbmNlIGl0IHdhcyBtYW51ZmFjdHVyZWQg
YWJvdmVkLgogICAgICAgICAgICAgbmV4dCBpZiArKyRjb3VudCA8IDU7CisgICAgICAgICAgICBz
L14oUHJvcGVydHkgY2hhbmdlcyBvbjpccyspJHNvdXJjZUZpbGUoW1xyXG5dKykvJDEkZmlsZSQy
LzsKICAgICAgICAgICAgIHByaW50ICRfOwogICAgICAgICB9CiAgICAgICAgIGNsb3NlIERJRkY7
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VE
aWZmU3RhcnRMaW5lLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9W
Q1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZTdGFydExpbmUucGwJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZlN0YXJ0
TGluZS5wbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorIyEvdXNyL2Jpbi9lbnYg
cGVybAorCisjIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisj
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFVuaXQg
dGVzdHMgZm9yIHBhcnNlRGlmZlN0YXJ0TGluZSgpLCBwYXJzZUdpdERpZmZTdGFydExpbmUoKSwg
cGFyc2VTdm5EaWZmU3RhcnRMaW5lKCkuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisK
K3VzZSBjb25zdGFudCB7CisgICAgQ1IgPT4gIlxyIiwKKyAgICBDUkxGID0+ICJcclxuIiwKKyAg
ICBMRiA9PiAiXG4iLAorfTsKKwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVkNTVXRpbHM7CisKK215
IEB0ZXN0Q2FzZXMgPSAoCit7CisgICAgZXhwZWN0ZWQgPT4gIlNvdXJjZS9NYWtlZmlsZS5zaGFy
ZWQiLAorICAgIGlucHV0ID0+ICJkaWZmIC0tZ2l0IGEvU291cmNlL01ha2VmaWxlLnNoYXJlZCBi
L1NvdXJjZS9NYWtlZmlsZS5zaGFyZWQiLAorICAgIGlzR2l0ID0+IDEsCisgICAgaXNWYWxpZCA9
PiAxLAorICAgIHRlc3ROYW1lID0+ICJHaXQiLAorfSwKK3sKKyAgICBleHBlY3RlZCA9PiAiU291
cmNlL01ha2VmaWxlLnNoYXJlZCIsCisgICAgaW5wdXQgPT4gImRpZmYgLS1naXQgU291cmNlL01h
a2VmaWxlLnNoYXJlZCBTb3VyY2UvTWFrZWZpbGUuc2hhcmVkIiwKKyAgICBpc0dpdCA9PiAxLAor
ICAgIGlzVmFsaWQgPT4gMSwKKyAgICB0ZXN0TmFtZSA9PiAiR2l0IC0tbm8tcHJlZml4IiwKK30s
Cit7CisgICAgZXhwZWN0ZWQgPT4gIkxheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJj
ZXMvYSBzdWNjZXNzLmh0bWwiLAorICAgIGlucHV0ID0+ICJkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9hIHN1Y2Nlc3MuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvYSBzdWNjZXNzLmh0bWwiLAorICAgIGlzR2l0ID0+
IDEsCisgICAgaXNWYWxpZCA9PiAxLAorICAgIHRlc3ROYW1lID0+ICJHaXQgd2l0aCBzcGFjZSBp
biBwYXRoIiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4gdW5kZWYsCisgICAgaW5wdXQgPT4gIj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0iLAorICAgIGlzR2l0ID0+IDEsCisgICAgaXNWYWxpZCA9PiAwLAorICAgIHRlc3RO
YW1lID0+ICJHaXQgd2l0aCBpbnZhbGlkIGlucHV0IiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4g
IlNvdXJjZS9NYWtlZmlsZS5zaGFyZWQiLAorICAgIGlucHV0ID0+ICJJbmRleDogU291cmNlL01h
a2VmaWxlLnNoYXJlZCIsCisgICAgaXNTdm4gPT4gMSwKKyAgICBpc1ZhbGlkID0+IDEsCisgICAg
dGVzdE5hbWUgPT4gIlN2biIsCit9LAoreworICAgIGV4cGVjdGVkID0+ICJMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2Egc3VjY2Vzcy5odG1sIiwKKyAgICBpbnB1dCA9PiAi
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvYSBzdWNjZXNzLmh0
bWwiLAorICAgIGlzU3ZuID0+IDEsCisgICAgaXNWYWxpZCA9PiAxLAorICAgIHRlc3ROYW1lID0+
ICJTdm4gd2l0aCBzcGFjZSBpbiBwYXRoIiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4gdW5kZWYs
CisgICAgaW5wdXQgPT4gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0iLAorICAgIGlzU3ZuID0+IDEsCisgICAgaXNWYWxp
ZCA9PiAwLAorICAgIHRlc3ROYW1lID0+ICJTdm4gd2l0aCBpbnZhbGlkIGlucHV0IiwKK30sCisp
OworCitteSAkdGVzdENhc2VDb3VudCA9IHNjYWxhciBAdGVzdENhc2VzOworcGxhbih0ZXN0cyA9
PiA5ICogJHRlc3RDYXNlQ291bnQpOworCitmb3JlYWNoIG15ICR0ZXN0Q2FzZSAoQHRlc3RDYXNl
cykgeworICAgICMgTWFrZSBzdXJlIGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIHRlc3QgY2FzZXMg
YXJlIHZhbGlkLgorICAgIG9rKGV4aXN0cyAkdGVzdENhc2UtPntleHBlY3RlZH0sICInZXhwZWN0
ZWQnIGtleSBleGlzdHM6ICR0ZXN0Q2FzZS0+e3Rlc3ROYW1lfSIpOworICAgIG9rKGV4aXN0cyAk
dGVzdENhc2UtPntpbnB1dH0sICInaW5wdXQnIGtleSBleGlzdHM6ICR0ZXN0Q2FzZS0+e3Rlc3RO
YW1lfSIpOworICAgIG9rKGV4aXN0cyAkdGVzdENhc2UtPntpc0dpdH0gXiBleGlzdHMgJHRlc3RD
YXNlLT57aXNTdm59LCAiRXhhY3RseSBvbmUgb2YgJ2lzR2l0JyBrZXkgb3IgJ2lzU3ZuJyBrZXkg
ZXhpc3RzOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iKTsKKyAgICBvayhleGlzdHMgJHRlc3RDYXNl
LT57aXNWYWxpZH0sICInaXNWYWxpZCcga2V5IGV4aXN0czogJHRlc3RDYXNlLT57dGVzdE5hbWV9
Iik7CisgICAgb2soZXhpc3RzICR0ZXN0Q2FzZS0+e3Rlc3ROYW1lfSwgIid0ZXN0TmFtZScga2V5
IGV4aXN0cyIpOworCisgICAgbXkgJHRlc3RDYXNlTmFtZSA9ICJwYXJzZURpZmZTdGFydExpbmUo
KTogJHRlc3RDYXNlLT57dGVzdE5hbWV9IjsKKyAgICBteSAkZ290ID0gVkNTVXRpbHM6OnBhcnNl
RGlmZlN0YXJ0TGluZSgkdGVzdENhc2UtPntpbnB1dH0pOworICAgIGlzKCRnb3QsICR0ZXN0Q2Fz
ZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7CisKKyAgICBpZiAoJHRlc3RDYXNlLT57aXNH
aXR9KSB7CisgICAgICAgIFNLSVA6IHsKKyAgICAgICAgICAgIHNraXAgInBhcnNlR2l0RGlmZlN0
YXJ0TGluZSgpIGRvZXMgbm90IGhhbmRsZSBpbnZhbGlkIGlucHV0IiwgMyBpZiAhJHRlc3RDYXNl
LT57aXNWYWxpZH07CisKKyAgICAgICAgICAgICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VHaXREaWZm
U3RhcnRMaW5lKCk6IENSIGxpbmUgZW5kaW5nOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iOworICAg
ICAgICAgICAgbXkgJGlucHV0ID0gJHRlc3RDYXNlLT57aW5wdXR9IC4gQ1I7CisgICAgICAgICAg
ICAkZ290ID0gVkNTVXRpbHM6OnBhcnNlR2l0RGlmZlN0YXJ0TGluZSgkaW5wdXQpOworICAgICAg
ICAgICAgaXMoJGdvdCwgJHRlc3RDYXNlLT57ZXhwZWN0ZWR9LCAkdGVzdENhc2VOYW1lKTsKKwor
ICAgICAgICAgICAgJHRlc3RDYXNlTmFtZSA9ICJwYXJzZUdpdERpZmZTdGFydExpbmUoKTogQ1JM
RiBsaW5lIGVuZGluZzogJHRlc3RDYXNlLT57dGVzdE5hbWV9IjsKKyAgICAgICAgICAgICRpbnB1
dCA9ICR0ZXN0Q2FzZS0+e2lucHV0fSAuIENSTEY7CisgICAgICAgICAgICAkZ290ID0gVkNTVXRp
bHM6OnBhcnNlR2l0RGlmZlN0YXJ0TGluZSgkaW5wdXQpOworICAgICAgICAgICAgaXMoJGdvdCwg
JHRlc3RDYXNlLT57ZXhwZWN0ZWR9LCAkdGVzdENhc2VOYW1lKTsKKworICAgICAgICAgICAgJHRl
c3RDYXNlTmFtZSA9ICJwYXJzZUdpdERpZmZTdGFydExpbmUoKTogTEYgbGluZSBlbmRpbmc6ICR0
ZXN0Q2FzZS0+e3Rlc3ROYW1lfSI7CisgICAgICAgICAgICAkaW5wdXQgPSAkdGVzdENhc2UtPntp
bnB1dH0gLiBMRjsKKyAgICAgICAgICAgICRnb3QgPSBWQ1NVdGlsczo6cGFyc2VHaXREaWZmU3Rh
cnRMaW5lKCRpbnB1dCk7CisgICAgICAgICAgICBpcygkZ290LCAkdGVzdENhc2UtPntleHBlY3Rl
ZH0sICR0ZXN0Q2FzZU5hbWUpOworICAgICAgICB9CisgICAgfSBlbHNpZiAoJHRlc3RDYXNlLT57
aXNTdm59KSB7CisgICAgICAgICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VTdm5EaWZmU3RhcnRMaW5l
KCk6IENSIGxpbmUgZW5kaW5nOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iOworICAgICAgICBteSAk
aW5wdXQgPSAkdGVzdENhc2UtPntpbnB1dH0gLiBDUjsKKyAgICAgICAgJGdvdCA9IFZDU1V0aWxz
OjpwYXJzZVN2bkRpZmZTdGFydExpbmUoJGlucHV0KTsKKyAgICAgICAgaXMoJGdvdCwgJHRlc3RD
YXNlLT57ZXhwZWN0ZWR9LCAkdGVzdENhc2VOYW1lKTsKKworICAgICAgICAkdGVzdENhc2VOYW1l
ID0gInBhcnNlU3ZuRGlmZlN0YXJ0TGluZSgpOiBDUkxGIGxpbmUgZW5kaW5nOiAkdGVzdENhc2Ut
Pnt0ZXN0TmFtZX0iOworICAgICAgICAkaW5wdXQgPSAkdGVzdENhc2UtPntpbnB1dH0gLiBDUkxG
OworICAgICAgICAkZ290ID0gVkNTVXRpbHM6OnBhcnNlU3ZuRGlmZlN0YXJ0TGluZSgkaW5wdXQp
OworICAgICAgICBpcygkZ290LCAkdGVzdENhc2UtPntleHBlY3RlZH0sICR0ZXN0Q2FzZU5hbWUp
OworCisgICAgICAgICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VTdm5EaWZmU3RhcnRMaW5lKCk6IExG
IGxpbmUgZW5kaW5nOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iOworICAgICAgICAkaW5wdXQgPSAk
dGVzdENhc2UtPntpbnB1dH0gLiBMRjsKKyAgICAgICAgJGdvdCA9IFZDU1V0aWxzOjpwYXJzZVN2
bkRpZmZTdGFydExpbmUoJGlucHV0KTsKKyAgICAgICAgaXMoJGdvdCwgJHRlc3RDYXNlLT57ZXhw
ZWN0ZWR9LCAkdGVzdENhc2VOYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWlsKCJDUiBs
aW5lIGVuZGluZzogaXNHaXQgb3IgaXNTdm4gaXMgbm90IHNldCBmb3IgJHRlc3RDYXNlLT57dGVz
dE5hbWV9Iik7CisgICAgICAgIGZhaWwoIkNGTEYgbGluZSBlbmRpbmc6IGlzR2l0IG9yIGlzU3Zu
IGlzIG5vdCBzZXQgZm9yICR0ZXN0Q2FzZS0+e3Rlc3ROYW1lfSIpOworICAgICAgICBmYWlsKCJG
TCBsaW5lIGVuZGluZzogaXNHaXQgb3IgaXNTdm4gaXMgbm90IHNldCBmb3IgJHRlc3RDYXNlLT57
dGVzdE5hbWV9Iik7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348862</attachid>
            <date>2018-09-04 16:01:18 -0700</date>
            <delta_ts>2018-09-05 13:51:25 -0700</delta_ts>
            <desc>Patch v5</desc>
            <filename>bug-14590-20180904160117.patch</filename>
            <type>text/plain</type>
            <size>17697</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzNTYyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM4IEBACisyMDE4LTA5LTA0ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CisKKyAgICAgICAgc3ZuLWNyZWF0ZS1wYXRjaCBmYWlscyB3aGVuIHN2biBtdiBpcyB1c2VkIG9u
IGRpcmVjdG9yeSB0cmVlcworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ1OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L1ZDU1V0aWxzLnBtOiBFeHBvcnQgcGFyc2VTdm5EaWZmU3RhcnRMaW5lKCkgZm9yCisgICAgICAg
IHN2bi1jcmVhdGUtcGF0Y2guCisgICAgICAgIChwYXJzZURpZmZTdGFydExpbmUpOiBVc2UgcGFy
c2VTdm5EaWZmU3RhcnRMaW5lKCkuCisgICAgICAgIChwYXJzZUdpdERpZmZTdGFydExpbmUpOiBE
b2N1bWVudCBhIHByZXJlcXVpc2l0ZS4gIEZpeCBhIGJ1ZworICAgICAgICB3aGVuIHBhcnNpbmcg
Z2l0IHBhdGNoZXMgdXNpbmcgLS1uby1wcmVmaXggd2l0aCBDRkxGIG9yIExGIGxpbmUKKyAgICAg
ICAgZW5kaW5ncy4gIEZvdW5kIGJ5IG5ldyB0ZXN0cyB3cml0dGVuIGZvcgorICAgICAgICBTY3Jp
cHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmU3RhcnRMaW5lLnBsLgor
ICAgICAgICAocGFyc2VTdm5EaWZmU3RhcnRMaW5lKTogQWRkLiAgRXh0cmFjdCBsb2dpYyBmcm9t
CisgICAgICAgIHBhcnNlRGlmZlN0YXJ0TGluZSgpIGZvciB1c2Ugd2l0aCBzdm4tY3JlYXRlLXBh
dGNoLgorCisgICAgICAgICogU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoOiBVcGRhdGUgY29weXJp
Z2h0IGFuZCBsaWNlbnNlLgorICAgICAgICAoZ2VuZXJhdGVEaWZmKTogUmV0dXJuIGVhcmx5IGZv
ciBtb3ZlZCBkaXJlY3RvcmllcyBzaW5jZQorICAgICAgICBpbmRpdmlkdWFsIGZpbGVzIHdpdGhp
biB0aGUgZGlyZWN0b3J5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgICAgICAgIChnZW5lcmF0
ZUZpbGVMaXN0KTogS2VlcCB0cmFjayBvZiBtb3ZlZCBkaXJlY3RvcmllcyBpbiB0aGUKKyAgICAg
ICAgQGFkZGl0aW9uV2l0aEhpc3RvcnlEaXJlY3RvcmllcyBhcnJheSwgdGhlbiBwcm9jZXNzIHRo
aXMgYXJyYXkKKyAgICAgICAgaW4gcmV2ZXJzZSBvcmRlciB0byBjcmVhdGUgZGVsZXRlL2FkZCBw
YXRjaGVzIGZvciBlYWNoIGZpbGUgaW4KKyAgICAgICAgYSBtb3ZlZCBkaXJlY3RvcnkuICBUaGlz
IGFsc28gcHJldmVudHMgZHVwbGljYXRlIHBhdGNoZXMuCisgICAgICAgIChtYW51ZmFjdHVyZVBh
dGNoRm9yQWRkaXRpb25XaXRoSGlzdG9yeSk6IEZpeCBhIGxvbmctc3RhbmRpbmcKKyAgICAgICAg
YnVnIHdoZXJlIHRoZSBwYXRoIHVzZWQgdG8gZGVzY3JpYmUgcHJvcGVydHkgY2hhbmdlcyBjb250
YWluZWQKKyAgICAgICAgdGhlIG9yaWdpbmFsIChtb3ZlZC1mcm9tKSBwYXRoIGluc3RlYWQgb2Yg
dGhlIG5ldyAobW92ZWQtdG8pCisgICAgICAgIHBhdGguIFRoaXMgY291bGQgY2F1c2Ugc3ZuLWFw
cGx5IHRvIGZhaWwgbXlzdGVyaW91c2x5IHdoZW4KKyAgICAgICAgdHJ5aW5nIHRvIGFwcGx5IGFu
IGVtcHR5IHBhdGNoIGNyZWF0ZWQgYnkgdGhlIHByb3BlcnR5IGNoYW5nZQorICAgICAgICBjb250
YWluaW5nIHRoZSBtb3ZlZC1mcm9tIHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBl
cmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmU3RhcnRMaW5lLnBsOiBBZGQuCisgICAgICAg
IFRlc3RzIGZvciBwYXJzZURpZmZTdGFydExpbmUoKSwgcGFyc2VHaXREaWZmU3RhcnRMaW5lKCkg
YW5kCisgICAgICAgIHBhcnNlU3ZuRGlmZlN0YXJ0TGluZSgpLgorCiAyMDE4LTA5LTA0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMzQw
ODEpOiBUZXN0V2ViS2l0QVBJLlZpZGVvQ29udHJvbHNNYW5hZ2VyLlZpZGVvQ29udHJvbHNNYW5h
Z2VyQXVkaW9FbGVtZW50Rm9sbG93aW5nVXNlckludGVyYWN0aW9uIGlzIGEgZmxha3kgdGltZW91
dApJbmRleDogVG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiAyMzU1ODQpCisrKyBUb29scy9TY3JpcHRzL1ZD
U1V0aWxzLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxMywgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRvbmVrQGdt
YWlsLmNvbSkKICMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTIgRGFuaWVs
IEJhdGVzIChkYmF0ZXNAaW50dWRhdGEuY29tKQpAQCAtODIsNiArODIsNyBAQCBCRUdJTiB7CiAg
ICAgICAgICZwYXJzZURpZmZTdGFydExpbmUKICAgICAgICAgJnBhcnNlRmlyc3RFT0wKICAgICAg
ICAgJnBhcnNlUGF0Y2gKKyAgICAgICAgJnBhcnNlU3ZuRGlmZlN0YXJ0TGluZQogICAgICAgICAm
cGF0aFJlbGF0aXZlVG9TVk5SZXBvc2l0b3J5Um9vdEZvclBhdGgKICAgICAgICAgJnBvc3NpYmx5
Q29sb3JlZAogICAgICAgICAmcHJlcGFyZVBhcnNlZFBhdGNoCkBAIC03MjMsMTQgKzcyNCwxNCBA
QCBzdWIgaXNFeGVjdXRhYmxlKCQpCiAjIFBhcnNlcyBhbiBTVk4gb3IgR2l0IGRpZmYgaGVhZGVy
IHN0YXJ0IGxpbmUuCiAjCiAjIEFyZ3M6Ci0jICAgJGxpbmU6ICJJbmRleDogIiBsaW5lIG9yICJk
aWZmIC0tZ2l0IiBsaW5lCisjICAgJGxpbmU6ICJJbmRleDogIiBsaW5lIG9yICJkaWZmIC0tZ2l0
IiBsaW5lLgogIwogIyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgZmlsZSBvciB1bmRl
ZiBpZiB0aGUgJGxpbmUgaXMgdW5yZWNvZ25pemVkLgogc3ViIHBhcnNlRGlmZlN0YXJ0TGluZSgk
KQogewogICAgIG15ICgkbGluZSkgPSBAXzsKLSAgICByZXR1cm4gJDEgaWYgJGxpbmUgPX4gLyRz
dm5EaWZmU3RhcnRSZWdFeC87CiAgICAgcmV0dXJuIHBhcnNlR2l0RGlmZlN0YXJ0TGluZSgkbGlu
ZSkgaWYgJGxpbmUgPX4gLyRnaXREaWZmU3RhcnRSZWdFeC87CisgICAgcmV0dXJuIHBhcnNlU3Zu
RGlmZlN0YXJ0TGluZSgkbGluZSk7CiB9CiAKICMgUGFyc2UgdGhlIEdpdCBkaWZmIGhlYWRlciBz
dGFydCBsaW5lLgpAQCAtNzM4LDYgKzczOSw5IEBAIHN1YiBwYXJzZURpZmZTdGFydExpbmUoJCkK
ICMgQXJnczoKICMgICAkbGluZTogImRpZmYgLS1naXQiIGxpbmUuCiAjCisjIFByZXJlcXVpc2l0
ZXM6CisjICAgJGxpbmUgYXJndW1lbnQgbWF0Y2hlcyAvJGdpdERpZmZTdGFydFJlZ0V4Ly4KKyMK
ICMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0IGZpbGUuCiBzdWIgcGFyc2VHaXREaWZm
U3RhcnRMaW5lKCQpCiB7CkBAIC03NTIsMTMgKzc1NiwyNiBAQCBzdWIgcGFyc2VHaXREaWZmU3Rh
cnRMaW5lKCQpCiAgICAgICAgIGRpZSgiQ291bGQgbm90IGZpbmQgJy8nIGluIFwiZGlmZiAtLWdp
dFwiIGxpbmU6IFwiJGxpbmVcIjsgb25seSBub24tcHJlZml4ZWQgZ2l0IGRpZmZzIChpLmUuIG5v
dCBnZW5lcmF0ZWQgd2l0aCAtLW5vLXByZWZpeCkgdGhhdCBtb3ZlIGEgdG9wLWxldmVsIGRpcmVj
dG9yeSBmaWxlIGFyZSBzdXBwb3J0ZWQuIik7CiAgICAgfQogICAgIG15ICRwYXRoUHJlZml4ID0g
JDE7Ci0gICAgaWYgKCEvXmRpZmYgLS1naXQgXFEkcGF0aFByZWZpeFxFLisgKFxRJHBhdGhQcmVm
aXhcRS4rKSQvKSB7CisgICAgaWYgKCEvXmRpZmYgLS1naXQgXFEkcGF0aFByZWZpeFxFLisgKFxR
JHBhdGhQcmVmaXhcRVteXHJcbl0rKS8pIHsKICAgICAgICAgIyBGSVhNRTogTW92aW5nIGEgZmls
ZSB0aHJvdWdoIHN1YiBkaXJlY3RvcmllcyBvZiB0b3AgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0
ZWQgKGUuZyBkaWZmIC0tZ2l0IEEvQi50eHQgQy9CLnR4dCkuCiAgICAgICAgIGRpZSgiQ291bGQg
bm90IGZpbmQgJy8nIGluIFwiZGlmZiAtLWdpdFwiIGxpbmU6IFwiJGxpbmVcIjsgb25seSBub24t
cHJlZml4ZWQgZ2l0IGRpZmZzIChpLmUuIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLW5vLXByZWZpeCkg
dGhhdCBtb3ZlIGEgZmlsZSBiZXR3ZWVuIHRvcC1sZXZlbCBkaXJlY3RvcmllcyBhcmUgc3VwcG9y
dGVkLiIpOwogICAgIH0KICAgICByZXR1cm4gJDE7CiB9CiAKKyMgUGFyc2VzIGFuIFNWTiBkaWZm
IGhlYWRlciBzdGFydCBsaW5lLgorIworIyBBcmdzOgorIyAgICRsaW5lOiAiSW5kZXg6ICIgbGlu
ZS4KKyMKKyMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0IGZpbGUgb3IgdW5kZWYgaWYg
dGhlICRsaW5lIGlzIHVucmVjb2duaXplZC4KK3N1YiBwYXJzZVN2bkRpZmZTdGFydExpbmUoJCkK
K3sKKyAgICBteSAoJGxpbmUpID0gQF87CisgICAgcmV0dXJuICQxIGlmICRsaW5lID1+IC8kc3Zu
RGlmZlN0YXJ0UmVnRXgvOworICAgIHJldHVybiB1bmRlZjsKK30KKwogIyBQYXJzZSB0aGUgbmV4
dCBHaXQgZGlmZiBoZWFkZXIgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBoYW5kbGUsIGFuZCBhZHZhbmNl
CiAjIHRoZSBoYW5kbGUgc28gdGhlIGxhc3QgbGluZSByZWFkIGlzIHRoZSBmaXJzdCBsaW5lIGFm
dGVyIHRoZSBoZWFkZXIuCiAjCkluZGV4OiBUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoCShyZXZpc2lvbiAy
MzU1ODQpCisrKyBUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzAgKzEsMjYgQEAKICMhL3Vzci9iaW4vZW52IHBlcmwKIAotIyBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwogIyBhcmUgbWV0OgotIwogIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCiAjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0jIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSMgICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKICMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAogIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAjIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKICMgRXh0
ZW5kZWQgInN2biBkaWZmIiBzY3JpcHQgZm9yIFdlYktpdCBPcGVuIFNvdXJjZSBQcm9qZWN0LCB1
c2VkIHRvIG1ha2UgcGF0Y2hlcy4KIApAQCAtMzUsMTAgKzMxLDcgQEAKICMgICBIYW5kbGVzIGJp
bmFyeSBmaWxlcyAoZW5jb2RlZCBhcyBhIGJhc2U2NCBjaHVuayBvZiB0ZXh0KS4KICMgICBTb3J0
cyB0aGUgZGlmZnMgYWxwaGFiZXRpY2FsbHkgYnkgdGV4dCBmaWxlcywgdGhlbiBiaW5hcnkgZmls
ZXMuCiAjICAgSGFuZGxlcyBjb3BpZWQgYW5kIG1vdmVkIGZpbGVzLgotIwotIyBNaXNzaW5nIGZl
YXR1cmVzOgotIwotIyAgIEhhbmRsZSBjb3BpZWQgYW5kIG1vdmVkIGRpcmVjdG9yaWVzLgorIyAg
IEhhbmRsZXMgY29waWVkIGFuZCBtb3ZlZCBkaXJlY3Rvcmllcy4KIAogdXNlIHN0cmljdDsKIHVz
ZSB3YXJuaW5nczsKQEAgLTI1Miw2ICsyNDUsOCBAQCBzdWIgZ2VuZXJhdGVEaWZmKCQkKQogICAg
IG15ICRwYXRjaCA9ICIiOwogICAgIG15ICRpc0FkZGl0aW9uV2l0aEhpc3RvcnkgPSAkZmlsZURh
dGEtPnttb2RpZmljYXRpb25UeXBlfSBlcSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CiAgICAgaWYg
KCRpc0FkZGl0aW9uV2l0aEhpc3RvcnkpIHsKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRvIGZvciBh
IG1vdmVkIGRpcmVjdG9yeSBzaW5jZSBlYWNoIG1vdmVkIGZpbGUgaXMgaGFuZGxlZCBpbmRpdmlk
dWFsbHkuCisgICAgICAgIHJldHVybiBpZiAtZCAkZmlsZURhdGEtPntwYXRofTsKICAgICAgICAg
bWFudWZhY3R1cmVQYXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvcnkoJGZpbGVEYXRhLCAkcHJlZml4
KTsKICAgICB9CiAKQEAgLTI4Myw2ICsyNzgsNyBAQCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUp
CiAgICAgbXkgJXRlc3REaXJlY3RvcmllcyA9IG1hcCB7ICRfID0+IDEgfSBxdyhMYXlvdXRUZXN0
cyk7CiAgICAgbXkgJGVzY2FwZWRTdGF0UGF0aCA9IGVzY2FwZVN1YnZlcnNpb25QYXRoKCRzdGF0
UGF0aCk7CiAgICAgbXkgQGRlbGV0ZWRGaWxlczsKKyAgICBteSBAYWRkaXRpb25XaXRoSGlzdG9y
eURpcmVjdG9yaWVzOwogCiAgICAgcHJpbnQgU1RERVJSICJQZXJmb3JtaW5nIFwic3ZuIHN0YXQg
JyRlc2NhcGVkU3RhdFBhdGgnXCJcbiIgaWYgJHZlcmJvc2U7CiAKQEAgLTMwNSw4ICszMDEsNiBA
QCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUpCiAgICAgICAgICAgICAkcGF0aCA9IHN1YnN0cigk
bGluZSwgNyk7CiAgICAgICAgIH0KIAotICAgICAgICBuZXh0IGlmIC1kICRwYXRoOwotCiAgICAg
ICAgIG15ICRtb2RpZmljYXRpb25UeXBlID0gZmluZE1vZGlmaWNhdGlvblR5cGUoJHN0YXQpOwog
CiAgICAgICAgIGlmICgkbW9kaWZpY2F0aW9uVHlwZSBlcSAibWlzc2luZyIpIHsKQEAgLTM0Mywx
MCArMzM3LDM4IEBAIHN1YiBnZW5lcmF0ZUZpbGVMaXN0KCRcJSkKICAgICAgICAgICAgIG15ICgk
c291cmNlRmlsZSwgJHNvdXJjZVJldmlzaW9uKSA9IGZpbmRTb3VyY2VGaWxlQW5kUmV2aXNpb24o
JHBhdGgpOwogICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRwYXRofS0+e3NvdXJjZUZpbGV9ID0g
JHNvdXJjZUZpbGU7CiAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JHBhdGh9LT57c291cmNlUmV2
aXNpb259ID0gJHNvdXJjZVJldmlzaW9uOworICAgICAgICAgICAgcHVzaChAYWRkaXRpb25XaXRo
SGlzdG9yeURpcmVjdG9yaWVzLCAkcGF0aCkgaWYgLWQgJHBhdGg7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2xvc2UgU1RBVDsKIAorICAgICMgSGFuZGxlIHRoZXNlIGluIHJldmVyc2Ugb3JkZXIg
c28gdGhhdCB0aGUgZGVlcGVzdCBkaXJlY3RvcnkgbW92ZXMgYXJlIHByb2Nlc3NlZCBmaXJzdC4K
KyAgICAjIFNoYWxsb3cgZGlyZWN0b3J5IG1vdmVzIGluY2x1ZGUgY2hhbmdlcyBmb3IgZGVlcGVy
IGRpcmVjdG9yaWVzLCB3aGljaCBjYXVzZXMgZG91YmxlCisgICAgIyBwcm9jZXNzaW5nIGFuZCBj
YXVzZXMgdGhlIHdyb25nIG9yaWdpbmFsIHBhdGggdG8gYmUgdXNlZCBpZiB0aGUgb3JkZXIgaXMg
bm90IHJldmVyc2VkLgorICAgIGZvcmVhY2ggbXkgJGRpcmVjdG9yeSAocmV2ZXJzZSBAYWRkaXRp
b25XaXRoSGlzdG9yeURpcmVjdG9yaWVzKSB7CisgICAgICAgIG15ICgkc291cmNlRGlyZWN0b3J5
LCAkc291cmNlUmV2aXNpb24pID0gZmluZFNvdXJjZUZpbGVBbmRSZXZpc2lvbigkZGlyZWN0b3J5
KTsKKyAgICAgICAgIyBHYXRoZXIgYSBoaWVyYXJjaGljYWwgbGlzdCBvZiBmaWxlcyBpbnNpZGUg
dGhlIG1vdmVkIGRpcmVjdG9yeS4KKyAgICAgICAgbXkgJGRpZmZPcHRpb25zID0gZGlmZk9wdGlv
bnNGb3JGaWxlKCRzb3VyY2VEaXJlY3RvcnkpOworICAgICAgICBteSAkZXNjYXBlZERpcmVjdG9y
eSA9IGVzY2FwZVN1YnZlcnNpb25QYXRoKCRkaXJlY3RvcnkpOworICAgICAgICBwcmludCBTVERF
UlIgIlBlcmZvcm1pbmcgXCJzdm4gZGlmZiAtLWRpZmYtY21kIGRpZmYgLXggLSRkaWZmT3B0aW9u
cyAnJGVzY2FwZWREaXJlY3RvcnknXCJcbiIgaWYgJHZlcmJvc2U7CisgICAgICAgIG9wZW4gRElG
RiwgInN2biBkaWZmIC0tZGlmZi1jbWQgZGlmZiAteCAtJGRpZmZPcHRpb25zICckZXNjYXBlZERp
cmVjdG9yeScgfCIgb3IgZGllOworICAgICAgICB3aGlsZSAoPERJRkY+KSB7CisgICAgICAgICAg
ICBteSAkbW92ZWRGaWxlID0gcGFyc2VTdm5EaWZmU3RhcnRMaW5lKCRfKTsKKyAgICAgICAgICAg
IGlmICgkbW92ZWRGaWxlKSB7CisgICAgICAgICAgICAgICAgIyBJZ25vcmUgb3RoZXIgZmlsZXMg
YWRkZWQvbW92ZWQgaW50byB0aGUgbW92ZWQgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgIG5l
eHQgaWYgZXhpc3RzICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfTsKKyAgICAgICAgICAgICAgICAk
ZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntwYXRofSA9ICRtb3ZlZEZpbGU7CisgICAgICAgICAg
ICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57bW9kaWZpY2F0aW9uVHlwZX0gPSAiYWRk
aXRpb25XaXRoSGlzdG9yeSI7CisgICAgICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZp
bGV9LT57aXNCaW5hcnl9ID0gaXNCaW5hcnlNaW1lVHlwZSgkbW92ZWRGaWxlKTsKKyAgICAgICAg
ICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntpc1Rlc3RGaWxlfSA9IGV4aXN0cyAk
dGVzdERpcmVjdG9yaWVzeyhGaWxlOjpTcGVjLT5zcGxpdGRpcigkbW92ZWRGaWxlKSlbMF19ID8g
MSA6IDA7CisgICAgICAgICAgICAgICAgbXkgJHJlbGF0aXZlUGF0aCA9IEZpbGU6OlNwZWMtPmFi
czJyZWwoIi8iIC4gJG1vdmVkRmlsZSwgIi8iIC4gJGRpcmVjdG9yeSk7CisgICAgICAgICAgICAg
ICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57c291cmNlRmlsZX0gPSBGaWxlOjpTcGVjLT5j
YXRmaWxlKCRzb3VyY2VEaXJlY3RvcnksICRyZWxhdGl2ZVBhdGgpOworICAgICAgICAgICAgICAg
ICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfS0+e3NvdXJjZVJldmlzaW9ufSA9ICRzb3VyY2VSZXZp
c2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbG9zZSBESUZGOworICAg
IH0KKwogICAgIGZvcmVhY2ggbXkgJHBhdGggKEBkZWxldGVkRmlsZXMpIHsKICAgICAgICAgbXkg
JGlzSW5zaWRlRGVsZXRlZERpcmVjdG9yeSA9IDA7CiAgICAgICAgIGZvcmVhY2ggbXkgJGNvbXBh
cmUgKEBkZWxldGVkRmlsZXMpIHsKQEAgLTQwOCw2ICs0MzAsNyBAQCBzdWIgbWFudWZhY3R1cmVQ
YXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvCiAgICAgICAgIHdoaWxlICg8RElGRj4pIHsKICAgICAg
ICAgICAgICMgU2tpcCB0aGUgZGlmZiBoZWFkZXIsIHNpbmNlIGl0IHdhcyBtYW51ZmFjdHVyZWQg
YWJvdmVkLgogICAgICAgICAgICAgbmV4dCBpZiArKyRjb3VudCA8IDU7CisgICAgICAgICAgICBz
L14oUHJvcGVydHkgY2hhbmdlcyBvbjpccyspJHNvdXJjZUZpbGUoW1xyXG5dKykvJDEkZmlsZSQy
LzsKICAgICAgICAgICAgIHByaW50ICRfOwogICAgICAgICB9CiAgICAgICAgIGNsb3NlIERJRkY7
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VE
aWZmU3RhcnRMaW5lLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9W
Q1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZTdGFydExpbmUucGwJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZlN0YXJ0
TGluZS5wbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorIyEvdXNyL2Jpbi9lbnYg
cGVybAorCisjIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisj
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFVuaXQg
dGVzdHMgZm9yIHBhcnNlRGlmZlN0YXJ0TGluZSgpLCBwYXJzZUdpdERpZmZTdGFydExpbmUoKSwg
cGFyc2VTdm5EaWZmU3RhcnRMaW5lKCkuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisK
K3VzZSBjb25zdGFudCB7CisgICAgQ1IgPT4gIlxyIiwKKyAgICBDUkxGID0+ICJcclxuIiwKKyAg
ICBMRiA9PiAiXG4iLAorfTsKKwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVkNTVXRpbHM7CisKK215
IEB0ZXN0Q2FzZXMgPSAoCit7CisgICAgZXhwZWN0ZWQgPT4gIlNvdXJjZS9NYWtlZmlsZS5zaGFy
ZWQiLAorICAgIGlucHV0ID0+ICJkaWZmIC0tZ2l0IGEvU291cmNlL01ha2VmaWxlLnNoYXJlZCBi
L1NvdXJjZS9NYWtlZmlsZS5zaGFyZWQiLAorICAgIGlzR2l0ID0+IDEsCisgICAgaXNWYWxpZCA9
PiAxLAorICAgIHRlc3ROYW1lID0+ICJHaXQiLAorfSwKK3sKKyAgICBleHBlY3RlZCA9PiAiU291
cmNlL01ha2VmaWxlLnNoYXJlZCIsCisgICAgaW5wdXQgPT4gImRpZmYgLS1naXQgU291cmNlL01h
a2VmaWxlLnNoYXJlZCBTb3VyY2UvTWFrZWZpbGUuc2hhcmVkIiwKKyAgICBpc0dpdCA9PiAxLAor
ICAgIGlzVmFsaWQgPT4gMSwKKyAgICB0ZXN0TmFtZSA9PiAiR2l0IC0tbm8tcHJlZml4IiwKK30s
Cit7CisgICAgZXhwZWN0ZWQgPT4gIkxheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJj
ZXMvYSBzdWNjZXNzLmh0bWwiLAorICAgIGlucHV0ID0+ICJkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9hIHN1Y2Nlc3MuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvYSBzdWNjZXNzLmh0bWwiLAorICAgIGlzR2l0ID0+
IDEsCisgICAgaXNWYWxpZCA9PiAxLAorICAgIHRlc3ROYW1lID0+ICJHaXQgd2l0aCBzcGFjZSBp
biBwYXRoIiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4gdW5kZWYsCisgICAgaW5wdXQgPT4gIj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0iLAorICAgIGlzR2l0ID0+IDEsCisgICAgaXNWYWxpZCA9PiAwLAorICAgIHRlc3RO
YW1lID0+ICJHaXQgd2l0aCBpbnZhbGlkIGlucHV0IiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4g
IlNvdXJjZS9NYWtlZmlsZS5zaGFyZWQiLAorICAgIGlucHV0ID0+ICJJbmRleDogU291cmNlL01h
a2VmaWxlLnNoYXJlZCIsCisgICAgaXNTdm4gPT4gMSwKKyAgICBpc1ZhbGlkID0+IDEsCisgICAg
dGVzdE5hbWUgPT4gIlN2biIsCit9LAoreworICAgIGV4cGVjdGVkID0+ICJMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2Egc3VjY2Vzcy5odG1sIiwKKyAgICBpbnB1dCA9PiAi
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvYSBzdWNjZXNzLmh0
bWwiLAorICAgIGlzU3ZuID0+IDEsCisgICAgaXNWYWxpZCA9PiAxLAorICAgIHRlc3ROYW1lID0+
ICJTdm4gd2l0aCBzcGFjZSBpbiBwYXRoIiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4gdW5kZWYs
CisgICAgaW5wdXQgPT4gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0iLAorICAgIGlzU3ZuID0+IDEsCisgICAgaXNWYWxp
ZCA9PiAwLAorICAgIHRlc3ROYW1lID0+ICJTdm4gd2l0aCBpbnZhbGlkIGlucHV0IiwKK30sCisp
OworCitteSAkdGVzdENhc2VDb3VudCA9IHNjYWxhciBAdGVzdENhc2VzOworcGxhbih0ZXN0cyA9
PiA5ICogJHRlc3RDYXNlQ291bnQpOworCitmb3JlYWNoIG15ICR0ZXN0Q2FzZSAoQHRlc3RDYXNl
cykgeworICAgICMgTWFrZSBzdXJlIGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIG5ldyB0ZXN0IGNh
c2VzIGFyZSB2YWxpZC4KKyAgICBvayhleGlzdHMgJHRlc3RDYXNlLT57ZXhwZWN0ZWR9LCAiJ2V4
cGVjdGVkJyBrZXkgZXhpc3RzOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iKTsKKyAgICBvayhleGlz
dHMgJHRlc3RDYXNlLT57aW5wdXR9LCAiJ2lucHV0JyBrZXkgZXhpc3RzOiAkdGVzdENhc2UtPnt0
ZXN0TmFtZX0iKTsKKyAgICBvayhleGlzdHMgJHRlc3RDYXNlLT57aXNHaXR9IF4gZXhpc3RzICR0
ZXN0Q2FzZS0+e2lzU3ZufSwgIkV4YWN0bHkgb25lIG9mICdpc0dpdCcga2V5IG9yICdpc1N2bicg
a2V5IGV4aXN0czogJHRlc3RDYXNlLT57dGVzdE5hbWV9Iik7CisgICAgb2soZXhpc3RzICR0ZXN0
Q2FzZS0+e2lzVmFsaWR9LCAiJ2lzVmFsaWQnIGtleSBleGlzdHM6ICR0ZXN0Q2FzZS0+e3Rlc3RO
YW1lfSIpOworICAgIG9rKGV4aXN0cyAkdGVzdENhc2UtPnt0ZXN0TmFtZX0sICIndGVzdE5hbWUn
IGtleSBleGlzdHMiKTsKKworICAgIG15ICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VEaWZmU3RhcnRM
aW5lKCk6ICR0ZXN0Q2FzZS0+e3Rlc3ROYW1lfSI7CisgICAgbXkgJGdvdCA9IFZDU1V0aWxzOjpw
YXJzZURpZmZTdGFydExpbmUoJHRlc3RDYXNlLT57aW5wdXR9KTsKKyAgICBpcygkZ290LCAkdGVz
dENhc2UtPntleHBlY3RlZH0sICR0ZXN0Q2FzZU5hbWUpOworCisgICAgaWYgKCR0ZXN0Q2FzZS0+
e2lzR2l0fSkgeworICAgICAgICBTS0lQOiB7CisgICAgICAgICAgICBza2lwICJwYXJzZUdpdERp
ZmZTdGFydExpbmUoKSBkb2VzIG5vdCBoYW5kbGUgaW52YWxpZCBpbnB1dCIsIDMgaWYgISR0ZXN0
Q2FzZS0+e2lzVmFsaWR9OworCisgICAgICAgICAgICAkdGVzdENhc2VOYW1lID0gInBhcnNlR2l0
RGlmZlN0YXJ0TGluZSgpOiBDUiBsaW5lIGVuZGluZzogJHRlc3RDYXNlLT57dGVzdE5hbWV9IjsK
KyAgICAgICAgICAgIG15ICRpbnB1dCA9ICR0ZXN0Q2FzZS0+e2lucHV0fSAuIENSOworICAgICAg
ICAgICAgJGdvdCA9IFZDU1V0aWxzOjpwYXJzZUdpdERpZmZTdGFydExpbmUoJGlucHV0KTsKKyAg
ICAgICAgICAgIGlzKCRnb3QsICR0ZXN0Q2FzZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7
CisKKyAgICAgICAgICAgICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VHaXREaWZmU3RhcnRMaW5lKCk6
IENSTEYgbGluZSBlbmRpbmc6ICR0ZXN0Q2FzZS0+e3Rlc3ROYW1lfSI7CisgICAgICAgICAgICAk
aW5wdXQgPSAkdGVzdENhc2UtPntpbnB1dH0gLiBDUkxGOworICAgICAgICAgICAgJGdvdCA9IFZD
U1V0aWxzOjpwYXJzZUdpdERpZmZTdGFydExpbmUoJGlucHV0KTsKKyAgICAgICAgICAgIGlzKCRn
b3QsICR0ZXN0Q2FzZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7CisKKyAgICAgICAgICAg
ICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VHaXREaWZmU3RhcnRMaW5lKCk6IExGIGxpbmUgZW5kaW5n
OiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iOworICAgICAgICAgICAgJGlucHV0ID0gJHRlc3RDYXNl
LT57aW5wdXR9IC4gTEY7CisgICAgICAgICAgICAkZ290ID0gVkNTVXRpbHM6OnBhcnNlR2l0RGlm
ZlN0YXJ0TGluZSgkaW5wdXQpOworICAgICAgICAgICAgaXMoJGdvdCwgJHRlc3RDYXNlLT57ZXhw
ZWN0ZWR9LCAkdGVzdENhc2VOYW1lKTsKKyAgICAgICAgfQorICAgIH0gZWxzaWYgKCR0ZXN0Q2Fz
ZS0+e2lzU3ZufSkgeworICAgICAgICAkdGVzdENhc2VOYW1lID0gInBhcnNlU3ZuRGlmZlN0YXJ0
TGluZSgpOiBDUiBsaW5lIGVuZGluZzogJHRlc3RDYXNlLT57dGVzdE5hbWV9IjsKKyAgICAgICAg
bXkgJGlucHV0ID0gJHRlc3RDYXNlLT57aW5wdXR9IC4gQ1I7CisgICAgICAgICRnb3QgPSBWQ1NV
dGlsczo6cGFyc2VTdm5EaWZmU3RhcnRMaW5lKCRpbnB1dCk7CisgICAgICAgIGlzKCRnb3QsICR0
ZXN0Q2FzZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7CisKKyAgICAgICAgJHRlc3RDYXNl
TmFtZSA9ICJwYXJzZVN2bkRpZmZTdGFydExpbmUoKTogQ1JMRiBsaW5lIGVuZGluZzogJHRlc3RD
YXNlLT57dGVzdE5hbWV9IjsKKyAgICAgICAgJGlucHV0ID0gJHRlc3RDYXNlLT57aW5wdXR9IC4g
Q1JMRjsKKyAgICAgICAgJGdvdCA9IFZDU1V0aWxzOjpwYXJzZVN2bkRpZmZTdGFydExpbmUoJGlu
cHV0KTsKKyAgICAgICAgaXMoJGdvdCwgJHRlc3RDYXNlLT57ZXhwZWN0ZWR9LCAkdGVzdENhc2VO
YW1lKTsKKworICAgICAgICAkdGVzdENhc2VOYW1lID0gInBhcnNlU3ZuRGlmZlN0YXJ0TGluZSgp
OiBMRiBsaW5lIGVuZGluZzogJHRlc3RDYXNlLT57dGVzdE5hbWV9IjsKKyAgICAgICAgJGlucHV0
ID0gJHRlc3RDYXNlLT57aW5wdXR9IC4gTEY7CisgICAgICAgICRnb3QgPSBWQ1NVdGlsczo6cGFy
c2VTdm5EaWZmU3RhcnRMaW5lKCRpbnB1dCk7CisgICAgICAgIGlzKCRnb3QsICR0ZXN0Q2FzZS0+
e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFpbCgi
Q1IgbGluZSBlbmRpbmc6IGlzR2l0IG9yIGlzU3ZuIGlzIG5vdCBzZXQgZm9yICR0ZXN0Q2FzZS0+
e3Rlc3ROYW1lfSIpOworICAgICAgICBmYWlsKCJDRkxGIGxpbmUgZW5kaW5nOiBpc0dpdCBvciBp
c1N2biBpcyBub3Qgc2V0IGZvciAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iKTsKKyAgICAgICAgZmFp
bCgiRkwgbGluZSBlbmRpbmc6IGlzR2l0IG9yIGlzU3ZuIGlzIG5vdCBzZXQgZm9yICR0ZXN0Q2Fz
ZS0+e3Rlc3ROYW1lfSIpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348961</attachid>
            <date>2018-09-05 13:51:27 -0700</date>
            <delta_ts>2018-09-05 22:04:55 -0700</delta_ts>
            <desc>Patch v6</desc>
            <filename>bug-14590-20180905135126.patch</filename>
            <type>text/plain</type>
            <size>17703</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIzNTYyMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM4IEBACisyMDE4LTA5LTA1ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CisKKyAgICAgICAgc3ZuLWNyZWF0ZS1wYXRjaCBmYWlscyB3aGVuIHN2biBtdiBpcyB1c2VkIG9u
IGRpcmVjdG9yeSB0cmVlcworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ1OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L1ZDU1V0aWxzLnBtOiBFeHBvcnQgcGFyc2VTdm5EaWZmU3RhcnRMaW5lKCkgZm9yCisgICAgICAg
IHN2bi1jcmVhdGUtcGF0Y2guCisgICAgICAgIChwYXJzZURpZmZTdGFydExpbmUpOiBVc2UgcGFy
c2VTdm5EaWZmU3RhcnRMaW5lKCkuCisgICAgICAgIChwYXJzZUdpdERpZmZTdGFydExpbmUpOiBE
b2N1bWVudCBhIHByZXJlcXVpc2l0ZS4gIEZpeCBhIGJ1ZworICAgICAgICB3aGVuIHBhcnNpbmcg
Z2l0IHBhdGNoZXMgdXNpbmcgYGdpdCBkaWZmIC0tbm8tcHJlZml4YCBub24tbmF0aXZlCisgICAg
ICAgIGxpbmUgZW5kaW5ncy4gIEZvdW5kIGJ5IG5ldyB0ZXN0cyB3cml0dGVuIGZvcgorICAgICAg
ICBTY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmU3RhcnRMaW5l
LnBsLgorICAgICAgICAocGFyc2VTdm5EaWZmU3RhcnRMaW5lKTogQWRkLiAgRXh0cmFjdCBsb2dp
YyBmcm9tCisgICAgICAgIHBhcnNlRGlmZlN0YXJ0TGluZSgpIGZvciB1c2Ugd2l0aCBzdm4tY3Jl
YXRlLXBhdGNoLgorCisgICAgICAgICogU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoOiBVcGRhdGUg
Y29weXJpZ2h0IGFuZCBsaWNlbnNlLgorICAgICAgICAoZ2VuZXJhdGVEaWZmKTogUmV0dXJuIGVh
cmx5IGZvciBtb3ZlZCBkaXJlY3RvcmllcyBzaW5jZQorICAgICAgICBpbmRpdmlkdWFsIGZpbGVz
IHdpdGhpbiB0aGUgZGlyZWN0b3J5IGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgICAgICAgIChn
ZW5lcmF0ZUZpbGVMaXN0KTogS2VlcCB0cmFjayBvZiBtb3ZlZCBkaXJlY3RvcmllcyBpbiB0aGUK
KyAgICAgICAgQGFkZGl0aW9uV2l0aEhpc3RvcnlEaXJlY3RvcmllcyBhcnJheSwgdGhlbiBwcm9j
ZXNzIHRoaXMgYXJyYXkKKyAgICAgICAgaW4gcmV2ZXJzZSBvcmRlciB0byBjcmVhdGUgZGVsZXRl
L2FkZCBwYXRjaGVzIGZvciBlYWNoIGZpbGUgaW4KKyAgICAgICAgYSBtb3ZlZCBkaXJlY3Rvcnku
ICBUaGlzIGFsc28gcHJldmVudHMgZHVwbGljYXRlIHBhdGNoZXMuCisgICAgICAgIChtYW51ZmFj
dHVyZVBhdGNoRm9yQWRkaXRpb25XaXRoSGlzdG9yeSk6IEZpeCBhIGxvbmctc3RhbmRpbmcKKyAg
ICAgICAgYnVnIHdoZXJlIHRoZSBwYXRoIHVzZWQgdG8gZGVzY3JpYmUgcHJvcGVydHkgY2hhbmdl
cyBjb250YWluZWQKKyAgICAgICAgdGhlIG9yaWdpbmFsIChtb3ZlZC1mcm9tKSBwYXRoIGluc3Rl
YWQgb2YgdGhlIG5ldyAobW92ZWQtdG8pCisgICAgICAgIHBhdGguIFRoaXMgY291bGQgY2F1c2Ug
c3ZuLWFwcGx5IHRvIGZhaWwgbXlzdGVyaW91c2x5IHdoZW4KKyAgICAgICAgdHJ5aW5nIHRvIGFw
cGx5IGFuIGVtcHR5IHBhdGNoIGNyZWF0ZWQgYnkgdGhlIHByb3BlcnR5IGNoYW5nZQorICAgICAg
ICBjb250YWluaW5nIHRoZSBtb3ZlZC1mcm9tIHBhdGguCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmU3RhcnRMaW5lLnBsOiBBZGQuCisg
ICAgICAgIFRlc3RzIGZvciBwYXJzZURpZmZTdGFydExpbmUoKSwgcGFyc2VHaXREaWZmU3RhcnRM
aW5lKCkgYW5kCisgICAgICAgIHBhcnNlU3ZuRGlmZlN0YXJ0TGluZSgpLgorCiAyMDE4LTA5LTA0
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04g
KHIyMzQwODEpOiBUZXN0V2ViS2l0QVBJLlZpZGVvQ29udHJvbHNNYW5hZ2VyLlZpZGVvQ29udHJv
bHNNYW5hZ2VyQXVkaW9FbGVtZW50Rm9sbG93aW5nVXNlckludGVyYWN0aW9uIGlzIGEgZmxha3kg
dGltZW91dApJbmRleDogVG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiAyMzU1ODQpCisrKyBUb29scy9TY3Jp
cHRzL1ZDU1V0aWxzLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMDctMjAxMywgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQ2hyaXMgSmVyZG9uZWsgKGNocmlzLmplcmRv
bmVrQGdtYWlsLmNvbSkKICMgQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTIg
RGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50dWRhdGEuY29tKQpAQCAtODIsNiArODIsNyBAQCBCRUdJ
TiB7CiAgICAgICAgICZwYXJzZURpZmZTdGFydExpbmUKICAgICAgICAgJnBhcnNlRmlyc3RFT0wK
ICAgICAgICAgJnBhcnNlUGF0Y2gKKyAgICAgICAgJnBhcnNlU3ZuRGlmZlN0YXJ0TGluZQogICAg
ICAgICAmcGF0aFJlbGF0aXZlVG9TVk5SZXBvc2l0b3J5Um9vdEZvclBhdGgKICAgICAgICAgJnBv
c3NpYmx5Q29sb3JlZAogICAgICAgICAmcHJlcGFyZVBhcnNlZFBhdGNoCkBAIC03MjMsMTQgKzcy
NCwxNCBAQCBzdWIgaXNFeGVjdXRhYmxlKCQpCiAjIFBhcnNlcyBhbiBTVk4gb3IgR2l0IGRpZmYg
aGVhZGVyIHN0YXJ0IGxpbmUuCiAjCiAjIEFyZ3M6Ci0jICAgJGxpbmU6ICJJbmRleDogIiBsaW5l
IG9yICJkaWZmIC0tZ2l0IiBsaW5lCisjICAgJGxpbmU6ICJJbmRleDogIiBsaW5lIG9yICJkaWZm
IC0tZ2l0IiBsaW5lLgogIwogIyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSB0YXJnZXQgZmlsZSBv
ciB1bmRlZiBpZiB0aGUgJGxpbmUgaXMgdW5yZWNvZ25pemVkLgogc3ViIHBhcnNlRGlmZlN0YXJ0
TGluZSgkKQogewogICAgIG15ICgkbGluZSkgPSBAXzsKLSAgICByZXR1cm4gJDEgaWYgJGxpbmUg
PX4gLyRzdm5EaWZmU3RhcnRSZWdFeC87CiAgICAgcmV0dXJuIHBhcnNlR2l0RGlmZlN0YXJ0TGlu
ZSgkbGluZSkgaWYgJGxpbmUgPX4gLyRnaXREaWZmU3RhcnRSZWdFeC87CisgICAgcmV0dXJuIHBh
cnNlU3ZuRGlmZlN0YXJ0TGluZSgkbGluZSk7CiB9CiAKICMgUGFyc2UgdGhlIEdpdCBkaWZmIGhl
YWRlciBzdGFydCBsaW5lLgpAQCAtNzM4LDYgKzczOSw5IEBAIHN1YiBwYXJzZURpZmZTdGFydExp
bmUoJCkKICMgQXJnczoKICMgICAkbGluZTogImRpZmYgLS1naXQiIGxpbmUuCiAjCisjIFByZXJl
cXVpc2l0ZXM6CisjICAgJGxpbmUgYXJndW1lbnQgbWF0Y2hlcyAvJGdpdERpZmZTdGFydFJlZ0V4
Ly4KKyMKICMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0IGZpbGUuCiBzdWIgcGFyc2VH
aXREaWZmU3RhcnRMaW5lKCQpCiB7CkBAIC03NTIsMTMgKzc1NiwyNiBAQCBzdWIgcGFyc2VHaXRE
aWZmU3RhcnRMaW5lKCQpCiAgICAgICAgIGRpZSgiQ291bGQgbm90IGZpbmQgJy8nIGluIFwiZGlm
ZiAtLWdpdFwiIGxpbmU6IFwiJGxpbmVcIjsgb25seSBub24tcHJlZml4ZWQgZ2l0IGRpZmZzIChp
LmUuIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLW5vLXByZWZpeCkgdGhhdCBtb3ZlIGEgdG9wLWxldmVs
IGRpcmVjdG9yeSBmaWxlIGFyZSBzdXBwb3J0ZWQuIik7CiAgICAgfQogICAgIG15ICRwYXRoUHJl
Zml4ID0gJDE7Ci0gICAgaWYgKCEvXmRpZmYgLS1naXQgXFEkcGF0aFByZWZpeFxFLisgKFxRJHBh
dGhQcmVmaXhcRS4rKSQvKSB7CisgICAgaWYgKCEvXmRpZmYgLS1naXQgXFEkcGF0aFByZWZpeFxF
LisgKFxRJHBhdGhQcmVmaXhcRVteXHJcbl0rKS8pIHsKICAgICAgICAgIyBGSVhNRTogTW92aW5n
IGEgZmlsZSB0aHJvdWdoIHN1YiBkaXJlY3RvcmllcyBvZiB0b3AgZGlyZWN0b3J5IGlzIG5vdCBz
dXBwb3J0ZWQgKGUuZyBkaWZmIC0tZ2l0IEEvQi50eHQgQy9CLnR4dCkuCiAgICAgICAgIGRpZSgi
Q291bGQgbm90IGZpbmQgJy8nIGluIFwiZGlmZiAtLWdpdFwiIGxpbmU6IFwiJGxpbmVcIjsgb25s
eSBub24tcHJlZml4ZWQgZ2l0IGRpZmZzIChpLmUuIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLW5vLXBy
ZWZpeCkgdGhhdCBtb3ZlIGEgZmlsZSBiZXR3ZWVuIHRvcC1sZXZlbCBkaXJlY3RvcmllcyBhcmUg
c3VwcG9ydGVkLiIpOwogICAgIH0KICAgICByZXR1cm4gJDE7CiB9CiAKKyMgUGFyc2VzIGFuIFNW
TiBkaWZmIGhlYWRlciBzdGFydCBsaW5lLgorIworIyBBcmdzOgorIyAgICRsaW5lOiAiSW5kZXg6
ICIgbGluZS4KKyMKKyMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgdGFyZ2V0IGZpbGUgb3IgdW5k
ZWYgaWYgdGhlICRsaW5lIGlzIHVucmVjb2duaXplZC4KK3N1YiBwYXJzZVN2bkRpZmZTdGFydExp
bmUoJCkKK3sKKyAgICBteSAoJGxpbmUpID0gQF87CisgICAgcmV0dXJuICQxIGlmICRsaW5lID1+
IC8kc3ZuRGlmZlN0YXJ0UmVnRXgvOworICAgIHJldHVybiB1bmRlZjsKK30KKwogIyBQYXJzZSB0
aGUgbmV4dCBHaXQgZGlmZiBoZWFkZXIgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBoYW5kbGUsIGFuZCBh
ZHZhbmNlCiAjIHRoZSBoYW5kbGUgc28gdGhlIGxhc3QgbGluZSByZWFkIGlzIHRoZSBmaXJzdCBs
aW5lIGFmdGVyIHRoZSBoZWFkZXIuCiAjCkluZGV4OiBUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUt
cGF0Y2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoCShyZXZp
c2lvbiAyMzU1ODQpCisrKyBUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0Y2gJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzAgKzEsMjYgQEAKICMhL3Vzci9iaW4vZW52IHBlcmwKIAotIyBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMK
ICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogIyBhcmUgbWV0OgotIwogIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCiAjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCi0jIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSMgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKICMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAjIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAj
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
ICMgRXh0ZW5kZWQgInN2biBkaWZmIiBzY3JpcHQgZm9yIFdlYktpdCBPcGVuIFNvdXJjZSBQcm9q
ZWN0LCB1c2VkIHRvIG1ha2UgcGF0Y2hlcy4KIApAQCAtMzUsMTAgKzMxLDcgQEAKICMgICBIYW5k
bGVzIGJpbmFyeSBmaWxlcyAoZW5jb2RlZCBhcyBhIGJhc2U2NCBjaHVuayBvZiB0ZXh0KS4KICMg
ICBTb3J0cyB0aGUgZGlmZnMgYWxwaGFiZXRpY2FsbHkgYnkgdGV4dCBmaWxlcywgdGhlbiBiaW5h
cnkgZmlsZXMuCiAjICAgSGFuZGxlcyBjb3BpZWQgYW5kIG1vdmVkIGZpbGVzLgotIwotIyBNaXNz
aW5nIGZlYXR1cmVzOgotIwotIyAgIEhhbmRsZSBjb3BpZWQgYW5kIG1vdmVkIGRpcmVjdG9yaWVz
LgorIyAgIEhhbmRsZXMgY29waWVkIGFuZCBtb3ZlZCBkaXJlY3Rvcmllcy4KIAogdXNlIHN0cmlj
dDsKIHVzZSB3YXJuaW5nczsKQEAgLTI1Miw2ICsyNDUsOCBAQCBzdWIgZ2VuZXJhdGVEaWZmKCQk
KQogICAgIG15ICRwYXRjaCA9ICIiOwogICAgIG15ICRpc0FkZGl0aW9uV2l0aEhpc3RvcnkgPSAk
ZmlsZURhdGEtPnttb2RpZmljYXRpb25UeXBlfSBlcSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CiAg
ICAgaWYgKCRpc0FkZGl0aW9uV2l0aEhpc3RvcnkpIHsKKyAgICAgICAgIyBOb3RoaW5nIHRvIGRv
IGZvciBhIG1vdmVkIGRpcmVjdG9yeSBzaW5jZSBlYWNoIG1vdmVkIGZpbGUgaXMgaGFuZGxlZCBp
bmRpdmlkdWFsbHkuCisgICAgICAgIHJldHVybiBpZiAtZCAkZmlsZURhdGEtPntwYXRofTsKICAg
ICAgICAgbWFudWZhY3R1cmVQYXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvcnkoJGZpbGVEYXRhLCAk
cHJlZml4KTsKICAgICB9CiAKQEAgLTI4Myw2ICsyNzgsNyBAQCBzdWIgZ2VuZXJhdGVGaWxlTGlz
dCgkXCUpCiAgICAgbXkgJXRlc3REaXJlY3RvcmllcyA9IG1hcCB7ICRfID0+IDEgfSBxdyhMYXlv
dXRUZXN0cyk7CiAgICAgbXkgJGVzY2FwZWRTdGF0UGF0aCA9IGVzY2FwZVN1YnZlcnNpb25QYXRo
KCRzdGF0UGF0aCk7CiAgICAgbXkgQGRlbGV0ZWRGaWxlczsKKyAgICBteSBAYWRkaXRpb25XaXRo
SGlzdG9yeURpcmVjdG9yaWVzOwogCiAgICAgcHJpbnQgU1RERVJSICJQZXJmb3JtaW5nIFwic3Zu
IHN0YXQgJyRlc2NhcGVkU3RhdFBhdGgnXCJcbiIgaWYgJHZlcmJvc2U7CiAKQEAgLTMwNSw4ICsz
MDEsNiBAQCBzdWIgZ2VuZXJhdGVGaWxlTGlzdCgkXCUpCiAgICAgICAgICAgICAkcGF0aCA9IHN1
YnN0cigkbGluZSwgNyk7CiAgICAgICAgIH0KIAotICAgICAgICBuZXh0IGlmIC1kICRwYXRoOwot
CiAgICAgICAgIG15ICRtb2RpZmljYXRpb25UeXBlID0gZmluZE1vZGlmaWNhdGlvblR5cGUoJHN0
YXQpOwogCiAgICAgICAgIGlmICgkbW9kaWZpY2F0aW9uVHlwZSBlcSAibWlzc2luZyIpIHsKQEAg
LTM0MywxMCArMzM3LDM4IEBAIHN1YiBnZW5lcmF0ZUZpbGVMaXN0KCRcJSkKICAgICAgICAgICAg
IG15ICgkc291cmNlRmlsZSwgJHNvdXJjZVJldmlzaW9uKSA9IGZpbmRTb3VyY2VGaWxlQW5kUmV2
aXNpb24oJHBhdGgpOwogICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRwYXRofS0+e3NvdXJjZUZp
bGV9ID0gJHNvdXJjZUZpbGU7CiAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JHBhdGh9LT57c291
cmNlUmV2aXNpb259ID0gJHNvdXJjZVJldmlzaW9uOworICAgICAgICAgICAgcHVzaChAYWRkaXRp
b25XaXRoSGlzdG9yeURpcmVjdG9yaWVzLCAkcGF0aCkgaWYgLWQgJHBhdGg7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2xvc2UgU1RBVDsKIAorICAgICMgSGFuZGxlIHRoZXNlIGluIHJldmVyc2Ug
b3JkZXIgc28gdGhhdCB0aGUgZGVlcGVzdCBkaXJlY3RvcnkgbW92ZXMgYXJlIHByb2Nlc3NlZCBm
aXJzdC4KKyAgICAjIFNoYWxsb3cgZGlyZWN0b3J5IG1vdmVzIGluY2x1ZGUgY2hhbmdlcyBmb3Ig
ZGVlcGVyIGRpcmVjdG9yaWVzLCB3aGljaCBjYXVzZXMgZG91YmxlCisgICAgIyBwcm9jZXNzaW5n
IGFuZCBjYXVzZXMgdGhlIHdyb25nIG9yaWdpbmFsIHBhdGggdG8gYmUgdXNlZCBpZiB0aGUgb3Jk
ZXIgaXMgbm90IHJldmVyc2VkLgorICAgIGZvcmVhY2ggbXkgJGRpcmVjdG9yeSAocmV2ZXJzZSBA
YWRkaXRpb25XaXRoSGlzdG9yeURpcmVjdG9yaWVzKSB7CisgICAgICAgIG15ICgkc291cmNlRGly
ZWN0b3J5LCAkc291cmNlUmV2aXNpb24pID0gZmluZFNvdXJjZUZpbGVBbmRSZXZpc2lvbigkZGly
ZWN0b3J5KTsKKyAgICAgICAgIyBHYXRoZXIgYSBoaWVyYXJjaGljYWwgbGlzdCBvZiBmaWxlcyBp
bnNpZGUgdGhlIG1vdmVkIGRpcmVjdG9yeS4KKyAgICAgICAgbXkgJGRpZmZPcHRpb25zID0gZGlm
Zk9wdGlvbnNGb3JGaWxlKCRzb3VyY2VEaXJlY3RvcnkpOworICAgICAgICBteSAkZXNjYXBlZERp
cmVjdG9yeSA9IGVzY2FwZVN1YnZlcnNpb25QYXRoKCRkaXJlY3RvcnkpOworICAgICAgICBwcmlu
dCBTVERFUlIgIlBlcmZvcm1pbmcgXCJzdm4gZGlmZiAtLWRpZmYtY21kIGRpZmYgLXggLSRkaWZm
T3B0aW9ucyAnJGVzY2FwZWREaXJlY3RvcnknXCJcbiIgaWYgJHZlcmJvc2U7CisgICAgICAgIG9w
ZW4gRElGRiwgInN2biBkaWZmIC0tZGlmZi1jbWQgZGlmZiAteCAtJGRpZmZPcHRpb25zICckZXNj
YXBlZERpcmVjdG9yeScgfCIgb3IgZGllOworICAgICAgICB3aGlsZSAoPERJRkY+KSB7CisgICAg
ICAgICAgICBteSAkbW92ZWRGaWxlID0gcGFyc2VTdm5EaWZmU3RhcnRMaW5lKCRfKTsKKyAgICAg
ICAgICAgIGlmICgkbW92ZWRGaWxlKSB7CisgICAgICAgICAgICAgICAgIyBJZ25vcmUgb3RoZXIg
ZmlsZXMgYWRkZWQvbW92ZWQgaW50byB0aGUgbW92ZWQgZGlyZWN0b3J5LgorICAgICAgICAgICAg
ICAgIG5leHQgaWYgZXhpc3RzICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfTsKKyAgICAgICAgICAg
ICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntwYXRofSA9ICRtb3ZlZEZpbGU7CisgICAg
ICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57bW9kaWZpY2F0aW9uVHlwZX0g
PSAiYWRkaXRpb25XaXRoSGlzdG9yeSI7CisgICAgICAgICAgICAgICAgJGRpZmZGaWxlcy0+eyRt
b3ZlZEZpbGV9LT57aXNCaW5hcnl9ID0gaXNCaW5hcnlNaW1lVHlwZSgkbW92ZWRGaWxlKTsKKyAg
ICAgICAgICAgICAgICAkZGlmZkZpbGVzLT57JG1vdmVkRmlsZX0tPntpc1Rlc3RGaWxlfSA9IGV4
aXN0cyAkdGVzdERpcmVjdG9yaWVzeyhGaWxlOjpTcGVjLT5zcGxpdGRpcigkbW92ZWRGaWxlKSlb
MF19ID8gMSA6IDA7CisgICAgICAgICAgICAgICAgbXkgJHJlbGF0aXZlUGF0aCA9IEZpbGU6OlNw
ZWMtPmFiczJyZWwoIi8iIC4gJG1vdmVkRmlsZSwgIi8iIC4gJGRpcmVjdG9yeSk7CisgICAgICAg
ICAgICAgICAgJGRpZmZGaWxlcy0+eyRtb3ZlZEZpbGV9LT57c291cmNlRmlsZX0gPSBGaWxlOjpT
cGVjLT5jYXRmaWxlKCRzb3VyY2VEaXJlY3RvcnksICRyZWxhdGl2ZVBhdGgpOworICAgICAgICAg
ICAgICAgICRkaWZmRmlsZXMtPnskbW92ZWRGaWxlfS0+e3NvdXJjZVJldmlzaW9ufSA9ICRzb3Vy
Y2VSZXZpc2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbG9zZSBESUZG
OworICAgIH0KKwogICAgIGZvcmVhY2ggbXkgJHBhdGggKEBkZWxldGVkRmlsZXMpIHsKICAgICAg
ICAgbXkgJGlzSW5zaWRlRGVsZXRlZERpcmVjdG9yeSA9IDA7CiAgICAgICAgIGZvcmVhY2ggbXkg
JGNvbXBhcmUgKEBkZWxldGVkRmlsZXMpIHsKQEAgLTQwOCw2ICs0MzAsNyBAQCBzdWIgbWFudWZh
Y3R1cmVQYXRjaEZvckFkZGl0aW9uV2l0aEhpc3RvCiAgICAgICAgIHdoaWxlICg8RElGRj4pIHsK
ICAgICAgICAgICAgICMgU2tpcCB0aGUgZGlmZiBoZWFkZXIsIHNpbmNlIGl0IHdhcyBtYW51ZmFj
dHVyZWQgYWJvdmVkLgogICAgICAgICAgICAgbmV4dCBpZiArKyRjb3VudCA8IDU7CisgICAgICAg
ICAgICBzL14oUHJvcGVydHkgY2hhbmdlcyBvbjpccyspJHNvdXJjZUZpbGUoW1xyXG5dKykvJDEk
ZmlsZSQyLzsKICAgICAgICAgICAgIHByaW50ICRfOwogICAgICAgICB9CiAgICAgICAgIGNsb3Nl
IERJRkY7CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3Qv
cGFyc2VEaWZmU3RhcnRMaW5lLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmZTdGFydExpbmUucGwJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlm
ZlN0YXJ0TGluZS5wbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorIyEvdXNyL2Jp
bi9lbnYgcGVybAorCisjIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisj
IFVuaXQgdGVzdHMgZm9yIHBhcnNlRGlmZlN0YXJ0TGluZSgpLCBwYXJzZUdpdERpZmZTdGFydExp
bmUoKSwgcGFyc2VTdm5EaWZmU3RhcnRMaW5lKCkuCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fybmlu
Z3M7CisKK3VzZSBjb25zdGFudCB7CisgICAgQ1IgPT4gIlxyIiwKKyAgICBDUkxGID0+ICJcclxu
IiwKKyAgICBMRiA9PiAiXG4iLAorfTsKKwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVkNTVXRpbHM7
CisKK215IEB0ZXN0Q2FzZXMgPSAoCit7CisgICAgZXhwZWN0ZWQgPT4gIlNvdXJjZS9NYWtlZmls
ZS5zaGFyZWQiLAorICAgIGlucHV0ID0+ICJkaWZmIC0tZ2l0IGEvU291cmNlL01ha2VmaWxlLnNo
YXJlZCBiL1NvdXJjZS9NYWtlZmlsZS5zaGFyZWQiLAorICAgIGlzR2l0ID0+IDEsCisgICAgaXNW
YWxpZCA9PiAxLAorICAgIHRlc3ROYW1lID0+ICJHaXQiLAorfSwKK3sKKyAgICBleHBlY3RlZCA9
PiAiU291cmNlL01ha2VmaWxlLnNoYXJlZCIsCisgICAgaW5wdXQgPT4gImRpZmYgLS1naXQgU291
cmNlL01ha2VmaWxlLnNoYXJlZCBTb3VyY2UvTWFrZWZpbGUuc2hhcmVkIiwKKyAgICBpc0dpdCA9
PiAxLAorICAgIGlzVmFsaWQgPT4gMSwKKyAgICB0ZXN0TmFtZSA9PiAiR2l0IC0tbm8tcHJlZml4
IiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4gIkxheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9y
ZXNvdXJjZXMvYSBzdWNjZXNzLmh0bWwiLAorICAgIGlucHV0ID0+ICJkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9taXNjL3Jlc291cmNlcy9hIHN1Y2Nlc3MuaHRtbCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvYSBzdWNjZXNzLmh0bWwiLAorICAgIGlz
R2l0ID0+IDEsCisgICAgaXNWYWxpZCA9PiAxLAorICAgIHRlc3ROYW1lID0+ICJHaXQgd2l0aCBz
cGFjZSBpbiBwYXRoIiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4gdW5kZWYsCisgICAgaW5wdXQg
PT4gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0iLAorICAgIGlzR2l0ID0+IDEsCisgICAgaXNWYWxpZCA9PiAwLAorICAg
IHRlc3ROYW1lID0+ICJHaXQgd2l0aCBpbnZhbGlkIGlucHV0IiwKK30sCit7CisgICAgZXhwZWN0
ZWQgPT4gIlNvdXJjZS9NYWtlZmlsZS5zaGFyZWQiLAorICAgIGlucHV0ID0+ICJJbmRleDogU291
cmNlL01ha2VmaWxlLnNoYXJlZCIsCisgICAgaXNTdm4gPT4gMSwKKyAgICBpc1ZhbGlkID0+IDEs
CisgICAgdGVzdE5hbWUgPT4gIlN2biIsCit9LAoreworICAgIGV4cGVjdGVkID0+ICJMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL21pc2MvcmVzb3VyY2VzL2Egc3VjY2Vzcy5odG1sIiwKKyAgICBpbnB1
dCA9PiAiSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbWlzYy9yZXNvdXJjZXMvYSBzdWNj
ZXNzLmh0bWwiLAorICAgIGlzU3ZuID0+IDEsCisgICAgaXNWYWxpZCA9PiAxLAorICAgIHRlc3RO
YW1lID0+ICJTdm4gd2l0aCBzcGFjZSBpbiBwYXRoIiwKK30sCit7CisgICAgZXhwZWN0ZWQgPT4g
dW5kZWYsCisgICAgaW5wdXQgPT4gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLAorICAgIGlzU3ZuID0+IDEsCisgICAg
aXNWYWxpZCA9PiAwLAorICAgIHRlc3ROYW1lID0+ICJTdm4gd2l0aCBpbnZhbGlkIGlucHV0IiwK
K30sCispOworCitteSAkdGVzdENhc2VDb3VudCA9IHNjYWxhciBAdGVzdENhc2VzOworcGxhbih0
ZXN0cyA9PiA5ICogJHRlc3RDYXNlQ291bnQpOworCitmb3JlYWNoIG15ICR0ZXN0Q2FzZSAoQHRl
c3RDYXNlcykgeworICAgICMgTWFrZSBzdXJlIGZ1dHVyZSBtb2RpZmljYXRpb25zIG9yIG5ldyB0
ZXN0IGNhc2VzIGFyZSB2YWxpZC4KKyAgICBvayhleGlzdHMgJHRlc3RDYXNlLT57ZXhwZWN0ZWR9
LCAiJ2V4cGVjdGVkJyBrZXkgZXhpc3RzOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iKTsKKyAgICBv
ayhleGlzdHMgJHRlc3RDYXNlLT57aW5wdXR9LCAiJ2lucHV0JyBrZXkgZXhpc3RzOiAkdGVzdENh
c2UtPnt0ZXN0TmFtZX0iKTsKKyAgICBvayhleGlzdHMgJHRlc3RDYXNlLT57aXNHaXR9IF4gZXhp
c3RzICR0ZXN0Q2FzZS0+e2lzU3ZufSwgIkV4YWN0bHkgb25lIG9mICdpc0dpdCcga2V5IG9yICdp
c1N2bicga2V5IGV4aXN0czogJHRlc3RDYXNlLT57dGVzdE5hbWV9Iik7CisgICAgb2soZXhpc3Rz
ICR0ZXN0Q2FzZS0+e2lzVmFsaWR9LCAiJ2lzVmFsaWQnIGtleSBleGlzdHM6ICR0ZXN0Q2FzZS0+
e3Rlc3ROYW1lfSIpOworICAgIG9rKGV4aXN0cyAkdGVzdENhc2UtPnt0ZXN0TmFtZX0sICIndGVz
dE5hbWUnIGtleSBleGlzdHMiKTsKKworICAgIG15ICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VEaWZm
U3RhcnRMaW5lKCk6ICR0ZXN0Q2FzZS0+e3Rlc3ROYW1lfSI7CisgICAgbXkgJGdvdCA9IFZDU1V0
aWxzOjpwYXJzZURpZmZTdGFydExpbmUoJHRlc3RDYXNlLT57aW5wdXR9KTsKKyAgICBpcygkZ290
LCAkdGVzdENhc2UtPntleHBlY3RlZH0sICR0ZXN0Q2FzZU5hbWUpOworCisgICAgaWYgKCR0ZXN0
Q2FzZS0+e2lzR2l0fSkgeworICAgICAgICBTS0lQOiB7CisgICAgICAgICAgICBza2lwICJwYXJz
ZUdpdERpZmZTdGFydExpbmUoKSBkb2VzIG5vdCBoYW5kbGUgaW52YWxpZCBpbnB1dCIsIDMgaWYg
ISR0ZXN0Q2FzZS0+e2lzVmFsaWR9OworCisgICAgICAgICAgICAkdGVzdENhc2VOYW1lID0gInBh
cnNlR2l0RGlmZlN0YXJ0TGluZSgpOiBDUiBsaW5lIGVuZGluZzogJHRlc3RDYXNlLT57dGVzdE5h
bWV9IjsKKyAgICAgICAgICAgIG15ICRpbnB1dCA9ICR0ZXN0Q2FzZS0+e2lucHV0fSAuIENSOwor
ICAgICAgICAgICAgJGdvdCA9IFZDU1V0aWxzOjpwYXJzZUdpdERpZmZTdGFydExpbmUoJGlucHV0
KTsKKyAgICAgICAgICAgIGlzKCRnb3QsICR0ZXN0Q2FzZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNl
TmFtZSk7CisKKyAgICAgICAgICAgICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VHaXREaWZmU3RhcnRM
aW5lKCk6IENSTEYgbGluZSBlbmRpbmc6ICR0ZXN0Q2FzZS0+e3Rlc3ROYW1lfSI7CisgICAgICAg
ICAgICAkaW5wdXQgPSAkdGVzdENhc2UtPntpbnB1dH0gLiBDUkxGOworICAgICAgICAgICAgJGdv
dCA9IFZDU1V0aWxzOjpwYXJzZUdpdERpZmZTdGFydExpbmUoJGlucHV0KTsKKyAgICAgICAgICAg
IGlzKCRnb3QsICR0ZXN0Q2FzZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7CisKKyAgICAg
ICAgICAgICR0ZXN0Q2FzZU5hbWUgPSAicGFyc2VHaXREaWZmU3RhcnRMaW5lKCk6IExGIGxpbmUg
ZW5kaW5nOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iOworICAgICAgICAgICAgJGlucHV0ID0gJHRl
c3RDYXNlLT57aW5wdXR9IC4gTEY7CisgICAgICAgICAgICAkZ290ID0gVkNTVXRpbHM6OnBhcnNl
R2l0RGlmZlN0YXJ0TGluZSgkaW5wdXQpOworICAgICAgICAgICAgaXMoJGdvdCwgJHRlc3RDYXNl
LT57ZXhwZWN0ZWR9LCAkdGVzdENhc2VOYW1lKTsKKyAgICAgICAgfQorICAgIH0gZWxzaWYgKCR0
ZXN0Q2FzZS0+e2lzU3ZufSkgeworICAgICAgICAkdGVzdENhc2VOYW1lID0gInBhcnNlU3ZuRGlm
ZlN0YXJ0TGluZSgpOiBDUiBsaW5lIGVuZGluZzogJHRlc3RDYXNlLT57dGVzdE5hbWV9IjsKKyAg
ICAgICAgbXkgJGlucHV0ID0gJHRlc3RDYXNlLT57aW5wdXR9IC4gQ1I7CisgICAgICAgICRnb3Qg
PSBWQ1NVdGlsczo6cGFyc2VTdm5EaWZmU3RhcnRMaW5lKCRpbnB1dCk7CisgICAgICAgIGlzKCRn
b3QsICR0ZXN0Q2FzZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7CisKKyAgICAgICAgJHRl
c3RDYXNlTmFtZSA9ICJwYXJzZVN2bkRpZmZTdGFydExpbmUoKTogQ1JMRiBsaW5lIGVuZGluZzog
JHRlc3RDYXNlLT57dGVzdE5hbWV9IjsKKyAgICAgICAgJGlucHV0ID0gJHRlc3RDYXNlLT57aW5w
dXR9IC4gQ1JMRjsKKyAgICAgICAgJGdvdCA9IFZDU1V0aWxzOjpwYXJzZVN2bkRpZmZTdGFydExp
bmUoJGlucHV0KTsKKyAgICAgICAgaXMoJGdvdCwgJHRlc3RDYXNlLT57ZXhwZWN0ZWR9LCAkdGVz
dENhc2VOYW1lKTsKKworICAgICAgICAkdGVzdENhc2VOYW1lID0gInBhcnNlU3ZuRGlmZlN0YXJ0
TGluZSgpOiBMRiBsaW5lIGVuZGluZzogJHRlc3RDYXNlLT57dGVzdE5hbWV9IjsKKyAgICAgICAg
JGlucHV0ID0gJHRlc3RDYXNlLT57aW5wdXR9IC4gTEY7CisgICAgICAgICRnb3QgPSBWQ1NVdGls
czo6cGFyc2VTdm5EaWZmU3RhcnRMaW5lKCRpbnB1dCk7CisgICAgICAgIGlzKCRnb3QsICR0ZXN0
Q2FzZS0+e2V4cGVjdGVkfSwgJHRlc3RDYXNlTmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZmFpbCgiQ1IgbGluZSBlbmRpbmc6IGlzR2l0IG9yIGlzU3ZuIGlzIG5vdCBzZXQgZm9yICR0ZXN0
Q2FzZS0+e3Rlc3ROYW1lfSIpOworICAgICAgICBmYWlsKCJDRkxGIGxpbmUgZW5kaW5nOiBpc0dp
dCBvciBpc1N2biBpcyBub3Qgc2V0IGZvciAkdGVzdENhc2UtPnt0ZXN0TmFtZX0iKTsKKyAgICAg
ICAgZmFpbCgiRkwgbGluZSBlbmRpbmc6IGlzR2l0IG9yIGlzU3ZuIGlzIG5vdCBzZXQgZm9yICR0
ZXN0Q2FzZS0+e3Rlc3ROYW1lfSIpOworICAgIH0KK30K
</data>
<flag name="review"
          id="366574"
          type_id="1"
          status="+"
          setter="dbates"
    />
    <flag name="commit-queue"
          id="366575"
          type_id="3"
          status="-"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>