<?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>131415</bug_id>
          
          <creation_ts>2014-04-08 18:11:58 -0700</creation_ts>
          <short_desc>Improve support for SVN statuses in scm.py</short_desc>
          <delta_ts>2022-08-07 10:20:51 -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>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Hanson">matthew_hanson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>glenn</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998961</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Hanson">matthew_hanson</who>
    <bug_when>2014-04-08 18:11:58 -0700</bug_when>
    <thetext>When using the webkitpy.common.checkout.scm module, it is often useful to determine the status of the current checkout. The SVN class provides a solution using regular expressions, but it is not very extensible and duplicates quite a bit of code. Since the status codes correspond to a well-defined bitmask-like syntax, we can do better than resorting to calls like svn_instance.run_status_and_extract_filenames(self.status_command(), self._status_regexp(&quot;?&quot;)) when something like  svn_instance.unversioned_files() would be much more clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010885</commentid>
    <comment_count>1</comment_count>
      <attachid>231854</attachid>
    <who name="Matthew Hanson">matthew_hanson</who>
    <bug_when>2014-05-21 21:38:09 -0700</bug_when>
    <thetext>Created attachment 231854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010891</commentid>
    <comment_count>2</comment_count>
      <attachid>231854</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-21 22:20:24 -0700</bug_when>
    <thetext>Comment on attachment 231854
Patch

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

Do we really need to support all of them?

&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:31
&gt; +import codecs

Why do we need to import codecs now?

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:-241
&gt; -    def added_files(self):
&gt; -        return self.run_status_and_extract_filenames(self.status_command(), self._status_regexp(&quot;A&quot;))
&gt; -
&gt; -    def deleted_files(self):
&gt; -        return self.run_status_and_extract_filenames(self.status_command(), self._status_regexp(&quot;D&quot;))
&gt; -

Doesn&apos;t this break git?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010895</commentid>
    <comment_count>3</comment_count>
      <attachid>231854</attachid>
    <who name="Matthew Hanson">matthew_hanson</who>
    <bug_when>2014-05-21 22:29:22 -0700</bug_when>
    <thetext>Comment on attachment 231854
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/changelog.py:31
&gt;&gt; +import codecs
&gt; 
&gt; Why do we need to import codecs now?

This is an artifact. I will remove it.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:-241
&gt;&gt; -
&gt; 
&gt; Doesn&apos;t this break git?

This does not break git, because the git implementation of status_command() is not `git st`, but `git diff --name-status --no-renames HEAD`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010925</commentid>
    <comment_count>4</comment_count>
      <attachid>231854</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-22 01:40:34 -0700</bug_when>
    <thetext>Comment on attachment 231854
Patch

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

&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:6
&gt; +        self.file_statuses = [FileStatus(line, checkout_root) for line in text.split(&quot;\n&quot;) if line]

We usually prefix private variables with _.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:45
&gt; +class FileStatus(object):

FileStatus is an extremely generic name.  Please give it a more descriptive name.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:73
&gt; +    # Status convenience methods

Can&apos;t we use __getattr__ to implement these instead?

&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:175
&gt; +class Code(object):

Code is an extremely generic class name.  Please give it a more descriptive name.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:194
&gt; +ItemReplaced = Code(1, &quot;R&quot;, &quot;Item has been replaced in your working &quot;
&gt; +                            &quot;copy. This means the file was scheduled &quot;
&gt; +                            &quot;for deletion, and then a new file with &quot;
&gt; +                            &quot;the same name was scheduled for addition &quot;
&gt; +                            &quot;in its place.&quot;)

We don&apos;t align text line this with indentations.  Please indent each line with exactly 4 spaces.
Also, these descriptions are split into so many lines.  We can probably fit this into much fewer lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011006</commentid>
    <comment_count>5</comment_count>
      <attachid>231854</attachid>
    <who name="Matthew Hanson">matthew_hanson</who>
    <bug_when>2014-05-22 10:12:05 -0700</bug_when>
    <thetext>Comment on attachment 231854
Patch

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

I will send a v2 with Ryosuke&apos;s feedback incorporated.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:4
&gt; +class CheckoutStatus(object):

SVNStyleCheckoutStatus

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:6
&gt;&gt; +        self.file_statuses = [FileStatus(line, checkout_root) for line in text.split(&quot;\n&quot;) if line]
&gt; 
&gt; We usually prefix private variables with _.

Noted. I will add the _ prefix.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:45
&gt;&gt; +class FileStatus(object):
&gt; 
&gt; FileStatus is an extremely generic name.  Please give it a more descriptive name.

SVNStyleStatusCodeString

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:175
&gt;&gt; +class Code(object):
&gt; 
&gt; Code is an extremely generic class name.  Please give it a more descriptive name.

SVNStyleStatusCode

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:194
&gt;&gt; +                            &quot;in its place.&quot;)
&gt; 
&gt; We don&apos;t align text line this with indentations.  Please indent each line with exactly 4 spaces.
&gt; Also, these descriptions are split into so many lines.  We can probably fit this into much fewer lines.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011306</commentid>
    <comment_count>6</comment_count>
      <attachid>231854</attachid>
    <who name="Matthew Hanson">matthew_hanson</who>
    <bug_when>2014-05-23 11:08:59 -0700</bug_when>
    <thetext>Comment on attachment 231854
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:-241
&gt;&gt;&gt; -
&gt;&gt; 
&gt;&gt; Doesn&apos;t this break git?
&gt; 
&gt; This does not break git, because the git implementation of status_command() is not `git st`, but `git diff --name-status --no-renames HEAD`

I will move the previous SCM implementation into git.py, so as to avoid any changes when using the scm module with Git clients.

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:4
&gt;&gt; +class CheckoutStatus(object):
&gt; 
&gt; SVNStyleCheckoutStatus

EDIT: SVNCheckoutStatus

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:45
&gt;&gt;&gt; +class FileStatus(object):
&gt;&gt; 
&gt;&gt; FileStatus is an extremely generic name.  Please give it a more descriptive name.
&gt; 
&gt; SVNStyleStatusCodeString

EDIT: SVNStatusLineItem

&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:73
&gt;&gt; +    # Status convenience methods
&gt; 
&gt; Can&apos;t we use __getattr__ to implement these instead?

By this, I assume you mean that we should use the Dispatch pattern with __getattr__? We already have that, in essence, with the matches_code method. There is an alternative way to do this with setattr by defining a method like:

    def _define_matching_function(self, svn_status_code):
        def matching_function():
            return self.matches_status_code(svn_status_code)
        return matching_function

and then looping over all of the property constants and setting their snake_case representation to the function returned by _define_matching_function(). I find this hard to follow and unnecessarily complicated for a set of constants that will not be changing anytime soon.

Are you ok with keeping these properties explicitly defined?

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/checkout/scm/status.py:175
&gt;&gt;&gt; +class Code(object):
&gt;&gt; 
&gt;&gt; Code is an extremely generic class name.  Please give it a more descriptive name.
&gt; 
&gt; SVNStyleStatusCode

EDIT: SVNStatusCode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011335</commentid>
    <comment_count>7</comment_count>
      <attachid>231979</attachid>
    <who name="Matthew Hanson">matthew_hanson</who>
    <bug_when>2014-05-23 13:28:50 -0700</bug_when>
    <thetext>Created attachment 231979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011491</commentid>
    <comment_count>8</comment_count>
      <attachid>231979</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-05-23 22:58:42 -0700</bug_when>
    <thetext>Comment on attachment 231979
Patch

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

(In reply to comment #6)
&gt;
&gt; By this, I assume you mean that we should use the Dispatch pattern with __getattr__? We already have that, in essence, with the matches_code method. There is an alternative way to do this with setattr by defining a method like:
&gt; 
&gt;     def _define_matching_function(self, svn_status_code):
&gt;         def matching_function():
&gt;             return self.matches_status_code(svn_status_code)
&gt;         return matching_function
&gt; 
&gt; and then looping over all of the property constants and setting their snake_case representation to the function returned by _define_matching_function(). I find this hard to follow and unnecessarily complicated for a set of constants that will not be changing anytime soon.
&gt; 
&gt; Are you ok with keeping these properties explicitly defined?

Why do they need to be actual properties?  Can&apos;t they just be method calls in call sites?
If we did that, then we can simply iterate through the list of status codes and check whether it matches or not.

Alternatively, why can&apos;t we just export status objects and let call sites manually call matches_status_code?

I don&apos;t like the fact we&apos;re listing every status code name almost thrice in SVNCheckoutStatus, SVNStatusLineItem, and for status code objects themselves.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/svn_status.py:78
&gt; +    def _define_matching_function(self, svn_status_code):
&gt; +        def matching_function():
&gt; +            return self.matches_status_code(svn_status_code)
&gt; +        return matching_function

Where is this used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174561</commentid>
    <comment_count>9</comment_count>
      <attachid>231979</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-03-14 11:29:18 -0700</bug_when>
    <thetext>Comment on attachment 231979
Patch

This patch is too old to apply now. Can you revise against current sources?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889520</commentid>
    <comment_count>10</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-07 08:07:24 -0700</bug_when>
    <thetext>@Brent &amp; @Ryosuke - do we need this considering we have now moved to Github? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889533</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-08-07 10:20:51 -0700</bug_when>
    <thetext>Yeah, this is won&apos;t fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231854</attachid>
            <date>2014-05-21 21:38:09 -0700</date>
            <delta_ts>2014-05-23 13:28:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131415-20140521213745.patch</filename>
            <type>text/plain</type>
            <size>16486</size>
            <attacher name="Matthew Hanson">matthew_hanson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5MTc2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGM3YjA3OTBlOTk4NjU3ZmM3OTY1ZDE5MmNlNzQ1MGMw
ZjIwZDk5ZS4uZjI4Y2MwNGYyMzZjZTA0ZWM5ZTZhYmJiODU4ZjNiNTc0ZGIxYjg0YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3
IEBACisyMDE0LTA1LTIxICBNYXR0aGV3IEhhbnNvbiAgPG1hdHRoZXdfaGFuc29uQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXByb3ZlIHN1cHBvcnQgZm9yIFNWTiBzdGF0dXNlcyBpbiBzY20ucHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTQxNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHJlZ2V4LWJhc2VkIHN5c3RlbSBvZiBkZXRlcm1pbmlu
ZyBzdGF0dXNlcworICAgICAgICB3aXRoIHRoZSBjbGFzc2VzIGluIHN0YXR1cy5weSwgd2hpY2gg
cGFyc2UgYWdhaW5zdCB0aGUgc3BlYyBkZWZpbmVkIGF0CisgICAgICAgIGh0dHA6Ly9zdm5ib29r
LnJlZC1iZWFuLmNvbS9lbi8xLjcvc3ZuLnJlZi5zdm4uYy5zdGF0dXMuaHRtbC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHk6CisgICAgICAg
IGRlbGV0ZSB1bm5lZWRlZCBvdmVycmlkZXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY2hlY2tvdXQvc2NtL3NjbS5weToKKyAgICAgICAgKFNDTS5jaGVja291dF9zdGF0dXMp
OiByZXR1cm5zIGEgQ2hlY2tvdXRTdGF0dXMgb2JqZWN0CisgICAgICAgIGZvciB0aGUgaW5zdGFu
Y2UuCisgICAgICAgIChTQ00ubW9kaWZpZWRfZmlsZXMpOiBVcGRhdGVkIHRvIHVzZSBzdGF0dXMu
cHkKKyAgICAgICAgKFNDTS5hZGRlZF9maWxlcyk6IFVwZGF0ZWQgdG8gdXNlIHN0YXR1cy5weQor
ICAgICAgICAoU0NNLmRlbGV0ZWRfZmlsZXMpOiBVcGRhdGVkIHRvIHVzZSBzdGF0dXMucHkKKyAg
ICAgICAgKFNDTS5yZXBsYWNlZF9maWxlcyk6IEFkZGVkIHVzaW5nIHN0YXR1cy5weQorICAgICAg
ICAoU0NNLmNvbmZsaWN0ZWRfZmlsZXMpOiBBZGRlZCB1c2luZyBzdGF0dXMucHkKKyAgICAgICAg
KFNDTS51bnZlcnNpb25lZF9maWxlcyk6IEFkZGVkIHVzaW5nIHN0YXR1cy5weQorICAgICAgICAo
U0NNLm1pc3NpbmdfZmlsZXMpOiBBZGRlZCB1c2luZyBzdGF0dXMucHkKKyAgICAgICAgKFNDTS50
cmVlX2NvbmZsaWN0ZWRfZmlsZXMpOiBBZGRlZCB1c2luZyBzdGF0dXMucHkKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3RhdHVzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5OgorICAg
ICAgICAoU1ZOLnJldmlzaW9uc19jaGFuZ2luZ19maWxlKToKKyAgICAgICAgKFNWTi5jb25mbGlj
dGVkX2ZpbGVzKTogRGVsZXRlZCBhcyBuZXcgaW1wbGVtZW50YXRpb24gaXMKKyAgICAgICAgZm91
bmQgaW4gdGhlIGJhc2UgY2xhc3MuCisgICAgICAgIChTVk4uYWRkZWRfZmlsZXMpOiBEZWxldGVk
IGFzIG5ldyBpbXBsZW1lbnRhdGlvbiBpcworICAgICAgICBmb3VuZCBpbiB0aGUgYmFzZSBjbGFz
cy4KKyAgICAgICAgKFNWTi5kZWxldGVkX2ZpbGVzKTogRGVsZXRlZCBhcyBuZXcgaW1wbGVtZW50
YXRpb24gaXMKKyAgICAgICAgZm91bmQgaW4gdGhlIGJhc2UgY2xhc3MuCisKIDIwMTQtMDUtMjEg
IEV2YSBCYWxhenNmYWx2aSAgPGV2YWIudS1zemVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OKHIxNjkwOTIpOiBJdCBicm9rZSBydW4tanNjLXN0cmVzcyB0ZXN0
cyBvbiBub24gTWFjIHBsYXRmb3JtcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY2hlY2tvdXQvY2hhbmdlbG9nLnB5CmluZGV4IDRiYmM0NWU0ZmM3MjM4OWVmNGFmMTQ2
NDQ0ZWI4Y2RkMDVkNTkzZmQuLjFhZDc1ZGM0YjUxNzUwYWU2MThjYWI2YjViNGNhYTFiMWNmZjk1
MWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L2No
YW5nZWxvZy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9j
aGFuZ2Vsb2cucHkKQEAgLTI4LDYgKzI4LDcgQEAKICMKICMgV2ViS2l0J3MgUHl0aG9uIG1vZHVs
ZSBmb3IgcGFyc2luZyBhbmQgbW9kaWZ5aW5nIENoYW5nZUxvZyBmaWxlcwogCitpbXBvcnQgY29k
ZWNzCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJp
bmdJTwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQv
c2NtL2dpdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9n
aXQucHkKaW5kZXggZmYxMjFmM2M3Nzc5MDNiMDNlNDg3NDliZDRkZmYyZjU5OTk1ODIyZi4uYzNh
MzJmMWI1MTNkNmVkYThlZTU3MWJkY2EyY2YwYWFmMDM0NjA3YiAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5CkBAIC0yMzMsMTIgKzIz
Myw2IEBAIGNsYXNzIEdpdChTQ00sIFNWTlJlcG9zaXRvcnkpOgogICAgICAgICBzdGF0dXNfY29t
bWFuZCA9IFtzZWxmLmV4ZWN1dGFibGVfbmFtZSwgJ2RpZmYnLCAnLS1uYW1lLXN0YXR1cycsICct
LW5vLXJlbmFtZXMnLCAnLS1kaWZmLWZpbHRlcj1VJ10KICAgICAgICAgcmV0dXJuIHNlbGYucnVu
X3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc3RhdHVzX2NvbW1hbmQsIHNlbGYuX3N0YXR1
c19yZWdleHAoIlUiKSkKIAotICAgIGRlZiBhZGRlZF9maWxlcyhzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0dXNfY29t
bWFuZCgpLCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJBIikpCi0KLSAgICBkZWYgZGVsZXRlZF9maWxl
cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxl
bmFtZXMoc2VsZi5zdGF0dXNfY29tbWFuZCgpLCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJEIikpCi0K
ICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKToKICAg
ICAgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NoZWNrb3V0L3NjbS9zY20ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vc2NtLnB5CmluZGV4IGViYjZjMDkxMzk5NmMyZTIyNDdlMjBkMTA5ZTliNjEy
MTViNDE4YjAuLjFlNzFkNTkwNjUxNGU1ZTMxY2Y2N2Y2YmJkZDQ0ZTM1ODEzMTEwNGIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbS5weQpA
QCAtMzYsNiArMzYsOCBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
ZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQogCitmcm9tIC5zdGF0dXMg
aW1wb3J0IENoZWNrb3V0U3RhdHVzCisKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKIAogCkBAIC0xMjIsNiArMTI0LDQzIEBAIGNsYXNzIFNDTToKICAgICBkZWYgc3RhdHVzX2Nv
bW1hbmQoc2VsZik6CiAgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKIAor
ICAgIGRlZiBjaGVja291dF9zdGF0dXMoc2VsZiwgc3RhdHVzX2NvbW1hbmQ9Tm9uZSk6CisgICAg
ICAgIHN0YXR1c19jb21tYW5kID0gc3RhdHVzX2NvbW1hbmQgb3Igc2VsZi5zdGF0dXNfY29tbWFu
ZCgpCisgICAgICAgIHN0YXR1c190ZXh0ID0gc2VsZi5ydW4oc3RhdHVzX2NvbW1hbmQsIGN3ZD1z
ZWxmLmNoZWNrb3V0X3Jvb3QpCisgICAgICAgIHJldHVybiBDaGVja291dFN0YXR1cyhzdGF0dXNf
dGV4dCwgc2VsZi5jaGVja291dF9yb290KQorCisgICAgZGVmIG1vZGlmaWVkX2ZpbGVzKHNlbGYs
IHN0YXR1c19jb21tYW5kPU5vbmUpOgorICAgICAgICBzdGF0dXNfY29tbWFuZCA9IHN0YXR1c19j
b21tYW5kIG9yIHNlbGYuc3RhdHVzX2NvbW1hbmQoKQorICAgICAgICByZXR1cm4gc2VsZi5jaGVj
a291dF9zdGF0dXMoKS5tb2RpZmllZF9maWxlcworCisgICAgZGVmIGFkZGVkX2ZpbGVzKHNlbGYs
IHN0YXR1c19jb21tYW5kPU5vbmUpOgorICAgICAgICBzdGF0dXNfY29tbWFuZCA9IHN0YXR1c19j
b21tYW5kIG9yIHNlbGYuc3RhdHVzX2NvbW1hbmQoKQorICAgICAgICByZXR1cm4gc2VsZi5jaGVj
a291dF9zdGF0dXMoKS5hZGRlZF9maWxlcworCisgICAgZGVmIGRlbGV0ZWRfZmlsZXMoc2VsZiwg
c3RhdHVzX2NvbW1hbmQ9Tm9uZSk6CisgICAgICAgIHN0YXR1c19jb21tYW5kID0gc3RhdHVzX2Nv
bW1hbmQgb3Igc2VsZi5zdGF0dXNfY29tbWFuZCgpCisgICAgICAgIHJldHVybiBzZWxmLmNoZWNr
b3V0X3N0YXR1cygpLmRlbGV0ZWRfZmlsZXMKKworICAgIGRlZiByZXBsYWNlZF9maWxlcyhzZWxm
LCBzdGF0dXNfY29tbWFuZD1Ob25lKToKKyAgICAgICAgc3RhdHVzX2NvbW1hbmQgPSBzdGF0dXNf
Y29tbWFuZCBvciBzZWxmLnN0YXR1c19jb21tYW5kKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hl
Y2tvdXRfc3RhdHVzKCkucmVwbGFjZWRfZmlsZXMKKworICAgIGRlZiBjb25mbGljdGVkX2ZpbGVz
KHNlbGYsIHN0YXR1c19jb21tYW5kPU5vbmUpOgorICAgICAgICBzdGF0dXNfY29tbWFuZCA9IHN0
YXR1c19jb21tYW5kIG9yIHNlbGYuc3RhdHVzX2NvbW1hbmQoKQorICAgICAgICByZXR1cm4gc2Vs
Zi5jaGVja291dF9zdGF0dXMoKS5jb25mbGljdGVkX2ZpbGVzCisKKyAgICBkZWYgdW52ZXJzaW9u
ZWRfZmlsZXMoc2VsZiwgc3RhdHVzX2NvbW1hbmQ9Tm9uZSk6CisgICAgICAgIHN0YXR1c19jb21t
YW5kID0gc3RhdHVzX2NvbW1hbmQgb3Igc2VsZi5zdGF0dXNfY29tbWFuZCgpCisgICAgICAgIHJl
dHVybiBzZWxmLmNoZWNrb3V0X3N0YXR1cygpLnVudmVyc2lvbmVkX2ZpbGVzCisKKyAgICBkZWYg
bWlzc2luZ19maWxlcyhzZWxmLCBzdGF0dXNfY29tbWFuZD1Ob25lKToKKyAgICAgICAgc3RhdHVz
X2NvbW1hbmQgPSBzdGF0dXNfY29tbWFuZCBvciBzZWxmLnN0YXR1c19jb21tYW5kKCkKKyAgICAg
ICAgcmV0dXJuIHNlbGYuY2hlY2tvdXRfc3RhdHVzKCkubWlzc2luZ19maWxlcworCisgICAgZGVm
IHRyZWVfY29uZmxpY3RlZF9maWxlcyhzZWxmLCBzdGF0dXNfY29tbWFuZD1Ob25lKToKKyAgICAg
ICAgc3RhdHVzX2NvbW1hbmQgPSBzdGF0dXNfY29tbWFuZCBvciBzZWxmLnN0YXR1c19jb21tYW5k
KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tvdXRfc3RhdHVzKCkudHJlZV9jb25mbGljdGVk
X2ZpbGVzCisKICAgICBkZWYgYWRkKHNlbGYsIHBhdGgpOgogICAgICAgICBzZWxmLmFkZF9saXN0
KFtwYXRoXSkKIApAQCAtMTQ2LDEyICsxODUsNiBAQCBjbGFzcyBTQ006CiAgICAgZGVmIHJldmlz
aW9uc19jaGFuZ2luZ19maWxlKHNlbGYsIHBhdGgsIGxpbWl0PTUpOgogICAgICAgICBzZWxmLl9z
dWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCiAKLSAgICBkZWYgYWRkZWRfZmlsZXMoc2VsZik6Ci0g
ICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKLQotICAgIGRlZiBjb25mbGlj
dGVkX2ZpbGVzKHNlbGYpOgotICAgICAgICBzZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgp
Ci0KICAgICBkZWYgZGlzcGxheV9uYW1lKHNlbGYpOgogICAgICAgICBzZWxmLl9zdWJjbGFzc19t
dXN0X2ltcGxlbWVudCgpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL2NoZWNrb3V0L3NjbS9zdGF0dXMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9jaGVja291dC9zY20vc3RhdHVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1M2IzOWE1MzczMDg0ZmRkZTA4
NWVlNTJlYzllNWJlYjFmZGY5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3RhdHVzLnB5CkBAIC0wLDAgKzEsMjU5IEBACitp
bXBvcnQgb3MKKworCitjbGFzcyBDaGVja291dFN0YXR1cyhvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0ZXh0LCBjaGVja291dF9yb290KToKKyAgICAgICAgc2VsZi5maWxlX3N0YXR1
c2VzID0gW0ZpbGVTdGF0dXMobGluZSwgY2hlY2tvdXRfcm9vdCkgZm9yIGxpbmUgaW4gdGV4dC5z
cGxpdCgiXG4iKSBpZiBsaW5lXQorCisgICAgZGVmIGZpbGVzX3dpdGhfY29kZShzZWxmLCBjb2Rl
KToKKyAgICAgICAgcmV0dXJuIFtmaWxlX3N0YXR1cy5wYXRoIGZvciBmaWxlX3N0YXR1cyBpbiBz
ZWxmLmZpbGVfc3RhdHVzZXMgaWYgZmlsZV9zdGF0dXMubWF0Y2hlc19jb2RlKGNvZGUpXQorCisg
ICAgIyBDb252ZW5pZW5jZSBtZXRob2RzCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1vZGlmaWVk
X2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlc193aXRoX2NvZGUoSXRlbU1v
ZGlmaWVkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFkZGVkX2ZpbGVzKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5maWxlc193aXRoX2NvZGUoSXRlbUFkZGVkKQorCisgICAgQHByb3Bl
cnR5CisgICAgZGVmIGRlbGV0ZWRfZmlsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZp
bGVzX3dpdGhfY29kZShJdGVtRGVsZXRlZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXBs
YWNlZF9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNfd2l0aF9jb2RlKEl0
ZW1SZXBsYWNlZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb25mbGljdGVkX2ZpbGVzKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlc193aXRoX2NvZGUoSXRlbUNvbmZsaWN0ZWQp
CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdW52ZXJzaW9uZWRfZmlsZXMoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLmZpbGVzX3dpdGhfY29kZShJdGVtVW52ZXJzaW9uZWQpCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgbWlzc2luZ19maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuZmlsZXNfd2l0aF9jb2RlKEl0ZW1NaXNzaW5nKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IHRyZWVfY29uZmxpY3RlZF9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNf
d2l0aF9jb2RlKEl0ZW1UcmVlQ29uZmxpY3RlZCkKKworCitjbGFzcyBGaWxlU3RhdHVzKG9iamVj
dCk6CisgICAgTnVtYmVyT2ZDb2x1bW5zID0gNworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxp
bmUsIGNoZWNrb3V0X3Jvb3QpOgorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lCisgICAgICAgIHNl
bGYuY2hlY2tvdXRfcm9vdCA9IGNoZWNrb3V0X3Jvb3QKKworICAgICAgICBwaXZvdF9pbmRleCA9
IHNlbGYuTnVtYmVyT2ZDb2x1bW5zCisgICAgICAgIHNlbGYuc3RhdHVzZXMgPSBsaW5lWzA6cGl2
b3RfaW5kZXhdCisgICAgICAgIHNlbGYucGF0aCA9IHNlbGYuX3BhdGhfZm9yKGxpbmVbcGl2b3Rf
aW5kZXg6XS5zdHJpcCgpKQorCisgICAgZGVmIG1hdGNoZXNfY29kZShzZWxmLCBjb2RlKToKKyAg
ICAgICAgaWYgbm90IHNlbGYuc3RhdHVzZXM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgICAgICByZXR1cm4gY29kZS5tYXRjaGVzKHNlbGYpCisKKyAgICBkZWYgX3BhdGhfZm9yKHNl
bGYsIHBhdGgpOgorICAgICAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIGlmIHBhdGhbMF0gPT0gJy8nOgorICAgICAgICAgICAgYWJzb2x1dGVfcGF0aCA9IG9z
LnBhdGguam9pbihzZWxmLmNoZWNrb3V0X3Jvb3QsIHBhdGhbMTpdKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgYWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgcGF0
aCkKKworICAgICAgICByZXR1cm4gb3MucGF0aC5hYnNwYXRoKGFic29sdXRlX3BhdGgpCisKKyAg
ICAjIFN0YXR1cyBjb252ZW5pZW5jZSBtZXRob2RzCisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0
ZW1fbm90X21vZGlmaWVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX2NvZGUo
SXRlbU5vdE1vZGlmaWVkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1fYWRkZWQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfY29kZShJdGVtQWRkZWQpCisKKyAgICBA
cHJvcGVydHkKKyAgICBkZWYgaXRlbV9kZWxldGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5tYXRjaGVzX2NvZGUoSXRlbURlbGV0ZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXRl
bV9tb2RpZmllZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19jb2RlKEl0ZW1N
b2RpZmllZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX3JlcGxhY2VkKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX2NvZGUoSXRlbVJlcGxhY2VkKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIGl0ZW1fY29uZmxpY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYubWF0Y2hlc19jb2RlKEl0ZW1Db25mbGljdGVkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IGl0ZW1fZXh0ZXJuYWxzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX2NvZGUo
SXRlbUV4dGVybmFscykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX2lnbm9yZWQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfY29kZShJdGVtSWdub3JlZCkKKworICAg
IEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX3VudmVyc2lvbmVkKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5tYXRjaGVzX2NvZGUoSXRlbVVudmVyc2lvbmVkKQorCisgICAgQHByb3BlcnR5Cisg
ICAgZGVmIGl0ZW1fbWlzc2luZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19j
b2RlKEl0ZW1NaXNzaW5nKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1fdHlwZV9tb2Rp
ZmllZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19jb2RlKEl0ZW1UeXBlTW9k
aWZpZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJvcGVydGllc19ub3RfbW9kaWZpZWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfY29kZShQcm9wZXJ0aWVzTm90TW9k
aWZpZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJvcGVydGllc19tb2RpZmllZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19jb2RlKFByb3BlcnRpZXNNb2RpZmllZCkK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcm9wZXJ0aWVzX2NvbmZsaWN0ZWQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfY29kZShQcm9wZXJ0aWVzQ29uZmxpY3RlZCkKKwor
ICAgIEBwcm9wZXJ0eQorICAgIGRlZiBub19oaXN0b3J5X3NjaGVkdWxlZChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYubWF0Y2hlc19jb2RlKE5vSGlzdG9yeVNjaGVkdWxlZCkKKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiBoaXN0b3J5X3NjaGVkdWxlZChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYubWF0Y2hlc19jb2RlKEhpc3RvcnlTY2hlZHVsZWQpCisKKyAgICBAcHJvcGVydHkKKyAg
ICBkZWYgaXRlbV9ub3Rfc3dpdGNoZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNo
ZXNfY29kZShJdGVtTm90U3dpdGNoZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXRlbV9z
d2l0Y2hlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19jb2RlKEl0ZW1Td2l0
Y2hlZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX25vdF9sb2NrZWQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfY29kZShJdGVtTm90TG9ja2VkKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIGl0ZW1fbG9ja2VkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5t
YXRjaGVzX2NvZGUoSXRlbUxvY2tlZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX2xv
Y2tlZF9ieV9vdGhlcl91c2VyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX2Nv
ZGUoSXRlbUxvY2tlZEJ5T3RoZXJVc2VyKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1f
bG9ja19zdG9sZW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfY29kZShJdGVt
TG9ja1N0b2xlbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX2xvY2tfYnJva2VuKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX2NvZGUoSXRlbUxvY2tCcm9rZW4pCisK
KyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXRlbV90cmVlX25vdF9jb25mbGljdGVkKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX2NvZGUoSXRlbU5vdFRyZWVDb25mbGljdGVkKQor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1fdHJlZV9jb25mbGljdGVkKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX2NvZGUoSXRlbVRyZWVDb25mbGljdGVkKQorCisKK2Ns
YXNzIENvZGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29sdW1uLCBjb2RlLCBk
ZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYuY29sdW1uX2luZGV4ID0gY29sdW1uIC0gMQorICAg
ICAgICBzZWxmLmNvZGUgPSBjb2RlCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbgorCisgICAgZGVmIG1hdGNoZXMoc2VsZiwgc3RhdHVzX2l0ZW0pOgorICAgICAgICByZXR1
cm4gc2VsZi5jb2RlID09IHN0YXR1c19pdGVtLnN0YXR1c2VzW3NlbGYuY29sdW1uX2luZGV4XQor
CisjIFRoZXNlIGNvZGVzIGFyZSBkZXJpdmVkIGZyb20gaHR0cDovL3N2bmJvb2sucmVkLWJlYW4u
Y29tL2VuLzEuNy9zdm4ucmVmLnN2bi5jLnN0YXR1cy5odG1sLgorIyBUaGUgZmlyc3QgY29sdW1u
LgorSXRlbU5vdE1vZGlmaWVkID0gQ29kZSgxLCAiICIsICJObyBtb2RpZmljYXRpb25zLiIpCitJ
dGVtQWRkZWQgPSBDb2RlKDEsICJBIiwgIkl0ZW0gaXMgc2NoZWR1bGVkIGZvciBhZGRpdGlvbi4i
KQorSXRlbURlbGV0ZWQgPSBDb2RlKDEsICJEIiwgIkl0ZW0gaXMgc2NoZWR1bGVkIGZvciBkZWxl
dGlvbi4iKQorSXRlbU1vZGlmaWVkID0gQ29kZSgxLCAiTSIsICJJdGVtIGhhcyBiZWVuIG1vZGlm
aWVkLiIpCitJdGVtUmVwbGFjZWQgPSBDb2RlKDEsICJSIiwgIkl0ZW0gaGFzIGJlZW4gcmVwbGFj
ZWQgaW4geW91ciB3b3JraW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29weS4g
VGhpcyBtZWFucyB0aGUgZmlsZSB3YXMgc2NoZWR1bGVkICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZm9yIGRlbGV0aW9uLCBhbmQgdGhlbiBhIG5ldyBmaWxlIHdpdGggIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0aGUgc2FtZSBuYW1lIHdhcyBzY2hlZHVsZWQgZm9yIGFk
ZGl0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gaXRzIHBsYWNlLiIpCitJ
dGVtQ29uZmxpY3RlZCA9IENvZGUoMSwgIkMiLCAiVGhlIGNvbnRlbnRzIChhcyBvcHBvc2VkIHRv
IHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcykgb2YgdGhl
IGl0ZW0gY29uZmxpY3Qgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXBk
YXRlcyByZWNlaXZlZCBmcm9tIHRoZSByZXBvc2l0b3J5LiIpCitJdGVtRXh0ZXJuYWxzID0gQ29k
ZSgxLCAiWCIsICJJdGVtIGlzIHByZXNlbnQgYmVjYXVzZSBvZiBhbiBleHRlcm5hbHMgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmaW5pdGlvbi4iKQorSXRlbUlnbm9yZWQgPSBD
b2RlKDEsICJJIiwgIkl0ZW0gaXMgYmVpbmcgaWdub3JlZCAoZS5nLiwgd2l0aCB0aGUgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInN2bjppZ25vcmUgcHJvcGVydHkpLiIpCitJdGVtVW52
ZXJzaW9uZWQgPSBDb2RlKDEsICI/IiwgIkl0ZW0gaXMgbm90IHVuZGVyIHZlcnNpb24gY29udHJv
bC4iKQorSXRlbU1pc3NpbmcgPSBDb2RlKDEsICIhIiwgIkl0ZW0gaXMgbWlzc2luZyAoZS5nLiwg
eW91IG1vdmVkIG9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVkIGl0IHdp
dGhvdXQgdXNpbmcgc3ZuKS4gVGhpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxz
byBpbmRpY2F0ZXMgdGhhdCBhIGRpcmVjdG9yeSBpcyAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaW5jb21wbGV0ZSAoYSBjaGVja291dCBvciB1cGRhdGUgd2FzICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJpbnRlcnJ1cHRlZCkuIikKK0l0ZW1UeXBlTW9kaWZpZWQgPSBDb2Rl
KDEsICJ+IiwgIkl0ZW0gaXMgdmVyc2lvbmVkIGFzIG9uZSBraW5kIG9mICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCAoZmlsZSwgZGlyZWN0b3J5LCBsaW5rKSwgIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5
IGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlmZmVyZW50IGtpbmQgb2Yg
b2JqZWN0LiIpCisKKyMgVGhlIHNlY29uZCBjb2x1bW4uCitQcm9wZXJ0aWVzTm90TW9kaWZpZWQg
PSBDb2RlKDIsICIgIiwgIk5vIG1vZGlmaWNhdGlvbnMuIikKK1Byb3BlcnRpZXNNb2RpZmllZCA9
IENvZGUoMiwgIk0iLCAiUHJvcGVydGllcyBmb3IgdGhpcyBpdGVtIGhhdmUgIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJiZWVuIG1vZGlmaWVkLiIpCitQcm9wZXJ0aWVzQ29u
ZmxpY3RlZCA9IENvZGUoMiwgIkMiLCAiUHJvcGVydGllcyBmb3IgdGhpcyBpdGVtIGFyZSBpbiAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uZmxpY3Qgd2l0aCBwcm9w
ZXJ0eSB1cGRhdGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWNl
aXZlZCBmcm9tIHRoZSByZXBvc2l0b3J5LiIpCisKKyMgVGhlIHRoaXJkIGNvbHVtbi4KK0l0ZW1O
b3RMb2NrZWQgPSBDb2RlKDMsICIgIiwgIkl0ZW0gaXMgbm90IGxvY2tlZC4iKQorSXRlbUxvY2tl
ZCA9IENvZGUoMywgIkwiLCAiSXRlbSBpcyBsb2NrZWQuIikKKworIyBUaGUgZm91cnRoIGNvbHVt
bi4KK05vSGlzdG9yeVNjaGVkdWxlZCA9IENvZGUoNCwgIiAiLCAiTm8gaGlzdG9yeSBzY2hlZHVs
ZWQgd2l0aCBjb21taXQuIikKK0hpc3RvcnlTY2hlZHVsZWQgPSBDb2RlKDQsICIrIiwgIkhpc3Rv
cnkgc2NoZWR1bGVkIHdpdGggY29tbWl0LiIpCisKKyMgVGhlIGZpZnRoIGNvbHVtbi4KK0l0ZW1O
b3RTd2l0Y2hlZCA9IENvZGUoNSwgIiAiLCAiSXRlbSBpcyBhIGNoaWxkIG9mIGl0cyBwYXJlbnQg
ZGlyZWN0b3J5LiIpCitJdGVtU3dpdGNoZWQgPSBDb2RlKDUsICJTIiwgIkl0ZW0gaXMgc3dpdGNo
ZWQuIikKKworIyBUaGUgc2l4dGggY29sdW1uLgorSXRlbU5vdExvY2tlZCA9IENvZGUoNiwgIiAi
LCAiV2hlbiAtLXNob3ctdXBkYXRlcyAoLXUpIGlzIHVzZWQsIHRoaXMgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAibWVhbnMgdGhlIGZpbGUgaXMgbm90IGxvY2tlZC4gSWYgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1zaG93LXVwZGF0ZXMgKC11KSBpcyBub3QgdXNl
ZCwgdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXJlbHkgbWVhbnMgdGhh
dCB0aGUgZmlsZSBpcyBub3QgbG9ja2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImluIHRoaXMgd29ya2luZyBjb3B5LiIpCitJdGVtTG9ja2VkID0gQ29kZSg2LCAiSyIsICJGaWxl
IGlzIGxvY2tlZCBpbiB0aGlzIHdvcmtpbmcgY29weS4iKQorSXRlbUxvY2tlZEJ5T3RoZXJVc2Vy
ID0gQ29kZSg2LCAiTyIsICJGaWxlIGlzIGxvY2tlZCBlaXRoZXIgYnkgYW5vdGhlciAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZXIgb3IgaW4gYW5vdGhlciB3b3Jr
aW5nIGNvcHkuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBh
cHBlYXJzIG9ubHkgd2hlbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ii0tc2hvdy11cGRhdGVzICgtdSkgaXMgdXNlZC4iKQorSXRlbUxvY2tTdG9sZW4gPSBDb2RlKDYs
ICJUIiwgIkZpbGUgd2FzIGxvY2tlZCBpbiB0aGlzIHdvcmtpbmcgY29weSwgIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImJ1dCB0aGUgbG9jayBoYXMgYmVlbiBcInN0b2xlblwiIGFu
ZCBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZC4gVGhlIGZpbGUg
aXMgY3VycmVudGx5IGxvY2tlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4g
dGhlIHJlcG9zaXRvcnkuIFRoaXMgYXBwZWFycyBvbmx5ICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ3aGVuIC0tc2hvdy11cGRhdGVzICgtdSkgaXMgdXNlZC4iKQorSXRlbUxvY2tC
cm9rZW4gPSBDb2RlKDYsICJCIiwgIkZpbGUgd2FzIGxvY2tlZCBpbiB0aGlzIHdvcmtpbmcgY29w
eSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCB0aGUgbG9jayBoYXMgYmVl
biBcImJyb2tlblwiIGFuZCBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52
YWxpZC4gVGhlIGZpbGUgaXMgbm8gbG9uZ2VyIGxvY2tlZC4gIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRoaXMgYXBwZWFycyBvbmx5IHdoZW4gLS1zaG93LXVwZGF0ZXMgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIigtdSkgaXMgdXNlZC4iKQorCisjIFRoZSBzZXZl
bnRoIGNvbHVtbi4KK0l0ZW1Ob3RUcmVlQ29uZmxpY3RlZCA9IENvZGUoNywgIiAiLCAiSXRlbSBp
cyBub3QgdGhlIHZpY3RpbSBvZiBhIHRyZWUgY29uZmxpY3QuIikKK0l0ZW1UcmVlQ29uZmxpY3Rl
ZCA9IENvZGUoNywgIkMiLCAiSXRlbSBpcyB0aGUgdmljdGltIG9mIGEgdHJlZSBjb25mbGljdC4i
KQorCisjRklYTUU6IEFkZCBzdXBwb3J0IGZvciB0aGUgb3B0aW9uYWwgbmludGggY29sdW1uIGFu
ZCB0aGUgLS1zaG93LXVwZGF0ZSBmbGFnIGluIGdlbmVyYWwuCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weQppbmRleCBiMmE1Yzk1MWMxY2Ix
ODViYjg1YzFkYjRmODJhZDUyYmRmODhhMTk3Li4xMmMzMzE4MDljOGFlNWE2MGQ0MjEzOGY5MTdl
OTBiZWI4ZmRiMGRjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9j
aGVja291dC9zY20vc3ZuLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2No
ZWNrb3V0L3NjbS9zdm4ucHkKQEAgLTIzNywxNSArMjM3LDYgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZO
UmVwb3NpdG9yeSk6CiAgICAgICAgICAgICByZXZpc2lvbnMuYXBwZW5kKGludChtYXRjaC5ncm91
cCgncmV2aXNpb24nKSkpCiAgICAgICAgIHJldHVybiByZXZpc2lvbnMKIAotICAgIGRlZiBjb25m
bGljdGVkX2ZpbGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5ydW5fc3RhdHVzX2FuZF9l
eHRyYWN0X2ZpbGVuYW1lcyhzZWxmLnN0YXR1c19jb21tYW5kKCksIHNlbGYuX3N0YXR1c19yZWdl
eHAoIkMiKSkKLQotICAgIGRlZiBhZGRlZF9maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0dXNfY29tbWFuZCgp
LCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJBIikpCi0KLSAgICBkZWYgZGVsZXRlZF9maWxlcyhzZWxm
KToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMo
c2VsZi5zdGF0dXNfY29tbWFuZCgpLCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJEIikpCi0KICAgICBA
c3RhdGljbWV0aG9kCiAgICAgZGVmIHN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKToKICAgICAgICAg
cmV0dXJuIEZhbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231979</attachid>
            <date>2014-05-23 13:28:50 -0700</date>
            <delta_ts>2016-03-14 11:29:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131415-20140523132827.patch</filename>
            <type>text/plain</type>
            <size>15642</size>
            <attacher name="Matthew Hanson">matthew_hanson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5MTc2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGM3YjA3OTBlOTk4NjU3ZmM3OTY1ZDE5MmNlNzQ1MGMw
ZjIwZDk5ZS4uYzk5ZGUzMTI0ODZhY2I0ZTA3Mjg5ZGY5YjQ2NGQ4MTk2ZmE5YjYxYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDE0LTA1LTIxICBNYXR0aGV3IEhhbnNvbiAgPG1hdHRoZXdfaGFuc29uQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXByb3ZlIHN1cHBvcnQgZm9yIFNWTiBzdGF0dXNlcyBpbiBzY20ucHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTQxNQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggcmVwbGFjZXMgdGhlIGV4aXN0aW5nIHJlZ2V4LWJhc2VkIHN5c3RlbSBvZiBkZXRlcm1pbmlu
ZyBzdGF0dXNlcworICAgICAgICB3aXRoIHRoZSBjbGFzc2VzIGluIHN0YXR1cy5weSwgd2hpY2gg
cGFyc2UgYWdhaW5zdCB0aGUgc3BlYyBkZWZpbmVkIGF0CisgICAgICAgIGh0dHA6Ly9zdm5ib29r
LnJlZC1iZWFuLmNvbS9lbi8xLjcvc3ZuLnJlZi5zdm4uYy5zdGF0dXMuaHRtbC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHk6CisgICAgICAg
IChTQ00uY2hlY2tvdXRfc3RhdHVzKTogcmV0dXJucyBhbiBTVk5DaGVja291dFN0YXR1cyBvYmpl
Y3QKKyAgICAgICAgZm9yIHRoZSBpbnN0YW5jZS4KKyAgICAgICAgKFNDTS5tb2RpZmllZF9maWxl
cyk6IFVwZGF0ZWQgdG8gdXNlIHN0YXR1cy5weQorICAgICAgICAoU0NNLmFkZGVkX2ZpbGVzKTog
VXBkYXRlZCB0byB1c2Ugc3RhdHVzLnB5CisgICAgICAgIChTQ00uZGVsZXRlZF9maWxlcyk6IFVw
ZGF0ZWQgdG8gdXNlIHN0YXR1cy5weQorICAgICAgICAoU0NNLnJlcGxhY2VkX2ZpbGVzKTogQWRk
ZWQgdXNpbmcgc3RhdHVzLnB5CisgICAgICAgIChTQ00uY29uZmxpY3RlZF9maWxlcyk6IEFkZGVk
IHVzaW5nIHN0YXR1cy5weQorICAgICAgICAoU0NNLnVudmVyc2lvbmVkX2ZpbGVzKTogQWRkZWQg
dXNpbmcgc3RhdHVzLnB5CisgICAgICAgIChTQ00ubWlzc2luZ19maWxlcyk6IEFkZGVkIHVzaW5n
IHN0YXR1cy5weQorICAgICAgICAoU0NNLnRyZWVfY29uZmxpY3RlZF9maWxlcyk6IEFkZGVkIHVz
aW5nIHN0YXR1cy5weQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0
L3NjbS9zdGF0dXMucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2NoZWNrb3V0L3NjbS9zdm4ucHk6CisgICAgICAgIChTVk4ucmV2aXNpb25zX2NoYW5naW5nX2Zp
bGUpOgorICAgICAgICAoU1ZOLmNvbmZsaWN0ZWRfZmlsZXMpOiBEZWxldGVkIGFzIG5ldyBpbXBs
ZW1lbnRhdGlvbiBpcworICAgICAgICBmb3VuZCBpbiB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAg
KFNWTi5hZGRlZF9maWxlcyk6IERlbGV0ZWQgYXMgbmV3IGltcGxlbWVudGF0aW9uIGlzCisgICAg
ICAgIGZvdW5kIGluIHRoZSBiYXNlIGNsYXNzLgorICAgICAgICAoU1ZOLmRlbGV0ZWRfZmlsZXMp
OiBEZWxldGVkIGFzIG5ldyBpbXBsZW1lbnRhdGlvbiBpcworICAgICAgICBmb3VuZCBpbiB0aGUg
YmFzZSBjbGFzcy4KKwogMjAxNC0wNS0yMSAgRXZhIEJhbGF6c2ZhbHZpICA8ZXZhYi51LXN6ZWdl
ZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE2OTA5Mik6IEl0
IGJyb2tlIHJ1bi1qc2Mtc3RyZXNzIHRlc3RzIG9uIG5vbiBNYWMgcGxhdGZvcm1zCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3NjbS5weQppbmRleCBl
YmI2YzA5MTM5OTZjMmUyMjQ3ZTIwZDEwOWU5YjYxMjE1YjQxOGIwLi5lZmQwYzY5NmQ0Zjk1YWQ2
NTY4ODAxNWYyZjRlOGRiOTQ5MTg0ZGU2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jaGVja291dC9zY20vc2NtLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zY20ucHkKQEAgLTE1Miw2ICsxNTIsMjQgQEAgY2xhc3Mg
U0NNOgogICAgIGRlZiBjb25mbGljdGVkX2ZpbGVzKHNlbGYpOgogICAgICAgICBzZWxmLl9zdWJj
bGFzc19tdXN0X2ltcGxlbWVudCgpCiAKKyAgICBkZWYgbW9kaWZpZWRfZmlsZXMoc2VsZik6Cisg
ICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKKworICAgIGRlZiBkZWxldGVk
X2ZpbGVzKHNlbGYpOgorICAgICAgICBzZWxmLl9zdWJjbGFzc19tdXN0X2ltcGxlbWVudCgpCisK
KyAgICBkZWYgcmVwbGFjZWRfZmlsZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3N1YmNsYXNzX211
c3RfaW1wbGVtZW50KCkKKworICAgIGRlZiB1bnZlcnNpb25lZF9maWxlcyhzZWxmKToKKyAgICAg
ICAgc2VsZi5fc3ViY2xhc3NfbXVzdF9pbXBsZW1lbnQoKQorCisgICAgZGVmIG1pc3NpbmdfZmls
ZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKKworICAg
IGRlZiB0cmVlX2NvbmZsaWN0ZWRfZmlsZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3N1YmNsYXNz
X211c3RfaW1wbGVtZW50KCkKKwogICAgIGRlZiBkaXNwbGF5X25hbWUoc2VsZik6CiAgICAgICAg
IHNlbGYuX3N1YmNsYXNzX211c3RfaW1wbGVtZW50KCkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtL3N2bi5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm4ucHkKaW5kZXggYjJhNWM5NTFjMWNiMTg1
YmI4NWMxZGI0ZjgyYWQ1MmJkZjg4YTE5Ny4uNjU0N2Q4NGM3MzJhYWVlYWE5YWQ3NzFmMjU2OGVi
MDQ3N2U2NzliMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hl
Y2tvdXQvc2NtL3N2bi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc3ZuLnB5CkBAIC00MSw2ICs0MSw4IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIGZyb20gd2Via2l0
cHkuY29tbW9uLmNvbmZpZy51cmxzIGltcG9ydCBzdm5fc2VydmVyX2hvc3QsIHN2bl9zZXJ2ZXJf
cmVhbG0KIAogZnJvbSAuc2NtIGltcG9ydCBBdXRoZW50aWNhdGlvbkVycm9yLCBTQ00sIGNvbW1p
dF9lcnJvcl9oYW5kbGVyCitmcm9tIC5zdm5fc3RhdHVzIGltcG9ydCBTVk5DaGVja291dFN0YXR1
cworCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtMjE0LDYgKzIx
Niw0MyBAQCBjbGFzcyBTVk4oU0NNLCBTVk5SZXBvc2l0b3J5KToKICAgICBkZWYgZXhpc3RzKHNl
bGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gbm90IHNlbGYuX3J1bl9zdm4oWyJpbmZvIiwgcGF0
aF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSwgZGVjb2RlX291dHB1dD1GYWxzZSkKIAorICAgIGRl
ZiBjaGVja291dF9zdGF0dXMoc2VsZiwgc3RhdHVzX2NvbW1hbmQ9Tm9uZSk6CisgICAgICAgIHN0
YXR1c19jb21tYW5kID0gc3RhdHVzX2NvbW1hbmQgb3Igc2VsZi5zdGF0dXNfY29tbWFuZCgpCisg
ICAgICAgIHN0YXR1c190ZXh0ID0gc2VsZi5ydW4oc3RhdHVzX2NvbW1hbmQsIGN3ZD1zZWxmLmNo
ZWNrb3V0X3Jvb3QpCisgICAgICAgIHJldHVybiBTVk5DaGVja291dFN0YXR1cyhzdGF0dXNfdGV4
dCwgc2VsZi5jaGVja291dF9yb290KQorCisgICAgZGVmIG1vZGlmaWVkX2ZpbGVzKHNlbGYsIHN0
YXR1c19jb21tYW5kPU5vbmUpOgorICAgICAgICBzdGF0dXNfY29tbWFuZCA9IHN0YXR1c19jb21t
YW5kIG9yIHNlbGYuc3RhdHVzX2NvbW1hbmQoKQorICAgICAgICByZXR1cm4gc2VsZi5jaGVja291
dF9zdGF0dXMoKS5tb2RpZmllZF9maWxlcworCisgICAgZGVmIGFkZGVkX2ZpbGVzKHNlbGYsIHN0
YXR1c19jb21tYW5kPU5vbmUpOgorICAgICAgICBzdGF0dXNfY29tbWFuZCA9IHN0YXR1c19jb21t
YW5kIG9yIHNlbGYuc3RhdHVzX2NvbW1hbmQoKQorICAgICAgICByZXR1cm4gc2VsZi5jaGVja291
dF9zdGF0dXMoKS5hZGRlZF9maWxlcworCisgICAgZGVmIGRlbGV0ZWRfZmlsZXMoc2VsZiwgc3Rh
dHVzX2NvbW1hbmQ9Tm9uZSk6CisgICAgICAgIHN0YXR1c19jb21tYW5kID0gc3RhdHVzX2NvbW1h
bmQgb3Igc2VsZi5zdGF0dXNfY29tbWFuZCgpCisgICAgICAgIHJldHVybiBzZWxmLmNoZWNrb3V0
X3N0YXR1cygpLmRlbGV0ZWRfZmlsZXMKKworICAgIGRlZiByZXBsYWNlZF9maWxlcyhzZWxmLCBz
dGF0dXNfY29tbWFuZD1Ob25lKToKKyAgICAgICAgc3RhdHVzX2NvbW1hbmQgPSBzdGF0dXNfY29t
bWFuZCBvciBzZWxmLnN0YXR1c19jb21tYW5kKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tv
dXRfc3RhdHVzKCkucmVwbGFjZWRfZmlsZXMKKworICAgIGRlZiBjb25mbGljdGVkX2ZpbGVzKHNl
bGYsIHN0YXR1c19jb21tYW5kPU5vbmUpOgorICAgICAgICBzdGF0dXNfY29tbWFuZCA9IHN0YXR1
c19jb21tYW5kIG9yIHNlbGYuc3RhdHVzX2NvbW1hbmQoKQorICAgICAgICByZXR1cm4gc2VsZi5j
aGVja291dF9zdGF0dXMoKS5jb25mbGljdGVkX2ZpbGVzCisKKyAgICBkZWYgdW52ZXJzaW9uZWRf
ZmlsZXMoc2VsZiwgc3RhdHVzX2NvbW1hbmQ9Tm9uZSk6CisgICAgICAgIHN0YXR1c19jb21tYW5k
ID0gc3RhdHVzX2NvbW1hbmQgb3Igc2VsZi5zdGF0dXNfY29tbWFuZCgpCisgICAgICAgIHJldHVy
biBzZWxmLmNoZWNrb3V0X3N0YXR1cygpLnVudmVyc2lvbmVkX2ZpbGVzCisKKyAgICBkZWYgbWlz
c2luZ19maWxlcyhzZWxmLCBzdGF0dXNfY29tbWFuZD1Ob25lKToKKyAgICAgICAgc3RhdHVzX2Nv
bW1hbmQgPSBzdGF0dXNfY29tbWFuZCBvciBzZWxmLnN0YXR1c19jb21tYW5kKCkKKyAgICAgICAg
cmV0dXJuIHNlbGYuY2hlY2tvdXRfc3RhdHVzKCkubWlzc2luZ19maWxlcworCisgICAgZGVmIHRy
ZWVfY29uZmxpY3RlZF9maWxlcyhzZWxmLCBzdGF0dXNfY29tbWFuZD1Ob25lKToKKyAgICAgICAg
c3RhdHVzX2NvbW1hbmQgPSBzdGF0dXNfY29tbWFuZCBvciBzZWxmLnN0YXR1c19jb21tYW5kKCkK
KyAgICAgICAgcmV0dXJuIHNlbGYuY2hlY2tvdXRfc3RhdHVzKCkudHJlZV9jb25mbGljdGVkX2Zp
bGVzCisKICAgICBkZWYgY2hhbmdlZF9maWxlcyhzZWxmLCBnaXRfY29tbWl0PU5vbmUpOgogICAg
ICAgICBzdGF0dXNfY29tbWFuZCA9IFtzZWxmLmV4ZWN1dGFibGVfbmFtZSwgInN0YXR1cyJdCiAg
ICAgICAgIHN0YXR1c19jb21tYW5kLmV4dGVuZChzZWxmLl9wYXRjaF9kaXJlY3RvcmllcykKQEAg
LTIzNywxNSArMjc2LDYgQEAgY2xhc3MgU1ZOKFNDTSwgU1ZOUmVwb3NpdG9yeSk6CiAgICAgICAg
ICAgICByZXZpc2lvbnMuYXBwZW5kKGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkpCiAgICAg
ICAgIHJldHVybiByZXZpc2lvbnMKIAotICAgIGRlZiBjb25mbGljdGVkX2ZpbGVzKHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi5ydW5fc3RhdHVzX2FuZF9leHRyYWN0X2ZpbGVuYW1lcyhzZWxm
LnN0YXR1c19jb21tYW5kKCksIHNlbGYuX3N0YXR1c19yZWdleHAoIkMiKSkKLQotICAgIGRlZiBh
ZGRlZF9maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuX3N0YXR1c19hbmRfZXh0
cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0dXNfY29tbWFuZCgpLCBzZWxmLl9zdGF0dXNfcmVnZXhw
KCJBIikpCi0KLSAgICBkZWYgZGVsZXRlZF9maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYucnVuX3N0YXR1c19hbmRfZXh0cmFjdF9maWxlbmFtZXMoc2VsZi5zdGF0dXNfY29tbWFuZCgp
LCBzZWxmLl9zdGF0dXNfcmVnZXhwKCJEIikpCi0KICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVm
IHN1cHBvcnRzX2xvY2FsX2NvbW1pdHMoKToKICAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20vc3ZuX3N0YXR1
cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9zdm5fc3Rh
dHVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjY1YzBiMDY2YjU2ZWRkOTVhYzQ5NDhiZjc5NjU3Y2YxNGIzMzFl
MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVj
a291dC9zY20vc3ZuX3N0YXR1cy5weQpAQCAtMCwwICsxLDMyNyBAQAoraW1wb3J0IG9zCisKKwor
Y2xhc3MgU1ZOQ2hlY2tvdXRTdGF0dXMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
dGV4dCwgY2hlY2tvdXRfcm9vdCk6CisgICAgICAgIHNlbGYuX2xpbmVfaXRlbXMgPSBbU1ZOU3Rh
dHVzTGluZUl0ZW0obGluZSwgY2hlY2tvdXRfcm9vdCkgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdCgi
XG4iKSBpZiBsaW5lXQorCisgICAgZGVmIGZpbGVzX3dpdGhfc3RhdHVzX2NvZGUoc2VsZiwgY29k
ZSk6CisgICAgICAgIHJldHVybiBbbGluZV9pdGVtLnBhdGggZm9yIGxpbmVfaXRlbSBpbiBzZWxm
Ll9saW5lX2l0ZW1zIGlmIGxpbmVfaXRlbS5tYXRjaGVzX3N0YXR1c19jb2RlKGNvZGUpXQorCisg
ICAgIyBDb252ZW5pZW5jZSBtZXRob2RzCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1vZGlmaWVk
X2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlc193aXRoX3N0YXR1c19jb2Rl
KEl0ZW1Nb2RpZmllZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhZGRlZF9maWxlcyhzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNfd2l0aF9zdGF0dXNfY29kZShJdGVtQWRkZWQp
CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGVsZXRlZF9maWxlcyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuZmlsZXNfd2l0aF9zdGF0dXNfY29kZShJdGVtRGVsZXRlZCkKKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiByZXBsYWNlZF9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuZmlsZXNfd2l0aF9zdGF0dXNfY29kZShJdGVtUmVwbGFjZWQpCisKKyAgICBAcHJvcGVydHkK
KyAgICBkZWYgY29uZmxpY3RlZF9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmls
ZXNfd2l0aF9zdGF0dXNfY29kZShJdGVtQ29uZmxpY3RlZCkKKworICAgIEBwcm9wZXJ0eQorICAg
IGRlZiB1bnZlcnNpb25lZF9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNf
d2l0aF9zdGF0dXNfY29kZShJdGVtVW52ZXJzaW9uZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgbWlzc2luZ19maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXNfd2l0aF9z
dGF0dXNfY29kZShJdGVtTWlzc2luZykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmVlX2Nv
bmZsaWN0ZWRfZmlsZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzX3dpdGhfc3Rh
dHVzX2NvZGUoSXRlbVRyZWVDb25mbGljdGVkKQorCisKK2NsYXNzIFNWTlN0YXR1c0xpbmVJdGVt
KG9iamVjdCk6CisgICAgTlVNQkVSX09GX0NPTFVNTlMgPSA3CisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbGluZSwgY2hlY2tvdXRfcm9vdCk6CisgICAgICAgIHNlbGYubGluZSA9IGxpbmUKKyAg
ICAgICAgc2VsZi5jaGVja291dF9yb290ID0gY2hlY2tvdXRfcm9vdAorCisgICAgICAgIHBpdm90
X2luZGV4ID0gc2VsZi5OVU1CRVJfT0ZfQ09MVU1OUworICAgICAgICBzZWxmLnN0YXR1c2VzID0g
bGluZVswOnBpdm90X2luZGV4XQorICAgICAgICBzZWxmLnBhdGggPSBzZWxmLl9wYXRoX2Zvcihs
aW5lW3Bpdm90X2luZGV4Ol0uc3RyaXAoKSkKKworICAgIGRlZiBtYXRjaGVzX3N0YXR1c19jb2Rl
KHNlbGYsIGNvZGUpOgorICAgICAgICBpZiBub3Qgc2VsZi5zdGF0dXNlczoKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBjb2RlLm1hdGNoZXMoc2VsZikKKworICAg
IGRlZiBfcGF0aF9mb3Ioc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIG5vdCBwYXRoOgorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgcGF0aFswXSA9PSAnLyc6CisgICAgICAgICAgICBh
YnNvbHV0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuY2hlY2tvdXRfcm9vdCwgcGF0aFsxOl0p
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhYnNvbHV0ZV9wYXRoID0gb3MucGF0aC5qb2lu
KG9zLmdldGN3ZCgpLCBwYXRoKQorCisgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgoYWJz
b2x1dGVfcGF0aCkKKworICAgICMgU3RhdHVzIGNvbnZlbmllbmNlIG1ldGhvZHMKKworICAgIGRl
ZiBfZGVmaW5lX21hdGNoaW5nX2Z1bmN0aW9uKHNlbGYsIHN2bl9zdGF0dXNfY29kZSk6CisgICAg
ICAgIGRlZiBtYXRjaGluZ19mdW5jdGlvbigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubWF0
Y2hlc19zdGF0dXNfY29kZShzdm5fc3RhdHVzX2NvZGUpCisgICAgICAgIHJldHVybiBtYXRjaGlu
Z19mdW5jdGlvbgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1fbm90X21vZGlmaWVkKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2RlKEl0ZW1Ob3RNb2Rp
ZmllZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX2FkZGVkKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2RlKEl0ZW1BZGRlZCkKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiBpdGVtX2RlbGV0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1h
dGNoZXNfc3RhdHVzX2NvZGUoSXRlbURlbGV0ZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYg
aXRlbV9tb2RpZmllZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19zdGF0dXNf
Y29kZShJdGVtTW9kaWZpZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXRlbV9yZXBsYWNl
ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19zdGF0dXNfY29kZShJdGVtUmVw
bGFjZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXRlbV9jb25mbGljdGVkKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2RlKEl0ZW1Db25mbGljdGVkKQor
CisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1fZXh0ZXJuYWxzKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2RlKEl0ZW1FeHRlcm5hbHMpCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgaXRlbV9pZ25vcmVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5t
YXRjaGVzX3N0YXR1c19jb2RlKEl0ZW1JZ25vcmVkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IGl0ZW1fdW52ZXJzaW9uZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfc3Rh
dHVzX2NvZGUoSXRlbVVudmVyc2lvbmVkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1f
bWlzc2luZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19zdGF0dXNfY29kZShJ
dGVtTWlzc2luZykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX3R5cGVfbW9kaWZpZWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNfc3RhdHVzX2NvZGUoSXRlbVR5cGVN
b2RpZmllZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwcm9wZXJ0aWVzX25vdF9tb2RpZmll
ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19zdGF0dXNfY29kZShQcm9wZXJ0
aWVzTm90TW9kaWZpZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJvcGVydGllc19tb2Rp
ZmllZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19zdGF0dXNfY29kZShQcm9w
ZXJ0aWVzTW9kaWZpZWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcHJvcGVydGllc19jb25m
bGljdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2RlKFBy
b3BlcnRpZXNDb25mbGljdGVkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5vX2hpc3Rvcnlf
c2NoZWR1bGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2Rl
KE5vSGlzdG9yeVNjaGVkdWxlZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoaXN0b3J5X3Nj
aGVkdWxlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19zdGF0dXNfY29kZShI
aXN0b3J5U2NoZWR1bGVkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGl0ZW1fbm90X3N3aXRj
aGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2RlKEl0ZW1O
b3RTd2l0Y2hlZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX3N3aXRjaGVkKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5tYXRjaGVzX3N0YXR1c19jb2RlKEl0ZW1Td2l0Y2hlZCkK
KworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVtX25vdF9sb2NrZWQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLm1hdGNoZXNfc3RhdHVzX2NvZGUoSXRlbU5vdExvY2tlZCkKKworICAgIEBw
cm9wZXJ0eQorICAgIGRlZiBpdGVtX2xvY2tlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
bWF0Y2hlc19zdGF0dXNfY29kZShJdGVtTG9ja2VkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IGl0ZW1fbG9ja2VkX2J5X290aGVyX3VzZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1h
dGNoZXNfc3RhdHVzX2NvZGUoSXRlbUxvY2tlZEJ5T3RoZXJVc2VyKQorCisgICAgQHByb3BlcnR5
CisgICAgZGVmIGl0ZW1fbG9ja19zdG9sZW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1h
dGNoZXNfc3RhdHVzX2NvZGUoSXRlbUxvY2tTdG9sZW4pCisKKyAgICBAcHJvcGVydHkKKyAgICBk
ZWYgaXRlbV9sb2NrX2Jyb2tlbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hlc19z
dGF0dXNfY29kZShJdGVtTG9ja0Jyb2tlbikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpdGVt
X3RyZWVfbm90X2NvbmZsaWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1hdGNoZXNf
c3RhdHVzX2NvZGUoSXRlbU5vdFRyZWVDb25mbGljdGVkKQorCisgICAgQHByb3BlcnR5CisgICAg
ZGVmIGl0ZW1fdHJlZV9jb25mbGljdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXRj
aGVzX3N0YXR1c19jb2RlKEl0ZW1UcmVlQ29uZmxpY3RlZCkKKworCitjbGFzcyBTVk5TdGF0dXND
b2RlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbHVtbiwgY29kZSwgZGVzY3Jp
cHRpb24pOgorICAgICAgICBzZWxmLmNvbHVtbl9pbmRleCA9IGNvbHVtbiAtIDEKKyAgICAgICAg
c2VsZi5jb2RlID0gY29kZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24K
KworICAgIGRlZiBtYXRjaGVzKHNlbGYsIHN0YXR1c19pdGVtKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuY29kZSA9PSBzdGF0dXNfaXRlbS5zdGF0dXNlc1tzZWxmLmNvbHVtbl9pbmRleF0KKworIyBU
aGVzZSBjb2RlcyBhcmUgZGVyaXZlZCBmcm9tIGh0dHA6Ly9zdm5ib29rLnJlZC1iZWFuLmNvbS9l
bi8xLjcvc3ZuLnJlZi5zdm4uYy5zdGF0dXMuaHRtbC4KKyMgVGhlIGZpcnN0IGNvbHVtbi4KK0l0
ZW1Ob3RNb2RpZmllZCA9IFNWTlN0YXR1c0NvZGUoCisgICAgMSwKKyAgICAiICIsCisgICAgIk5v
IG1vZGlmaWNhdGlvbnMuIikKK0l0ZW1BZGRlZCA9IFNWTlN0YXR1c0NvZGUoCisgICAgMSwKKyAg
ICAiQSIsCisgICAgIkl0ZW0gaXMgc2NoZWR1bGVkIGZvciBhZGRpdGlvbi4iKQorSXRlbURlbGV0
ZWQgPSBTVk5TdGF0dXNDb2RlKAorICAgIDEsCisgICAgIkQiLAorICAgICJJdGVtIGlzIHNjaGVk
dWxlZCBmb3IgZGVsZXRpb24uIikKK0l0ZW1Nb2RpZmllZCA9IFNWTlN0YXR1c0NvZGUoCisgICAg
MSwKKyAgICAiTSIsCisgICAgIkl0ZW0gaGFzIGJlZW4gbW9kaWZpZWQuIikKK0l0ZW1SZXBsYWNl
ZCA9IFNWTlN0YXR1c0NvZGUoCisgICAgMSwKKyAgICAiUiIsCisgICAgIkl0ZW0gaGFzIGJlZW4g
cmVwbGFjZWQgaW4geW91ciB3b3JraW5nIGNvcHkuIFRoaXMgbWVhbnMgdGhlIGZpbGUgd2FzICIK
KyAgICAic2NoZWR1bGVkIGZvciBkZWxldGlvbiwgYW5kIHRoZW4gYSBuZXcgZmlsZSB3aXRoIHRo
ZSBzYW1lIG5hbWUgd2FzICIKKyAgICAic2NoZWR1bGVkIGZvciBhZGRpdGlvbiBpbiBpdHMgcGxh
Y2UuIikKK0l0ZW1Db25mbGljdGVkID0gU1ZOU3RhdHVzQ29kZSgKKyAgICAxLAorICAgICJDIiwK
KyAgICAiVGhlIGNvbnRlbnRzIChhcyBvcHBvc2VkIHRvIHRoZSBwcm9wZXJ0aWVzKSBvZiB0aGUg
aXRlbSBjb25mbGljdCB3aXRoICIKKyAgICAidXBkYXRlcyByZWNlaXZlZCBmcm9tIHRoZSByZXBv
c2l0b3J5LiIpCitJdGVtRXh0ZXJuYWxzID0gU1ZOU3RhdHVzQ29kZSgKKyAgICAxLAorICAgICJY
IiwKKyAgICAiSXRlbSBpcyBwcmVzZW50IGJlY2F1c2Ugb2YgYW4gZXh0ZXJuYWxzIGRlZmluaXRp
b24uIikKK0l0ZW1JZ25vcmVkID0gU1ZOU3RhdHVzQ29kZSgKKyAgICAxLAorICAgICJJIiwKKyAg
ICAiSXRlbSBpcyBiZWluZyBpZ25vcmVkIChlLmcuLCB3aXRoIHRoZSBzdm46aWdub3JlIHByb3Bl
cnR5KS4iKQorSXRlbVVudmVyc2lvbmVkID0gU1ZOU3RhdHVzQ29kZSgKKyAgICAxLAorICAgICI/
IiwKKyAgICAiSXRlbSBpcyBub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sLiIpCitJdGVtTWlzc2lu
ZyA9IFNWTlN0YXR1c0NvZGUoCisgICAgMSwKKyAgICAiISIsCisgICAgIkl0ZW0gaXMgbWlzc2lu
ZyAoZS5nLiwgeW91IG1vdmVkIG9yIGRlbGV0ZWQgaXQgd2l0aG91dCB1c2luZyBzdm4pLiAiCisg
ICAgIlRoaXMgYWxzbyBpbmRpY2F0ZXMgdGhhdCBhIGRpcmVjdG9yeSBpcyBpbmNvbXBsZXRlIChh
IGNoZWNrb3V0IG9yICIKKyAgICAidXBkYXRlIHdhcyBpbnRlcnJ1cHRlZCkuIikKK0l0ZW1UeXBl
TW9kaWZpZWQgPSBTVk5TdGF0dXNDb2RlKAorICAgIDEsCisgICAgIn4iLAorICAgICJJdGVtIGlz
IHZlcnNpb25lZCBhcyBvbmUga2luZCBvZiBvYmplY3QgKGZpbGUsIGRpcmVjdG9yeSwgbGluayks
ICIKKyAgICAiYnV0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgZGlmZmVyZW50IGtpbmQgb2Ygb2Jq
ZWN0LiIpCisKKyMgVGhlIHNlY29uZCBjb2x1bW4uCitQcm9wZXJ0aWVzTm90TW9kaWZpZWQgPSBT
Vk5TdGF0dXNDb2RlKAorICAgIDIsCisgICAgIiAiLAorICAgICJObyBtb2RpZmljYXRpb25zLiIp
CitQcm9wZXJ0aWVzTW9kaWZpZWQgPSBTVk5TdGF0dXNDb2RlKAorICAgIDIsCisgICAgIk0iLAor
ICAgICJQcm9wZXJ0aWVzIGZvciB0aGlzIGl0ZW0gaGF2ZSBiZWVuIG1vZGlmaWVkLiIpCitQcm9w
ZXJ0aWVzQ29uZmxpY3RlZCA9IFNWTlN0YXR1c0NvZGUoCisgICAgMiwKKyAgICAiQyIsCisgICAg
IlByb3BlcnRpZXMgZm9yIHRoaXMgaXRlbSBhcmUgaW4gY29uZmxpY3Qgd2l0aCBwcm9wZXJ0eSB1
cGRhdGVzICIKKyAgICAicmVjZWl2ZWQgZnJvbSB0aGUgcmVwb3NpdG9yeS4iKQorCisjIFRoZSB0
aGlyZCBjb2x1bW4uCitJdGVtTm90TG9ja2VkID0gU1ZOU3RhdHVzQ29kZSgKKyAgICAzLAorICAg
ICIgIiwKKyAgICAiSXRlbSBpcyBub3QgbG9ja2VkLiIpCitJdGVtTG9ja2VkID0gU1ZOU3RhdHVz
Q29kZSgKKyAgICAzLAorICAgICJMIiwKKyAgICAiSXRlbSBpcyBsb2NrZWQuIikKKworIyBUaGUg
Zm91cnRoIGNvbHVtbi4KK05vSGlzdG9yeVNjaGVkdWxlZCA9IFNWTlN0YXR1c0NvZGUoCisgICAg
NCwKKyAgICAiICIsCisgICAgIk5vIGhpc3Rvcnkgc2NoZWR1bGVkIHdpdGggY29tbWl0LiIpCitI
aXN0b3J5U2NoZWR1bGVkID0gU1ZOU3RhdHVzQ29kZSgKKyAgICA0LAorICAgICIrIiwKKyAgICAi
SGlzdG9yeSBzY2hlZHVsZWQgd2l0aCBjb21taXQuIikKKworIyBUaGUgZmlmdGggY29sdW1uLgor
SXRlbU5vdFN3aXRjaGVkID0gU1ZOU3RhdHVzQ29kZSgKKyAgICA1LAorICAgICIgIiwKKyAgICAi
SXRlbSBpcyBhIGNoaWxkIG9mIGl0cyBwYXJlbnQgZGlyZWN0b3J5LiIpCitJdGVtU3dpdGNoZWQg
PSBTVk5TdGF0dXNDb2RlKAorICAgIDUsCisgICAgIlMiLAorICAgICJJdGVtIGlzIHN3aXRjaGVk
LiIpCisKKyMgVGhlIHNpeHRoIGNvbHVtbi4KK0l0ZW1Ob3RMb2NrZWQgPSBTVk5TdGF0dXNDb2Rl
KAorICAgIDYsCisgICAgIiAiLAorICAgICJXaGVuIC0tc2hvdy11cGRhdGVzICgtdSkgaXMgdXNl
ZCwgdGhpcyAgbWVhbnMgdGhlIGZpbGUgaXMgbm90IGxvY2tlZC4gIgorICAgICJJZiAtLXNob3ct
dXBkYXRlcyAoLXUpIGlzIG5vdCB1c2VkLCB0aGlzIG1lcmVseSBtZWFucyB0aGF0IHRoZSBmaWxl
ICIKKyAgICAiaXMgbm90IGxvY2tlZCBpbiB0aGlzIHdvcmtpbmcgY29weS4iKQorSXRlbUxvY2tl
ZCA9IFNWTlN0YXR1c0NvZGUoCisgICAgNiwKKyAgICAiSyIsCisgICAgIkZpbGUgaXMgbG9ja2Vk
IGluIHRoaXMgd29ya2luZyBjb3B5LiIpCitJdGVtTG9ja2VkQnlPdGhlclVzZXIgPSBTVk5TdGF0
dXNDb2RlKAorICAgIDYsCisgICAgIk8iLAorICAgICJGaWxlIGlzIGxvY2tlZCBlaXRoZXIgYnkg
YW5vdGhlciB1c2VyIG9yIGluIGFub3RoZXIgd29ya2luZyBjb3B5LiAiCisgICAgIlRoaXMgYXBw
ZWFycyBvbmx5IHdoZW4gLS1zaG93LXVwZGF0ZXMgKC11KSBpcyB1c2VkLiIpCitJdGVtTG9ja1N0
b2xlbiA9IFNWTlN0YXR1c0NvZGUoCisgICAgNiwKKyAgICAiVCIsCisgICAgIkZpbGUgd2FzIGxv
Y2tlZCBpbiB0aGlzIHdvcmtpbmcgY29weSwgYnV0IHRoZSBsb2NrIGhhcyBiZWVuICIKKyAgICAi
XCJzdG9sZW5cIiBhbmQgaXMgaW52YWxpZC4gVGhlIGZpbGUgaXMgY3VycmVudGx5IGxvY2tlZCBp
biB0aGUgIgorICAgICJyZXBvc2l0b3J5LiBUaGlzIGFwcGVhcnMgb25seSB3aGVuIC0tc2hvdy11
cGRhdGVzICgtdSkgaXMgdXNlZC4iKQorSXRlbUxvY2tCcm9rZW4gPSBTVk5TdGF0dXNDb2RlKAor
ICAgIDYsCisgICAgIkIiLAorICAgICJGaWxlIHdhcyBsb2NrZWQgaW4gdGhpcyB3b3JraW5nIGNv
cHksIGJ1dCB0aGUgbG9jayBoYXMgYmVlbiAiCisgICAgIlwiYnJva2VuXCIgYW5kIGlzIGludmFs
aWQuIFRoZSBmaWxlIGlzIG5vIGxvbmdlciBsb2NrZWQuIFRoaXMgYXBwZWFycyIKKyAgICAib25s
eSB3aGVuIC0tc2hvdy11cGRhdGVzICgtdSkgaXMgdXNlZC4iKQorCisjIFRoZSBzZXZlbnRoIGNv
bHVtbi4KK0l0ZW1Ob3RUcmVlQ29uZmxpY3RlZCA9IFNWTlN0YXR1c0NvZGUoCisgICAgNywKKyAg
ICAiICIsCisgICAgIkl0ZW0gaXMgbm90IHRoZSB2aWN0aW0gb2YgYSB0cmVlIGNvbmZsaWN0LiIp
CitJdGVtVHJlZUNvbmZsaWN0ZWQgPSBTVk5TdGF0dXNDb2RlKAorICAgIDcsCisgICAgIkMiLAor
ICAgICJJdGVtIGlzIHRoZSB2aWN0aW0gb2YgYSB0cmVlIGNvbmZsaWN0LiIpCisKKyNGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIHRoZSBvcHRpb25hbCBuaW50aCBjb2x1bW4gYW5kIHRoZSAtLXNob3ct
dXBkYXRlIGZsYWcgaW4gZ2VuZXJhbC4K
</data>
<flag name="review"
          id="256452"
          type_id="1"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>