<?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>31500</bug_id>
          
          <creation_ts>2009-11-13 17:17:36 -0800</creation_ts>
          <short_desc>webkit-patch land hangs if svn prompts for credentials</short_desc>
          <delta_ts>2011-06-18 11:45:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45862</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aa</cc>
    
    <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>arv</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dominicc</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>galpeter</cc>
    
    <cc>levin</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>163603</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-13 17:17:36 -0800</bug_when>
    <thetext>bugzilla-tool land-diff hangs if svn prompts for credentials

We need to find a way to detect this and let the prompting go through to the user.

Both Aaron and I hit this today.  It only happens once, but it&apos;s a crappy first-run experience for new committers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164380</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-17 16:24:27 -0800</bug_when>
    <thetext>--non-interactive
Would be one way to solve this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177020</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-04 21:31:25 -0800</bug_when>
    <thetext>Ojan hit this this evening with a git checkout.  land-diff hung with git svn dcommit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233477</commentid>
    <comment_count>3</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2010-06-02 16:03:51 -0700</bug_when>
    <thetext>Until this is fixed properly, maybe we should just have a timeout for the actual commit step. If we hit the timeout, we error out and give a description of what the problem might be and how to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233479</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-02 16:04:50 -0700</bug_when>
    <thetext>The unfortunate thing about this bug is that it only hits new contributers, and thus gets ignored since all of us who actually contribute to webkit-patch have long-since stored our credentials on our machines. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233482</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-02 16:09:20 -0700</bug_when>
    <thetext>There should be some svn command which would check if it has credentials cached or not.  We could very easily run such before commit to confirm that they&apos;re cached if anyone knows what such a command would be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233483</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-02 16:14:21 -0700</bug_when>
    <thetext>Actually, a solution (for svn) is to just pass --non-interactive to svn commit.  That will make it at least fail instead of hang.  I don&apos;t have any suggestions for git yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233486</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-06-02 16:17:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; There should be some svn command which would check if it has credentials cached or not.  We could very easily run such before commit to confirm that they&apos;re cached if anyone knows what such a command would be.

Unless I am misunderstanding the issue, support was added for the SVN case in &lt;https://bugs.webkit.org/show_bug.cgi?id=34439&gt;. In particular, SVN.has_authorization_for_realm() was added to determine if the SVN credentials are cached.

We may need something similar for Git.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233489</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-02 16:22:19 -0700</bug_when>
    <thetext>git svn dcommit uses svn (and thus the same cache) under the covers.  So it would be possible to fix this by checking SVN.has_authorization_for_realm() before calling commit and then passing --non-interactive to svn.  Git would still hang if the cached credentials are wrong, but that&apos;s much less common that first-run. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279897</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-09-15 18:53:26 -0700</bug_when>
    <thetext>I&apos;ve started work on this.  Ran in to bug 45862.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379157</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-04-04 15:56:45 -0700</bug_when>
    <thetext>It is a so annoying bug. We can&apos;t use webkit-patch land, because 
we don&apos;t want to save our svn password as a plain text. :S

AFAIK Peter you have an experimental patch for it. We should 
check it tomorrow and fix this bug as soon as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379172</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-04 16:13:58 -0700</bug_when>
    <thetext>Roland just ran into this bug too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379268</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-04 18:12:39 -0700</bug_when>
    <thetext>Everyone runs into this bug the first time they try and use webkit-patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379368</commentid>
    <comment_count>13</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2011-04-05 01:10:33 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; AFAIK Peter you have an experimental patch for it. We should 
&gt; check it tomorrow and fix this bug as soon as possible.

I&apos;ll check my magic box for the patch in a few hours, and upload it here. It&apos;s not a complete patch, just a proof of concept test for the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381198</commentid>
    <comment_count>14</comment_count>
      <attachid>88597</attachid>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2011-04-07 02:36:53 -0700</bug_when>
    <thetext>Created attachment 88597
proof of concept patch

Took a little to long to find and update the patch. By default there is no change in the behavior, but if you add &apos;-p&apos; switch while executing the webkit-patch then it&apos;ll ask for a password. Currently I can&apos;t test it because I&apos;m not a committer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381199</commentid>
    <comment_count>15</comment_count>
      <attachid>88597</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-07 02:42:23 -0700</bug_when>
    <thetext>Comment on attachment 88597
proof of concept patch

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

&gt; Tools/Scripts/webkitpy/tool/main.py:52
&gt; +        make_option(&quot;-p&quot;, &quot;--password&quot;, action=&quot;store_true&quot;, dest=&quot;prompt_password&quot;, default=False, help=&quot;prompt for password&quot;),

Why should you have to pass an option in order to enter a password?  I would have expected webkit-patch to prompt you for a password if you needed it.

Ideally, if we could detect that a password was needed, we could handle this all at the scm.py layer.

&gt; Tools/Scripts/webkitpy/tool/steps/commit.py:28
&gt; +import getpass

This looks extra.

&gt; Tools/Scripts/webkitpy/tool/steps/commit.py:70
&gt; -                commit_text = scm.commit_with_message(self._commit_message, git_commit=self._options.git_commit, username=username, force_squash=force_squash, changed_files=self._changed_files(state))
&gt; +                commit_text = scm.commit_with_message(self._commit_message, git_commit=self._options.git_commit,
&gt; +                                                      username=username, force_squash=force_squash,
&gt; +                                                      changed_files=self._changed_files(state), input=password)

instead of &quot;input=password&quot;, it seems like we&apos;d want to say &quot;password=password&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381246</commentid>
    <comment_count>16</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2011-04-07 05:26:51 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 88597 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88597&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/main.py:52
&gt; &gt; +        make_option(&quot;-p&quot;, &quot;--password&quot;, action=&quot;store_true&quot;, dest=&quot;prompt_password&quot;, default=False, help=&quot;prompt for password&quot;),
&gt; 
&gt; Why should you have to pass an option in order to enter a password?  I would have expected webkit-patch to prompt you for a password if you needed it.
&gt; 
&gt; Ideally, if we could detect that a password was needed, we could handle this all at the scm.py layer.
&gt; 

As I mentioned this is just a proof-of-concept fix for the problem. Password detection could be added later, if this fixes the initial problem. 

&gt; &gt; Tools/Scripts/webkitpy/tool/steps/commit.py:28
&gt; &gt; +import getpass
&gt; 
&gt; This looks extra.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/steps/commit.py:70
&gt; &gt; -                commit_text = scm.commit_with_message(self._commit_message, git_commit=self._options.git_commit, username=username, force_squash=force_squash, changed_files=self._changed_files(state))
&gt; &gt; +                commit_text = scm.commit_with_message(self._commit_message, git_commit=self._options.git_commit,
&gt; &gt; +                                                      username=username, force_squash=force_squash,
&gt; &gt; +                                                      changed_files=self._changed_files(state), input=password)
&gt; 
&gt; instead of &quot;input=password&quot;, it seems like we&apos;d want to say &quot;password=password&quot;.
I overlooked these during the update. 

I&apos;ll update the patch with the password detection in a minute. Stay tuned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381248</commentid>
    <comment_count>17</comment_count>
      <attachid>88610</attachid>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2011-04-07 05:34:12 -0700</bug_when>
    <thetext>Created attachment 88610
v2

updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381402</commentid>
    <comment_count>18</comment_count>
      <attachid>88650</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-07 09:23:25 -0700</bug_when>
    <thetext>Created attachment 88650
[Work-in-progress] Detect SVN credentials when using git-svn

Work in progress patch based on Eric Seidel&apos;s remarks (in comment 8) that Git uses the same SVN cache as SVN; =&gt; we can reuse the functionality in SVN.has_authorization_for_realm().

I am posting this patch as a work-in-progress. I haven&apos;t tested it yet. It could be further refined, needs a unit test(s) and a proper change log. I also don&apos;t mean to interrupt the work by Peter Gal. Should we chose to land Peter&apos;s patch then I suggest that we follow up with a patch that reuses SVN.has_authorization_for_realm() or implement a mechanism that provides similar functionality for git-svn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387393</commentid>
    <comment_count>19</comment_count>
      <attachid>89956</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 12:44:54 -0700</bug_when>
    <thetext>Created attachment 89956
[Work-in-progress] Detect SVN credentials when using git-svn

Updated work-in-progress patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387417</commentid>
    <comment_count>20</comment_count>
      <attachid>89963</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 14:30:59 -0700</bug_when>
    <thetext>Created attachment 89963
Patch and updated unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387419</commentid>
    <comment_count>21</comment_count>
      <attachid>89963</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-17 14:36:39 -0700</bug_when>
    <thetext>Comment on attachment 89963
Patch and updated unit tests

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

Look beautiful.

&gt; Tools/Scripts/webkitpy/common/net/credentials.py:151
&gt; -            password = getpass.getpass(&quot;%s password for %s: &quot; % (self.host, username))
&gt; +            password = User.prompt_password(&quot;%s password for %s: &quot; % (self.host, username))

This should really get the user object off the tool so we can mock it out during testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387430</commentid>
    <comment_count>22</comment_count>
      <attachid>89963</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-17 15:09:12 -0700</bug_when>
    <thetext>Comment on attachment 89963
Patch and updated unit tests

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

&gt; Tools/Scripts/webkitpy/common/checkout/scm.py:384
&gt; +        find_output = run_command(find_args, cwd=home_directory).rstrip()

Sad.  Why not move this onto some helper object which both SVN and Git share (which could have an Executive).  Or maybe Git should have an SVN object pointing to its git-svn checkout?

&gt; Tools/Scripts/webkitpy/common/checkout/scm.py:848
&gt; +                return self._commit_on_branch(message, &apos;HEAD&apos;, username=username, password=password)

Do we really want to pass these around everywhere?  Does SVN?  Or does it store it on the SVN object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387433</commentid>
    <comment_count>23</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 15:24:58 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 89963 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89963&amp;action=review
&gt; [...]
&gt; &gt; Tools/Scripts/webkitpy/common/net/credentials.py:151
&gt; &gt; -            password = getpass.getpass(&quot;%s password for %s: &quot; % (self.host, username))
&gt; &gt; +            password = User.prompt_password(&quot;%s password for %s: &quot; % (self.host, username))
&gt; 
&gt; This should really get the user object off the tool so we can mock it out during testing.

Currently, the tool isn&apos;t passed to the Credentials object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387441</commentid>
    <comment_count>24</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 15:55:08 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 89963 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89963&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/checkout/scm.py:384
&gt; &gt; +        find_output = run_command(find_args, cwd=home_directory).rstrip()
&gt; 
&gt; Sad.  Why not move this onto some helper object which both SVN and Git share (which could have an Executive).  Or maybe Git should have an SVN object pointing to its git-svn checkout?

Will change to be a mixin class.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/checkout/scm.py:848
&gt; &gt; +                return self._commit_on_branch(message, &apos;HEAD&apos;, username=username, password=password)
&gt; 
&gt; Do we really want to pass these around everywhere? 

Notice, _commit_on_branch() is specific to the Git code path. It is called from Git.commit_with_message() and both this method and Git._commit_on_branch() call Git.push_local_commits_to_server() which needs these credentials so as to pass to git svn dcommit.

We could look to hoist the call to Git.push_local_commits_to_server() from  Git._commit_on_branch() into Git.commit_with_message() so that we don&apos;t have to pass the username and password arguments to Git.commit_with_message(). At the moment I&apos;m unsure how best to do this given the current structure of Git._commit_on_branch(). Further investigation is needed.

&gt; Does SVN?  Or does it store it on the SVN object?

All of the logic for committing with SVN is contained in SVN.commit_with_message(). Hence, we don&apos;t see the same passing of these arguments to sub-functions as we do with the Git code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387443</commentid>
    <comment_count>25</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 15:57:36 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; Do we really want to pass these around everywhere? 
&gt; 
&gt; [...]
&gt; 
&gt; We could look to hoist the call to Git.push_local_commits_to_server() from  Git._commit_on_branch() into Git.commit_with_message() so that we don&apos;t have to pass the username and password arguments to Git.commit_with_message(). 

I meant to write &quot;...don&apos;t have to pass the username and password arguments to Git._commit_on_branch().&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387444</commentid>
    <comment_count>26</comment_count>
      <attachid>89966</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 16:05:33 -0700</bug_when>
    <thetext>Created attachment 89966
Patch and updated unit tests

Updated patch based on Eric Seidel&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387445</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-17 16:07:09 -0700</bug_when>
    <thetext>Attachment 89966 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy...&quot; exit_code: 1

Tools/Scripts/webkitpy/common/checkout/scm.py:329:  multiple statements on one line (semicolon)  [pep8/E702] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387448</commentid>
    <comment_count>28</comment_count>
      <attachid>89967</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 16:09:10 -0700</bug_when>
    <thetext>Created attachment 89967
Patch and updated unit tests

Removed semicolon to fix style issue found by style bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387451</commentid>
    <comment_count>29</comment_count>
      <attachid>89967</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-17 16:17:59 -0700</bug_when>
    <thetext>Comment on attachment 89967
Patch and updated unit tests

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

Seems good.

&gt; Tools/Scripts/webkitpy/common/checkout/scm.py:324
&gt; +class SVNAndGitSVNHasAuthorizationForRealmMixin:

I would have done this as an SVNRepository class, but this is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387455</commentid>
    <comment_count>30</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 16:23:01 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; Tools/Scripts/webkitpy/common/checkout/scm.py:324
&gt; &gt; +class SVNAndGitSVNHasAuthorizationForRealmMixin:
&gt; 
&gt; I would have done this as an SVNRepository class, but this is OK.

Will rename before I landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387456</commentid>
    <comment_count>31</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 16:28:25 -0700</bug_when>
    <thetext>Committed r84114: &lt;http://trac.webkit.org/changeset/84114&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387458</commentid>
    <comment_count>32</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-17 16:35:54 -0700</bug_when>
    <thetext>Fixed change log entry in changeset 84115 &lt;http://trac.webkit.org/changeset/84115&gt; to both acknowledge Adam Barth for reviewing the patch and to fix my email address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387465</commentid>
    <comment_count>33</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-17 16:50:01 -0700</bug_when>
    <thetext>I meant that I would have use a has-a model instead of an is-a model.  A member class instead of a mixin.  BUt agian, this si fine. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389931</commentid>
    <comment_count>34</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-04-21 04:33:15 -0700</bug_when>
    <thetext>Reopen, because it still fails for me. :(

Unfortunately has_authorization_for_realm is incorrect, because it returns 
true when it finds &quot;&lt;http://svn.webkit.org:80&gt; Mac OS Forge&quot; in a file in
~/.subversion directory. But it doesn&apos;t mean that username and password 
are cached. We don&apos;t want to store our password as plain text, that&apos;s why
the file exists but there isn&apos;t any password in it.

Peter checks the password key in his patch (v2), it would be 
great to integrate this mechanism to has_authorization_for_realm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390256</commentid>
    <comment_count>35</comment_count>
      <attachid>90579</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-21 12:37:52 -0700</bug_when>
    <thetext>Created attachment 90579
Patch and unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390257</commentid>
    <comment_count>36</comment_count>
      <attachid>90580</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-21 12:41:13 -0700</bug_when>
    <thetext>Created attachment 90580
Patch and unit tests

Updated change log to reflect the rename of unit test test_not_have_authorization_for_realm() to test_not_have_authorization_for_realm_when_missing_credentials_file() so as to better describe what it&apos;s testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391170</commentid>
    <comment_count>37</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-04-22 15:48:18 -0700</bug_when>
    <thetext>Committed r84697: &lt;http://trac.webkit.org/changeset/84697&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391185</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 16:04:42 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84697 might have broken SnowLeopard Intel Release (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417991</commentid>
    <comment_count>39</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2011-06-09 07:04:48 -0700</bug_when>
    <thetext>I think that this is broken for git users. If svn credentials aren&apos;t cached:

Commit.run calls scm.commit_with_message, passing None for user/pass.
...
Git.push_local_commits_to_server asks if has_authorization_for_realm ... and finds that it doesn&apos;t; raises an AuthenticationError.
Commit.run catches that, prompts for user/pass and retries.
...
Back in Git.push_local_commits_to_server, it again asks if has_authorization_for_realm ... which it still doesn&apos;t. Git doesn&apos;t do anything with the provided user/pass; so raise AuthenticationError and around we go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423140</commentid>
    <comment_count>40</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-18 11:45:12 -0700</bug_when>
    <thetext>If this change caused a bug, please file a bug report about it. Don&apos;t reopen a bug to report that the fix caused a problem. We should reopen a bug if:

    1) The fix didn’t work, or
    2) The fix was rolled out.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88597</attachid>
            <date>2011-04-07 02:36:53 -0700</date>
            <delta_ts>2011-04-07 05:34:12 -0700</delta_ts>
            <desc>proof of concept patch</desc>
            <filename>webkit_tools.patch</filename>
            <type>text/plain</type>
            <size>9122</size>
            <attacher name="Peter Gal">galpeter</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkJ
KHJldmlzaW9uIDgzMTQ3KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsNyArMjkxLDcgQEAgY2xhc3MgU0NNOgog
ICAgIGRlZiByZXZlcnRfZmlsZXMoc2VsZiwgZmlsZV9wYXRocyk6CiAgICAgICAgIHNlbGYuX3N1
YmNsYXNzX211c3RfaW1wbGVtZW50KCkKIAotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNl
bGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNo
PUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgorICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdl
KHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1
YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUsIGlucHV0PU5vbmUpOgogICAgICAgICBzZWxm
Ll9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCiAKICAgICBkZWYgc3ZuX2NvbW1pdF9sb2coc2Vs
Ziwgc3ZuX3JldmlzaW9uKToKQEAgLTU1Niw3ICs1NTYsNyBAQCBjbGFzcyBTVk4oU0NNKToKICAg
ICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGN3ZD1zZWxmLmNoZWNrb3V0
X3Jvb3QuCiAgICAgICAgIHNlbGYucnVuKFsnc3ZuJywgJ3JldmVydCddICsgZmlsZV9wYXRocykK
IAotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5v
bmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5v
bmUpOgorICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1l
PU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVz
PU5vbmUsIGlucHV0PU5vbmUpOgogICAgICAgICAjIGdpdC1jb21taXQgYW5kIGZvcmNlIGFyZSBu
b3QgdXNlZCBieSBTVk4uCiAgICAgICAgIHN2bl9jb21taXRfYXJncyA9IFsic3ZuIiwgImNvbW1p
dCJdCiAKQEAgLTU3OCw3ICs1NzgsNyBAQCBjbGFzcyBTVk4oU0NNKToKICAgICAgICAgICAgIHJl
dHVybiAiRHJ5IHJ1biwgbm8gY29tbWl0LlxuQ29tbWl0dGVkIHJldmlzaW9uIDAuIgogCiAgICAg
ICAgICMgRklYTUU6IFNob3VsZCB0aGlzIHVzZSBjd2Q9c2VsZi5jaGVja291dF9yb290PwotICAg
ICAgICByZXR1cm4gc2VsZi5ydW4oc3ZuX2NvbW1pdF9hcmdzLCBlcnJvcl9oYW5kbGVyPWNvbW1p
dF9lcnJvcl9oYW5kbGVyKQorICAgICAgICByZXR1cm4gc2VsZi5ydW4oc3ZuX2NvbW1pdF9hcmdz
LCBlcnJvcl9oYW5kbGVyPWNvbW1pdF9lcnJvcl9oYW5kbGVyLCBpbnB1dD1pbnB1dCkKIAogICAg
IGRlZiBzdm5fY29tbWl0X2xvZyhzZWxmLCBzdm5fcmV2aXNpb24pOgogICAgICAgICBzdm5fcmV2
aXNpb24gPSBzZWxmLnN0cmlwX3JfZnJvbV9zdm5fcmV2aXNpb24oc3ZuX3JldmlzaW9uKQpAQCAt
ODM0LDcgKzgzNCw3IEBAIGNsYXNzIEdpdChTQ00pOgogICAgICAgICAgICAgaWYgbnVtX2xvY2Fs
X2NvbW1pdHMgPiAxIG9yIChudW1fbG9jYWxfY29tbWl0cyA+IDAgYW5kIG5vdCB3b3JraW5nX2Rp
cmVjdG9yeV9pc19jbGVhbik6CiAgICAgICAgICAgICAgICAgcmFpc2UgQW1iaWd1b3VzQ29tbWl0
RXJyb3IobnVtX2xvY2FsX2NvbW1pdHMsIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKQogCi0g
ICAgZGVmIGNvbW1pdF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwg
Z2l0X2NvbW1pdD1Ob25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6
CisgICAgZGVmIGNvbW1pdF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9u
ZSwgZ2l0X2NvbW1pdD1Ob25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9u
ZSwgaW5wdXQ9Tm9uZSk6CiAgICAgICAgICMgVXNlcm5hbWUgaXMgaWdub3JlZCBkdXJpbmcgR2l0
IGNvbW1pdHMuCiAgICAgICAgIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuID0gc2VsZi53b3Jr
aW5nX2RpcmVjdG9yeV9pc19jbGVhbigpCiAKQEAgLTg1OCw3ICs4NTgsNyBAQCBjbGFzcyBHaXQo
U0NNKToKICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9jYW5fc3F1YXNoKHdvcmtpbmdfZGlyZWN0
b3J5X2lzX2NsZWFuKQogICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdyZXNldCcsICctLXNvZnQn
LCBzZWxmLnJlbW90ZV9tZXJnZV9iYXNlKCldKQogICAgICAgICBzZWxmLmNvbW1pdF9sb2NhbGx5
X3dpdGhfbWVzc2FnZShtZXNzYWdlKQotICAgICAgICByZXR1cm4gc2VsZi5wdXNoX2xvY2FsX2Nv
bW1pdHNfdG9fc2VydmVyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYucHVzaF9sb2NhbF9jb21taXRz
X3RvX3NlcnZlcihpbnB1dD1pbnB1dCkKIAogICAgIGRlZiBfY29tbWl0X29uX2JyYW5jaChzZWxm
LCBtZXNzYWdlLCBnaXRfY29tbWl0KToKICAgICAgICAgYnJhbmNoX3JlZiA9IHNlbGYucnVuKFsn
Z2l0JywgJ3N5bWJvbGljLXJlZicsICdIRUFEJ10pLnN0cmlwKCkKQEAgLTkzNywxMSArOTM3LDEx
IEBAIGNsYXNzIEdpdChTQ00pOgogICAgIGRlZiBjb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2Uo
c2VsZiwgbWVzc2FnZSk6CiAgICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NvbW1pdCcsICctLWFs
bCcsICctRicsICctJ10sIGlucHV0PW1lc3NhZ2UpCiAKLSAgICBkZWYgcHVzaF9sb2NhbF9jb21t
aXRzX3RvX3NlcnZlcihzZWxmKToKKyAgICBkZWYgcHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZl
cihzZWxmLCBpbnB1dD1Ob25lKToKICAgICAgICAgZGNvbW1pdF9jb21tYW5kID0gWydnaXQnLCAn
c3ZuJywgJ2Rjb21taXQnXQogICAgICAgICBpZiBzZWxmLmRyeXJ1bjoKICAgICAgICAgICAgIGRj
b21taXRfY29tbWFuZC5hcHBlbmQoJy0tZHJ5LXJ1bicpCi0gICAgICAgIG91dHB1dCA9IHNlbGYu
cnVuKGRjb21taXRfY29tbWFuZCwgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxlcikK
KyAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW4oZGNvbW1pdF9jb21tYW5kLCBlcnJvcl9oYW5kbGVy
PWNvbW1pdF9lcnJvcl9oYW5kbGVyLCBpbnB1dD1pbnB1dCkKICAgICAgICAgIyBSZXR1cm4gYSBz
dHJpbmcgd2hpY2ggbG9va3MgbGlrZSBhIGNvbW1pdCBzbyB0aGF0IHRoaW5ncyB3aGljaCBwYXJz
ZSB0aGlzIG91dHB1dCB3aWxsIHN1Y2NlZWQuCiAgICAgICAgIGlmIHNlbGYuZHJ5cnVuOgogICAg
ICAgICAgICAgb3V0cHV0ICs9ICJcbkNvbW1pdHRlZCByMCIKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CShyZXZpc2lvbiA4MzE0NykKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBv
cnQgZ2V0cGFzcwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJlCkBAIC02NSw2
ICs2NiwxMCBAQCBjbGFzcyBVc2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiByZXNwb25zZQog
CiAgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHByb21wdF9wYXNzd29yZChjbHMsIG1lc3NhZ2Up
OgorICAgICAgICByZXR1cm4gZ2V0cGFzcy5nZXRwYXNzKG1lc3NhZ2UpCisKKyAgICBAY2xhc3Nt
ZXRob2QKICAgICBkZWYgcHJvbXB0X3dpdGhfbGlzdChjbHMsIGxpc3RfdGl0bGUsIGxpc3RfaXRl
bXMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1dD1yYXdfaW5wdXQpOgogICAg
ICAgICBwcmludCBsaXN0X3RpdGxlCiAgICAgICAgIGkgPSAwCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvbWFpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvbWFpbi5weQkocmV2aXNpb24gODMxNDcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvbWFpbi5weQkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBmcm9tIHdl
YmtpdHB5LnRvb2wgaW1wb3J0IGNvbW1hbmRzCiAKIGNsYXNzIFdlYktpdFBhdGNoKE11bHRpQ29t
bWFuZFRvb2wsIEhvc3QpOgogICAgIGdsb2JhbF9vcHRpb25zID0gWworICAgICAgICBtYWtlX29w
dGlvbigiLXAiLCAiLS1wYXNzd29yZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InByb21w
dF9wYXNzd29yZCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9InByb21wdCBmb3IgcGFzc3dvcmQiKSwK
ICAgICAgICAgbWFrZV9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIsIGRlc3Q9InZlcmJvc2UiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJlbmFibGUgYWxsIGxvZ2dp
bmciKSwKICAgICAgICAgbWFrZV9vcHRpb24oIi1kIiwgIi0tZGlyZWN0b3J5IiwgYWN0aW9uPSJh
cHBlbmQiLCBkZXN0PSJwYXRjaF9kaXJlY3RvcmllcyIsIGRlZmF1bHQ9W10sIGhlbHA9IkRpcmVj
dG9yeSB0byBsb29rIGF0IGZvciBjaGFuZ2VkIGZpbGVzIiksCiAgICAgICAgIG1ha2Vfb3B0aW9u
KCItLWRyeS1ydW4iLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJkcnlfcnVuIiwgZGVmYXVs
dD1GYWxzZSwgaGVscD0iZG8gbm90IHRvdWNoIHJlbW90ZSBzZXJ2ZXJzIiksCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvY29tbWFuZHRlc3QucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2NvbW1hbmR0ZXN0LnB5
CShyZXZpc2lvbiA4MzE0NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5k
cy9jb21tYW5kdGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNDQsNSArNDQsNiBAQCBjbGFzcyBD
b21tYW5kc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBvcHRpb25zLnBvcnQgPSAn
TU9DSyBwb3J0JwogICAgICAgICBvcHRpb25zLnF1aWV0ID0gVHJ1ZQogICAgICAgICBvcHRpb25z
LnJldmlld2VyID0gJ01PQ0sgcmV2aWV3ZXInCisgICAgICAgIG9wdGlvbnMucHJvbXB0X3Bhc3N3
b3JkID0gRmFsc2UKICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2wodG9vbCkKICAgICAgICAg
T3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuZXhlY3V0ZSwgW29w
dGlvbnMsIGFyZ3MsIHRvb2xdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LCBleHBl
Y3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyLCBleHBlY3RlZF9leGNlcHRpb249ZXhwZWN0ZWRf
ZXhjZXB0aW9uKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rv
d25sb2FkX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9kb3dubG9hZF91bml0dGVzdC5weQkocmV2aXNpb24gODMxNDcpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAgY2xhc3MgRG93bmxvYWRDb21tYW5kc1Rl
c3QoQ29tbWFuZHNUZXN0KQogICAgICAgICBvcHRpb25zLnF1aWV0ID0gRmFsc2UKICAgICAgICAg
b3B0aW9ucy50ZXN0ID0gVHJ1ZQogICAgICAgICBvcHRpb25zLnVwZGF0ZSA9IFRydWUKKyAgICAg
ICAgb3B0aW9ucy5wcm9tcHRfcGFzc3dvcmQgPSBGYWxzZQogICAgICAgICByZXR1cm4gb3B0aW9u
cwogCiAgICAgZGVmIHRlc3RfYnVpbGQoc2VsZik6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9zdGVwcy9jb21taXQucHkJKHJldmlzaW9uIDgzMTQ3KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjUs
NiArMjUsNyBAQAogIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
aW1wb3J0IGdldHBhc3MKIAogZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQuc2NtIGltcG9y
dCBBdXRoZW50aWNhdGlvbkVycm9yLCBBbWJpZ3VvdXNDb21taXRFcnJvcgogZnJvbSB3ZWJraXRw
eS5jb21tb24uY29uZmlnIGltcG9ydCB1cmxzCkBAIC00MiwxNCArNDMsMjAgQEAgY2xhc3MgQ29t
bWl0KEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICAgICAgJ1RvIGF2b2lkIHRoaXMgcHJvbXB0
LCBzZXQgImdpdCBjb25maWcgd2Via2l0LXBhdGNoLmNvbW1pdC1zaG91bGQtYWx3YXlzLXNxdWFz
aCB0cnVlIi4nICUgKAogICAgICAgICAgICAgICAgIGVycm9yLm51bV9sb2NhbF9jb21taXRzLCB3
b3JraW5nX2RpcmVjdG9yeV9tZXNzYWdlKSkKIAorICAgIGRlZiBfZ2V0X3Bhc3N3b3JkKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnByb21wdF9wYXNzd29yZDoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl90b29sLnVzZXIucHJvbXB0X3Bhc3N3b3JkKCJQYXNzd29yZDogIikKKwor
ICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgZGVmIHJ1bihzZWxmLCBzdGF0ZSk6CiAgICAgICAg
IHNlbGYuX2NvbW1pdF9tZXNzYWdlID0gc2VsZi5fdG9vbC5jaGVja291dCgpLmNvbW1pdF9tZXNz
YWdlX2Zvcl90aGlzX2NvbW1pdChzZWxmLl9vcHRpb25zLmdpdF9jb21taXQpLm1lc3NhZ2UoKQog
ICAgICAgICBpZiBsZW4oc2VsZi5fY29tbWl0X21lc3NhZ2UpIDwgNTA6CiAgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIkF0dGVtcHRlZCB0byBjb21taXQgd2l0aCBhIGNvbW1pdCBtZXNzYWdl
IHNob3J0ZXIgdGhhbiA1MCBjaGFyYWN0ZXJzLiAgRWl0aGVyIHlvdXIgcGF0Y2ggaXMgbWlzc2lu
ZyBhIENoYW5nZUxvZyBvciB3ZWJraXQtcGF0Y2ggbWF5IGhhdmUgYSBidWcuIikKIAogICAgICAg
ICBzZWxmLl9zdGF0ZSA9IHN0YXRlCi0KICAgICAgICAgdXNlcm5hbWUgPSBOb25lCisgICAgICAg
IHBhc3N3b3JkID0gc2VsZi5fZ2V0X3Bhc3N3b3JkKCkKICAgICAgICAgZm9yY2Vfc3F1YXNoID0g
RmFsc2UKIAogICAgICAgICBudW1fdHJpZXMgPSAwCkBAIC01OCw3ICs2NSw5IEBAIGNsYXNzIENv
bW1pdChBYnN0cmFjdFN0ZXApOgogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAg
c2NtID0gc2VsZi5fdG9vbC5zY20oKQotICAgICAgICAgICAgICAgIGNvbW1pdF90ZXh0ID0gc2Nt
LmNvbW1pdF93aXRoX21lc3NhZ2Uoc2VsZi5fY29tbWl0X21lc3NhZ2UsIGdpdF9jb21taXQ9c2Vs
Zi5fb3B0aW9ucy5naXRfY29tbWl0LCB1c2VybmFtZT11c2VybmFtZSwgZm9yY2Vfc3F1YXNoPWZv
cmNlX3NxdWFzaCwgY2hhbmdlZF9maWxlcz1zZWxmLl9jaGFuZ2VkX2ZpbGVzKHN0YXRlKSkKKyAg
ICAgICAgICAgICAgICBjb21taXRfdGV4dCA9IHNjbS5jb21taXRfd2l0aF9tZXNzYWdlKHNlbGYu
X2NvbW1pdF9tZXNzYWdlLCBnaXRfY29tbWl0PXNlbGYuX29wdGlvbnMuZ2l0X2NvbW1pdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJu
YW1lPXVzZXJuYW1lLCBmb3JjZV9zcXVhc2g9Zm9yY2Vfc3F1YXNoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZF9maWxlcz1zZWxm
Ll9jaGFuZ2VkX2ZpbGVzKHN0YXRlKSwgaW5wdXQ9cGFzc3dvcmQpCiAgICAgICAgICAgICAgICAg
c3ZuX3JldmlzaW9uID0gc2NtLnN2bl9yZXZpc2lvbl9mcm9tX2NvbW1pdF90ZXh0KGNvbW1pdF90
ZXh0KQogICAgICAgICAgICAgICAgIGxvZygiQ29tbWl0dGVkIHIlczogPCVzPiIgJSAoc3ZuX3Jl
dmlzaW9uLCB1cmxzLnZpZXdfcmV2aXNpb25fdXJsKHN2bl9yZXZpc2lvbikpKQogICAgICAgICAg
ICAgICAgIHNlbGYuX3N0YXRlWyJjb21taXRfdGV4dCJdID0gY29tbWl0X3RleHQKQEAgLTczLDMg
KzgyLDUgQEAgY2xhc3MgQ29tbWl0KEFic3RyYWN0U3RlcCk6CiAgICAgICAgICAgICAgICAgdXNl
cm5hbWUgPSBzZWxmLl90b29sLnVzZXIucHJvbXB0KCIlcyBsb2dpbjogIiAlIGUuc2VydmVyX2hv
c3QsIHJlcGVhdD01KQogICAgICAgICAgICAgICAgIGlmIG5vdCB1c2VybmFtZToKICAgICAgICAg
ICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIHVz
ZXJuYW1lIG9uICVzIHRvIHBlcmZvcm0gdGhlIGNvbW1pdCBhcy4iICUgc2VsZi5zdm5fc2VydmVy
X2hvc3QpCisKKyAgICAgICAgICAgICAgICBwYXNzd29yZCA9IHNlbGYuX2dldF9wYXNzd29yZCgp
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88610</attachid>
            <date>2011-04-07 05:34:12 -0700</date>
            <delta_ts>2011-04-17 14:30:59 -0700</delta_ts>
            <desc>v2</desc>
            <filename>webkit_tools.patch</filename>
            <type>text/plain</type>
            <size>6595</size>
            <attacher name="Peter Gal">galpeter</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzMTYxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDQtMDcgIFBldGVyIEdhbCAgPGdhbHBldGVyQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm9t
cHQgdGhlIHVzZXIgZm9yIHBhc3N3b3JkIGR1cmluZyBjb21taXQgKGlmIG5lZWRlZCkuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTUwMCAgICAgICAg
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXIucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5weToKKwogMjAxMS0wNC0wNyAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
Y2llaiBTdGFjaG93aWFrLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS5weQkocmV2aXNpb24gODMxNDcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEs
NyBAQCBjbGFzcyBTQ006CiAgICAgZGVmIHJldmVydF9maWxlcyhzZWxmLCBmaWxlX3BhdGhzKToK
ICAgICAgICAgc2VsZi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQogCi0gICAgZGVmIGNvbW1p
dF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgZ2l0X2NvbW1pdD1O
b25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CisgICAgZGVmIGNv
bW1pdF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgZ2l0X2NvbW1p
dD1Ob25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9uZSwgcGFzc3dvcmQ9
Tm9uZSk6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKIAogICAgIGRl
ZiBzdm5fY29tbWl0X2xvZyhzZWxmLCBzdm5fcmV2aXNpb24pOgpAQCAtMzgwLDcgKzM4MCwxNCBA
QCBjbGFzcyBTVk4oU0NNKToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBmaW5k
X2FyZ3MgPSBbImZpbmQiLCAiLnN1YnZlcnNpb24iLCAiLXR5cGUiLCAiZiIsICItZXhlYyIsICJn
cmVwIiwgIi1xIiwgcmVhbG0sICJ7fSIsICI7IiwgIi1wcmludCJdOwogICAgICAgICBmaW5kX291
dHB1dCA9IHNlbGYucnVuKGZpbmRfYXJncywgY3dkPWhvbWVfZGlyZWN0b3J5LCBlcnJvcl9oYW5k
bGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpCi0gICAgICAgIHJldHVybiBmaW5k
X291dHB1dCBhbmQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGhvbWVfZGlyZWN0b3J5LCBm
aW5kX291dHB1dCkpCisKKyAgICAgICAgZmluZF9yZXN1bHQgPSBmaW5kX291dHB1dCBhbmQgb3Mu
cGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGhvbWVfZGlyZWN0b3J5LCBmaW5kX291dHB1dCkpCisg
ICAgICAgIGlmIG5vdCBmaW5kX3Jlc3VsdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgICAgIHBhc3N3b3JkX2FyZ3MgPSBbImdyZXAiLCAicGFzc3dvcmQiLCBmaW5kX291dHB1dF0K
KyAgICAgICAgcGFzc3dvcmRfb3V0cHV0ID0gc2VsZi5ydW4ocGFzc3dvcmRfYXJncywgY3dkPWhv
bWVfZGlyZWN0b3J5LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGVpdmUuaWdub3JlX2Vycm9yKS5yc3Ry
aXAoKQorICAgICAgICByZXR1cm4gcGFzc3dvcmRfb3V0cHV0IGFuZCBvcy5wYXRoLmlzZmlsZShv
cy5wYXRoLmpvaW4oaG9tZV9kaXJlY3RvcnksIHBhc3N3b3JkX291dHB1dCkpCiAKICAgICBAbWVt
b2l6ZWQKICAgICBkZWYgc3ZuX3ZlcnNpb24oc2VsZik6CkBAIC01NTYsNyArNTYzLDcgQEAgY2xh
c3MgU1ZOKFNDTSk6CiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBj
d2Q9c2VsZi5jaGVja291dF9yb290LgogICAgICAgICBzZWxmLnJ1bihbJ3N2bicsICdyZXZlcnQn
XSArIGZpbGVfcGF0aHMpCiAKLSAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNz
YWdlLCB1c2VybmFtZT1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1GYWxzZSwg
Y2hhbmdlZF9maWxlcz1Ob25lKToKKyAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBt
ZXNzYWdlLCB1c2VybmFtZT1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1GYWxz
ZSwgY2hhbmdlZF9maWxlcz1Ob25lLCBwYXNzd29yZD1Ob25lKToKICAgICAgICAgIyBnaXQtY29t
bWl0IGFuZCBmb3JjZSBhcmUgbm90IHVzZWQgYnkgU1ZOLgogICAgICAgICBzdm5fY29tbWl0X2Fy
Z3MgPSBbInN2biIsICJjb21taXQiXQogCkBAIC01NzgsNyArNTg1LDcgQEAgY2xhc3MgU1ZOKFND
TSk6CiAgICAgICAgICAgICByZXR1cm4gIkRyeSBydW4sIG5vIGNvbW1pdC5cbkNvbW1pdHRlZCBy
ZXZpc2lvbiAwLiIKIAogICAgICAgICAjIEZJWE1FOiBTaG91bGQgdGhpcyB1c2UgY3dkPXNlbGYu
Y2hlY2tvdXRfcm9vdD8KLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKHN2bl9jb21taXRfYXJncywg
ZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxlcikKKyAgICAgICAgcmV0dXJuIHNlbGYu
cnVuKHN2bl9jb21taXRfYXJncywgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxlciwg
aW5wdXQ9cGFzc3dvcmQpCiAKICAgICBkZWYgc3ZuX2NvbW1pdF9sb2coc2VsZiwgc3ZuX3Jldmlz
aW9uKToKICAgICAgICAgc3ZuX3JldmlzaW9uID0gc2VsZi5zdHJpcF9yX2Zyb21fc3ZuX3Jldmlz
aW9uKHN2bl9yZXZpc2lvbikKQEAgLTgzNCw3ICs4NDEsNyBAQCBjbGFzcyBHaXQoU0NNKToKICAg
ICAgICAgICAgIGlmIG51bV9sb2NhbF9jb21taXRzID4gMSBvciAobnVtX2xvY2FsX2NvbW1pdHMg
PiAwIGFuZCBub3Qgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4pOgogICAgICAgICAgICAgICAg
IHJhaXNlIEFtYmlndW91c0NvbW1pdEVycm9yKG51bV9sb2NhbF9jb21taXRzLCB3b3JraW5nX2Rp
cmVjdG9yeV9pc19jbGVhbikKIAotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1l
c3NhZ2UsIHVzZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNl
LCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgorICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYs
IG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZh
bHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUsIHBhc3N3b3JkPU5vbmUpOgogICAgICAgICAjIFVzZXJu
YW1lIGlzIGlnbm9yZWQgZHVyaW5nIEdpdCBjb21taXRzLgogICAgICAgICB3b3JraW5nX2RpcmVj
dG9yeV9pc19jbGVhbiA9IHNlbGYud29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4oKQogCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5weQkocmV2aXNp
b24gODMxNDcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAoraW1wb3J0IGdldHBhc3MKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGlt
cG9ydCByZQpAQCAtNjUsNiArNjYsMTAgQEAgY2xhc3MgVXNlcihvYmplY3QpOgogICAgICAgICBy
ZXR1cm4gcmVzcG9uc2UKIAogICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwcm9tcHRfcGFzc3dv
cmQoY2xzLCBtZXNzYWdlKToKKyAgICAgICAgcmV0dXJuIGdldHBhc3MuZ2V0cGFzcyhtZXNzYWdl
KQorCisgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHByb21wdF93aXRoX2xpc3QoY2xzLCBsaXN0
X3RpdGxlLCBsaXN0X2l0ZW1zLCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCByYXdfaW5wdXQ9
cmF3X2lucHV0KToKICAgICAgICAgcHJpbnQgbGlzdF90aXRsZQogICAgICAgICBpID0gMApJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5CShyZXZpc2lv
biA4MzE0NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb21taXQucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgY2xhc3MgQ29tbWl0KEFic3RyYWN0U3Rl
cCk6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dGVtcHRlZCB0byBjb21taXQgd2l0
aCBhIGNvbW1pdCBtZXNzYWdlIHNob3J0ZXIgdGhhbiA1MCBjaGFyYWN0ZXJzLiAgRWl0aGVyIHlv
dXIgcGF0Y2ggaXMgbWlzc2luZyBhIENoYW5nZUxvZyBvciB3ZWJraXQtcGF0Y2ggbWF5IGhhdmUg
YSBidWcuIikKIAogICAgICAgICBzZWxmLl9zdGF0ZSA9IHN0YXRlCi0KICAgICAgICAgdXNlcm5h
bWUgPSBOb25lCisgICAgICAgIHBhc3N3b3JkID0gTm9uZQogICAgICAgICBmb3JjZV9zcXVhc2gg
PSBGYWxzZQogCiAgICAgICAgIG51bV90cmllcyA9IDAKQEAgLTU4LDcgKzU4LDkgQEAgY2xhc3Mg
Q29tbWl0KEFic3RyYWN0U3RlcCk6CiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAg
ICBzY20gPSBzZWxmLl90b29sLnNjbSgpCi0gICAgICAgICAgICAgICAgY29tbWl0X3RleHQgPSBz
Y20uY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLl9jb21taXRfbWVzc2FnZSwgZ2l0X2NvbW1pdD1z
ZWxmLl9vcHRpb25zLmdpdF9jb21taXQsIHVzZXJuYW1lPXVzZXJuYW1lLCBmb3JjZV9zcXVhc2g9
Zm9yY2Vfc3F1YXNoLCBjaGFuZ2VkX2ZpbGVzPXNlbGYuX2NoYW5nZWRfZmlsZXMoc3RhdGUpKQor
ICAgICAgICAgICAgICAgIGNvbW1pdF90ZXh0ID0gc2NtLmNvbW1pdF93aXRoX21lc3NhZ2Uoc2Vs
Zi5fY29tbWl0X21lc3NhZ2UsIGdpdF9jb21taXQ9c2VsZi5fb3B0aW9ucy5naXRfY29tbWl0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
cm5hbWU9dXNlcm5hbWUsIGZvcmNlX3NxdWFzaD1mb3JjZV9zcXVhc2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkX2ZpbGVzPXNl
bGYuX2NoYW5nZWRfZmlsZXMoc3RhdGUpLCBwYXNzd29yZD1wYXNzd29yZCkKICAgICAgICAgICAg
ICAgICBzdm5fcmV2aXNpb24gPSBzY20uc3ZuX3JldmlzaW9uX2Zyb21fY29tbWl0X3RleHQoY29t
bWl0X3RleHQpCiAgICAgICAgICAgICAgICAgbG9nKCJDb21taXR0ZWQgciVzOiA8JXM+IiAlIChz
dm5fcmV2aXNpb24sIHVybHMudmlld19yZXZpc2lvbl91cmwoc3ZuX3JldmlzaW9uKSkpCiAgICAg
ICAgICAgICAgICAgc2VsZi5fc3RhdGVbImNvbW1pdF90ZXh0Il0gPSBjb21taXRfdGV4dApAQCAt
NzMsMyArNzUsNyBAQCBjbGFzcyBDb21taXQoQWJzdHJhY3RTdGVwKToKICAgICAgICAgICAgICAg
ICB1c2VybmFtZSA9IHNlbGYuX3Rvb2wudXNlci5wcm9tcHQoIiVzIGxvZ2luOiAiICUgZS5zZXJ2
ZXJfaG9zdCwgcmVwZWF0PTUpCiAgICAgICAgICAgICAgICAgaWYgbm90IHVzZXJuYW1lOgogICAg
ICAgICAgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiWW91IG5lZWQgdG8gc3BlY2lmeSB0
aGUgdXNlcm5hbWUgb24gJXMgdG8gcGVyZm9ybSB0aGUgY29tbWl0IGFzLiIgJSBzZWxmLnN2bl9z
ZXJ2ZXJfaG9zdCkKKworICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gc2VsZi5fdG9vbC51c2Vy
LnByb21wdF9wYXNzd29yZCgiJXMgcGFzc3dvcmQ6ICIgJSBlLnNlcnZlcl9ob3N0KQorICAgICAg
ICAgICAgICAgIGlmIG5vdCBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2Ny
aXB0RXJyb3IoIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIHBhc3N3b3JkIG9uICVzIHRvIHBlcmZv
cm0gdGhlIGNvbW1pdC4iICUgc2VsZi5zdm5fc2VydmVyX2hvc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88650</attachid>
            <date>2011-04-07 09:23:25 -0700</date>
            <delta_ts>2011-04-17 12:44:54 -0700</delta_ts>
            <desc>[Work-in-progress] Detect SVN credentials when using git-svn</desc>
            <filename>WIP_Bug31500.diff</filename>
            <type>text/plain</type>
            <size>3902</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkJ
KHJldmlzaW9uIDgyODQ0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tv
dXQvc2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDEwIEBACiAKICMgU0NNIG1l
dGhvZHMgYXJlIGV4cGVjdGVkIHRvIHJldHVybiBwYXRocyByZWxhdGl2ZSB0byBzZWxmLmNoZWNr
b3V0X3Jvb3QuCiBjbGFzcyBTQ006CisgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG1vdmUgdGhlc2Ug
dmFsdWVzIHRvIGEgV2ViS2l0LXNwZWNpZmljIGNvbmZpZyBmaWxlLgorICAgIHN2bl9zZXJ2ZXJf
aG9zdCA9ICJzdm4ud2Via2l0Lm9yZyIKKyAgICBzdm5fc2VydmVyX3JlYWxtID0gIjxodHRwOi8v
c3ZuLndlYmtpdC5vcmc6ODA+IE1hYyBPUyBGb3JnZSIKKwogICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBjd2QsIGV4ZWN1dGl2ZT1Ob25lKToKICAgICAgICAgc2VsZi5jd2QgPSBjd2QKICAgICAgICAg
c2VsZi5jaGVja291dF9yb290ID0gc2VsZi5maW5kX2NoZWNrb3V0X3Jvb3Qoc2VsZi5jd2QpCkBA
IC0yMTgsNiArMjIyLDE0IEBACiAgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKHNlbGYuY29tbWl0
X3N1Y2Nlc3NfcmVnZXhwKCksIGNvbW1pdF90ZXh0LCByZS5NVUxUSUxJTkUpCiAgICAgICAgIHJl
dHVybiBtYXRjaC5ncm91cCgnc3ZuX3JldmlzaW9uJykKIAorICAgIGRlZiBoYXNfYXV0aG9yaXph
dGlvbl9mb3JfcmVhbG0oc2VsZiwgcmVhbG09c3ZuX3NlcnZlcl9yZWFsbSwgaG9tZV9kaXJlY3Rv
cnk9b3MuZ2V0ZW52KCJIT01FIikpOgorICAgICAgICAjIEFzc3VtZXMgZmluZCBhbmQgZ3JlcCBh
cmUgaW5zdGFsbGVkLgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4o
aG9tZV9kaXJlY3RvcnksICIuc3VidmVyc2lvbiIpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBmaW5kX2FyZ3MgPSBbImZpbmQiLCAiLnN1YnZlcnNpb24iLCAiLXR5cGUiLCAi
ZiIsICItZXhlYyIsICJncmVwIiwgIi1xIiwgcmVhbG0sICJ7fSIsICI7IiwgIi1wcmludCJdOwor
ICAgICAgICBmaW5kX291dHB1dCA9IHNlbGYucnVuKGZpbmRfYXJncywgY3dkPWhvbWVfZGlyZWN0
b3J5LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpCisgICAg
ICAgIHJldHVybiBmaW5kX291dHB1dCBhbmQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGhv
bWVfZGlyZWN0b3J5LCBmaW5kX291dHB1dCkpCisKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVm
IF9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IikKQEAgLTMyMCw5ICszMzIsNiBAQAog
CiAKIGNsYXNzIFNWTihTQ00pOgotICAgICMgRklYTUU6IFdlIHNob3VsZCBtb3ZlIHRoZXNlIHZh
bHVlcyB0byBhIFdlYktpdC1zcGVjaWZpYyBjb25maWcgZmlsZS4KLSAgICBzdm5fc2VydmVyX2hv
c3QgPSAic3ZuLndlYmtpdC5vcmciCi0gICAgc3ZuX3NlcnZlcl9yZWFsbSA9ICI8aHR0cDovL3N2
bi53ZWJraXQub3JnOjgwPiBNYWMgT1MgRm9yZ2UiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwg
Y3dkLCBwYXRjaF9kaXJlY3RvcmllcywgZXhlY3V0aXZlPU5vbmUpOgogICAgICAgICBTQ00uX19p
bml0X18oc2VsZiwgY3dkLCBleGVjdXRpdmUpCkBAIC0zNzQsMTQgKzM4Myw2IEBACiAgICAgZGVm
IGNvbW1pdF9zdWNjZXNzX3JlZ2V4cCgpOgogICAgICAgICByZXR1cm4gIl5Db21taXR0ZWQgcmV2
aXNpb24gKD9QPHN2bl9yZXZpc2lvbj5cZCspXC4kIgogCi0gICAgZGVmIGhhc19hdXRob3JpemF0
aW9uX2Zvcl9yZWFsbShzZWxmLCByZWFsbT1zdm5fc2VydmVyX3JlYWxtLCBob21lX2RpcmVjdG9y
eT1vcy5nZXRlbnYoIkhPTUUiKSk6Ci0gICAgICAgICMgQXNzdW1lcyBmaW5kIGFuZCBncmVwIGFy
ZSBpbnN0YWxsZWQuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbiho
b21lX2RpcmVjdG9yeSwgIi5zdWJ2ZXJzaW9uIikpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNl
Ci0gICAgICAgIGZpbmRfYXJncyA9IFsiZmluZCIsICIuc3VidmVyc2lvbiIsICItdHlwZSIsICJm
IiwgIi1leGVjIiwgImdyZXAiLCAiLXEiLCByZWFsbSwgInt9IiwgIjsiLCAiLXByaW50Il07Ci0g
ICAgICAgIGZpbmRfb3V0cHV0ID0gc2VsZi5ydW4oZmluZF9hcmdzLCBjd2Q9aG9tZV9kaXJlY3Rv
cnksIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0cmlwKCkKLSAgICAg
ICAgcmV0dXJuIGZpbmRfb3V0cHV0IGFuZCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oaG9t
ZV9kaXJlY3RvcnksIGZpbmRfb3V0cHV0KSkKLQogICAgIEBtZW1vaXplZAogICAgIGRlZiBzdm5f
dmVyc2lvbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3ZuJywgJy0tdmVyc2lv
bicsICctLXF1aWV0J10pCkBAIC04NTgsNyArODU5LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2Fz
c2VydF9jYW5fc3F1YXNoKHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKQogICAgICAgICBzZWxm
LnJ1bihbJ2dpdCcsICdyZXNldCcsICctLXNvZnQnLCBzZWxmLnJlbW90ZV9tZXJnZV9iYXNlKCld
KQogICAgICAgICBzZWxmLmNvbW1pdF9sb2NhbGx5X3dpdGhfbWVzc2FnZShtZXNzYWdlKQotICAg
ICAgICByZXR1cm4gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyKCkKKyAgICAgICAg
cmV0dXJuIHNlbGYucHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcih1c2VybmFtZT11c2VybmFt
ZSkKIAogICAgIGRlZiBfY29tbWl0X29uX2JyYW5jaChzZWxmLCBtZXNzYWdlLCBnaXRfY29tbWl0
KToKICAgICAgICAgYnJhbmNoX3JlZiA9IHNlbGYucnVuKFsnZ2l0JywgJ3N5bWJvbGljLXJlZics
ICdIRUFEJ10pLnN0cmlwKCkKQEAgLTkzNywxMCArOTM4LDE0IEBACiAgICAgZGVmIGNvbW1pdF9s
b2NhbGx5X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlKToKICAgICAgICAgc2VsZi5ydW4oWydn
aXQnLCAnY29tbWl0JywgJy0tYWxsJywgJy1GJywgJy0nXSwgaW5wdXQ9bWVzc2FnZSkKIAotICAg
IGRlZiBwdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyKHNlbGYpOgorICAgIGRlZiBwdXNoX2xv
Y2FsX2NvbW1pdHNfdG9fc2VydmVyKHNlbGYsIHVzZXJuYW1lPU5vbmUpOgogICAgICAgICBkY29t
bWl0X2NvbW1hbmQgPSBbJ2dpdCcsICdzdm4nLCAnZGNvbW1pdCddCiAgICAgICAgIGlmIHNlbGYu
ZHJ5cnVuOgogICAgICAgICAgICAgZGNvbW1pdF9jb21tYW5kLmFwcGVuZCgnLS1kcnktcnVuJykK
KyAgICAgICAgaWYgbm90IHVzZXJuYW1lIGFuZCBub3Qgc2VsZi5oYXNfYXV0aG9yaXphdGlvbl9m
b3JfcmVhbG0oKToKKyAgICAgICAgICAgIHJhaXNlIEF1dGhlbnRpY2F0aW9uRXJyb3Ioc2VsZi5z
dm5fc2VydmVyX2hvc3QpCisgICAgICAgIGlmIHVzZXJuYW1lOgorICAgICAgICAgICAgZGNvbW1p
dF9jb21tYW5kLmV4dGVuZChbIi0tdXNlcm5hbWUiLCB1c2VybmFtZV0pCiAgICAgICAgIG91dHB1
dCA9IHNlbGYucnVuKGRjb21taXRfY29tbWFuZCwgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3Jf
aGFuZGxlcikKICAgICAgICAgIyBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggbG9va3MgbGlrZSBhIGNv
bW1pdCBzbyB0aGF0IHRoaW5ncyB3aGljaCBwYXJzZSB0aGlzIG91dHB1dCB3aWxsIHN1Y2NlZWQu
CiAgICAgICAgIGlmIHNlbGYuZHJ5cnVuOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89956</attachid>
            <date>2011-04-17 12:44:54 -0700</date>
            <delta_ts>2011-04-17 14:30:59 -0700</delta_ts>
            <desc>[Work-in-progress] Detect SVN credentials when using git-svn</desc>
            <filename>Bug31500.patch</filename>
            <type>text/plain</type>
            <size>14004</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0MTAzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzMgQEAKKzIwMTEtMDQtMTcgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHdlYmtpdC1w
YXRjaCBsYW5kIGhhbmdzIGlmIHN2biBwcm9tcHRzIGZvciBjcmVkZW50aWFscworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MDAKKworICAgICAgICBT
cGVjdWxhdGl2ZSBmaXguIFByb21wdCBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHdoZW4gdXNp
bmcgZ2l0LXN2biBhbmQgdGhlcmUKKyAgICAgICAgYXJlbid0IGNhY2hlZCBTVk4gY3JlZGVudGlh
bHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHk6
CisgICAgICAgICAgLSBNb2RpZmllZCBBdXRoZW50aWNhdGlvbkVycm9yIGNvbnN0cnVjdG9yIHRv
IHRha2Ugb3B0aW9uYWwgbmVlZHNfcGFzc3dvcmQgYXJndW1lbnQuCisgICAgICAgICAgLSBNYWRl
IFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKSBhIHN0YXRpYyBtZXRob2QgYW5kIHJl
bW92ZWQgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgZm9yIGFyZ3VtZW50IHJlYWxtOyBtb2Rp
ZmllZCBjYWxsIHNpdGVzIGFzIG5lZWRlZC4KKyAgICAgICAgICAtIE1vZGlmaWVkIHtTQ00sIFNW
TiwgR2l0fS5jb21taXRfd2l0aF9tZXNzYWdlKCkgdG8gdGFrZSBvcHRpb25hbCBwYXNzd29yZCBh
cmd1bWVudC4KKyAgICAgICAgICAtIE1vZGlmaWVkIEdpdC5fY29tbWl0X29uX2JyYW5jaCgpIHRv
IHRha2Ugb3B0aW9uYWwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZ3VtZW50LgorICAgICAgICAg
IC0gTW9kaWZpZWQgR2l0LnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIoKSB0byB0YWtlIG9w
dGlvbmFsIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgYXJndW1lbnQgYW5kIHRv
IGNhbGwgU1ZOLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weToKKyAgICAgICAgICAt
IE1vZGlmaWVkIFNWTlRlc3QudGVzdF9jb21taXRfd2l0aG91dF9hdXRob3JpemF0aW9uKCkgdG8g
dGFrZSBkdW1teSByZWFsbSBhcmd1bWVudC4KKyAgICAgICAgICAtIE1vZGlmaWVkIFNWTlRlc3Qu
dGVzdF9ub3RfaGF2ZV9hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpIHRvIHBhc3MgcmVhbG0gYXJn
dW1lbnQgdG8KKyAgICAgICAgICAgIFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKS4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVudGlhbHMucHk6Cisg
ICAgICAgICAgLSBNb2RpZmllZCBDcmVkZW50aWFscy5yZWFkX2NyZWRlbnRpYWxzKCkgdG8gY2Fs
bCBVc2VyLnByb21wdF9wYXNzd29yZCgpIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHVzaW5nIGdl
dHBhc3MuZ2V0cGFzcygpIGRpcmVjdGx5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS91c2VyLnB5OgorICAgICAgICAgIC0gQWRkZWQgVXNlci5wcm9tcHRfcGFzc3dv
cmQoKS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5Ogor
ICAgICAgICAgIC0gTW9kaWZpZWQgQ29tbWl0LnJ1bigpIHRvIHByb21wdCBmb3IgYSBwYXNzd29y
ZCBpZiBuZWVkZWQuCisKIDIwMTEtMDQtMTcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkJKHJldmlzaW9uIDg0
MDgyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgZGVmIGNvbW1pdF9lcnJvcl9oYW5kbGVy
KGVycm9yKToKIAogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yKEV4Y2VwdGlvbik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9ob3N0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c2VydmVyX2hvc3QsIG5lZWRzX3Bhc3N3b3JkPUZhbHNlKToKICAgICAgICAgc2VsZi5zZXJ2ZXJf
aG9zdCA9IHNlcnZlcl9ob3N0CiAKIApAQCAtMjkxLDcgKzI5MSw3IEBAIGNsYXNzIFNDTToKICAg
ICBkZWYgcmV2ZXJ0X2ZpbGVzKHNlbGYsIGZpbGVfcGF0aHMpOgogICAgICAgICBzZWxmLl9zdWJj
bGFzc19tdXN0X2ltcGxlbWVudCgpCiAKLSAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxm
LCBtZXNzYWdlLCB1c2VybmFtZT1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1G
YWxzZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKKyAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShz
ZWxmLCBtZXNzYWdlLCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lLCBnaXRfY29tbWl0PU5v
bmUsIGZvcmNlX3NxdWFzaD1GYWxzZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKICAgICAgICAgc2Vs
Zi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQogCiAgICAgZGVmIHN2bl9jb21taXRfbG9nKHNl
bGYsIHN2bl9yZXZpc2lvbik6CkBAIC0zNzQsMTIgKzM3NCwxMyBAQCBjbGFzcyBTVk4oU0NNKToK
ICAgICBkZWYgY29tbWl0X3N1Y2Nlc3NfcmVnZXhwKCk6CiAgICAgICAgIHJldHVybiAiXkNvbW1p
dHRlZCByZXZpc2lvbiAoP1A8c3ZuX3JldmlzaW9uPlxkKylcLiQiCiAKLSAgICBkZWYgaGFzX2F1
dGhvcml6YXRpb25fZm9yX3JlYWxtKHNlbGYsIHJlYWxtPXN2bl9zZXJ2ZXJfcmVhbG0sIGhvbWVf
ZGlyZWN0b3J5PW9zLmdldGVudigiSE9NRSIpKToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShyZWFsbSwgaG9tZV9kaXJlY3Rvcnk9b3MuZ2V0
ZW52KCJIT01FIikpOgogICAgICAgICAjIEFzc3VtZXMgZmluZCBhbmQgZ3JlcCBhcmUgaW5zdGFs
bGVkLgogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oaG9tZV9kaXJl
Y3RvcnksICIuc3VidmVyc2lvbiIpKToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAg
ICBmaW5kX2FyZ3MgPSBbImZpbmQiLCAiLnN1YnZlcnNpb24iLCAiLXR5cGUiLCAiZiIsICItZXhl
YyIsICJncmVwIiwgIi1xIiwgcmVhbG0sICJ7fSIsICI7IiwgIi1wcmludCJdOwotICAgICAgICBm
aW5kX291dHB1dCA9IHNlbGYucnVuKGZpbmRfYXJncywgY3dkPWhvbWVfZGlyZWN0b3J5LCBlcnJv
cl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpCisgICAgICAgIGZpbmRf
b3V0cHV0ID0gcnVuX2NvbW1hbmQoZmluZF9hcmdzLCBjd2Q9aG9tZV9kaXJlY3RvcnkpLnJzdHJp
cCgpCiAgICAgICAgIHJldHVybiBmaW5kX291dHB1dCBhbmQgb3MucGF0aC5pc2ZpbGUob3MucGF0
aC5qb2luKGhvbWVfZGlyZWN0b3J5LCBmaW5kX291dHB1dCkpCiAKICAgICBAbWVtb2l6ZWQKQEAg
LTU1NiwxMSArNTU3LDExIEBAIGNsYXNzIFNWTihTQ00pOgogICAgICAgICAjIEZJWE1FOiBUaGlz
IHNob3VsZCBwcm9iYWJseSB1c2UgY3dkPXNlbGYuY2hlY2tvdXRfcm9vdC4KICAgICAgICAgc2Vs
Zi5ydW4oWydzdm4nLCAncmV2ZXJ0J10gKyBmaWxlX3BhdGhzKQogCi0gICAgZGVmIGNvbW1pdF93
aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgZ2l0X2NvbW1pdD1Ob25l
LCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CisgICAgZGVmIGNvbW1p
dF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9u
ZSwgZ2l0X2NvbW1pdD1Ob25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9u
ZSk6CiAgICAgICAgICMgZ2l0LWNvbW1pdCBhbmQgZm9yY2UgYXJlIG5vdCB1c2VkIGJ5IFNWTi4K
ICAgICAgICAgc3ZuX2NvbW1pdF9hcmdzID0gWyJzdm4iLCAiY29tbWl0Il0KIAotICAgICAgICBp
ZiBub3QgdXNlcm5hbWUgYW5kIG5vdCBzZWxmLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgp
OgorICAgICAgICBpZiBub3QgdXNlcm5hbWUgYW5kIG5vdCBzZWxmLmhhc19hdXRob3JpemF0aW9u
X2Zvcl9yZWFsbShzZWxmLnN2bl9zZXJ2ZXJfcmVhbG0pOgogICAgICAgICAgICAgcmFpc2UgQXV0
aGVudGljYXRpb25FcnJvcihzZWxmLnN2bl9zZXJ2ZXJfaG9zdCkKICAgICAgICAgaWYgdXNlcm5h
bWU6CiAgICAgICAgICAgICBzdm5fY29tbWl0X2FyZ3MuZXh0ZW5kKFsiLS11c2VybmFtZSIsIHVz
ZXJuYW1lXSkKQEAgLTgzMyw3ICs4MzQsNyBAQCBjbGFzcyBHaXQoU0NNKToKICAgICAgICAgICAg
IGlmIG51bV9sb2NhbF9jb21taXRzID4gMSBvciAobnVtX2xvY2FsX2NvbW1pdHMgPiAwIGFuZCBu
b3Qgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4pOgogICAgICAgICAgICAgICAgIHJhaXNlIEFt
YmlndW91c0NvbW1pdEVycm9yKG51bV9sb2NhbF9jb21taXRzLCB3b3JraW5nX2RpcmVjdG9yeV9p
c19jbGVhbikKIAotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVz
ZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2Vk
X2ZpbGVzPU5vbmUpOgorICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2Us
IHVzZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1
YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICAjIFVzZXJuYW1lIGlzIGln
bm9yZWQgZHVyaW5nIEdpdCBjb21taXRzLgogICAgICAgICB3b3JraW5nX2RpcmVjdG9yeV9pc19j
bGVhbiA9IHNlbGYud29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW4oKQogCkBAIC04NDMsNyArODQ0
LDcgQEAgY2xhc3MgR2l0KFNDTSk6CiAgICAgICAgICAgICAgICAgaWYgd29ya2luZ19kaXJlY3Rv
cnlfaXNfY2xlYW46CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3Nh
Z2U9IlRoZSB3b3JraW5nIGNvcHkgaXMgbm90IG1vZGlmaWVkLiAtLWdpdC1jb21taXQ9SEVBRC4u
IG9ubHkgY29tbWl0cyB3b3JraW5nIGNvcHkgY2hhbmdlcy4iKQogICAgICAgICAgICAgICAgIHNl
bGYuY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2NvbW1pdF9vbl9icmFuY2gobWVzc2FnZSwgJ0hFQUQnKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9jb21taXRfb25fYnJhbmNoKG1lc3NhZ2UsICdIRUFEJywgdXNl
cm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkKQogCiAgICAgICAgICAgICAjIE5lZWQg
d29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQgc28gd2UgY2FuIGNoZWNr
b3V0IHRoZSBtZXJnZSBicmFuY2guCiAgICAgICAgICAgICBpZiBub3Qgd29ya2luZ19kaXJlY3Rv
cnlfaXNfY2xlYW46CkBAIC04NTEsMTUgKzg1MiwxNSBAQCBjbGFzcyBHaXQoU0NNKToKICAgICAg
ICAgICAgICAgICAjIFRoYXQgd2lsbCBtb2RpZnkgdGhlIHdvcmtpbmctY29weSBhbmQgY2F1c2Ug
dXMgdG8gaGl0IHRoaXMgZXJyb3IuCiAgICAgICAgICAgICAgICAgIyBUaGUgQ2hhbmdlTG9nIG1v
ZGlmaWNhdGlvbiBjb3VsZCBiZSBtYWRlIHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgbG9jYWwgY29t
bWl0LgogICAgICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9Ildvcmtpbmcg
Y29weSBpcyBtb2RpZmllZC4gQ2Fubm90IGNvbW1pdCBpbmRpdmlkdWFsIGdpdF9jb21taXRzLiIp
Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fY29tbWl0X29uX2JyYW5jaChtZXNzYWdlLCBnaXRf
Y29tbWl0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1pdF9vbl9icmFuY2gobWVzc2Fn
ZSwgZ2l0X2NvbW1pdCwgdXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkKQogCiAg
ICAgICAgIGlmIG5vdCBmb3JjZV9zcXVhc2g6CiAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfY2Fu
X3NxdWFzaCh3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbikKICAgICAgICAgc2VsZi5ydW4oWydn
aXQnLCAncmVzZXQnLCAnLS1zb2Z0Jywgc2VsZi5yZW1vdGVfbWVyZ2VfYmFzZSgpXSkKICAgICAg
ICAgc2VsZi5jb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgcmV0
dXJuIHNlbGYucHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcigpCisgICAgICAgIHJldHVybiBz
ZWxmLnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIodXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3
b3JkPXBhc3N3b3JkKQogCi0gICAgZGVmIF9jb21taXRfb25fYnJhbmNoKHNlbGYsIG1lc3NhZ2Us
IGdpdF9jb21taXQpOgorICAgIGRlZiBfY29tbWl0X29uX2JyYW5jaChzZWxmLCBtZXNzYWdlLCBn
aXRfY29tbWl0LCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lKToKICAgICAgICAgYnJhbmNo
X3JlZiA9IHNlbGYucnVuKFsnZ2l0JywgJ3N5bWJvbGljLXJlZicsICdIRUFEJ10pLnN0cmlwKCkK
ICAgICAgICAgYnJhbmNoX25hbWUgPSBicmFuY2hfcmVmLnJlcGxhY2UoJ3JlZnMvaGVhZHMvJywg
JycpCiAgICAgICAgIGNvbW1pdF9pZHMgPSBzZWxmLmNvbW1pdF9pZHNfZnJvbV9jb21taXRpc2hf
YXJndW1lbnRzKFtnaXRfY29tbWl0XSkKQEAgLTg4OCw3ICs4ODksNyBAQCBjbGFzcyBHaXQoU0NN
KToKICAgICAgICAgICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdjaGVycnktcGljaycsICctLW5v
LWNvbW1pdCcsIGNvbW1pdF0pCiAKICAgICAgICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NvbW1p
dCcsICctbScsIG1lc3NhZ2VdKQotICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5wdXNoX2xvY2Fs
X2NvbW1pdHNfdG9fc2VydmVyKCkKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucHVzaF9sb2Nh
bF9jb21taXRzX3RvX3NlcnZlcih1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQp
CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CiAgICAgICAgICAgICBsb2coIkNPTU1JVCBG
QUlMRUQ6ICIgKyBzdHIoZSkpCiAgICAgICAgICAgICBvdXRwdXQgPSAiQ29tbWl0IGZhaWxlZC4i
CkBAIC05MzYsMTEgKzkzNywxNSBAQCBjbGFzcyBHaXQoU0NNKToKICAgICBkZWYgY29tbWl0X2xv
Y2FsbHlfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICBzZWxmLnJ1bihbJ2dp
dCcsICdjb21taXQnLCAnLS1hbGwnLCAnLUYnLCAnLSddLCBpbnB1dD1tZXNzYWdlKQogCi0gICAg
ZGVmIHB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIoc2VsZik6CisgICAgZGVmIHB1c2hfbG9j
YWxfY29tbWl0c190b19zZXJ2ZXIoc2VsZiwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSk6
CiAgICAgICAgIGRjb21taXRfY29tbWFuZCA9IFsnZ2l0JywgJ3N2bicsICdkY29tbWl0J10KICAg
ICAgICAgaWYgc2VsZi5kcnlydW46CiAgICAgICAgICAgICBkY29tbWl0X2NvbW1hbmQuYXBwZW5k
KCctLWRyeS1ydW4nKQotICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bihkY29tbWl0X2NvbW1hbmQs
IGVycm9yX2hhbmRsZXI9Y29tbWl0X2Vycm9yX2hhbmRsZXIpCisgICAgICAgIGlmIG5vdCBTVk4u
aGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKFNWTi5zdm5fc2VydmVyX3JlYWxtKToKKyAgICAg
ICAgICAgIHJhaXNlIEF1dGhlbnRpY2F0aW9uRXJyb3IoU1ZOLnN2bl9zZXJ2ZXJfaG9zdCwgbmVl
ZHNfcGFzc3dvcmQ9VHJ1ZSkKKyAgICAgICAgaWYgdXNlcm5hbWU6CisgICAgICAgICAgICBkY29t
bWl0X2NvbW1hbmQuZXh0ZW5kKFsiLS11c2VybmFtZSIsIHVzZXJuYW1lXSkKKyAgICAgICAgb3V0
cHV0ID0gc2VsZi5ydW4oZGNvbW1pdF9jb21tYW5kLCBlcnJvcl9oYW5kbGVyPWNvbW1pdF9lcnJv
cl9oYW5kbGVyLCBpbnB1dD1wYXNzd29yZCkKICAgICAgICAgIyBSZXR1cm4gYSBzdHJpbmcgd2hp
Y2ggbG9va3MgbGlrZSBhIGNvbW1pdCBzbyB0aGF0IHRoaW5ncyB3aGljaCBwYXJzZSB0aGlzIG91
dHB1dCB3aWxsIHN1Y2NlZWQuCiAgICAgICAgIGlmIHNlbGYuZHJ5cnVuOgogICAgICAgICAgICAg
b3V0cHV0ICs9ICJcbkNvbW1pdHRlZCByMCIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDg0
MDgyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtX3VuaXR0
ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNyArNjY0LDcgQEAgUTFkVEJ4MEFBQUI0Mml0
ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRHQgogICAgICAgICBzZWxmLl9zaGFyZWRfdGVzdF9jb21t
aXRfd2l0aF9tZXNzYWdlKCJkYmF0ZXNAd2Via2l0Lm9yZyIpCiAKICAgICBkZWYgdGVzdF9jb21t
aXRfd2l0aG91dF9hdXRob3JpemF0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLnNjbS5oYXNfYXV0
aG9yaXphdGlvbl9mb3JfcmVhbG0gPSBsYW1iZGE6IEZhbHNlCisgICAgICAgIHNlbGYuc2NtLmhh
c19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSA9IGxhbWJkYSByZWFsbTogRmFsc2UKICAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoQXV0aGVudGljYXRpb25FcnJvciwgc2VsZi5fc2hhcmVkX3Rlc3Rf
Y29tbWl0X3dpdGhfbWVzc2FnZSkKIAogICAgIGRlZiB0ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zv
cl9yZWFsbShzZWxmKToKQEAgLTY3NCw3ICs2NzQsNyBAQCBRMWRUQngwQUFBQjQyaXRnNEdsZ1lK
akd3TUREeU9ETXhNRHczNEdCCiAgICAgICAgIG9zLm1rZGlyKHN2bl9jb25maWdfZGlyX3BhdGgp
CiAgICAgICAgIGZha2Vfd2Via2l0X2F1dGhfZmlsZSA9IG9zLnBhdGguam9pbihzdm5fY29uZmln
X2Rpcl9wYXRoLCAiZmFrZV93ZWJraXRfYXV0aF9maWxlIikKICAgICAgICAgd3JpdGVfaW50b19m
aWxlX2F0X3BhdGgoZmFrZV93ZWJraXRfYXV0aF9maWxlLCBTVk4uc3ZuX3NlcnZlcl9yZWFsbSkK
LSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNjbS5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0o
aG9tZV9kaXJlY3Rvcnk9ZmFrZV9ob21lX2RpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShz
Y20uaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKFNWTi5zdm5fc2VydmVyX3JlYWxtLCBob21l
X2RpcmVjdG9yeT1mYWtlX2hvbWVfZGlyKSkKICAgICAgICAgb3MucmVtb3ZlKGZha2Vfd2Via2l0
X2F1dGhfZmlsZSkKICAgICAgICAgb3Mucm1kaXIoc3ZuX2NvbmZpZ19kaXJfcGF0aCkKICAgICAg
ICAgb3Mucm1kaXIoZmFrZV9ob21lX2RpcikKQEAgLTY4NCw3ICs2ODQsNyBAQCBRMWRUQngwQUFB
QjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCCiAgICAgICAgIGZha2VfaG9tZV9kaXIgPSB0
ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZpeD0iZmFrZV9ob21lX2RpciIpCiAgICAgICAgIHN2bl9jb25m
aWdfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oZmFrZV9ob21lX2RpciwgIi5zdWJ2ZXJzaW9uIikK
ICAgICAgICAgb3MubWtkaXIoc3ZuX2NvbmZpZ19kaXJfcGF0aCkKLSAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShzY20uaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKGhvbWVfZGlyZWN0b3J5PWZh
a2VfaG9tZV9kaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjbS5oYXNfYXV0aG9yaXph
dGlvbl9mb3JfcmVhbG0oU1ZOLnN2bl9zZXJ2ZXJfcmVhbG0sIGhvbWVfZGlyZWN0b3J5PWZha2Vf
aG9tZV9kaXIpKQogICAgICAgICBvcy5ybWRpcihzdm5fY29uZmlnX2Rpcl9wYXRoKQogICAgICAg
ICBvcy5ybWRpcihmYWtlX2hvbWVfZGlyKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9uZXQvY3JlZGVudGlhbHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vbmV0L2NyZWRlbnRpYWxzLnB5CShyZXZpc2lvbiA4NDA4MikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9jcmVkZW50aWFscy5weQkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNiBAQAogIwogIyBQeXRob24gbW9kdWxlIGZvciByZWFkaW5nIHN0
b3JlZCB3ZWIgY3JlZGVudGlhbHMgZnJvbSB0aGUgT1MuCiAKLWltcG9ydCBnZXRwYXNzCiBpbXBv
cnQgb3MKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IHJlCkBAIC0xNDksNyArMTQ4LDcgQEAgY2xh
c3MgQ3JlZGVudGlhbHMob2JqZWN0KToKICAgICAgICAgaWYgbm90IHVzZXJuYW1lOgogICAgICAg
ICAgICAgdXNlcm5hbWUgPSBVc2VyLnByb21wdCgiJXMgbG9naW46ICIgJSBzZWxmLmhvc3QpCiAg
ICAgICAgIGlmIG5vdCBwYXNzd29yZDoKLSAgICAgICAgICAgIHBhc3N3b3JkID0gZ2V0cGFzcy5n
ZXRwYXNzKCIlcyBwYXNzd29yZCBmb3IgJXM6ICIgJSAoc2VsZi5ob3N0LCB1c2VybmFtZSkpCisg
ICAgICAgICAgICBwYXNzd29yZCA9IFVzZXIucHJvbXB0X3Bhc3N3b3JkKCIlcyBwYXNzd29yZCBm
b3IgJXM6ICIgJSAoc2VsZi5ob3N0LCB1c2VybmFtZSkpCiAgICAgICAgICAgICBzZWxmLl9vZmZl
cl90b19zdG9yZV9jcmVkZW50aWFsc19pbl9rZXlyaW5nKHVzZXJuYW1lLCBwYXNzd29yZCkKIAog
ICAgICAgICByZXR1cm4gKHVzZXJuYW1lLCBwYXNzd29yZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CShyZXZpc2lvbiA4NDA4MikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBv
cnQgZ2V0cGFzcwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJlCkBAIC02NSw2
ICs2NiwxMCBAQCBjbGFzcyBVc2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiByZXNwb25zZQog
CiAgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHByb21wdF9wYXNzd29yZChjbHMsIG1lc3NhZ2Us
IHJlcGVhdD0xKToKKyAgICAgICAgcmV0dXJuIGNscy5wcm9tcHQobWVzc2FnZSwgcmVwZWF0PXJl
cGVhdCwgcmF3X2lucHV0PWdldHBhc3MuZ2V0cGFzcykKKworICAgIEBjbGFzc21ldGhvZAogICAg
IGRlZiBwcm9tcHRfd2l0aF9saXN0KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywgY2FuX2No
b29zZV9tdWx0aXBsZT1GYWxzZSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CiAgICAgICAgIHByaW50
IGxpc3RfdGl0bGUKICAgICAgICAgaSA9IDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9zdGVwcy9jb21taXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL3N0ZXBzL2NvbW1pdC5weQkocmV2aXNpb24gODQwODIpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIGNsYXNzIENvbW1pdChBYnN0cmFjdFN0ZXApOgogICAgICAgICBzZWxmLl9zdGF0ZSA9
IHN0YXRlCiAKICAgICAgICAgdXNlcm5hbWUgPSBOb25lCisgICAgICAgIHBhc3N3b3JkID0gTm9u
ZQogICAgICAgICBmb3JjZV9zcXVhc2ggPSBGYWxzZQogCiAgICAgICAgIG51bV90cmllcyA9IDAK
QEAgLTU4LDcgKzU5LDcgQEAgY2xhc3MgQ29tbWl0KEFic3RyYWN0U3RlcCk6CiAKICAgICAgICAg
ICAgIHRyeToKICAgICAgICAgICAgICAgICBzY20gPSBzZWxmLl90b29sLnNjbSgpCi0gICAgICAg
ICAgICAgICAgY29tbWl0X3RleHQgPSBzY20uY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLl9jb21t
aXRfbWVzc2FnZSwgZ2l0X2NvbW1pdD1zZWxmLl9vcHRpb25zLmdpdF9jb21taXQsIHVzZXJuYW1l
PXVzZXJuYW1lLCBmb3JjZV9zcXVhc2g9Zm9yY2Vfc3F1YXNoLCBjaGFuZ2VkX2ZpbGVzPXNlbGYu
X2NoYW5nZWRfZmlsZXMoc3RhdGUpKQorICAgICAgICAgICAgICAgIGNvbW1pdF90ZXh0ID0gc2Nt
LmNvbW1pdF93aXRoX21lc3NhZ2Uoc2VsZi5fY29tbWl0X21lc3NhZ2UsIGdpdF9jb21taXQ9c2Vs
Zi5fb3B0aW9ucy5naXRfY29tbWl0LCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dv
cmQsIGZvcmNlX3NxdWFzaD1mb3JjZV9zcXVhc2gsIGNoYW5nZWRfZmlsZXM9c2VsZi5fY2hhbmdl
ZF9maWxlcyhzdGF0ZSkpCiAgICAgICAgICAgICAgICAgc3ZuX3JldmlzaW9uID0gc2NtLnN2bl9y
ZXZpc2lvbl9mcm9tX2NvbW1pdF90ZXh0KGNvbW1pdF90ZXh0KQogICAgICAgICAgICAgICAgIGxv
ZygiQ29tbWl0dGVkIHIlczogPCVzPiIgJSAoc3ZuX3JldmlzaW9uLCB1cmxzLnZpZXdfcmV2aXNp
b25fdXJsKHN2bl9yZXZpc2lvbikpKQogICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlWyJjb21t
aXRfdGV4dCJdID0gY29tbWl0X3RleHQKQEAgLTcyLDQgKzczLDggQEAgY2xhc3MgQ29tbWl0KEFi
c3RyYWN0U3RlcCk6CiAgICAgICAgICAgICBleGNlcHQgQXV0aGVudGljYXRpb25FcnJvciwgZToK
ICAgICAgICAgICAgICAgICB1c2VybmFtZSA9IHNlbGYuX3Rvb2wudXNlci5wcm9tcHQoIiVzIGxv
Z2luOiAiICUgZS5zZXJ2ZXJfaG9zdCwgcmVwZWF0PTUpCiAgICAgICAgICAgICAgICAgaWYgbm90
IHVzZXJuYW1lOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiWW91IG5l
ZWQgdG8gc3BlY2lmeSB0aGUgdXNlcm5hbWUgb24gJXMgdG8gcGVyZm9ybSB0aGUgY29tbWl0IGFz
LiIgJSBzZWxmLnN2bl9zZXJ2ZXJfaG9zdCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2Ny
aXB0RXJyb3IoIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIHVzZXJuYW1lIG9uICVzIHRvIHBlcmZv
cm0gdGhlIGNvbW1pdCBhcy4iICUgZS5zZXJ2ZXJfaG9zdCkKKyAgICAgICAgICAgICAgICBpZiBl
Lm5lZWRzX3Bhc3N3b3JkOgorICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCA9IHNlbGYuX3Rv
b2wudXNlci5wcm9tcHRfcGFzc3dvcmQoIiVzIHBhc3N3b3JkIGZvciAlczogIiAlIChlLnNlcnZl
cl9ob3N0LCB1c2VybmFtZSksIHJlcGVhdD01KQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qg
cGFzc3dvcmQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiWW91
IG5lZWQgdG8gc3BlY2lmeSB0aGUgcGFzc3dvcmQgZm9yICVzIG9uICVzIHRvIHBlcmZvcm0gdGhl
IGNvbW1pdC4iICUgKHVzZXJuYW1lLCBlLnNlcnZlcl9ob3N0KSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89963</attachid>
            <date>2011-04-17 14:30:59 -0700</date>
            <delta_ts>2011-04-21 04:02:07 -0700</delta_ts>
            <desc>Patch and updated unit tests</desc>
            <filename>Bug31500_1.patch</filename>
            <type>text/plain</type>
            <size>14094</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0MTA4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMTEtMDQtMTcgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHdlYmtpdC1w
YXRjaCBsYW5kIGhhbmdzIGlmIHN2biBwcm9tcHRzIGZvciBjcmVkZW50aWFscworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MDAKKworICAgICAgICBQ
cm9tcHQgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB3aGVuIHVzaW5nIGdpdC1zdm4gYW5kIHRo
ZXJlIGFyZW4ndCBjYWNoZWQgU1ZOIGNyZWRlbnRpYWxzLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5OgorICAgICAgICAgIC0gTW9kaWZpZWQgQXV0
aGVudGljYXRpb25FcnJvciBjb25zdHJ1Y3RvciB0byB0YWtlIG9wdGlvbmFsIHByb21wdF9mb3Jf
cGFzc3dvcmQgYXJndW1lbnQuCisgICAgICAgICAgLSBNYWRlIFNWTi5oYXNfYXV0aG9yaXphdGlv
bl9mb3JfcmVhbG0oKSBhIHN0YXRpYyBtZXRob2QgYW5kIHJlbW92ZWQgZGVmYXVsdCB2YWx1ZQor
ICAgICAgICAgICAgZm9yIGFyZ3VtZW50IHJlYWxtOyBtb2RpZmllZCBjYWxsIHNpdGVzIGFzIG5l
ZWRlZC4KKyAgICAgICAgICAtIE1vZGlmaWVkIHtTQ00sIFNWTiwgR2l0fS5jb21taXRfd2l0aF9t
ZXNzYWdlKCkgdG8gdGFrZSBvcHRpb25hbCBwYXNzd29yZCBhcmd1bWVudC4KKyAgICAgICAgICAt
IE1vZGlmaWVkIEdpdC5fY29tbWl0X29uX2JyYW5jaCgpIHRvIHRha2Ugb3B0aW9uYWwgdXNlcm5h
bWUgYW5kIHBhc3N3b3JkIGFyZ3VtZW50LgorICAgICAgICAgIC0gTW9kaWZpZWQgR2l0LnB1c2hf
bG9jYWxfY29tbWl0c190b19zZXJ2ZXIoKSB0byB0YWtlIG9wdGlvbmFsIHVzZXJuYW1lIGFuZCBw
YXNzd29yZAorICAgICAgICAgICAgYXJndW1lbnQgYW5kIHRvIGNhbGwgU1ZOLmhhc19hdXRob3Jp
emF0aW9uX2Zvcl9yZWFsbSgpLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L3NjbV91bml0dGVzdC5weToKKyAgICAgICAgICAtIE1vZGlmaWVkIFNWTlRlc3QudGVz
dF9jb21taXRfd2l0aG91dF9hdXRob3JpemF0aW9uKCkgdG8gdGFrZSBkdW1teSByZWFsbSBhcmd1
bWVudC4KKyAgICAgICAgICAtIE1vZGlmaWVkIFNWTlRlc3QudGVzdF9ub3RfaGF2ZV9hdXRob3Jp
emF0aW9uX2Zvcl9yZWFsbSgpIHRvIHBhc3MgcmVhbG0gYXJndW1lbnQgdG8KKyAgICAgICAgICAg
IFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKS4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVudGlhbHMucHk6CisgICAgICAgICAgLSBNb2RpZmllZCBD
cmVkZW50aWFscy5yZWFkX2NyZWRlbnRpYWxzKCkgdG8gY2FsbCBVc2VyLnByb21wdF9wYXNzd29y
ZCgpIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHVzaW5nIGdldHBhc3MuZ2V0cGFzcygpIGRpcmVj
dGx5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyLnB5Ogor
ICAgICAgICAgIC0gQWRkZWQgVXNlci5wcm9tcHRfcGFzc3dvcmQoKS4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5OgorICAgICAgICAgIC0gTW9kaWZpZWQg
Q29tbWl0LnJ1bigpIHRvIHByb21wdCBmb3IgYSBwYXNzd29yZCBpZiBuZWVkZWQuCisKIDIwMTEt
MDQtMTcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NoZWNrb3V0L3NjbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9jaGVja291dC9zY20ucHkJKHJldmlzaW9uIDg0MTA4KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
OCArMTM0LDkgQEAgZGVmIGNvbW1pdF9lcnJvcl9oYW5kbGVyKGVycm9yKToKIAogCiBjbGFzcyBB
dXRoZW50aWNhdGlvbkVycm9yKEV4Y2VwdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNl
cnZlcl9ob3N0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyX2hvc3QsIHByb21wdF9m
b3JfcGFzc3dvcmQ9RmFsc2UpOgogICAgICAgICBzZWxmLnNlcnZlcl9ob3N0ID0gc2VydmVyX2hv
c3QKKyAgICAgICAgc2VsZi5wcm9tcHRfZm9yX3Bhc3N3b3JkID0gcHJvbXB0X2Zvcl9wYXNzd29y
ZAogCiAKIGNsYXNzIEFtYmlndW91c0NvbW1pdEVycm9yKEV4Y2VwdGlvbik6CkBAIC0yOTEsNyAr
MjkyLDcgQEAgY2xhc3MgU0NNOgogICAgIGRlZiByZXZlcnRfZmlsZXMoc2VsZiwgZmlsZV9wYXRo
cyk6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKIAotICAgIGRlZiBj
b21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIGdpdF9jb21t
aXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgorICAgIGRl
ZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIHBhc3N3
b3JkPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2Zp
bGVzPU5vbmUpOgogICAgICAgICBzZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCiAKICAg
ICBkZWYgc3ZuX2NvbW1pdF9sb2coc2VsZiwgc3ZuX3JldmlzaW9uKToKQEAgLTM3NCwxMiArMzc1
LDEzIEBAIGNsYXNzIFNWTihTQ00pOgogICAgIGRlZiBjb21taXRfc3VjY2Vzc19yZWdleHAoKToK
ICAgICAgICAgcmV0dXJuICJeQ29tbWl0dGVkIHJldmlzaW9uICg/UDxzdm5fcmV2aXNpb24+XGQr
KVwuJCIKIAotICAgIGRlZiBoYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oc2VsZiwgcmVhbG09
c3ZuX3NlcnZlcl9yZWFsbSwgaG9tZV9kaXJlY3Rvcnk9b3MuZ2V0ZW52KCJIT01FIikpOgorICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKHJlYWxt
LCBob21lX2RpcmVjdG9yeT1vcy5nZXRlbnYoIkhPTUUiKSk6CiAgICAgICAgICMgQXNzdW1lcyBm
aW5kIGFuZCBncmVwIGFyZSBpbnN0YWxsZWQuCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGly
KG9zLnBhdGguam9pbihob21lX2RpcmVjdG9yeSwgIi5zdWJ2ZXJzaW9uIikpOgogICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGZpbmRfYXJncyA9IFsiZmluZCIsICIuc3VidmVyc2lv
biIsICItdHlwZSIsICJmIiwgIi1leGVjIiwgImdyZXAiLCAiLXEiLCByZWFsbSwgInt9IiwgIjsi
LCAiLXByaW50Il07Ci0gICAgICAgIGZpbmRfb3V0cHV0ID0gc2VsZi5ydW4oZmluZF9hcmdzLCBj
d2Q9aG9tZV9kaXJlY3RvcnksIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvciku
cnN0cmlwKCkKKyAgICAgICAgZmluZF9vdXRwdXQgPSBydW5fY29tbWFuZChmaW5kX2FyZ3MsIGN3
ZD1ob21lX2RpcmVjdG9yeSkucnN0cmlwKCkKICAgICAgICAgcmV0dXJuIGZpbmRfb3V0cHV0IGFu
ZCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oaG9tZV9kaXJlY3RvcnksIGZpbmRfb3V0cHV0
KSkKIAogICAgIEBtZW1vaXplZApAQCAtNTU2LDExICs1NTgsMTEgQEAgY2xhc3MgU1ZOKFNDTSk6
CiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBjd2Q9c2VsZi5jaGVj
a291dF9yb290LgogICAgICAgICBzZWxmLnJ1bihbJ3N2bicsICdyZXZlcnQnXSArIGZpbGVfcGF0
aHMpCiAKLSAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCB1c2VybmFt
ZT1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1GYWxzZSwgY2hhbmdlZF9maWxl
cz1Ob25lKToKKyAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCB1c2Vy
bmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1G
YWxzZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKICAgICAgICAgIyBnaXQtY29tbWl0IGFuZCBmb3Jj
ZSBhcmUgbm90IHVzZWQgYnkgU1ZOLgogICAgICAgICBzdm5fY29tbWl0X2FyZ3MgPSBbInN2biIs
ICJjb21taXQiXQogCi0gICAgICAgIGlmIG5vdCB1c2VybmFtZSBhbmQgbm90IHNlbGYuaGFzX2F1
dGhvcml6YXRpb25fZm9yX3JlYWxtKCk6CisgICAgICAgIGlmIG5vdCB1c2VybmFtZSBhbmQgbm90
IHNlbGYuaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKHNlbGYuc3ZuX3NlcnZlcl9yZWFsbSk6
CiAgICAgICAgICAgICByYWlzZSBBdXRoZW50aWNhdGlvbkVycm9yKHNlbGYuc3ZuX3NlcnZlcl9o
b3N0KQogICAgICAgICBpZiB1c2VybmFtZToKICAgICAgICAgICAgIHN2bl9jb21taXRfYXJncy5l
eHRlbmQoWyItLXVzZXJuYW1lIiwgdXNlcm5hbWVdKQpAQCAtODMzLDcgKzgzNSw3IEBAIGNsYXNz
IEdpdChTQ00pOgogICAgICAgICAgICAgaWYgbnVtX2xvY2FsX2NvbW1pdHMgPiAxIG9yIChudW1f
bG9jYWxfY29tbWl0cyA+IDAgYW5kIG5vdCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbik6CiAg
ICAgICAgICAgICAgICAgcmFpc2UgQW1iaWd1b3VzQ29tbWl0RXJyb3IobnVtX2xvY2FsX2NvbW1p
dHMsIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKQogCi0gICAgZGVmIGNvbW1pdF93aXRoX21l
c3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgZ2l0X2NvbW1pdD1Ob25lLCBmb3Jj
ZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CisgICAgZGVmIGNvbW1pdF93aXRo
X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSwgZ2l0
X2NvbW1pdD1Ob25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CiAg
ICAgICAgICMgVXNlcm5hbWUgaXMgaWdub3JlZCBkdXJpbmcgR2l0IGNvbW1pdHMuCiAgICAgICAg
IHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuID0gc2VsZi53b3JraW5nX2RpcmVjdG9yeV9pc19j
bGVhbigpCiAKQEAgLTg0Myw3ICs4NDUsNyBAQCBjbGFzcyBHaXQoU0NNKToKICAgICAgICAgICAg
ICAgICBpZiB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjoKICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0iVGhlIHdvcmtpbmcgY29weSBpcyBub3QgbW9kaWZp
ZWQuIC0tZ2l0LWNvbW1pdD1IRUFELi4gb25seSBjb21taXRzIHdvcmtpbmcgY29weSBjaGFuZ2Vz
LiIpCiAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2UobWVz
c2FnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29tbWl0X29uX2JyYW5jaChtZXNz
YWdlLCAnSEVBRCcpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1pdF9vbl9icmFu
Y2gobWVzc2FnZSwgJ0hFQUQnLCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQp
CiAKICAgICAgICAgICAgICMgTmVlZCB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzIHRvIGJlIGNv
bW1pdHRlZCBzbyB3ZSBjYW4gY2hlY2tvdXQgdGhlIG1lcmdlIGJyYW5jaC4KICAgICAgICAgICAg
IGlmIG5vdCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjoKQEAgLTg1MSwxNSArODUzLDE1IEBA
IGNsYXNzIEdpdChTQ00pOgogICAgICAgICAgICAgICAgICMgVGhhdCB3aWxsIG1vZGlmeSB0aGUg
d29ya2luZy1jb3B5IGFuZCBjYXVzZSB1cyB0byBoaXQgdGhpcyBlcnJvci4KICAgICAgICAgICAg
ICAgICAjIFRoZSBDaGFuZ2VMb2cgbW9kaWZpY2F0aW9uIGNvdWxkIGJlIG1hZGUgdG8gbW9kaWZ5
IHRoZSBleGlzdGluZyBsb2NhbCBjb21taXQuCiAgICAgICAgICAgICAgICAgcmFpc2UgU2NyaXB0
RXJyb3IobWVzc2FnZT0iV29ya2luZyBjb3B5IGlzIG1vZGlmaWVkLiBDYW5ub3QgY29tbWl0IGlu
ZGl2aWR1YWwgZ2l0X2NvbW1pdHMuIikKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb21taXRf
b25fYnJhbmNoKG1lc3NhZ2UsIGdpdF9jb21taXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5f
Y29tbWl0X29uX2JyYW5jaChtZXNzYWdlLCBnaXRfY29tbWl0LCB1c2VybmFtZT11c2VybmFtZSwg
cGFzc3dvcmQ9cGFzc3dvcmQpCiAKICAgICAgICAgaWYgbm90IGZvcmNlX3NxdWFzaDoKICAgICAg
ICAgICAgIHNlbGYuX2Fzc2VydF9jYW5fc3F1YXNoKHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFu
KQogICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdyZXNldCcsICctLXNvZnQnLCBzZWxmLnJlbW90
ZV9tZXJnZV9iYXNlKCldKQogICAgICAgICBzZWxmLmNvbW1pdF9sb2NhbGx5X3dpdGhfbWVzc2Fn
ZShtZXNzYWdlKQotICAgICAgICByZXR1cm4gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2Vy
dmVyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYucHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcih1
c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQpCiAKLSAgICBkZWYgX2NvbW1pdF9v
bl9icmFuY2goc2VsZiwgbWVzc2FnZSwgZ2l0X2NvbW1pdCk6CisgICAgZGVmIF9jb21taXRfb25f
YnJhbmNoKHNlbGYsIG1lc3NhZ2UsIGdpdF9jb21taXQsIHVzZXJuYW1lPU5vbmUsIHBhc3N3b3Jk
PU5vbmUpOgogICAgICAgICBicmFuY2hfcmVmID0gc2VsZi5ydW4oWydnaXQnLCAnc3ltYm9saWMt
cmVmJywgJ0hFQUQnXSkuc3RyaXAoKQogICAgICAgICBicmFuY2hfbmFtZSA9IGJyYW5jaF9yZWYu
cmVwbGFjZSgncmVmcy9oZWFkcy8nLCAnJykKICAgICAgICAgY29tbWl0X2lkcyA9IHNlbGYuY29t
bWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMoW2dpdF9jb21taXRdKQpAQCAtODg4LDcg
Kzg5MCw3IEBAIGNsYXNzIEdpdChTQ00pOgogICAgICAgICAgICAgICAgIHNlbGYucnVuKFsnZ2l0
JywgJ2NoZXJyeS1waWNrJywgJy0tbm8tY29tbWl0JywgY29tbWl0XSkKIAogICAgICAgICAgICAg
c2VsZi5ydW4oWydnaXQnLCAnY29tbWl0JywgJy1tJywgbWVzc2FnZV0pCi0gICAgICAgICAgICBv
dXRwdXQgPSBzZWxmLnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIoKQorICAgICAgICAgICAg
b3V0cHV0ID0gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyKHVzZXJuYW1lPXVzZXJu
YW1lLCBwYXNzd29yZD1wYXNzd29yZCkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKICAg
ICAgICAgICAgIGxvZygiQ09NTUlUIEZBSUxFRDogIiArIHN0cihlKSkKICAgICAgICAgICAgIG91
dHB1dCA9ICJDb21taXQgZmFpbGVkLiIKQEAgLTkzNiwxMSArOTM4LDE1IEBAIGNsYXNzIEdpdChT
Q00pOgogICAgIGRlZiBjb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6
CiAgICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NvbW1pdCcsICctLWFsbCcsICctRicsICctJ10s
IGlucHV0PW1lc3NhZ2UpCiAKLSAgICBkZWYgcHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcihz
ZWxmKToKKyAgICBkZWYgcHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcihzZWxmLCB1c2VybmFt
ZT1Ob25lLCBwYXNzd29yZD1Ob25lKToKICAgICAgICAgZGNvbW1pdF9jb21tYW5kID0gWydnaXQn
LCAnc3ZuJywgJ2Rjb21taXQnXQogICAgICAgICBpZiBzZWxmLmRyeXJ1bjoKICAgICAgICAgICAg
IGRjb21taXRfY29tbWFuZC5hcHBlbmQoJy0tZHJ5LXJ1bicpCi0gICAgICAgIG91dHB1dCA9IHNl
bGYucnVuKGRjb21taXRfY29tbWFuZCwgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxl
cikKKyAgICAgICAgaWYgbm90IFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oU1ZOLnN2
bl9zZXJ2ZXJfcmVhbG0pOgorICAgICAgICAgICAgcmFpc2UgQXV0aGVudGljYXRpb25FcnJvcihT
Vk4uc3ZuX3NlcnZlcl9ob3N0LCBwcm9tcHRfZm9yX3Bhc3N3b3JkPVRydWUpCisgICAgICAgIGlm
IHVzZXJuYW1lOgorICAgICAgICAgICAgZGNvbW1pdF9jb21tYW5kLmV4dGVuZChbIi0tdXNlcm5h
bWUiLCB1c2VybmFtZV0pCisgICAgICAgIG91dHB1dCA9IHNlbGYucnVuKGRjb21taXRfY29tbWFu
ZCwgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3JfaGFuZGxlciwgaW5wdXQ9cGFzc3dvcmQpCiAg
ICAgICAgICMgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGxvb2tzIGxpa2UgYSBjb21taXQgc28gdGhh
dCB0aGluZ3Mgd2hpY2ggcGFyc2UgdGhpcyBvdXRwdXQgd2lsbCBzdWNjZWVkLgogICAgICAgICBp
ZiBzZWxmLmRyeXJ1bjoKICAgICAgICAgICAgIG91dHB1dCArPSAiXG5Db21taXR0ZWQgcjAiCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA4NDEwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNjY0
LDcgKzY2NCw3IEBAIFExZFRCeDBBQUFCNDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0IKICAg
ICAgICAgc2VsZi5fc2hhcmVkX3Rlc3RfY29tbWl0X3dpdGhfbWVzc2FnZSgiZGJhdGVzQHdlYmtp
dC5vcmciKQogCiAgICAgZGVmIHRlc3RfY29tbWl0X3dpdGhvdXRfYXV0aG9yaXphdGlvbihzZWxm
KToKLSAgICAgICAgc2VsZi5zY20uaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtID0gbGFtYmRh
OiBGYWxzZQorICAgICAgICBzZWxmLnNjbS5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0gPSBs
YW1iZGEgcmVhbG06IEZhbHNlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF1dGhlbnRpY2F0
aW9uRXJyb3IsIHNlbGYuX3NoYXJlZF90ZXN0X2NvbW1pdF93aXRoX21lc3NhZ2UpCiAKICAgICBk
ZWYgdGVzdF9oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oc2VsZik6CkBAIC02NzQsNyArNjc0
LDcgQEAgUTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRHQgogICAgICAgICBv
cy5ta2Rpcihzdm5fY29uZmlnX2Rpcl9wYXRoKQogICAgICAgICBmYWtlX3dlYmtpdF9hdXRoX2Zp
bGUgPSBvcy5wYXRoLmpvaW4oc3ZuX2NvbmZpZ19kaXJfcGF0aCwgImZha2Vfd2Via2l0X2F1dGhf
ZmlsZSIpCiAgICAgICAgIHdyaXRlX2ludG9fZmlsZV9hdF9wYXRoKGZha2Vfd2Via2l0X2F1dGhf
ZmlsZSwgU1ZOLnN2bl9zZXJ2ZXJfcmVhbG0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY20u
aGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKGhvbWVfZGlyZWN0b3J5PWZha2VfaG9tZV9kaXIp
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2NtLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFs
bShTVk4uc3ZuX3NlcnZlcl9yZWFsbSwgaG9tZV9kaXJlY3Rvcnk9ZmFrZV9ob21lX2RpcikpCiAg
ICAgICAgIG9zLnJlbW92ZShmYWtlX3dlYmtpdF9hdXRoX2ZpbGUpCiAgICAgICAgIG9zLnJtZGly
KHN2bl9jb25maWdfZGlyX3BhdGgpCiAgICAgICAgIG9zLnJtZGlyKGZha2VfaG9tZV9kaXIpCkBA
IC02ODQsNyArNjg0LDcgQEAgUTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3MzRH
QgogICAgICAgICBmYWtlX2hvbWVfZGlyID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9ImZha2Vf
aG9tZV9kaXIiKQogICAgICAgICBzdm5fY29uZmlnX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKGZh
a2VfaG9tZV9kaXIsICIuc3VidmVyc2lvbiIpCiAgICAgICAgIG9zLm1rZGlyKHN2bl9jb25maWdf
ZGlyX3BhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NtLmhhc19hdXRob3JpemF0aW9u
X2Zvcl9yZWFsbShob21lX2RpcmVjdG9yeT1mYWtlX2hvbWVfZGlyKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZShzY20uaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKFNWTi5zdm5fc2VydmVy
X3JlYWxtLCBob21lX2RpcmVjdG9yeT1mYWtlX2hvbWVfZGlyKSkKICAgICAgICAgb3Mucm1kaXIo
c3ZuX2NvbmZpZ19kaXJfcGF0aCkKICAgICAgICAgb3Mucm1kaXIoZmFrZV9ob21lX2RpcikKIApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2NyZWRlbnRpYWxzLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9jcmVkZW50aWFs
cy5weQkocmV2aXNpb24gODQxMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9u
ZXQvY3JlZGVudGlhbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICMKICMg
UHl0aG9uIG1vZHVsZSBmb3IgcmVhZGluZyBzdG9yZWQgd2ViIGNyZWRlbnRpYWxzIGZyb20gdGhl
IE9TLgogCi1pbXBvcnQgZ2V0cGFzcwogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9y
dCByZQpAQCAtMTQ5LDcgKzE0OCw3IEBAIGNsYXNzIENyZWRlbnRpYWxzKG9iamVjdCk6CiAgICAg
ICAgIGlmIG5vdCB1c2VybmFtZToKICAgICAgICAgICAgIHVzZXJuYW1lID0gVXNlci5wcm9tcHQo
IiVzIGxvZ2luOiAiICUgc2VsZi5ob3N0KQogICAgICAgICBpZiBub3QgcGFzc3dvcmQ6Ci0gICAg
ICAgICAgICBwYXNzd29yZCA9IGdldHBhc3MuZ2V0cGFzcygiJXMgcGFzc3dvcmQgZm9yICVzOiAi
ICUgKHNlbGYuaG9zdCwgdXNlcm5hbWUpKQorICAgICAgICAgICAgcGFzc3dvcmQgPSBVc2VyLnBy
b21wdF9wYXNzd29yZCgiJXMgcGFzc3dvcmQgZm9yICVzOiAiICUgKHNlbGYuaG9zdCwgdXNlcm5h
bWUpKQogICAgICAgICAgICAgc2VsZi5fb2ZmZXJfdG9fc3RvcmVfY3JlZGVudGlhbHNfaW5fa2V5
cmluZyh1c2VybmFtZSwgcGFzc3dvcmQpCiAKICAgICAgICAgcmV0dXJuICh1c2VybmFtZSwgcGFz
c3dvcmQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNlci5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXNl
ci5weQkocmV2aXNpb24gODQxMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXNlci5weQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IGdldHBhc3MKIGltcG9ydCBsb2dnaW5nCiBp
bXBvcnQgb3MKIGltcG9ydCByZQpAQCAtNjUsNiArNjYsMTAgQEAgY2xhc3MgVXNlcihvYmplY3Qp
OgogICAgICAgICByZXR1cm4gcmVzcG9uc2UKIAogICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBw
cm9tcHRfcGFzc3dvcmQoY2xzLCBtZXNzYWdlLCByZXBlYXQ9MSk6CisgICAgICAgIHJldHVybiBj
bHMucHJvbXB0KG1lc3NhZ2UsIHJlcGVhdD1yZXBlYXQsIHJhd19pbnB1dD1nZXRwYXNzLmdldHBh
c3MpCisKKyAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcHJvbXB0X3dpdGhfbGlzdChjbHMsIGxp
c3RfdGl0bGUsIGxpc3RfaXRlbXMsIGNhbl9jaG9vc2VfbXVsdGlwbGU9RmFsc2UsIHJhd19pbnB1
dD1yYXdfaW5wdXQpOgogICAgICAgICBwcmludCBsaXN0X3RpdGxlCiAgICAgICAgIGkgPSAwCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb21taXQucHkJKHJldmlz
aW9uIDg0MTA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBDb21taXQoQWJzdHJhY3RT
dGVwKToKICAgICAgICAgc2VsZi5fc3RhdGUgPSBzdGF0ZQogCiAgICAgICAgIHVzZXJuYW1lID0g
Tm9uZQorICAgICAgICBwYXNzd29yZCA9IE5vbmUKICAgICAgICAgZm9yY2Vfc3F1YXNoID0gRmFs
c2UKIAogICAgICAgICBudW1fdHJpZXMgPSAwCkBAIC01OCw3ICs1OSw3IEBAIGNsYXNzIENvbW1p
dChBYnN0cmFjdFN0ZXApOgogCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2Nt
ID0gc2VsZi5fdG9vbC5zY20oKQotICAgICAgICAgICAgICAgIGNvbW1pdF90ZXh0ID0gc2NtLmNv
bW1pdF93aXRoX21lc3NhZ2Uoc2VsZi5fY29tbWl0X21lc3NhZ2UsIGdpdF9jb21taXQ9c2VsZi5f
b3B0aW9ucy5naXRfY29tbWl0LCB1c2VybmFtZT11c2VybmFtZSwgZm9yY2Vfc3F1YXNoPWZvcmNl
X3NxdWFzaCwgY2hhbmdlZF9maWxlcz1zZWxmLl9jaGFuZ2VkX2ZpbGVzKHN0YXRlKSkKKyAgICAg
ICAgICAgICAgICBjb21taXRfdGV4dCA9IHNjbS5jb21taXRfd2l0aF9tZXNzYWdlKHNlbGYuX2Nv
bW1pdF9tZXNzYWdlLCBnaXRfY29tbWl0PXNlbGYuX29wdGlvbnMuZ2l0X2NvbW1pdCwgdXNlcm5h
bWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkLCBmb3JjZV9zcXVhc2g9Zm9yY2Vfc3F1YXNo
LCBjaGFuZ2VkX2ZpbGVzPXNlbGYuX2NoYW5nZWRfZmlsZXMoc3RhdGUpKQogICAgICAgICAgICAg
ICAgIHN2bl9yZXZpc2lvbiA9IHNjbS5zdm5fcmV2aXNpb25fZnJvbV9jb21taXRfdGV4dChjb21t
aXRfdGV4dCkKICAgICAgICAgICAgICAgICBsb2coIkNvbW1pdHRlZCByJXM6IDwlcz4iICUgKHN2
bl9yZXZpc2lvbiwgdXJscy52aWV3X3JldmlzaW9uX3VybChzdm5fcmV2aXNpb24pKSkKICAgICAg
ICAgICAgICAgICBzZWxmLl9zdGF0ZVsiY29tbWl0X3RleHQiXSA9IGNvbW1pdF90ZXh0CkBAIC03
Miw0ICs3Myw4IEBAIGNsYXNzIENvbW1pdChBYnN0cmFjdFN0ZXApOgogICAgICAgICAgICAgZXhj
ZXB0IEF1dGhlbnRpY2F0aW9uRXJyb3IsIGU6CiAgICAgICAgICAgICAgICAgdXNlcm5hbWUgPSBz
ZWxmLl90b29sLnVzZXIucHJvbXB0KCIlcyBsb2dpbjogIiAlIGUuc2VydmVyX2hvc3QsIHJlcGVh
dD01KQogICAgICAgICAgICAgICAgIGlmIG5vdCB1c2VybmFtZToKLSAgICAgICAgICAgICAgICAg
ICAgcmFpc2UgU2NyaXB0RXJyb3IoIllvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIHVzZXJuYW1lIG9u
ICVzIHRvIHBlcmZvcm0gdGhlIGNvbW1pdCBhcy4iICUgc2VsZi5zdm5fc2VydmVyX2hvc3QpCisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJZb3UgbmVlZCB0byBzcGVjaWZ5
IHRoZSB1c2VybmFtZSBvbiAlcyB0byBwZXJmb3JtIHRoZSBjb21taXQgYXMuIiAlIGUuc2VydmVy
X2hvc3QpCisgICAgICAgICAgICAgICAgaWYgZS5wcm9tcHRfZm9yX3Bhc3N3b3JkOgorICAgICAg
ICAgICAgICAgICAgICBwYXNzd29yZCA9IHNlbGYuX3Rvb2wudXNlci5wcm9tcHRfcGFzc3dvcmQo
IiVzIHBhc3N3b3JkIGZvciAlczogIiAlIChlLnNlcnZlcl9ob3N0LCB1c2VybmFtZSksIHJlcGVh
dD01KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFzc3dvcmQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgcGFz
c3dvcmQgZm9yICVzIG9uICVzIHRvIHBlcmZvcm0gdGhlIGNvbW1pdC4iICUgKHVzZXJuYW1lLCBl
LnNlcnZlcl9ob3N0KSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89966</attachid>
            <date>2011-04-17 16:05:33 -0700</date>
            <delta_ts>2011-04-17 16:09:10 -0700</delta_ts>
            <desc>Patch and updated unit tests</desc>
            <filename>Bug31500_2.patch</filename>
            <type>text/plain</type>
            <size>15356</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0MTA4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzQgQEAKKzIwMTEtMDQtMTcgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHdlYmtpdC1w
YXRjaCBsYW5kIGhhbmdzIGlmIHN2biBwcm9tcHRzIGZvciBjcmVkZW50aWFscworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MDAKKworICAgICAgICBQ
cm9tcHQgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB3aGVuIHVzaW5nIGdpdC1zdm4gYW5kIHRo
ZXJlIGFyZW4ndCBjYWNoZWQgU1ZOIGNyZWRlbnRpYWxzLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5OgorICAgICAgICAgIC0gQWRkZWQgbWl4aW4g
Y2xhc3MgU1ZOQW5kR2l0U1ZOSGFzQXV0aG9yaXphdGlvbkZvclJlYWxtTWl4aW4gYW5kIG1hZGUg
Ym90aCBjbGFzcyBTVk4gYW5kCisgICAgICAgICAgICBHaXQgaW5oZXJpdCBmcm9tIGl0LgorICAg
ICAgICAgIC0gTW9kaWZpZWQgQXV0aGVudGljYXRpb25FcnJvciBjb25zdHJ1Y3RvciB0byB0YWtl
IG9wdGlvbmFsIHByb21wdF9mb3JfcGFzc3dvcmQgYXJndW1lbnQuCisgICAgICAgICAgLSBNYWRl
IFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKSBhIHN0YXRpYyBtZXRob2QgYW5kIHJl
bW92ZWQgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgZm9yIGFyZ3VtZW50IHJlYWxtOyBtb2Rp
ZmllZCBjYWxsIHNpdGVzIGFzIG5lZWRlZC4KKyAgICAgICAgICAtIE1vZGlmaWVkIHtTQ00sIFNW
TiwgR2l0fS5jb21taXRfd2l0aF9tZXNzYWdlKCkgdG8gdGFrZSBvcHRpb25hbCBwYXNzd29yZCBh
cmd1bWVudC4KKyAgICAgICAgICAtIE1vZGlmaWVkIEdpdC5fY29tbWl0X29uX2JyYW5jaCgpIHRv
IHRha2Ugb3B0aW9uYWwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZ3VtZW50LgorICAgICAgICAg
IC0gTW9kaWZpZWQgR2l0LnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIoKSB0byB0YWtlIG9w
dGlvbmFsIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgYXJndW1lbnQgYW5kIHRv
IGNhbGwgU1ZOLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weToKKyAgICAgICAgICAt
IE1vZGlmaWVkIFNWTlRlc3QudGVzdF9jb21taXRfd2l0aG91dF9hdXRob3JpemF0aW9uKCkgdG8g
dGFrZSBkdW1teSByZWFsbSBhcmd1bWVudC4KKyAgICAgICAgICAtIE1vZGlmaWVkIFNWTlRlc3Qu
dGVzdF9ub3RfaGF2ZV9hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpIHRvIHBhc3MgcmVhbG0gYXJn
dW1lbnQgdG8KKyAgICAgICAgICAgIFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKS4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVudGlhbHMucHk6Cisg
ICAgICAgICAgLSBNb2RpZmllZCBDcmVkZW50aWFscy5yZWFkX2NyZWRlbnRpYWxzKCkgdG8gY2Fs
bCBVc2VyLnByb21wdF9wYXNzd29yZCgpIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHVzaW5nIGdl
dHBhc3MuZ2V0cGFzcygpIGRpcmVjdGx5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS91c2VyLnB5OgorICAgICAgICAgIC0gQWRkZWQgVXNlci5wcm9tcHRfcGFzc3dv
cmQoKS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5Ogor
ICAgICAgICAgIC0gTW9kaWZpZWQgQ29tbWl0LnJ1bigpIHRvIHByb21wdCBmb3IgYSBwYXNzd29y
ZCBpZiBuZWVkZWQuCisKIDIwMTEtMDQtMTcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkJKHJldmlzaW9uIDg0
MTA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAgZGVmIGNvbW1pdF9lcnJvcl9oYW5kbGVy
KGVycm9yKToKIAogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yKEV4Y2VwdGlvbik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9ob3N0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c2VydmVyX2hvc3QsIHByb21wdF9mb3JfcGFzc3dvcmQ9RmFsc2UpOgogICAgICAgICBzZWxmLnNl
cnZlcl9ob3N0ID0gc2VydmVyX2hvc3QKKyAgICAgICAgc2VsZi5wcm9tcHRfZm9yX3Bhc3N3b3Jk
ID0gcHJvbXB0X2Zvcl9wYXNzd29yZAogCiAKIGNsYXNzIEFtYmlndW91c0NvbW1pdEVycm9yKEV4
Y2VwdGlvbik6CkBAIC0yOTEsNyArMjkyLDcgQEAgY2xhc3MgU0NNOgogICAgIGRlZiByZXZlcnRf
ZmlsZXMoc2VsZiwgZmlsZV9wYXRocyk6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1w
bGVtZW50KCkKIAotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVz
ZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2Vk
X2ZpbGVzPU5vbmUpOgorICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2Us
IHVzZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1
YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICBzZWxmLl9zdWJjbGFzc19t
dXN0X2ltcGxlbWVudCgpCiAKICAgICBkZWYgc3ZuX2NvbW1pdF9sb2coc2VsZiwgc3ZuX3Jldmlz
aW9uKToKQEAgLTMxOSw3ICszMjAsMTggQEAgY2xhc3MgU0NNOgogICAgICAgICByZXR1cm4gW10K
IAogCi1jbGFzcyBTVk4oU0NNKToKKyMgQSBtaXhpbiBjbGFzcyBmb3IgU1ZOIGFuZCBHaXQtU1ZO
LgorY2xhc3MgU1ZOQW5kR2l0U1ZOSGFzQXV0aG9yaXphdGlvbkZvclJlYWxtTWl4aW46CisgICAg
ZGVmIGhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShzZWxmLCByZWFsbSwgaG9tZV9kaXJlY3Rv
cnk9b3MuZ2V0ZW52KCJIT01FIikpOgorICAgICAgICAjIEFzc3VtZXMgZmluZCBhbmQgZ3JlcCBh
cmUgaW5zdGFsbGVkLgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4o
aG9tZV9kaXJlY3RvcnksICIuc3VidmVyc2lvbiIpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBmaW5kX2FyZ3MgPSBbImZpbmQiLCAiLnN1YnZlcnNpb24iLCAiLXR5cGUiLCAi
ZiIsICItZXhlYyIsICJncmVwIiwgIi1xIiwgcmVhbG0sICJ7fSIsICI7IiwgIi1wcmludCJdOwor
ICAgICAgICBmaW5kX291dHB1dCA9IHNlbGYucnVuKGZpbmRfYXJncywgY3dkPWhvbWVfZGlyZWN0
b3J5LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgpCisgICAg
ICAgIHJldHVybiBmaW5kX291dHB1dCBhbmQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGhv
bWVfZGlyZWN0b3J5LCBmaW5kX291dHB1dCkpCisKKworY2xhc3MgU1ZOKFNDTSwgU1ZOQW5kR2l0
U1ZOSGFzQXV0aG9yaXphdGlvbkZvclJlYWxtTWl4aW4pOgogICAgICMgRklYTUU6IFRoZXNlIGJl
bG9uZyBpbiBjb21tb24uY29uZmlnLnVybHMKICAgICBzdm5fc2VydmVyX2hvc3QgPSAic3ZuLndl
YmtpdC5vcmciCiAgICAgc3ZuX3NlcnZlcl9yZWFsbSA9ICI8aHR0cDovL3N2bi53ZWJraXQub3Jn
OjgwPiBNYWMgT1MgRm9yZ2UiCkBAIC0zNzQsMTQgKzM4Niw2IEBAIGNsYXNzIFNWTihTQ00pOgog
ICAgIGRlZiBjb21taXRfc3VjY2Vzc19yZWdleHAoKToKICAgICAgICAgcmV0dXJuICJeQ29tbWl0
dGVkIHJldmlzaW9uICg/UDxzdm5fcmV2aXNpb24+XGQrKVwuJCIKIAotICAgIGRlZiBoYXNfYXV0
aG9yaXphdGlvbl9mb3JfcmVhbG0oc2VsZiwgcmVhbG09c3ZuX3NlcnZlcl9yZWFsbSwgaG9tZV9k
aXJlY3Rvcnk9b3MuZ2V0ZW52KCJIT01FIikpOgotICAgICAgICAjIEFzc3VtZXMgZmluZCBhbmQg
Z3JlcCBhcmUgaW5zdGFsbGVkLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRo
LmpvaW4oaG9tZV9kaXJlY3RvcnksICIuc3VidmVyc2lvbiIpKToKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotICAgICAgICBmaW5kX2FyZ3MgPSBbImZpbmQiLCAiLnN1YnZlcnNpb24iLCAiLXR5
cGUiLCAiZiIsICItZXhlYyIsICJncmVwIiwgIi1xIiwgcmVhbG0sICJ7fSIsICI7IiwgIi1wcmlu
dCJdOwotICAgICAgICBmaW5kX291dHB1dCA9IHNlbGYucnVuKGZpbmRfYXJncywgY3dkPWhvbWVf
ZGlyZWN0b3J5LCBlcnJvcl9oYW5kbGVyPUV4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpLnJzdHJpcCgp
Ci0gICAgICAgIHJldHVybiBmaW5kX291dHB1dCBhbmQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5q
b2luKGhvbWVfZGlyZWN0b3J5LCBmaW5kX291dHB1dCkpCi0KICAgICBAbWVtb2l6ZWQKICAgICBk
ZWYgc3ZuX3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJ1bihbJ3N2bicsICct
LXZlcnNpb24nLCAnLS1xdWlldCddKQpAQCAtNTU2LDExICs1NjAsMTEgQEAgY2xhc3MgU1ZOKFND
TSk6CiAgICAgICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBjd2Q9c2VsZi5j
aGVja291dF9yb290LgogICAgICAgICBzZWxmLnJ1bihbJ3N2bicsICdyZXZlcnQnXSArIGZpbGVf
cGF0aHMpCiAKLSAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCB1c2Vy
bmFtZT1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFzaD1GYWxzZSwgY2hhbmdlZF9m
aWxlcz1Ob25lKToKKyAgICBkZWYgY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCB1
c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lLCBnaXRfY29tbWl0PU5vbmUsIGZvcmNlX3NxdWFz
aD1GYWxzZSwgY2hhbmdlZF9maWxlcz1Ob25lKToKICAgICAgICAgIyBnaXQtY29tbWl0IGFuZCBm
b3JjZSBhcmUgbm90IHVzZWQgYnkgU1ZOLgogICAgICAgICBzdm5fY29tbWl0X2FyZ3MgPSBbInN2
biIsICJjb21taXQiXQogCi0gICAgICAgIGlmIG5vdCB1c2VybmFtZSBhbmQgbm90IHNlbGYuaGFz
X2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKCk6CisgICAgICAgIGlmIG5vdCB1c2VybmFtZSBhbmQg
bm90IHNlbGYuaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKHNlbGYuc3ZuX3NlcnZlcl9yZWFs
bSk6CiAgICAgICAgICAgICByYWlzZSBBdXRoZW50aWNhdGlvbkVycm9yKHNlbGYuc3ZuX3NlcnZl
cl9ob3N0KQogICAgICAgICBpZiB1c2VybmFtZToKICAgICAgICAgICAgIHN2bl9jb21taXRfYXJn
cy5leHRlbmQoWyItLXVzZXJuYW1lIiwgdXNlcm5hbWVdKQpAQCAtNTk4LDcgKzYwMiw3IEBAIGNs
YXNzIFNWTihTQ00pOgogCiAKICMgQWxsIGdpdC1zcGVjaWZpYyBsb2dpYyBzaG91bGQgZ28gaGVy
ZS4KLWNsYXNzIEdpdChTQ00pOgorY2xhc3MgR2l0KFNDTSwgU1ZOQW5kR2l0U1ZOSGFzQXV0aG9y
aXphdGlvbkZvclJlYWxtTWl4aW4pOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjd2QsIGV4ZWN1
dGl2ZT1Ob25lKToKICAgICAgICAgU0NNLl9faW5pdF9fKHNlbGYsIGN3ZCwgZXhlY3V0aXZlKQog
ICAgICAgICBzZWxmLl9jaGVja19naXRfYXJjaGl0ZWN0dXJlKCkKQEAgLTgzMyw3ICs4MzcsNyBA
QCBjbGFzcyBHaXQoU0NNKToKICAgICAgICAgICAgIGlmIG51bV9sb2NhbF9jb21taXRzID4gMSBv
ciAobnVtX2xvY2FsX2NvbW1pdHMgPiAwIGFuZCBub3Qgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xl
YW4pOgogICAgICAgICAgICAgICAgIHJhaXNlIEFtYmlndW91c0NvbW1pdEVycm9yKG51bV9sb2Nh
bF9jb21taXRzLCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbikKIAotICAgIGRlZiBjb21taXRf
d2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9u
ZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgorICAgIGRlZiBjb21t
aXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5v
bmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5v
bmUpOgogICAgICAgICAjIFVzZXJuYW1lIGlzIGlnbm9yZWQgZHVyaW5nIEdpdCBjb21taXRzLgog
ICAgICAgICB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbiA9IHNlbGYud29ya2luZ19kaXJlY3Rv
cnlfaXNfY2xlYW4oKQogCkBAIC04NDMsNyArODQ3LDcgQEAgY2xhc3MgR2l0KFNDTSk6CiAgICAg
ICAgICAgICAgICAgaWYgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW46CiAgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IlRoZSB3b3JraW5nIGNvcHkgaXMgbm90
IG1vZGlmaWVkLiAtLWdpdC1jb21taXQ9SEVBRC4uIG9ubHkgY29tbWl0cyB3b3JraW5nIGNvcHkg
Y2hhbmdlcy4iKQogICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNz
YWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1pdF9vbl9icmFu
Y2gobWVzc2FnZSwgJ0hFQUQnKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb21taXRf
b25fYnJhbmNoKG1lc3NhZ2UsICdIRUFEJywgdXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBh
c3N3b3JkKQogCiAgICAgICAgICAgICAjIE5lZWQgd29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcyB0
byBiZSBjb21taXR0ZWQgc28gd2UgY2FuIGNoZWNrb3V0IHRoZSBtZXJnZSBicmFuY2guCiAgICAg
ICAgICAgICBpZiBub3Qgd29ya2luZ19kaXJlY3RvcnlfaXNfY2xlYW46CkBAIC04NTEsMTUgKzg1
NSwxNSBAQCBjbGFzcyBHaXQoU0NNKToKICAgICAgICAgICAgICAgICAjIFRoYXQgd2lsbCBtb2Rp
ZnkgdGhlIHdvcmtpbmctY29weSBhbmQgY2F1c2UgdXMgdG8gaGl0IHRoaXMgZXJyb3IuCiAgICAg
ICAgICAgICAgICAgIyBUaGUgQ2hhbmdlTG9nIG1vZGlmaWNhdGlvbiBjb3VsZCBiZSBtYWRlIHRv
IG1vZGlmeSB0aGUgZXhpc3RpbmcgbG9jYWwgY29tbWl0LgogICAgICAgICAgICAgICAgIHJhaXNl
IFNjcmlwdEVycm9yKG1lc3NhZ2U9IldvcmtpbmcgY29weSBpcyBtb2RpZmllZC4gQ2Fubm90IGNv
bW1pdCBpbmRpdmlkdWFsIGdpdF9jb21taXRzLiIpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5f
Y29tbWl0X29uX2JyYW5jaChtZXNzYWdlLCBnaXRfY29tbWl0KQorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX2NvbW1pdF9vbl9icmFuY2gobWVzc2FnZSwgZ2l0X2NvbW1pdCwgdXNlcm5hbWU9dXNl
cm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkKQogCiAgICAgICAgIGlmIG5vdCBmb3JjZV9zcXVhc2g6
CiAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfY2FuX3NxdWFzaCh3b3JraW5nX2RpcmVjdG9yeV9p
c19jbGVhbikKICAgICAgICAgc2VsZi5ydW4oWydnaXQnLCAncmVzZXQnLCAnLS1zb2Z0Jywgc2Vs
Zi5yZW1vdGVfbWVyZ2VfYmFzZSgpXSkKICAgICAgICAgc2VsZi5jb21taXRfbG9jYWxseV93aXRo
X21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgcmV0dXJuIHNlbGYucHVzaF9sb2NhbF9jb21taXRz
X3RvX3NlcnZlcigpCisgICAgICAgIHJldHVybiBzZWxmLnB1c2hfbG9jYWxfY29tbWl0c190b19z
ZXJ2ZXIodXNlcm5hbWU9dXNlcm5hbWUsIHBhc3N3b3JkPXBhc3N3b3JkKQogCi0gICAgZGVmIF9j
b21taXRfb25fYnJhbmNoKHNlbGYsIG1lc3NhZ2UsIGdpdF9jb21taXQpOgorICAgIGRlZiBfY29t
bWl0X29uX2JyYW5jaChzZWxmLCBtZXNzYWdlLCBnaXRfY29tbWl0LCB1c2VybmFtZT1Ob25lLCBw
YXNzd29yZD1Ob25lKToKICAgICAgICAgYnJhbmNoX3JlZiA9IHNlbGYucnVuKFsnZ2l0JywgJ3N5
bWJvbGljLXJlZicsICdIRUFEJ10pLnN0cmlwKCkKICAgICAgICAgYnJhbmNoX25hbWUgPSBicmFu
Y2hfcmVmLnJlcGxhY2UoJ3JlZnMvaGVhZHMvJywgJycpCiAgICAgICAgIGNvbW1pdF9pZHMgPSBz
ZWxmLmNvbW1pdF9pZHNfZnJvbV9jb21taXRpc2hfYXJndW1lbnRzKFtnaXRfY29tbWl0XSkKQEAg
LTg4OCw3ICs4OTIsNyBAQCBjbGFzcyBHaXQoU0NNKToKICAgICAgICAgICAgICAgICBzZWxmLnJ1
bihbJ2dpdCcsICdjaGVycnktcGljaycsICctLW5vLWNvbW1pdCcsIGNvbW1pdF0pCiAKICAgICAg
ICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NvbW1pdCcsICctbScsIG1lc3NhZ2VdKQotICAgICAg
ICAgICAgb3V0cHV0ID0gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyKCkKKyAgICAg
ICAgICAgIG91dHB1dCA9IHNlbGYucHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcih1c2VybmFt
ZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6CiAgICAgICAgICAgICBsb2coIkNPTU1JVCBGQUlMRUQ6ICIgKyBzdHIoZSkpCiAgICAgICAg
ICAgICBvdXRwdXQgPSAiQ29tbWl0IGZhaWxlZC4iCkBAIC05MzYsMTEgKzk0MCwxNSBAQCBjbGFz
cyBHaXQoU0NNKToKICAgICBkZWYgY29tbWl0X2xvY2FsbHlfd2l0aF9tZXNzYWdlKHNlbGYsIG1l
c3NhZ2UpOgogICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdjb21taXQnLCAnLS1hbGwnLCAnLUYn
LCAnLSddLCBpbnB1dD1tZXNzYWdlKQogCi0gICAgZGVmIHB1c2hfbG9jYWxfY29tbWl0c190b19z
ZXJ2ZXIoc2VsZik6CisgICAgZGVmIHB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIoc2VsZiwg
dXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSk6CiAgICAgICAgIGRjb21taXRfY29tbWFuZCA9
IFsnZ2l0JywgJ3N2bicsICdkY29tbWl0J10KICAgICAgICAgaWYgc2VsZi5kcnlydW46CiAgICAg
ICAgICAgICBkY29tbWl0X2NvbW1hbmQuYXBwZW5kKCctLWRyeS1ydW4nKQotICAgICAgICBvdXRw
dXQgPSBzZWxmLnJ1bihkY29tbWl0X2NvbW1hbmQsIGVycm9yX2hhbmRsZXI9Y29tbWl0X2Vycm9y
X2hhbmRsZXIpCisgICAgICAgIGlmIG5vdCBzZWxmLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFs
bShTVk4uc3ZuX3NlcnZlcl9yZWFsbSk6CisgICAgICAgICAgICByYWlzZSBBdXRoZW50aWNhdGlv
bkVycm9yKFNWTi5zdm5fc2VydmVyX2hvc3QsIHByb21wdF9mb3JfcGFzc3dvcmQ9VHJ1ZSkKKyAg
ICAgICAgaWYgdXNlcm5hbWU6CisgICAgICAgICAgICBkY29tbWl0X2NvbW1hbmQuZXh0ZW5kKFsi
LS11c2VybmFtZSIsIHVzZXJuYW1lXSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ydW4oZGNvbW1p
dF9jb21tYW5kLCBlcnJvcl9oYW5kbGVyPWNvbW1pdF9lcnJvcl9oYW5kbGVyLCBpbnB1dD1wYXNz
d29yZCkKICAgICAgICAgIyBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggbG9va3MgbGlrZSBhIGNvbW1p
dCBzbyB0aGF0IHRoaW5ncyB3aGljaCBwYXJzZSB0aGlzIG91dHB1dCB3aWxsIHN1Y2NlZWQuCiAg
ICAgICAgIGlmIHNlbGYuZHJ5cnVuOgogICAgICAgICAgICAgb3V0cHV0ICs9ICJcbkNvbW1pdHRl
ZCByMCIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDg0MTA4KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC02NjQsNyArNjY0LDcgQEAgUTFkVEJ4MEFBQUI0Mml0ZzRHbGdZSmpHd01ERHlPRE14TUR3
MzRHQgogICAgICAgICBzZWxmLl9zaGFyZWRfdGVzdF9jb21taXRfd2l0aF9tZXNzYWdlKCJkYmF0
ZXNAd2Via2l0Lm9yZyIpCiAKICAgICBkZWYgdGVzdF9jb21taXRfd2l0aG91dF9hdXRob3JpemF0
aW9uKHNlbGYpOgotICAgICAgICBzZWxmLnNjbS5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0g
PSBsYW1iZGE6IEZhbHNlCisgICAgICAgIHNlbGYuc2NtLmhhc19hdXRob3JpemF0aW9uX2Zvcl9y
ZWFsbSA9IGxhbWJkYSByZWFsbTogRmFsc2UKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXV0
aGVudGljYXRpb25FcnJvciwgc2VsZi5fc2hhcmVkX3Rlc3RfY29tbWl0X3dpdGhfbWVzc2FnZSkK
IAogICAgIGRlZiB0ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShzZWxmKToKQEAgLTY3
NCw3ICs2NzQsNyBAQCBRMWRUQngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHczNEdCCiAg
ICAgICAgIG9zLm1rZGlyKHN2bl9jb25maWdfZGlyX3BhdGgpCiAgICAgICAgIGZha2Vfd2Via2l0
X2F1dGhfZmlsZSA9IG9zLnBhdGguam9pbihzdm5fY29uZmlnX2Rpcl9wYXRoLCAiZmFrZV93ZWJr
aXRfYXV0aF9maWxlIikKICAgICAgICAgd3JpdGVfaW50b19maWxlX2F0X3BhdGgoZmFrZV93ZWJr
aXRfYXV0aF9maWxlLCBTVk4uc3ZuX3NlcnZlcl9yZWFsbSkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHNjbS5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oaG9tZV9kaXJlY3Rvcnk9ZmFrZV9o
b21lX2RpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY20uaGFzX2F1dGhvcml6YXRpb25f
Zm9yX3JlYWxtKFNWTi5zdm5fc2VydmVyX3JlYWxtLCBob21lX2RpcmVjdG9yeT1mYWtlX2hvbWVf
ZGlyKSkKICAgICAgICAgb3MucmVtb3ZlKGZha2Vfd2Via2l0X2F1dGhfZmlsZSkKICAgICAgICAg
b3Mucm1kaXIoc3ZuX2NvbmZpZ19kaXJfcGF0aCkKICAgICAgICAgb3Mucm1kaXIoZmFrZV9ob21l
X2RpcikKQEAgLTY4NCw3ICs2ODQsNyBAQCBRMWRUQngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9E
TXhNRHczNEdCCiAgICAgICAgIGZha2VfaG9tZV9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZp
eD0iZmFrZV9ob21lX2RpciIpCiAgICAgICAgIHN2bl9jb25maWdfZGlyX3BhdGggPSBvcy5wYXRo
LmpvaW4oZmFrZV9ob21lX2RpciwgIi5zdWJ2ZXJzaW9uIikKICAgICAgICAgb3MubWtkaXIoc3Zu
X2NvbmZpZ19kaXJfcGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzY20uaGFzX2F1dGhv
cml6YXRpb25fZm9yX3JlYWxtKGhvbWVfZGlyZWN0b3J5PWZha2VfaG9tZV9kaXIpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHNjbS5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oU1ZOLnN2
bl9zZXJ2ZXJfcmVhbG0sIGhvbWVfZGlyZWN0b3J5PWZha2VfaG9tZV9kaXIpKQogICAgICAgICBv
cy5ybWRpcihzdm5fY29uZmlnX2Rpcl9wYXRoKQogICAgICAgICBvcy5ybWRpcihmYWtlX2hvbWVf
ZGlyKQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVudGlh
bHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2Ny
ZWRlbnRpYWxzLnB5CShyZXZpc2lvbiA4NDEwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC9jcmVkZW50aWFscy5weQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBA
QAogIwogIyBQeXRob24gbW9kdWxlIGZvciByZWFkaW5nIHN0b3JlZCB3ZWIgY3JlZGVudGlhbHMg
ZnJvbSB0aGUgT1MuCiAKLWltcG9ydCBnZXRwYXNzCiBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9y
bQogaW1wb3J0IHJlCkBAIC0xNDksNyArMTQ4LDcgQEAgY2xhc3MgQ3JlZGVudGlhbHMob2JqZWN0
KToKICAgICAgICAgaWYgbm90IHVzZXJuYW1lOgogICAgICAgICAgICAgdXNlcm5hbWUgPSBVc2Vy
LnByb21wdCgiJXMgbG9naW46ICIgJSBzZWxmLmhvc3QpCiAgICAgICAgIGlmIG5vdCBwYXNzd29y
ZDoKLSAgICAgICAgICAgIHBhc3N3b3JkID0gZ2V0cGFzcy5nZXRwYXNzKCIlcyBwYXNzd29yZCBm
b3IgJXM6ICIgJSAoc2VsZi5ob3N0LCB1c2VybmFtZSkpCisgICAgICAgICAgICBwYXNzd29yZCA9
IFVzZXIucHJvbXB0X3Bhc3N3b3JkKCIlcyBwYXNzd29yZCBmb3IgJXM6ICIgJSAoc2VsZi5ob3N0
LCB1c2VybmFtZSkpCiAgICAgICAgICAgICBzZWxmLl9vZmZlcl90b19zdG9yZV9jcmVkZW50aWFs
c19pbl9rZXlyaW5nKHVzZXJuYW1lLCBwYXNzd29yZCkKIAogICAgICAgICByZXR1cm4gKHVzZXJu
YW1lLCBwYXNzd29yZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS91c2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS91c2VyLnB5CShyZXZpc2lvbiA4NDEwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS91c2VyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgZ2V0cGFzcwogaW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJlCkBAIC02NSw2ICs2NiwxMCBAQCBjbGFzcyBVc2Vy
KG9iamVjdCk6CiAgICAgICAgIHJldHVybiByZXNwb25zZQogCiAgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIHByb21wdF9wYXNzd29yZChjbHMsIG1lc3NhZ2UsIHJlcGVhdD0xKToKKyAgICAgICAg
cmV0dXJuIGNscy5wcm9tcHQobWVzc2FnZSwgcmVwZWF0PXJlcGVhdCwgcmF3X2lucHV0PWdldHBh
c3MuZ2V0cGFzcykKKworICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBwcm9tcHRfd2l0aF9saXN0
KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxzZSwg
cmF3X2lucHV0PXJhd19pbnB1dCk6CiAgICAgICAgIHByaW50IGxpc3RfdGl0bGUKICAgICAgICAg
aSA9IDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9jb21taXQucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5w
eQkocmV2aXNpb24gODQxMDgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMv
Y29tbWl0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIENvbW1pdChB
YnN0cmFjdFN0ZXApOgogICAgICAgICBzZWxmLl9zdGF0ZSA9IHN0YXRlCiAKICAgICAgICAgdXNl
cm5hbWUgPSBOb25lCisgICAgICAgIHBhc3N3b3JkID0gTm9uZQogICAgICAgICBmb3JjZV9zcXVh
c2ggPSBGYWxzZQogCiAgICAgICAgIG51bV90cmllcyA9IDAKQEAgLTU4LDcgKzU5LDcgQEAgY2xh
c3MgQ29tbWl0KEFic3RyYWN0U3RlcCk6CiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAg
ICAgICBzY20gPSBzZWxmLl90b29sLnNjbSgpCi0gICAgICAgICAgICAgICAgY29tbWl0X3RleHQg
PSBzY20uY29tbWl0X3dpdGhfbWVzc2FnZShzZWxmLl9jb21taXRfbWVzc2FnZSwgZ2l0X2NvbW1p
dD1zZWxmLl9vcHRpb25zLmdpdF9jb21taXQsIHVzZXJuYW1lPXVzZXJuYW1lLCBmb3JjZV9zcXVh
c2g9Zm9yY2Vfc3F1YXNoLCBjaGFuZ2VkX2ZpbGVzPXNlbGYuX2NoYW5nZWRfZmlsZXMoc3RhdGUp
KQorICAgICAgICAgICAgICAgIGNvbW1pdF90ZXh0ID0gc2NtLmNvbW1pdF93aXRoX21lc3NhZ2Uo
c2VsZi5fY29tbWl0X21lc3NhZ2UsIGdpdF9jb21taXQ9c2VsZi5fb3B0aW9ucy5naXRfY29tbWl0
LCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQsIGZvcmNlX3NxdWFzaD1mb3Jj
ZV9zcXVhc2gsIGNoYW5nZWRfZmlsZXM9c2VsZi5fY2hhbmdlZF9maWxlcyhzdGF0ZSkpCiAgICAg
ICAgICAgICAgICAgc3ZuX3JldmlzaW9uID0gc2NtLnN2bl9yZXZpc2lvbl9mcm9tX2NvbW1pdF90
ZXh0KGNvbW1pdF90ZXh0KQogICAgICAgICAgICAgICAgIGxvZygiQ29tbWl0dGVkIHIlczogPCVz
PiIgJSAoc3ZuX3JldmlzaW9uLCB1cmxzLnZpZXdfcmV2aXNpb25fdXJsKHN2bl9yZXZpc2lvbikp
KQogICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlWyJjb21taXRfdGV4dCJdID0gY29tbWl0X3Rl
eHQKQEAgLTcyLDQgKzczLDggQEAgY2xhc3MgQ29tbWl0KEFic3RyYWN0U3RlcCk6CiAgICAgICAg
ICAgICBleGNlcHQgQXV0aGVudGljYXRpb25FcnJvciwgZToKICAgICAgICAgICAgICAgICB1c2Vy
bmFtZSA9IHNlbGYuX3Rvb2wudXNlci5wcm9tcHQoIiVzIGxvZ2luOiAiICUgZS5zZXJ2ZXJfaG9z
dCwgcmVwZWF0PTUpCiAgICAgICAgICAgICAgICAgaWYgbm90IHVzZXJuYW1lOgotICAgICAgICAg
ICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgdXNl
cm5hbWUgb24gJXMgdG8gcGVyZm9ybSB0aGUgY29tbWl0IGFzLiIgJSBzZWxmLnN2bl9zZXJ2ZXJf
aG9zdCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIllvdSBuZWVkIHRv
IHNwZWNpZnkgdGhlIHVzZXJuYW1lIG9uICVzIHRvIHBlcmZvcm0gdGhlIGNvbW1pdCBhcy4iICUg
ZS5zZXJ2ZXJfaG9zdCkKKyAgICAgICAgICAgICAgICBpZiBlLnByb21wdF9mb3JfcGFzc3dvcmQ6
CisgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gc2VsZi5fdG9vbC51c2VyLnByb21wdF9w
YXNzd29yZCgiJXMgcGFzc3dvcmQgZm9yICVzOiAiICUgKGUuc2VydmVyX2hvc3QsIHVzZXJuYW1l
KSwgcmVwZWF0PTUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXNzd29yZDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJZb3UgbmVlZCB0byBzcGVjaWZ5
IHRoZSBwYXNzd29yZCBmb3IgJXMgb24gJXMgdG8gcGVyZm9ybSB0aGUgY29tbWl0LiIgJSAodXNl
cm5hbWUsIGUuc2VydmVyX2hvc3QpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89967</attachid>
            <date>2011-04-17 16:09:10 -0700</date>
            <delta_ts>2011-04-21 04:02:29 -0700</delta_ts>
            <desc>Patch and updated unit tests</desc>
            <filename>Bug31500_2.patch</filename>
            <type>text/plain</type>
            <size>15355</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0MTA4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzQgQEAKKzIwMTEtMDQtMTcgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHdlYmtpdC1w
YXRjaCBsYW5kIGhhbmdzIGlmIHN2biBwcm9tcHRzIGZvciBjcmVkZW50aWFscworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MDAKKworICAgICAgICBQ
cm9tcHQgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB3aGVuIHVzaW5nIGdpdC1zdm4gYW5kIHRo
ZXJlIGFyZW4ndCBjYWNoZWQgU1ZOIGNyZWRlbnRpYWxzLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5OgorICAgICAgICAgIC0gQWRkZWQgbWl4aW4g
Y2xhc3MgU1ZOQW5kR2l0U1ZOSGFzQXV0aG9yaXphdGlvbkZvclJlYWxtTWl4aW4gYW5kIG1hZGUg
Ym90aCBjbGFzcyBTVk4gYW5kCisgICAgICAgICAgICBHaXQgaW5oZXJpdCBmcm9tIGl0LgorICAg
ICAgICAgIC0gTW9kaWZpZWQgQXV0aGVudGljYXRpb25FcnJvciBjb25zdHJ1Y3RvciB0byB0YWtl
IG9wdGlvbmFsIHByb21wdF9mb3JfcGFzc3dvcmQgYXJndW1lbnQuCisgICAgICAgICAgLSBNYWRl
IFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKSBhIHN0YXRpYyBtZXRob2QgYW5kIHJl
bW92ZWQgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgZm9yIGFyZ3VtZW50IHJlYWxtOyBtb2Rp
ZmllZCBjYWxsIHNpdGVzIGFzIG5lZWRlZC4KKyAgICAgICAgICAtIE1vZGlmaWVkIHtTQ00sIFNW
TiwgR2l0fS5jb21taXRfd2l0aF9tZXNzYWdlKCkgdG8gdGFrZSBvcHRpb25hbCBwYXNzd29yZCBh
cmd1bWVudC4KKyAgICAgICAgICAtIE1vZGlmaWVkIEdpdC5fY29tbWl0X29uX2JyYW5jaCgpIHRv
IHRha2Ugb3B0aW9uYWwgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZ3VtZW50LgorICAgICAgICAg
IC0gTW9kaWZpZWQgR2l0LnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIoKSB0byB0YWtlIG9w
dGlvbmFsIHVzZXJuYW1lIGFuZCBwYXNzd29yZAorICAgICAgICAgICAgYXJndW1lbnQgYW5kIHRv
IGNhbGwgU1ZOLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weToKKyAgICAgICAgICAt
IE1vZGlmaWVkIFNWTlRlc3QudGVzdF9jb21taXRfd2l0aG91dF9hdXRob3JpemF0aW9uKCkgdG8g
dGFrZSBkdW1teSByZWFsbSBhcmd1bWVudC4KKyAgICAgICAgICAtIE1vZGlmaWVkIFNWTlRlc3Qu
dGVzdF9ub3RfaGF2ZV9hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpIHRvIHBhc3MgcmVhbG0gYXJn
dW1lbnQgdG8KKyAgICAgICAgICAgIFNWTi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKS4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVudGlhbHMucHk6Cisg
ICAgICAgICAgLSBNb2RpZmllZCBDcmVkZW50aWFscy5yZWFkX2NyZWRlbnRpYWxzKCkgdG8gY2Fs
bCBVc2VyLnByb21wdF9wYXNzd29yZCgpIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHVzaW5nIGdl
dHBhc3MuZ2V0cGFzcygpIGRpcmVjdGx5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS91c2VyLnB5OgorICAgICAgICAgIC0gQWRkZWQgVXNlci5wcm9tcHRfcGFzc3dv
cmQoKS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5Ogor
ICAgICAgICAgIC0gTW9kaWZpZWQgQ29tbWl0LnJ1bigpIHRvIHByb21wdCBmb3IgYSBwYXNzd29y
ZCBpZiBuZWVkZWQuCisKIDIwMTEtMDQtMTcgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkJKHJldmlzaW9uIDg0
MTA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAgZGVmIGNvbW1pdF9lcnJvcl9oYW5kbGVy
KGVycm9yKToKIAogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkVycm9yKEV4Y2VwdGlvbik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9ob3N0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c2VydmVyX2hvc3QsIHByb21wdF9mb3JfcGFzc3dvcmQ9RmFsc2UpOgogICAgICAgICBzZWxmLnNl
cnZlcl9ob3N0ID0gc2VydmVyX2hvc3QKKyAgICAgICAgc2VsZi5wcm9tcHRfZm9yX3Bhc3N3b3Jk
ID0gcHJvbXB0X2Zvcl9wYXNzd29yZAogCiAKIGNsYXNzIEFtYmlndW91c0NvbW1pdEVycm9yKEV4
Y2VwdGlvbik6CkBAIC0yOTEsNyArMjkyLDcgQEAgY2xhc3MgU0NNOgogICAgIGRlZiByZXZlcnRf
ZmlsZXMoc2VsZiwgZmlsZV9wYXRocyk6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1w
bGVtZW50KCkKIAotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVz
ZXJuYW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2Vk
X2ZpbGVzPU5vbmUpOgorICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2Us
IHVzZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1
YXNoPUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICBzZWxmLl9zdWJjbGFzc19t
dXN0X2ltcGxlbWVudCgpCiAKICAgICBkZWYgc3ZuX2NvbW1pdF9sb2coc2VsZiwgc3ZuX3Jldmlz
aW9uKToKQEAgLTMxOSw3ICszMjAsMTggQEAgY2xhc3MgU0NNOgogICAgICAgICByZXR1cm4gW10K
IAogCi1jbGFzcyBTVk4oU0NNKToKKyMgQSBtaXhpbiBjbGFzcyBmb3IgU1ZOIGFuZCBHaXQtU1ZO
LgorY2xhc3MgU1ZOQW5kR2l0U1ZOSGFzQXV0aG9yaXphdGlvbkZvclJlYWxtTWl4aW46CisgICAg
ZGVmIGhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShzZWxmLCByZWFsbSwgaG9tZV9kaXJlY3Rv
cnk9b3MuZ2V0ZW52KCJIT01FIikpOgorICAgICAgICAjIEFzc3VtZXMgZmluZCBhbmQgZ3JlcCBh
cmUgaW5zdGFsbGVkLgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4o
aG9tZV9kaXJlY3RvcnksICIuc3VidmVyc2lvbiIpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBmaW5kX2FyZ3MgPSBbImZpbmQiLCAiLnN1YnZlcnNpb24iLCAiLXR5cGUiLCAi
ZiIsICItZXhlYyIsICJncmVwIiwgIi1xIiwgcmVhbG0sICJ7fSIsICI7IiwgIi1wcmludCJdCisg
ICAgICAgIGZpbmRfb3V0cHV0ID0gc2VsZi5ydW4oZmluZF9hcmdzLCBjd2Q9aG9tZV9kaXJlY3Rv
cnksIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0cmlwKCkKKyAgICAg
ICAgcmV0dXJuIGZpbmRfb3V0cHV0IGFuZCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oaG9t
ZV9kaXJlY3RvcnksIGZpbmRfb3V0cHV0KSkKKworCitjbGFzcyBTVk4oU0NNLCBTVk5BbmRHaXRT
Vk5IYXNBdXRob3JpemF0aW9uRm9yUmVhbG1NaXhpbik6CiAgICAgIyBGSVhNRTogVGhlc2UgYmVs
b25nIGluIGNvbW1vbi5jb25maWcudXJscwogICAgIHN2bl9zZXJ2ZXJfaG9zdCA9ICJzdm4ud2Vi
a2l0Lm9yZyIKICAgICBzdm5fc2VydmVyX3JlYWxtID0gIjxodHRwOi8vc3ZuLndlYmtpdC5vcmc6
ODA+IE1hYyBPUyBGb3JnZSIKQEAgLTM3NCwxNCArMzg2LDYgQEAgY2xhc3MgU1ZOKFNDTSk6CiAg
ICAgZGVmIGNvbW1pdF9zdWNjZXNzX3JlZ2V4cCgpOgogICAgICAgICByZXR1cm4gIl5Db21taXR0
ZWQgcmV2aXNpb24gKD9QPHN2bl9yZXZpc2lvbj5cZCspXC4kIgogCi0gICAgZGVmIGhhc19hdXRo
b3JpemF0aW9uX2Zvcl9yZWFsbShzZWxmLCByZWFsbT1zdm5fc2VydmVyX3JlYWxtLCBob21lX2Rp
cmVjdG9yeT1vcy5nZXRlbnYoIkhPTUUiKSk6Ci0gICAgICAgICMgQXNzdW1lcyBmaW5kIGFuZCBn
cmVwIGFyZSBpbnN0YWxsZWQuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGgu
am9pbihob21lX2RpcmVjdG9yeSwgIi5zdWJ2ZXJzaW9uIikpOgotICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0gICAgICAgIGZpbmRfYXJncyA9IFsiZmluZCIsICIuc3VidmVyc2lvbiIsICItdHlw
ZSIsICJmIiwgIi1leGVjIiwgImdyZXAiLCAiLXEiLCByZWFsbSwgInt9IiwgIjsiLCAiLXByaW50
Il07Ci0gICAgICAgIGZpbmRfb3V0cHV0ID0gc2VsZi5ydW4oZmluZF9hcmdzLCBjd2Q9aG9tZV9k
aXJlY3RvcnksIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikucnN0cmlwKCkK
LSAgICAgICAgcmV0dXJuIGZpbmRfb3V0cHV0IGFuZCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpv
aW4oaG9tZV9kaXJlY3RvcnksIGZpbmRfb3V0cHV0KSkKLQogICAgIEBtZW1vaXplZAogICAgIGRl
ZiBzdm5fdmVyc2lvbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsnc3ZuJywgJy0t
dmVyc2lvbicsICctLXF1aWV0J10pCkBAIC01NTYsMTEgKzU2MCwxMSBAQCBjbGFzcyBTVk4oU0NN
KToKICAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGN3ZD1zZWxmLmNo
ZWNrb3V0X3Jvb3QuCiAgICAgICAgIHNlbGYucnVuKFsnc3ZuJywgJ3JldmVydCddICsgZmlsZV9w
YXRocykKIAotICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVzZXJu
YW1lPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNoPUZhbHNlLCBjaGFuZ2VkX2Zp
bGVzPU5vbmUpOgorICAgIGRlZiBjb21taXRfd2l0aF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHVz
ZXJuYW1lPU5vbmUsIHBhc3N3b3JkPU5vbmUsIGdpdF9jb21taXQ9Tm9uZSwgZm9yY2Vfc3F1YXNo
PUZhbHNlLCBjaGFuZ2VkX2ZpbGVzPU5vbmUpOgogICAgICAgICAjIGdpdC1jb21taXQgYW5kIGZv
cmNlIGFyZSBub3QgdXNlZCBieSBTVk4uCiAgICAgICAgIHN2bl9jb21taXRfYXJncyA9IFsic3Zu
IiwgImNvbW1pdCJdCiAKLSAgICAgICAgaWYgbm90IHVzZXJuYW1lIGFuZCBub3Qgc2VsZi5oYXNf
YXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oKToKKyAgICAgICAgaWYgbm90IHVzZXJuYW1lIGFuZCBu
b3Qgc2VsZi5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG0oc2VsZi5zdm5fc2VydmVyX3JlYWxt
KToKICAgICAgICAgICAgIHJhaXNlIEF1dGhlbnRpY2F0aW9uRXJyb3Ioc2VsZi5zdm5fc2VydmVy
X2hvc3QpCiAgICAgICAgIGlmIHVzZXJuYW1lOgogICAgICAgICAgICAgc3ZuX2NvbW1pdF9hcmdz
LmV4dGVuZChbIi0tdXNlcm5hbWUiLCB1c2VybmFtZV0pCkBAIC01OTgsNyArNjAyLDcgQEAgY2xh
c3MgU1ZOKFNDTSk6CiAKIAogIyBBbGwgZ2l0LXNwZWNpZmljIGxvZ2ljIHNob3VsZCBnbyBoZXJl
LgotY2xhc3MgR2l0KFNDTSk6CitjbGFzcyBHaXQoU0NNLCBTVk5BbmRHaXRTVk5IYXNBdXRob3Jp
emF0aW9uRm9yUmVhbG1NaXhpbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN3ZCwgZXhlY3V0
aXZlPU5vbmUpOgogICAgICAgICBTQ00uX19pbml0X18oc2VsZiwgY3dkLCBleGVjdXRpdmUpCiAg
ICAgICAgIHNlbGYuX2NoZWNrX2dpdF9hcmNoaXRlY3R1cmUoKQpAQCAtODMzLDcgKzgzNyw3IEBA
IGNsYXNzIEdpdChTQ00pOgogICAgICAgICAgICAgaWYgbnVtX2xvY2FsX2NvbW1pdHMgPiAxIG9y
IChudW1fbG9jYWxfY29tbWl0cyA+IDAgYW5kIG5vdCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVh
bik6CiAgICAgICAgICAgICAgICAgcmFpc2UgQW1iaWd1b3VzQ29tbWl0RXJyb3IobnVtX2xvY2Fs
X2NvbW1pdHMsIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuKQogCi0gICAgZGVmIGNvbW1pdF93
aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgZ2l0X2NvbW1pdD1Ob25l
LCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9uZSk6CisgICAgZGVmIGNvbW1p
dF93aXRoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9u
ZSwgZ2l0X2NvbW1pdD1Ob25lLCBmb3JjZV9zcXVhc2g9RmFsc2UsIGNoYW5nZWRfZmlsZXM9Tm9u
ZSk6CiAgICAgICAgICMgVXNlcm5hbWUgaXMgaWdub3JlZCBkdXJpbmcgR2l0IGNvbW1pdHMuCiAg
ICAgICAgIHdvcmtpbmdfZGlyZWN0b3J5X2lzX2NsZWFuID0gc2VsZi53b3JraW5nX2RpcmVjdG9y
eV9pc19jbGVhbigpCiAKQEAgLTg0Myw3ICs4NDcsNyBAQCBjbGFzcyBHaXQoU0NNKToKICAgICAg
ICAgICAgICAgICBpZiB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjoKICAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0iVGhlIHdvcmtpbmcgY29weSBpcyBub3Qg
bW9kaWZpZWQuIC0tZ2l0LWNvbW1pdD1IRUFELi4gb25seSBjb21taXRzIHdvcmtpbmcgY29weSBj
aGFuZ2VzLiIpCiAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfbG9jYWxseV93aXRoX21lc3Nh
Z2UobWVzc2FnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29tbWl0X29uX2JyYW5j
aChtZXNzYWdlLCAnSEVBRCcpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbW1pdF9v
bl9icmFuY2gobWVzc2FnZSwgJ0hFQUQnLCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFz
c3dvcmQpCiAKICAgICAgICAgICAgICMgTmVlZCB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzIHRv
IGJlIGNvbW1pdHRlZCBzbyB3ZSBjYW4gY2hlY2tvdXQgdGhlIG1lcmdlIGJyYW5jaC4KICAgICAg
ICAgICAgIGlmIG5vdCB3b3JraW5nX2RpcmVjdG9yeV9pc19jbGVhbjoKQEAgLTg1MSwxNSArODU1
LDE1IEBAIGNsYXNzIEdpdChTQ00pOgogICAgICAgICAgICAgICAgICMgVGhhdCB3aWxsIG1vZGlm
eSB0aGUgd29ya2luZy1jb3B5IGFuZCBjYXVzZSB1cyB0byBoaXQgdGhpcyBlcnJvci4KICAgICAg
ICAgICAgICAgICAjIFRoZSBDaGFuZ2VMb2cgbW9kaWZpY2F0aW9uIGNvdWxkIGJlIG1hZGUgdG8g
bW9kaWZ5IHRoZSBleGlzdGluZyBsb2NhbCBjb21taXQuCiAgICAgICAgICAgICAgICAgcmFpc2Ug
U2NyaXB0RXJyb3IobWVzc2FnZT0iV29ya2luZyBjb3B5IGlzIG1vZGlmaWVkLiBDYW5ub3QgY29t
bWl0IGluZGl2aWR1YWwgZ2l0X2NvbW1pdHMuIikKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9j
b21taXRfb25fYnJhbmNoKG1lc3NhZ2UsIGdpdF9jb21taXQpCisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fY29tbWl0X29uX2JyYW5jaChtZXNzYWdlLCBnaXRfY29tbWl0LCB1c2VybmFtZT11c2Vy
bmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQpCiAKICAgICAgICAgaWYgbm90IGZvcmNlX3NxdWFzaDoK
ICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9jYW5fc3F1YXNoKHdvcmtpbmdfZGlyZWN0b3J5X2lz
X2NsZWFuKQogICAgICAgICBzZWxmLnJ1bihbJ2dpdCcsICdyZXNldCcsICctLXNvZnQnLCBzZWxm
LnJlbW90ZV9tZXJnZV9iYXNlKCldKQogICAgICAgICBzZWxmLmNvbW1pdF9sb2NhbGx5X3dpdGhf
bWVzc2FnZShtZXNzYWdlKQotICAgICAgICByZXR1cm4gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNf
dG9fc2VydmVyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYucHVzaF9sb2NhbF9jb21taXRzX3RvX3Nl
cnZlcih1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQpCiAKLSAgICBkZWYgX2Nv
bW1pdF9vbl9icmFuY2goc2VsZiwgbWVzc2FnZSwgZ2l0X2NvbW1pdCk6CisgICAgZGVmIF9jb21t
aXRfb25fYnJhbmNoKHNlbGYsIG1lc3NhZ2UsIGdpdF9jb21taXQsIHVzZXJuYW1lPU5vbmUsIHBh
c3N3b3JkPU5vbmUpOgogICAgICAgICBicmFuY2hfcmVmID0gc2VsZi5ydW4oWydnaXQnLCAnc3lt
Ym9saWMtcmVmJywgJ0hFQUQnXSkuc3RyaXAoKQogICAgICAgICBicmFuY2hfbmFtZSA9IGJyYW5j
aF9yZWYucmVwbGFjZSgncmVmcy9oZWFkcy8nLCAnJykKICAgICAgICAgY29tbWl0X2lkcyA9IHNl
bGYuY29tbWl0X2lkc19mcm9tX2NvbW1pdGlzaF9hcmd1bWVudHMoW2dpdF9jb21taXRdKQpAQCAt
ODg4LDcgKzg5Miw3IEBAIGNsYXNzIEdpdChTQ00pOgogICAgICAgICAgICAgICAgIHNlbGYucnVu
KFsnZ2l0JywgJ2NoZXJyeS1waWNrJywgJy0tbm8tY29tbWl0JywgY29tbWl0XSkKIAogICAgICAg
ICAgICAgc2VsZi5ydW4oWydnaXQnLCAnY29tbWl0JywgJy1tJywgbWVzc2FnZV0pCi0gICAgICAg
ICAgICBvdXRwdXQgPSBzZWxmLnB1c2hfbG9jYWxfY29tbWl0c190b19zZXJ2ZXIoKQorICAgICAg
ICAgICAgb3V0cHV0ID0gc2VsZi5wdXNoX2xvY2FsX2NvbW1pdHNfdG9fc2VydmVyKHVzZXJuYW1l
PXVzZXJuYW1lLCBwYXNzd29yZD1wYXNzd29yZCkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwg
ZToKICAgICAgICAgICAgIGxvZygiQ09NTUlUIEZBSUxFRDogIiArIHN0cihlKSkKICAgICAgICAg
ICAgIG91dHB1dCA9ICJDb21taXQgZmFpbGVkLiIKQEAgLTkzNiwxMSArOTQwLDE1IEBAIGNsYXNz
IEdpdChTQ00pOgogICAgIGRlZiBjb21taXRfbG9jYWxseV93aXRoX21lc3NhZ2Uoc2VsZiwgbWVz
c2FnZSk6CiAgICAgICAgIHNlbGYucnVuKFsnZ2l0JywgJ2NvbW1pdCcsICctLWFsbCcsICctRics
ICctJ10sIGlucHV0PW1lc3NhZ2UpCiAKLSAgICBkZWYgcHVzaF9sb2NhbF9jb21taXRzX3RvX3Nl
cnZlcihzZWxmKToKKyAgICBkZWYgcHVzaF9sb2NhbF9jb21taXRzX3RvX3NlcnZlcihzZWxmLCB1
c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lKToKICAgICAgICAgZGNvbW1pdF9jb21tYW5kID0g
WydnaXQnLCAnc3ZuJywgJ2Rjb21taXQnXQogICAgICAgICBpZiBzZWxmLmRyeXJ1bjoKICAgICAg
ICAgICAgIGRjb21taXRfY29tbWFuZC5hcHBlbmQoJy0tZHJ5LXJ1bicpCi0gICAgICAgIG91dHB1
dCA9IHNlbGYucnVuKGRjb21taXRfY29tbWFuZCwgZXJyb3JfaGFuZGxlcj1jb21taXRfZXJyb3Jf
aGFuZGxlcikKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxt
KFNWTi5zdm5fc2VydmVyX3JlYWxtKToKKyAgICAgICAgICAgIHJhaXNlIEF1dGhlbnRpY2F0aW9u
RXJyb3IoU1ZOLnN2bl9zZXJ2ZXJfaG9zdCwgcHJvbXB0X2Zvcl9wYXNzd29yZD1UcnVlKQorICAg
ICAgICBpZiB1c2VybmFtZToKKyAgICAgICAgICAgIGRjb21taXRfY29tbWFuZC5leHRlbmQoWyIt
LXVzZXJuYW1lIiwgdXNlcm5hbWVdKQorICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bihkY29tbWl0
X2NvbW1hbmQsIGVycm9yX2hhbmRsZXI9Y29tbWl0X2Vycm9yX2hhbmRsZXIsIGlucHV0PXBhc3N3
b3JkKQogICAgICAgICAjIFJldHVybiBhIHN0cmluZyB3aGljaCBsb29rcyBsaWtlIGEgY29tbWl0
IHNvIHRoYXQgdGhpbmdzIHdoaWNoIHBhcnNlIHRoaXMgb3V0cHV0IHdpbGwgc3VjY2VlZC4KICAg
ICAgICAgaWYgc2VsZi5kcnlydW46CiAgICAgICAgICAgICBvdXRwdXQgKz0gIlxuQ29tbWl0dGVk
IHIwIgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtX3Vu
aXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L3NjbV91bml0dGVzdC5weQkocmV2aXNpb24gODQxMDgpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTY2NCw3ICs2NjQsNyBAQCBRMWRUQngwQUFBQjQyaXRnNEdsZ1lKakd3TUREeU9ETXhNRHcz
NEdCCiAgICAgICAgIHNlbGYuX3NoYXJlZF90ZXN0X2NvbW1pdF93aXRoX21lc3NhZ2UoImRiYXRl
c0B3ZWJraXQub3JnIikKIAogICAgIGRlZiB0ZXN0X2NvbW1pdF93aXRob3V0X2F1dGhvcml6YXRp
b24oc2VsZik6Ci0gICAgICAgIHNlbGYuc2NtLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSA9
IGxhbWJkYTogRmFsc2UKKyAgICAgICAgc2VsZi5zY20uaGFzX2F1dGhvcml6YXRpb25fZm9yX3Jl
YWxtID0gbGFtYmRhIHJlYWxtOiBGYWxzZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdXRo
ZW50aWNhdGlvbkVycm9yLCBzZWxmLl9zaGFyZWRfdGVzdF9jb21taXRfd2l0aF9tZXNzYWdlKQog
CiAgICAgZGVmIHRlc3RfaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKHNlbGYpOgpAQCAtNjc0
LDcgKzY3NCw3IEBAIFExZFRCeDBBQUFCNDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0IKICAg
ICAgICAgb3MubWtkaXIoc3ZuX2NvbmZpZ19kaXJfcGF0aCkKICAgICAgICAgZmFrZV93ZWJraXRf
YXV0aF9maWxlID0gb3MucGF0aC5qb2luKHN2bl9jb25maWdfZGlyX3BhdGgsICJmYWtlX3dlYmtp
dF9hdXRoX2ZpbGUiKQogICAgICAgICB3cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aChmYWtlX3dlYmtp
dF9hdXRoX2ZpbGUsIFNWTi5zdm5fc2VydmVyX3JlYWxtKQotICAgICAgICBzZWxmLmFzc2VydFRy
dWUoc2NtLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShob21lX2RpcmVjdG9yeT1mYWtlX2hv
bWVfZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNjbS5oYXNfYXV0aG9yaXphdGlvbl9m
b3JfcmVhbG0oU1ZOLnN2bl9zZXJ2ZXJfcmVhbG0sIGhvbWVfZGlyZWN0b3J5PWZha2VfaG9tZV9k
aXIpKQogICAgICAgICBvcy5yZW1vdmUoZmFrZV93ZWJraXRfYXV0aF9maWxlKQogICAgICAgICBv
cy5ybWRpcihzdm5fY29uZmlnX2Rpcl9wYXRoKQogICAgICAgICBvcy5ybWRpcihmYWtlX2hvbWVf
ZGlyKQpAQCAtNjg0LDcgKzY4NCw3IEBAIFExZFRCeDBBQUFCNDJpdGc0R2xnWUpqR3dNRER5T0RN
eE1EdzM0R0IKICAgICAgICAgZmFrZV9ob21lX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoc3VmZml4
PSJmYWtlX2hvbWVfZGlyIikKICAgICAgICAgc3ZuX2NvbmZpZ19kaXJfcGF0aCA9IG9zLnBhdGgu
am9pbihmYWtlX2hvbWVfZGlyLCAiLnN1YnZlcnNpb24iKQogICAgICAgICBvcy5ta2Rpcihzdm5f
Y29uZmlnX2Rpcl9wYXRoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjbS5oYXNfYXV0aG9y
aXphdGlvbl9mb3JfcmVhbG0oaG9tZV9kaXJlY3Rvcnk9ZmFrZV9ob21lX2RpcikpCisgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2Uoc2NtLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShTVk4uc3Zu
X3NlcnZlcl9yZWFsbSwgaG9tZV9kaXJlY3Rvcnk9ZmFrZV9ob21lX2RpcikpCiAgICAgICAgIG9z
LnJtZGlyKHN2bl9jb25maWdfZGlyX3BhdGgpCiAgICAgICAgIG9zLnJtZGlyKGZha2VfaG9tZV9k
aXIpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9jcmVkZW50aWFs
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3Jl
ZGVudGlhbHMucHkJKHJldmlzaW9uIDg0MTA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vbmV0L2NyZWRlbnRpYWxzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAjCiAjIFB5dGhvbiBtb2R1bGUgZm9yIHJlYWRpbmcgc3RvcmVkIHdlYiBjcmVkZW50aWFscyBm
cm9tIHRoZSBPUy4KIAotaW1wb3J0IGdldHBhc3MKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3Jt
CiBpbXBvcnQgcmUKQEAgLTE0OSw3ICsxNDgsNyBAQCBjbGFzcyBDcmVkZW50aWFscyhvYmplY3Qp
OgogICAgICAgICBpZiBub3QgdXNlcm5hbWU6CiAgICAgICAgICAgICB1c2VybmFtZSA9IFVzZXIu
cHJvbXB0KCIlcyBsb2dpbjogIiAlIHNlbGYuaG9zdCkKICAgICAgICAgaWYgbm90IHBhc3N3b3Jk
OgotICAgICAgICAgICAgcGFzc3dvcmQgPSBnZXRwYXNzLmdldHBhc3MoIiVzIHBhc3N3b3JkIGZv
ciAlczogIiAlIChzZWxmLmhvc3QsIHVzZXJuYW1lKSkKKyAgICAgICAgICAgIHBhc3N3b3JkID0g
VXNlci5wcm9tcHRfcGFzc3dvcmQoIiVzIHBhc3N3b3JkIGZvciAlczogIiAlIChzZWxmLmhvc3Qs
IHVzZXJuYW1lKSkKICAgICAgICAgICAgIHNlbGYuX29mZmVyX3RvX3N0b3JlX2NyZWRlbnRpYWxz
X2luX2tleXJpbmcodXNlcm5hbWUsIHBhc3N3b3JkKQogCiAgICAgICAgIHJldHVybiAodXNlcm5h
bWUsIHBhc3N3b3JkKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVt
L3VzZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3VzZXIucHkJKHJldmlzaW9uIDg0MTA4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL3VzZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBnZXRwYXNzCiBpbXBvcnQgbG9n
Z2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKQEAgLTY1LDYgKzY2LDEwIEBAIGNsYXNzIFVzZXIo
b2JqZWN0KToKICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAKICAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgcHJvbXB0X3Bhc3N3b3JkKGNscywgbWVzc2FnZSwgcmVwZWF0PTEpOgorICAgICAgICBy
ZXR1cm4gY2xzLnByb21wdChtZXNzYWdlLCByZXBlYXQ9cmVwZWF0LCByYXdfaW5wdXQ9Z2V0cGFz
cy5nZXRwYXNzKQorCisgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHByb21wdF93aXRoX2xpc3Qo
Y2xzLCBsaXN0X3RpdGxlLCBsaXN0X2l0ZW1zLCBjYW5fY2hvb3NlX211bHRpcGxlPUZhbHNlLCBy
YXdfaW5wdXQ9cmF3X2lucHV0KToKICAgICAgICAgcHJpbnQgbGlzdF90aXRsZQogICAgICAgICBp
ID0gMApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2NvbW1pdC5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvY29tbWl0LnB5
CShyZXZpc2lvbiA4NDEwOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9j
b21taXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgQ29tbWl0KEFi
c3RyYWN0U3RlcCk6CiAgICAgICAgIHNlbGYuX3N0YXRlID0gc3RhdGUKIAogICAgICAgICB1c2Vy
bmFtZSA9IE5vbmUKKyAgICAgICAgcGFzc3dvcmQgPSBOb25lCiAgICAgICAgIGZvcmNlX3NxdWFz
aCA9IEZhbHNlCiAKICAgICAgICAgbnVtX3RyaWVzID0gMApAQCAtNTgsNyArNTksNyBAQCBjbGFz
cyBDb21taXQoQWJzdHJhY3RTdGVwKToKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAg
ICAgIHNjbSA9IHNlbGYuX3Rvb2wuc2NtKCkKLSAgICAgICAgICAgICAgICBjb21taXRfdGV4dCA9
IHNjbS5jb21taXRfd2l0aF9tZXNzYWdlKHNlbGYuX2NvbW1pdF9tZXNzYWdlLCBnaXRfY29tbWl0
PXNlbGYuX29wdGlvbnMuZ2l0X2NvbW1pdCwgdXNlcm5hbWU9dXNlcm5hbWUsIGZvcmNlX3NxdWFz
aD1mb3JjZV9zcXVhc2gsIGNoYW5nZWRfZmlsZXM9c2VsZi5fY2hhbmdlZF9maWxlcyhzdGF0ZSkp
CisgICAgICAgICAgICAgICAgY29tbWl0X3RleHQgPSBzY20uY29tbWl0X3dpdGhfbWVzc2FnZShz
ZWxmLl9jb21taXRfbWVzc2FnZSwgZ2l0X2NvbW1pdD1zZWxmLl9vcHRpb25zLmdpdF9jb21taXQs
IHVzZXJuYW1lPXVzZXJuYW1lLCBwYXNzd29yZD1wYXNzd29yZCwgZm9yY2Vfc3F1YXNoPWZvcmNl
X3NxdWFzaCwgY2hhbmdlZF9maWxlcz1zZWxmLl9jaGFuZ2VkX2ZpbGVzKHN0YXRlKSkKICAgICAg
ICAgICAgICAgICBzdm5fcmV2aXNpb24gPSBzY20uc3ZuX3JldmlzaW9uX2Zyb21fY29tbWl0X3Rl
eHQoY29tbWl0X3RleHQpCiAgICAgICAgICAgICAgICAgbG9nKCJDb21taXR0ZWQgciVzOiA8JXM+
IiAlIChzdm5fcmV2aXNpb24sIHVybHMudmlld19yZXZpc2lvbl91cmwoc3ZuX3JldmlzaW9uKSkp
CiAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGVbImNvbW1pdF90ZXh0Il0gPSBjb21taXRfdGV4
dApAQCAtNzIsNCArNzMsOCBAQCBjbGFzcyBDb21taXQoQWJzdHJhY3RTdGVwKToKICAgICAgICAg
ICAgIGV4Y2VwdCBBdXRoZW50aWNhdGlvbkVycm9yLCBlOgogICAgICAgICAgICAgICAgIHVzZXJu
YW1lID0gc2VsZi5fdG9vbC51c2VyLnByb21wdCgiJXMgbG9naW46ICIgJSBlLnNlcnZlcl9ob3N0
LCByZXBlYXQ9NSkKICAgICAgICAgICAgICAgICBpZiBub3QgdXNlcm5hbWU6Ci0gICAgICAgICAg
ICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKCJZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSB1c2Vy
bmFtZSBvbiAlcyB0byBwZXJmb3JtIHRoZSBjb21taXQgYXMuIiAlIHNlbGYuc3ZuX3NlcnZlcl9o
b3N0KQorICAgICAgICAgICAgICAgICAgICByYWlzZSBTY3JpcHRFcnJvcigiWW91IG5lZWQgdG8g
c3BlY2lmeSB0aGUgdXNlcm5hbWUgb24gJXMgdG8gcGVyZm9ybSB0aGUgY29tbWl0IGFzLiIgJSBl
LnNlcnZlcl9ob3N0KQorICAgICAgICAgICAgICAgIGlmIGUucHJvbXB0X2Zvcl9wYXNzd29yZDoK
KyAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBzZWxmLl90b29sLnVzZXIucHJvbXB0X3Bh
c3N3b3JkKCIlcyBwYXNzd29yZCBmb3IgJXM6ICIgJSAoZS5zZXJ2ZXJfaG9zdCwgdXNlcm5hbWUp
LCByZXBlYXQ9NSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhc3N3b3JkOgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IoIllvdSBuZWVkIHRvIHNwZWNpZnkg
dGhlIHBhc3N3b3JkIGZvciAlcyBvbiAlcyB0byBwZXJmb3JtIHRoZSBjb21taXQuIiAlICh1c2Vy
bmFtZSwgZS5zZXJ2ZXJfaG9zdCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90579</attachid>
            <date>2011-04-21 12:37:52 -0700</date>
            <delta_ts>2011-04-21 12:41:26 -0700</delta_ts>
            <desc>Patch and unit tests</desc>
            <filename>Bug31500_amend_042111.patch</filename>
            <type>text/plain</type>
            <size>6228</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0NTMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTEtMDQtMjEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHdlYmtpdC1w
YXRjaCBsYW5kIGhhbmdzIGlmIHN2biBwcm9tcHRzIGZvciBjcmVkZW50aWFscworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MDAKKworICAgICAgICBN
YWtlIGhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpIHJldHVybiBUcnVlIG9ubHkgb25seSBp
ZiB0aGVyZSBleGlzdHMgYSBjcmVkZW50aWFscyBmaWxlCisgICAgICAgIHRoYXQgY29udGFpbnMg
ZWl0aGVyIHRoZSB3b3JkICJwYXNzd29yZCIgb3IgInBhc3N0eXBlIi4gV2UgYXNzdW1lIHRoYXQg
dGhlc2Ugd29yZHMgZG9uJ3QKKyAgICAgICAgY29pbmNpZGUgd2l0aCB0aGUgYWN0dWFsIGNyZWRl
bnRpYWwgZGF0YSAoZS5nLiBhIHBlcnNvbidzIHVzZXJuYW1lIGlzICJwYXNzd29yZCIpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weToKKyAg
ICAgICAgICAtIEFkZGVkIHRlc3QgY2FzZXM6CisgICAgICAgICAgICB0ZXN0X2hhc19hdXRob3Jp
emF0aW9uX2Zvcl9yZWFsbV91c2luZ19jcmVkZW50aWFsc193aXRoX3Bhc3N0eXBlKCksCisgICAg
ICAgICAgICB0ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV91c2luZ19jcmVkZW50aWFs
c193aXRoX3Bhc3N3b3JkKCksCisgICAgICAgICAgICB0ZXN0X25vdF9oYXZlX2F1dGhvcml6YXRp
b25fZm9yX3JlYWxtX3dpdGhfY3JlZGVudGlhbHNfbWlzc2luZ19wYXNzd29yZF9hbmRfcGFzc3R5
cGUoKQorICAgICAgICAgIC0gUmVwdXJwb3NlZCB0ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9y
ZWFsbSgpIHRvIHRha2UgcmVhbG0gYW5kIGNyZWRlbnRpYWwgZGF0YSB0byB1c2UKKyAgICAgICAg
ICAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGhhc19hdXRob3JpemF0aW9uX2Zv
cl9yZWFsbSgpIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4KKyAgICAgICAgICAgIGFzc2VydCB0aGUg
cmVzdWx0OyBSZW5hbWVkIHRvIF90ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV91c2lu
Z19jcmVkZW50aWFscygpIHRvCisgICAgICAgICAgICBiZXR0ZXIgcmVmbGVjdCBpdHMgbmV3IHB1
cnBvc2UuCisgICAgICAgIAorCiAyMDExLTA0LTIxICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWloYWkgUGFycGFyaXRhLgpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS5weQkocmV2aXNpb24g
ODQzNDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsMTUgQEAgY2xhc3MgU1ZOUmVwb3NpdG9yeToK
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBmaW5kX2FyZ3MgPSBbImZpbmQiLCAi
LnN1YnZlcnNpb24iLCAiLXR5cGUiLCAiZiIsICItZXhlYyIsICJncmVwIiwgIi1xIiwgcmVhbG0s
ICJ7fSIsICI7IiwgIi1wcmludCJdCiAgICAgICAgIGZpbmRfb3V0cHV0ID0gc2VsZi5ydW4oZmlu
ZF9hcmdzLCBjd2Q9aG9tZV9kaXJlY3RvcnksIGVycm9yX2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9y
ZV9lcnJvcikucnN0cmlwKCkKLSAgICAgICAgcmV0dXJuIGZpbmRfb3V0cHV0IGFuZCBvcy5wYXRo
LmlzZmlsZShvcy5wYXRoLmpvaW4oaG9tZV9kaXJlY3RvcnksIGZpbmRfb3V0cHV0KSkKKyAgICAg
ICAgaWYgbm90IGZpbmRfb3V0cHV0IG9yIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4o
aG9tZV9kaXJlY3RvcnksIGZpbmRfb3V0cHV0KSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgIyBTdWJ2ZXJzaW9uIGVpdGhlciBzdG9yZXMgdGhlIHBhc3N3b3JkIGluIHRoZSBj
cmVkZW50aWFsIGZpbGUsIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGtleSAicGFz
c3dvcmQiLAorICAgICAgICAjIG9yIHVzZXMgdGhlIHN5c3RlbSBwYXNzd29yZCBzdG9yZSAoZS5n
LiBLZXljaGFpbiBvbiBNYWMgT1MgWCkgYXMgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0
aGUga2V5ICJwYXNzdHlwZSIuCisgICAgICAgICMgV2UgYXNzdW1lIHRoYXQgdGhlc2Uga2V5cyB3
aWxsIG5vdCBjb2luY2lkZSB3aXRoIHRoZSBhY3R1YWwgY3JlZGVudGlhbCBkYXRhIChlLmcuIHRo
YXQgYSBwZXJzb24ncyB1c2VybmFtZQorICAgICAgICAjIGlzbid0ICJwYXNzd29yZCIpIHNvIHRo
YXQgd2UgY2FuIHVzZSBncmVwLgorICAgICAgICBpZiBzZWxmLnJ1bihbImdyZXAiLCAicGFzc3dv
cmQiLCBmaW5kX291dHB1dF0sIGN3ZD1ob21lX2RpcmVjdG9yeSwgcmV0dXJuX2V4aXRfY29kZT1U
cnVlKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYu
cnVuKFsiZ3JlcCIsICJwYXNzdHlwZSIsIGZpbmRfb3V0cHV0XSwgY3dkPWhvbWVfZGlyZWN0b3J5
LCByZXR1cm5fZXhpdF9jb2RlPVRydWUpID09IDAKIAogCiBjbGFzcyBTVk4oU0NNLCBTVk5SZXBv
c2l0b3J5KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3Nj
bV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jaGVja291dC9zY21fdW5pdHRlc3QucHkJKHJldmlzaW9uIDg0MzQyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExIERhbmllbCBCYXRlcyAoZGJhdGVz
QGludHVkYXRhLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC02NjcsMTkgKzY2OCw3MCBAQCBRMWRUQngwQUFBQjQyaXRnNEdsZ1lK
akd3TUREeU9ETXhNRHczNEdCCiAgICAgICAgIHNlbGYuc2NtLmhhc19hdXRob3JpemF0aW9uX2Zv
cl9yZWFsbSA9IGxhbWJkYSByZWFsbTogRmFsc2UKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMo
QXV0aGVudGljYXRpb25FcnJvciwgc2VsZi5fc2hhcmVkX3Rlc3RfY29tbWl0X3dpdGhfbWVzc2Fn
ZSkKIAotICAgIGRlZiB0ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShzZWxmKToKKyAg
ICBkZWYgdGVzdF9oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG1fdXNpbmdfY3JlZGVudGlhbHNf
d2l0aF9wYXNzdHlwZShzZWxmKToKKyAgICAgICAgY3JlZGVudGlhbHMgPSAiIiIKK0sgOAorcGFz
c3R5cGUKK1YgOAora2V5Y2hhaW4KK0sgMTUKK3N2bjpyZWFsbXN0cmluZworViAzOQorPGh0dHA6
Ly9zdm4ud2Via2l0Lm9yZzo4MD4gTWFjIE9TIEZvcmdlCitLIDgKK3VzZXJuYW1lCitWIDE3Citk
YmF0ZXNAd2Via2l0Lm9yZworRU5ECisiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYu
X3Rlc3RfaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtX3VzaW5nX2NyZWRlbnRpYWxzKFNWTi5z
dm5fc2VydmVyX3JlYWxtLCBjcmVkZW50aWFscykpCisKKyAgICBkZWYgdGVzdF9oYXNfYXV0aG9y
aXphdGlvbl9mb3JfcmVhbG1fdXNpbmdfY3JlZGVudGlhbHNfd2l0aF9wYXNzd29yZChzZWxmKToK
KyAgICAgICAgY3JlZGVudGlhbHMgPSAiIiIKK0sgMTUKK3N2bjpyZWFsbXN0cmluZworViAzOQor
PGh0dHA6Ly9zdm4ud2Via2l0Lm9yZzo4MD4gTWFjIE9TIEZvcmdlCitLIDgKK3VzZXJuYW1lCitW
IDE3CitkYmF0ZXNAd2Via2l0Lm9yZworSyA4CitwYXNzd29yZAorViA0CitibGFoCitFTkQKKyIi
IgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5fdGVzdF9oYXNfYXV0aG9yaXphdGlvbl9m
b3JfcmVhbG1fdXNpbmdfY3JlZGVudGlhbHMoU1ZOLnN2bl9zZXJ2ZXJfcmVhbG0sIGNyZWRlbnRp
YWxzKSkKKworICAgIGRlZiBfdGVzdF9oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG1fdXNpbmdf
Y3JlZGVudGlhbHMoc2VsZiwgcmVhbG0sIGNyZWRlbnRpYWxzKToKICAgICAgICAgc2NtID0gZGV0
ZWN0X3NjbV9zeXN0ZW0oc2VsZi5zdm5fY2hlY2tvdXRfcGF0aCkKICAgICAgICAgZmFrZV9ob21l
X2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoc3VmZml4PSJmYWtlX2hvbWVfZGlyIikKICAgICAgICAg
c3ZuX2NvbmZpZ19kaXJfcGF0aCA9IG9zLnBhdGguam9pbihmYWtlX2hvbWVfZGlyLCAiLnN1YnZl
cnNpb24iKQogICAgICAgICBvcy5ta2Rpcihzdm5fY29uZmlnX2Rpcl9wYXRoKQogICAgICAgICBm
YWtlX3dlYmtpdF9hdXRoX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3ZuX2NvbmZpZ19kaXJfcGF0aCwg
ImZha2Vfd2Via2l0X2F1dGhfZmlsZSIpCi0gICAgICAgIHdyaXRlX2ludG9fZmlsZV9hdF9wYXRo
KGZha2Vfd2Via2l0X2F1dGhfZmlsZSwgU1ZOLnN2bl9zZXJ2ZXJfcmVhbG0pCi0gICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShzY20uaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtKFNWTi5zdm5fc2Vy
dmVyX3JlYWxtLCBob21lX2RpcmVjdG9yeT1mYWtlX2hvbWVfZGlyKSkKKyAgICAgICAgd3JpdGVf
aW50b19maWxlX2F0X3BhdGgoZmFrZV93ZWJraXRfYXV0aF9maWxlLCBjcmVkZW50aWFscykKKyAg
ICAgICAgcmVzdWx0ID0gc2NtLmhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShyZWFsbSwgaG9t
ZV9kaXJlY3Rvcnk9ZmFrZV9ob21lX2RpcikKICAgICAgICAgb3MucmVtb3ZlKGZha2Vfd2Via2l0
X2F1dGhfZmlsZSkKICAgICAgICAgb3Mucm1kaXIoc3ZuX2NvbmZpZ19kaXJfcGF0aCkKICAgICAg
ICAgb3Mucm1kaXIoZmFrZV9ob21lX2RpcikKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAg
ZGVmIHRlc3Rfbm90X2hhdmVfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG1fd2l0aF9jcmVkZW50aWFs
c19taXNzaW5nX3Bhc3N3b3JkX2FuZF9wYXNzdHlwZShzZWxmKToKKyAgICAgICAgY3JlZGVudGlh
bHMgPSAiIiIKK0sgMTUKK3N2bjpyZWFsbXN0cmluZworViAzOQorPGh0dHA6Ly9zdm4ud2Via2l0
Lm9yZzo4MD4gTWFjIE9TIEZvcmdlCitLIDgKK3VzZXJuYW1lCitWIDE3CitkYmF0ZXNAd2Via2l0
Lm9yZworRU5ECisiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl90ZXN0X2hhc19h
dXRob3JpemF0aW9uX2Zvcl9yZWFsbV91c2luZ19jcmVkZW50aWFscyhTVk4uc3ZuX3NlcnZlcl9y
ZWFsbSwgY3JlZGVudGlhbHMpKQogCi0gICAgZGVmIHRlc3Rfbm90X2hhdmVfYXV0aG9yaXphdGlv
bl9mb3JfcmVhbG0oc2VsZik6CisgICAgZGVmIHRlc3Rfbm90X2hhdmVfYXV0aG9yaXphdGlvbl9m
b3JfcmVhbG1fd2hlbl9taXNzaW5nX2NyZWRlbnRpYWxzX2ZpbGUoc2VsZik6CiAgICAgICAgIHNj
bSA9IGRldGVjdF9zY21fc3lzdGVtKHNlbGYuc3ZuX2NoZWNrb3V0X3BhdGgpCiAgICAgICAgIGZh
a2VfaG9tZV9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHN1ZmZpeD0iZmFrZV9ob21lX2RpciIpCiAg
ICAgICAgIHN2bl9jb25maWdfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oZmFrZV9ob21lX2Rpciwg
Ii5zdWJ2ZXJzaW9uIikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90580</attachid>
            <date>2011-04-21 12:41:13 -0700</date>
            <delta_ts>2011-04-22 13:18:24 -0700</delta_ts>
            <desc>Patch and unit tests</desc>
            <filename>Bug31500_amend_042111.patch</filename>
            <type>text/plain</type>
            <size>6413</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0NTMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjggQEAKKzIwMTEtMDQtMjEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHdlYmtpdC1w
YXRjaCBsYW5kIGhhbmdzIGlmIHN2biBwcm9tcHRzIGZvciBjcmVkZW50aWFscworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MDAKKworICAgICAgICBN
YWtlIGhhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbSgpIHJldHVybiBUcnVlIG9ubHkgb25seSBp
ZiB0aGVyZSBleGlzdHMgYSBjcmVkZW50aWFscyBmaWxlCisgICAgICAgIHRoYXQgY29udGFpbnMg
ZWl0aGVyIHRoZSB3b3JkICJwYXNzd29yZCIgb3IgInBhc3N0eXBlIi4gV2UgYXNzdW1lIHRoYXQg
dGhlc2Ugd29yZHMgZG9uJ3QKKyAgICAgICAgY29pbmNpZGUgd2l0aCB0aGUgYWN0dWFsIGNyZWRl
bnRpYWwgZGF0YSAoZS5nLiBhIHBlcnNvbidzIHVzZXJuYW1lIGlzICJwYXNzd29yZCIpLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5OgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weToKKyAg
ICAgICAgICAtIEFkZGVkIHRlc3QgY2FzZXM6CisgICAgICAgICAgICB0ZXN0X2hhc19hdXRob3Jp
emF0aW9uX2Zvcl9yZWFsbV91c2luZ19jcmVkZW50aWFsc193aXRoX3Bhc3N0eXBlKCksCisgICAg
ICAgICAgICB0ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV91c2luZ19jcmVkZW50aWFs
c193aXRoX3Bhc3N3b3JkKCksCisgICAgICAgICAgICB0ZXN0X25vdF9oYXZlX2F1dGhvcml6YXRp
b25fZm9yX3JlYWxtX3dpdGhfY3JlZGVudGlhbHNfbWlzc2luZ19wYXNzd29yZF9hbmRfcGFzc3R5
cGUoKQorICAgICAgICAgIC0gUmVuYW1lZCB0ZXN0X25vdF9oYXZlX2F1dGhvcml6YXRpb25fZm9y
X3JlYWxtKCkgdG8gdGVzdF9ub3RfaGF2ZV9hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV93aGVuX21p
c3NpbmdfY3JlZGVudGlhbHNfZmlsZSgpCisgICAgICAgICAgICB0byBiZXR0ZXIgZGVzY3JpYmUg
d2hhdCBpdCdzIHRlc3RpbmcuCisgICAgICAgICAgLSBSZXB1cnBvc2VkIHRlc3RfaGFzX2F1dGhv
cml6YXRpb25fZm9yX3JlYWxtKCkgdG8gdGFrZSByZWFsbSBhbmQgY3JlZGVudGlhbCBkYXRhIHRv
IHVzZQorICAgICAgICAgICAgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgaGFzX2F1
dGhvcml6YXRpb25fZm9yX3JlYWxtKCkgc28gdGhhdCB0aGUgY2FsbGVyIGNhbgorICAgICAgICAg
ICAgYXNzZXJ0IHRoZSByZXN1bHQ7IFJlbmFtZWQgdG8gX3Rlc3RfaGFzX2F1dGhvcml6YXRpb25f
Zm9yX3JlYWxtX3VzaW5nX2NyZWRlbnRpYWxzKCkgdG8KKyAgICAgICAgICAgIGJldHRlciByZWZs
ZWN0IGl0cyBuZXcgcHVycG9zZS4KKyAgICAgICAgCisKIDIwMTEtMDQtMjEgIE9qYW4gVmFmYWkg
IDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNaWhhaSBQYXJwYXJp
dGEuCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2Nt
LnB5CShyZXZpc2lvbiA4NDM0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L3NjbS5weQkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCwxNSBAQCBjbGFzcyBT
Vk5SZXBvc2l0b3J5OgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGZpbmRfYXJn
cyA9IFsiZmluZCIsICIuc3VidmVyc2lvbiIsICItdHlwZSIsICJmIiwgIi1leGVjIiwgImdyZXAi
LCAiLXEiLCByZWFsbSwgInt9IiwgIjsiLCAiLXByaW50Il0KICAgICAgICAgZmluZF9vdXRwdXQg
PSBzZWxmLnJ1bihmaW5kX2FyZ3MsIGN3ZD1ob21lX2RpcmVjdG9yeSwgZXJyb3JfaGFuZGxlcj1F
eGVjdXRpdmUuaWdub3JlX2Vycm9yKS5yc3RyaXAoKQotICAgICAgICByZXR1cm4gZmluZF9vdXRw
dXQgYW5kIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihob21lX2RpcmVjdG9yeSwgZmluZF9v
dXRwdXQpKQorICAgICAgICBpZiBub3QgZmluZF9vdXRwdXQgb3Igbm90IG9zLnBhdGguaXNmaWxl
KG9zLnBhdGguam9pbihob21lX2RpcmVjdG9yeSwgZmluZF9vdXRwdXQpKToKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorICAgICAgICAjIFN1YnZlcnNpb24gZWl0aGVyIHN0b3JlcyB0aGUgcGFz
c3dvcmQgaW4gdGhlIGNyZWRlbnRpYWwgZmlsZSwgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBv
ZiB0aGUga2V5ICJwYXNzd29yZCIsCisgICAgICAgICMgb3IgdXNlcyB0aGUgc3lzdGVtIHBhc3N3
b3JkIHN0b3JlIChlLmcuIEtleWNoYWluIG9uIE1hYyBPUyBYKSBhcyBpbmRpY2F0ZWQgYnkgdGhl
IHByZXNlbmNlIG9mIHRoZSBrZXkgInBhc3N0eXBlIi4KKyAgICAgICAgIyBXZSBhc3N1bWUgdGhh
dCB0aGVzZSBrZXlzIHdpbGwgbm90IGNvaW5jaWRlIHdpdGggdGhlIGFjdHVhbCBjcmVkZW50aWFs
IGRhdGEgKGUuZy4gdGhhdCBhIHBlcnNvbidzIHVzZXJuYW1lCisgICAgICAgICMgaXNuJ3QgInBh
c3N3b3JkIikgc28gdGhhdCB3ZSBjYW4gdXNlIGdyZXAuCisgICAgICAgIGlmIHNlbGYucnVuKFsi
Z3JlcCIsICJwYXNzd29yZCIsIGZpbmRfb3V0cHV0XSwgY3dkPWhvbWVfZGlyZWN0b3J5LCByZXR1
cm5fZXhpdF9jb2RlPVRydWUpID09IDA6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICByZXR1cm4gc2VsZi5ydW4oWyJncmVwIiwgInBhc3N0eXBlIiwgZmluZF9vdXRwdXRdLCBjd2Q9
aG9tZV9kaXJlY3RvcnksIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgPT0gMAogCiAKIGNsYXNzIFNW
TihTQ00sIFNWTlJlcG9zaXRvcnkpOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vY2hlY2tvdXQvc2NtX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weQkocmV2aXNpb24gODQzNDIp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY21fdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAjIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEgRGFuaWVs
IEJhdGVzIChkYmF0ZXNAaW50dWRhdGEuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTY2NywxOSArNjY4LDcwIEBAIFExZFRCeDBB
QUFCNDJpdGc0R2xnWUpqR3dNRER5T0RNeE1EdzM0R0IKICAgICAgICAgc2VsZi5zY20uaGFzX2F1
dGhvcml6YXRpb25fZm9yX3JlYWxtID0gbGFtYmRhIHJlYWxtOiBGYWxzZQogICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhBdXRoZW50aWNhdGlvbkVycm9yLCBzZWxmLl9zaGFyZWRfdGVzdF9jb21t
aXRfd2l0aF9tZXNzYWdlKQogCi0gICAgZGVmIHRlc3RfaGFzX2F1dGhvcml6YXRpb25fZm9yX3Jl
YWxtKHNlbGYpOgorICAgIGRlZiB0ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV91c2lu
Z19jcmVkZW50aWFsc193aXRoX3Bhc3N0eXBlKHNlbGYpOgorICAgICAgICBjcmVkZW50aWFscyA9
ICIiIgorSyA4CitwYXNzdHlwZQorViA4CitrZXljaGFpbgorSyAxNQorc3ZuOnJlYWxtc3RyaW5n
CitWIDM5Cis8aHR0cDovL3N2bi53ZWJraXQub3JnOjgwPiBNYWMgT1MgRm9yZ2UKK0sgOAordXNl
cm5hbWUKK1YgMTcKK2RiYXRlc0B3ZWJraXQub3JnCitFTkQKKyIiIgorICAgICAgICBzZWxmLmFz
c2VydFRydWUoc2VsZi5fdGVzdF9oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVhbG1fdXNpbmdfY3Jl
ZGVudGlhbHMoU1ZOLnN2bl9zZXJ2ZXJfcmVhbG0sIGNyZWRlbnRpYWxzKSkKKworICAgIGRlZiB0
ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV91c2luZ19jcmVkZW50aWFsc193aXRoX3Bh
c3N3b3JkKHNlbGYpOgorICAgICAgICBjcmVkZW50aWFscyA9ICIiIgorSyAxNQorc3ZuOnJlYWxt
c3RyaW5nCitWIDM5Cis8aHR0cDovL3N2bi53ZWJraXQub3JnOjgwPiBNYWMgT1MgRm9yZ2UKK0sg
OAordXNlcm5hbWUKK1YgMTcKK2RiYXRlc0B3ZWJraXQub3JnCitLIDgKK3Bhc3N3b3JkCitWIDQK
K2JsYWgKK0VORAorIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl90ZXN0X2hhc19h
dXRob3JpemF0aW9uX2Zvcl9yZWFsbV91c2luZ19jcmVkZW50aWFscyhTVk4uc3ZuX3NlcnZlcl9y
ZWFsbSwgY3JlZGVudGlhbHMpKQorCisgICAgZGVmIF90ZXN0X2hhc19hdXRob3JpemF0aW9uX2Zv
cl9yZWFsbV91c2luZ19jcmVkZW50aWFscyhzZWxmLCByZWFsbSwgY3JlZGVudGlhbHMpOgogICAg
ICAgICBzY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShzZWxmLnN2bl9jaGVja291dF9wYXRoKQogICAg
ICAgICBmYWtlX2hvbWVfZGlyID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9ImZha2VfaG9tZV9k
aXIiKQogICAgICAgICBzdm5fY29uZmlnX2Rpcl9wYXRoID0gb3MucGF0aC5qb2luKGZha2VfaG9t
ZV9kaXIsICIuc3VidmVyc2lvbiIpCiAgICAgICAgIG9zLm1rZGlyKHN2bl9jb25maWdfZGlyX3Bh
dGgpCiAgICAgICAgIGZha2Vfd2Via2l0X2F1dGhfZmlsZSA9IG9zLnBhdGguam9pbihzdm5fY29u
ZmlnX2Rpcl9wYXRoLCAiZmFrZV93ZWJraXRfYXV0aF9maWxlIikKLSAgICAgICAgd3JpdGVfaW50
b19maWxlX2F0X3BhdGgoZmFrZV93ZWJraXRfYXV0aF9maWxlLCBTVk4uc3ZuX3NlcnZlcl9yZWFs
bSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNjbS5oYXNfYXV0aG9yaXphdGlvbl9mb3JfcmVh
bG0oU1ZOLnN2bl9zZXJ2ZXJfcmVhbG0sIGhvbWVfZGlyZWN0b3J5PWZha2VfaG9tZV9kaXIpKQor
ICAgICAgICB3cml0ZV9pbnRvX2ZpbGVfYXRfcGF0aChmYWtlX3dlYmtpdF9hdXRoX2ZpbGUsIGNy
ZWRlbnRpYWxzKQorICAgICAgICByZXN1bHQgPSBzY20uaGFzX2F1dGhvcml6YXRpb25fZm9yX3Jl
YWxtKHJlYWxtLCBob21lX2RpcmVjdG9yeT1mYWtlX2hvbWVfZGlyKQogICAgICAgICBvcy5yZW1v
dmUoZmFrZV93ZWJraXRfYXV0aF9maWxlKQogICAgICAgICBvcy5ybWRpcihzdm5fY29uZmlnX2Rp
cl9wYXRoKQogICAgICAgICBvcy5ybWRpcihmYWtlX2hvbWVfZGlyKQorICAgICAgICByZXR1cm4g
cmVzdWx0CisKKyAgICBkZWYgdGVzdF9ub3RfaGF2ZV9hdXRob3JpemF0aW9uX2Zvcl9yZWFsbV93
aXRoX2NyZWRlbnRpYWxzX21pc3NpbmdfcGFzc3dvcmRfYW5kX3Bhc3N0eXBlKHNlbGYpOgorICAg
ICAgICBjcmVkZW50aWFscyA9ICIiIgorSyAxNQorc3ZuOnJlYWxtc3RyaW5nCitWIDM5Cis8aHR0
cDovL3N2bi53ZWJraXQub3JnOjgwPiBNYWMgT1MgRm9yZ2UKK0sgOAordXNlcm5hbWUKK1YgMTcK
K2RiYXRlc0B3ZWJraXQub3JnCitFTkQKKyIiIgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNl
bGYuX3Rlc3RfaGFzX2F1dGhvcml6YXRpb25fZm9yX3JlYWxtX3VzaW5nX2NyZWRlbnRpYWxzKFNW
Ti5zdm5fc2VydmVyX3JlYWxtLCBjcmVkZW50aWFscykpCiAKLSAgICBkZWYgdGVzdF9ub3RfaGF2
ZV9hdXRob3JpemF0aW9uX2Zvcl9yZWFsbShzZWxmKToKKyAgICBkZWYgdGVzdF9ub3RfaGF2ZV9h
dXRob3JpemF0aW9uX2Zvcl9yZWFsbV93aGVuX21pc3NpbmdfY3JlZGVudGlhbHNfZmlsZShzZWxm
KToKICAgICAgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oc2VsZi5zdm5fY2hlY2tvdXRfcGF0
aCkKICAgICAgICAgZmFrZV9ob21lX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoc3VmZml4PSJmYWtl
X2hvbWVfZGlyIikKICAgICAgICAgc3ZuX2NvbmZpZ19kaXJfcGF0aCA9IG9zLnBhdGguam9pbihm
YWtlX2hvbWVfZGlyLCAiLnN1YnZlcnNpb24iKQo=
</data>
<flag name="review"
          id="83341"
          type_id="1"
          status="+"
          setter="ossy"
    />
          </attachment>
      

    </bug>

</bugzilla>