<?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>214954</bug_id>
          
          <creation_ts>2020-07-29 18:27:58 -0700</creation_ts>
          <short_desc>check-webkit-style should enforce acronym capitalization at start/end of an identifier</short_desc>
          <delta_ts>2020-07-31 11:26:21 -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>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=214756</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>215026</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1676279</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-07-29 18:27:58 -0700</bug_when>
    <thetext>check-webkit-style should enforce acronym capitalization at start/end of an identifier.

Specifically, for &quot;URL&quot;.  See Bug 214756 Comment #19.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676282</commentid>
    <comment_count>1</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-07-29 18:30:13 -0700</bug_when>
    <thetext>We can now find the incorrectly capitalized identifiers in DumpRenderTree.mm:

$ ./Tools/Scripts/check-webkit-style --filter-rules=-,+readability/naming/acronym Tools/DumpRenderTree/mac/DumpRenderTree.mm 
ERROR: Tools/DumpRenderTree/mac/DumpRenderTree.mm:297:  The identifier name &quot;URLString&quot; starts with a acronym that is not all lowercase.  [readability/naming/acronym] [5]
ERROR: Tools/DumpRenderTree/mac/DumpRenderTree.mm:1648:  The identifier name &quot;testPathOrUrl&quot; ends with a acronym that is not all uppercase.  [readability/naming/acronym] [5]
ERROR: Tools/DumpRenderTree/mac/DumpRenderTree.mm:1650:  The identifier name &quot;localPathOrUrl&quot; ends with a acronym that is not all uppercase.  [readability/naming/acronym] [5]
Total errors found: 3 in 1 files

And verify that Source/WTF has no incorrectly named variables (might be false negatives, but no false positives):

$ ./Tools/Scripts/check-webkit-style --filter-rules=-,+readability/naming/acronym Source/WTF
Total errors found: 0 in 828 files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676301</commentid>
    <comment_count>2</comment_count>
      <attachid>405543</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-07-29 21:09:07 -0700</bug_when>
    <thetext>Created attachment 405543
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676307</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-07-29 21:52:30 -0700</bug_when>
    <thetext>BTW, I don&apos;t plan on running the script on existing code and fixing issues right away since I have other priorities to work on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676371</commentid>
    <comment_count>4</comment_count>
      <attachid>405543</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-07-30 07:28:47 -0700</bug_when>
    <thetext>Comment on attachment 405543
Patch v1

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

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1820
&gt; +    # FIXME: Hard to check middle words without knowing that the word to the left doesn&apos;t end with an acronym.

We already have a list of acronyms, can&apos;t we just do &apos;starts with&apos; iterating through our list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676438</commentid>
    <comment_count>5</comment_count>
      <attachid>405543</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-07-30 10:20:22 -0700</bug_when>
    <thetext>Comment on attachment 405543
Patch v1

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

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1805
&gt; +    acronyms = &apos;|&apos;.join([&apos;MIME&apos;, &apos;URL&apos;])

@Jonathan: This list of acronyms could be replaced by the other list you mentioned.  Can you tell me where the list is defined?

&gt;&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1820
&gt;&gt; +    # FIXME: Hard to check middle words without knowing that the word to the left doesn&apos;t end with an acronym.
&gt; 
&gt; We already have a list of acronyms, can&apos;t we just do &apos;starts with&apos; iterating through our list?

Where is the list of acronyms?  I wasn&apos;t aware of it until you mentioned it.  (See previous comment.)

Also, I&apos;m not sure how a list of acronyms would help with this FIXME.  The case I&apos;m concerned about is something (made-up) like:

    canUnfurlFlag
    canCurlHair

Searching the middle of a variable for &quot;url&quot; (in this case) might return a false positive, which is what the comment was about.

I was thinking more about this after posting the patch, and I think a better algorithm may be to:

- Split camelCase identifier into individual words using the start of a capital letter followed by a lowercase letter (after the initial word which would be all-uppercase or all-lowercase).
- Compare each individual word in the list to a list of acronyms, and determine whether its case is wrong whether it&apos;s first or not-first in the list.

The algorithm wouldn&apos;t be perfect, but would probably do a better job (and be easier to understand) than this code:

- HTMLDOMDocument =&gt; (HTMLDOM, Document)
- canUnfurlFlag =&gt; (can, Unfurl, Flag)
- canCurlHair =&gt; (can Curl Hair)
- URLString =&gt; (URL, String)
- localPathOrUrl =&gt; (local, Path, Or, Url)
- MIMEStringForURL =&gt; (MIME, String, For, URL)

Now this algorithm assumes each word is spelled correctly, but we&apos;re not trying to solve correct spelling of camelCase words, so that&apos;s okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676443</commentid>
    <comment_count>6</comment_count>
      <attachid>405543</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-07-30 10:27:29 -0700</bug_when>
    <thetext>Comment on attachment 405543
Patch v1

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

&gt;&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1805
&gt;&gt; +    acronyms = &apos;|&apos;.join([&apos;MIME&apos;, &apos;URL&apos;])
&gt; 
&gt; @Jonathan: This list of acronyms could be replaced by the other list you mentioned.  Can you tell me where the list is defined?

I was actually referring to this list here, although you explanation of the FIXME and false-positive matches makes it more clear the cases you had in mind.

&gt;&gt;&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1820
&gt;&gt;&gt; +    # FIXME: Hard to check middle words without knowing that the word to the left doesn&apos;t end with an acronym.
&gt;&gt; 
&gt;&gt; We already have a list of acronyms, can&apos;t we just do &apos;starts with&apos; iterating through our list?
&gt; 
&gt; Where is the list of acronyms?  I wasn&apos;t aware of it until you mentioned it.  (See previous comment.)
&gt; 
&gt; Also, I&apos;m not sure how a list of acronyms would help with this FIXME.  The case I&apos;m concerned about is something (made-up) like:
&gt; 
&gt;     canUnfurlFlag
&gt;     canCurlHair
&gt; 
&gt; Searching the middle of a variable for &quot;url&quot; (in this case) might return a false positive, which is what the comment was about.
&gt; 
&gt; I was thinking more about this after posting the patch, and I think a better algorithm may be to:
&gt; 
&gt; - Split camelCase identifier into individual words using the start of a capital letter followed by a lowercase letter (after the initial word which would be all-uppercase or all-lowercase).
&gt; - Compare each individual word in the list to a list of acronyms, and determine whether its case is wrong whether it&apos;s first or not-first in the list.
&gt; 
&gt; The algorithm wouldn&apos;t be perfect, but would probably do a better job (and be easier to understand) than this code:
&gt; 
&gt; - HTMLDOMDocument =&gt; (HTMLDOM, Document)
&gt; - canUnfurlFlag =&gt; (can, Unfurl, Flag)
&gt; - canCurlHair =&gt; (can Curl Hair)
&gt; - URLString =&gt; (URL, String)
&gt; - localPathOrUrl =&gt; (local, Path, Or, Url)
&gt; - MIMEStringForURL =&gt; (MIME, String, For, URL)
&gt; 
&gt; Now this algorithm assumes each word is spelled correctly, but we&apos;re not trying to solve correct spelling of camelCase words, so that&apos;s okay.

I was referring to your above list. (seems like DOM and HTML should be in it, though)

If we want to do the more thorough camelCase splitting, that really feels like a different patch, since it&apos;s quite a bit more complicated then the startswith case I suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676557</commentid>
    <comment_count>7</comment_count>
      <attachid>405543</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-07-30 14:32:59 -0700</bug_when>
    <thetext>Comment on attachment 405543
Patch v1

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1805
&gt;&gt;&gt; +    acronyms = &apos;|&apos;.join([&apos;MIME&apos;, &apos;URL&apos;])
&gt;&gt; 
&gt;&gt; @Jonathan: This list of acronyms could be replaced by the other list you mentioned.  Can you tell me where the list is defined?
&gt; 
&gt; I was actually referring to this list here, although you explanation of the FIXME and false-positive matches makes it more clear the cases you had in mind.

I should note that I wanted to start with a small list that was easy for others to add to.  I don&apos;t have time to check for false positives for a ton of acronyms up-front.

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1820
&gt;&gt;&gt;&gt; +    # FIXME: Hard to check middle words without knowing that the word to the left doesn&apos;t end with an acronym.
&gt;&gt;&gt; 
&gt;&gt;&gt; We already have a list of acronyms, can&apos;t we just do &apos;starts with&apos; iterating through our list?
&gt;&gt; 
&gt;&gt; Where is the list of acronyms?  I wasn&apos;t aware of it until you mentioned it.  (See previous comment.)
&gt;&gt; 
&gt;&gt; Also, I&apos;m not sure how a list of acronyms would help with this FIXME.  The case I&apos;m concerned about is something (made-up) like:
&gt;&gt; 
&gt;&gt;     canUnfurlFlag
&gt;&gt;     canCurlHair
&gt;&gt; 
&gt;&gt; Searching the middle of a variable for &quot;url&quot; (in this case) might return a false positive, which is what the comment was about.
&gt;&gt; 
&gt;&gt; I was thinking more about this after posting the patch, and I think a better algorithm may be to:
&gt;&gt; 
&gt;&gt; - Split camelCase identifier into individual words using the start of a capital letter followed by a lowercase letter (after the initial word which would be all-uppercase or all-lowercase).
&gt;&gt; - Compare each individual word in the list to a list of acronyms, and determine whether its case is wrong whether it&apos;s first or not-first in the list.
&gt;&gt; 
&gt;&gt; The algorithm wouldn&apos;t be perfect, but would probably do a better job (and be easier to understand) than this code:
&gt;&gt; 
&gt;&gt; - HTMLDOMDocument =&gt; (HTMLDOM, Document)
&gt;&gt; - canUnfurlFlag =&gt; (can, Unfurl, Flag)
&gt;&gt; - canCurlHair =&gt; (can Curl Hair)
&gt;&gt; - URLString =&gt; (URL, String)
&gt;&gt; - localPathOrUrl =&gt; (local, Path, Or, Url)
&gt;&gt; - MIMEStringForURL =&gt; (MIME, String, For, URL)
&gt;&gt; 
&gt;&gt; Now this algorithm assumes each word is spelled correctly, but we&apos;re not trying to solve correct spelling of camelCase words, so that&apos;s okay.
&gt; 
&gt; I was referring to your above list. (seems like DOM and HTML should be in it, though)
&gt; 
&gt; If we want to do the more thorough camelCase splitting, that really feels like a different patch, since it&apos;s quite a bit more complicated then the startswith case I suggested.

Okay, I can do a follow-up patch.  This code seems like such a hack, though.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676568</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-30 14:44:38 -0700</bug_when>
    <thetext>Committed r265096: &lt;https://trac.webkit.org/changeset/265096&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405543.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676571</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-30 14:46:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/66348710&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405543</attachid>
            <date>2020-07-29 21:09:07 -0700</date>
            <delta_ts>2020-07-30 14:44:38 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-214954-20200729210923.patch</filename>
            <type>text/plain</type>
            <size>14620</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDQzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzczNThlZWFmYTFkYmY0YjgxNGFjZTI0YWIxZjA5NWM1
OWUzZmJmOC4uMDVmNGYzYWVjNjU5MTQ4YzRkNWVhYjM3YTYzNmNiOTNlMzFiY2JjOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5
IEBACisyMDIwLTA3LTI5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAg
ICAgICAgY2hlY2std2Via2l0LXN0eWxlIHNob3VsZCBlbmZvcmNlIGFjcm9ueW0gY2FwaXRhbGl6
YXRpb24gYXQgc3RhcnQvZW5kIG9mIGFuIGlkZW50aWZpZXIKKyAgICAgICAgPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzIxNDk1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAg
ICAgKHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MpOgorICAgICAgICAoY2hhbmdlV2luZG93
U2NhbGVJZk5lZWRlZCk6CisgICAgICAgIC0gRml4IGNhc2UgaXNzdWVzIGluIHZhcmlhYmxlcyB1
c2luZyBVUkwgYWNyb255bS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5OgorICAgICAgICAoX2NoZWNrX2lkZW50aWZpZXJfbmFtZV9mb3JfYWNyb255
bXMpOiBBZGQuCisgICAgICAgIC0gVGhpcyBjb250YWlucyB0aGUgbG9naWMgdG8gcmVwb3J0IGFj
cm9ueW1zIHdpdGggaW52YWxpZCBjYXNlCisgICAgICAgICAgYXQgdGhlIHN0YXJ0IGFuZCBhdCB0
aGUgZW5kIG9mIGFuIGlkZW50aWZlci4KKyAgICAgICAgKGNoZWNrX2lkZW50aWZpZXJfbmFtZV9p
bl9kZWNsYXJhdGlvbik6CisgICAgICAgIC0gS2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZSBpZGVu
dGlmZXIgY2FtZSBmcm9tIGEgY2xhc3MsCisgICAgICAgICAgbmFtZXNwYWNlIG9yIHN0cnVjdC4K
KyAgICAgICAgLSBGaXggYnVnIHdoZXJlIGBhdXRvYCB2YXJpYWJsZXMgd291bGQgbm90IGJlIGNo
ZWNrZWQgYmVjYXVzZQorICAgICAgICAgIGBhdXRvYCB3YXMgcmVtb3ZlZCB3aXRoIG90aGVyIG5v
bi10eXBlIGtleXdvcmRzIGxpa2UgYGlubGluZWAsCisgICAgICAgICAgbGVhdmluZyBubyB0eXBl
IGZvciB0aGUgdmFyaWFibGUuICBBZGQgYSBjb21tZW50IHRvIGRlc2NyaWJlCisgICAgICAgICAg
d2hhdCB0aGlzIGxpbmUgaXMgZG9pbmcuCisgICAgICAgIC0gRml4IGJ1ZyB3aGVuIHJlbW92aW5n
ICJuZXciIHRoYXQgY2hhbmdlZCBhbiBpZGVudGlmaWVyIG5hbWVkCisgICAgICAgICAgIm5ld1VS
TCIgdG8gIlVSTCIuCisgICAgICAgIC0gQWRkIGNhbGwgdG8gX2NoZWNrX2lkZW50aWZpZXJfbmFt
ZV9mb3JfYWNyb255bXMoKSB0byBpbXBsZW1lbnQKKyAgICAgICAgICB0aGUgY2hlY2suCisgICAg
ICAgIChDcHBDaGVja2VyKToKKyAgICAgICAgLSBBZGQgJ3JlYWRhYmlsaXR5L25hbWluZy9hY3Jv
bnltJyB0byB0aGUgbGlzdCBvZiBhY3RpdmUKKyAgICAgICAgICBjaGVja2Vycy4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoV2ViS2l0U3R5bGVUZXN0LnRlc3RfaWRlbnRpZmllcl9uYW1lc193aXRoX2Fjcm9ueW1z
KToKKyAgICAgICAgLSBBZGQgdGVzdHMuICBBYm91dCBoYWxmIG9mIHRoZSB0ZXN0cyB3ZXJlIHRh
a2VuIGZyb20gYWN0dWFsCisgICAgICAgICAgY29kZSB0aGF0IGluaXRpYWxseSBjYXVzZWQgZmFs
c2UgcG9zaXRpdmVzIGR1cmluZyBkZXZlbG9wbWVudC4KKwogMjAyMC0wNy0yOSAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdURjo6bWFrZVN0cmluZygpIHNo
b3VsZCBoYW5kbGUgZW51bSB2YWx1ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQppbmRleCAxYjhiNjliYzdiOTYwOTJmMTU5NzZhMjkwMjA4MDI3NTE3NmRmNWE2
Li4wYzJjZDc2ZWEzYmQ3MDU4MjFiZTRhNzE2MzliODgzNWFlYTQ2NWZlIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9p
ZCBzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihDRlN0cmluZ1JlZiB1cmwpCiAg
ICAgcGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1cmw7CiB9CiAKLXN0YXRpYyBi
b29sIHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3MoY29uc3Qgc3RyaW5nJiBVUkxTdHJpbmcp
CitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0cmluZyYg
dXJsU3RyaW5nKQogewogICAgIHN0YXRpYyBjaGFyKiBjb25zdCBpZ25vcmVTZXRbXSA9IHsKICAg
ICAgICAgLy8gS2VlcGluZyB0aGlzIGluZnJhc3RydWN0dXJlIGFyb3VuZCBpbiBjYXNlIHdlIGV2
ZXIgbmVlZCBpdCBhZ2Fpbi4KQEAgLTMwNCw4ICszMDQsOCBAQCBzdGF0aWMgYm9vbCBzaG91bGRJ
Z25vcmVXZWJDb3JlTm9kZUxlYWtzKGNvbnN0IHN0cmluZyYgVVJMU3RyaW5nKQogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgaWdub3JlU2V0Q291bnQ7IGkrKykgewogICAgICAgICAvLyBGSVhNRTog
aWdub3JlIGNhc2UKICAgICAgICAgc3RyaW5nIGN1cklnbm9yZShpZ25vcmVTZXRbaV0pOwotICAg
ICAgICAvLyBNYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBVUkxTdHJpbmcKLSAgICAgICAgaWYgKCFV
UkxTdHJpbmcuY29tcGFyZShVUkxTdHJpbmcubGVuZ3RoKCkgLSBjdXJJZ25vcmUubGVuZ3RoKCks
IGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlKSkKKyAgICAgICAgLy8gTWF0Y2ggYXQgdGhl
IGVuZCBvZiB0aGUgdXJsU3RyaW5nLgorICAgICAgICBpZiAoIXVybFN0cmluZy5jb21wYXJlKHVy
bFN0cmluZy5sZW5ndGgoKSAtIGN1cklnbm9yZS5sZW5ndGgoKSwgY3VySWdub3JlLmxlbmd0aCgp
LCBjdXJJZ25vcmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKQEAgLTE2NDUsMTQgKzE2NDUsMTQgQEAgc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3
YXJkTGlzdEZvcldlYlZpZXcoV2ViVmlldyAqdmlldykKIH0KIAogI2lmICFQTEFURk9STShJT1Nf
RkFNSUxZKQotc3RhdGljIHZvaWQgY2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZChjb25zdCBjaGFy
KiB0ZXN0UGF0aE9yVXJsKQorc3RhdGljIHZvaWQgY2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZChj
b25zdCBjaGFyKiB0ZXN0UGF0aE9yVVJMKQogewotICAgIGF1dG8gbG9jYWxQYXRoT3JVcmwgPSBT
dHJpbmcodGVzdFBhdGhPclVybCk7CisgICAgYXV0byBsb2NhbFBhdGhPclVSTCA9IFN0cmluZyh0
ZXN0UGF0aE9yVVJMKTsKICAgICBmbG9hdCBjdXJyZW50U2NhbGVGYWN0b3IgPSBbW1ttYWluRnJh
bWUgd2ViVmlld10gd2luZG93XSBiYWNraW5nU2NhbGVGYWN0b3JdOwogICAgIGZsb2F0IHJlcXVp
cmVkU2NhbGVGYWN0b3IgPSAxOwotICAgIGlmIChsb2NhbFBhdGhPclVybC5jb250YWluc0lnbm9y
aW5nQVNDSUlDYXNlKCIvaGlkcGktM3gtIikpCisgICAgaWYgKGxvY2FsUGF0aE9yVVJMLmNvbnRh
aW5zSWdub3JpbmdBU0NJSUNhc2UoIi9oaWRwaS0zeC0iKSkKICAgICAgICAgcmVxdWlyZWRTY2Fs
ZUZhY3RvciA9IDM7Ci0gICAgZWxzZSBpZiAobG9jYWxQYXRoT3JVcmwuY29udGFpbnNJZ25vcmlu
Z0FTQ0lJQ2FzZSgiL2hpZHBpLSIpKQorICAgIGVsc2UgaWYgKGxvY2FsUGF0aE9yVVJMLmNvbnRh
aW5zSWdub3JpbmdBU0NJSUNhc2UoIi9oaWRwaS0iKSkKICAgICAgICAgcmVxdWlyZWRTY2FsZUZh
Y3RvciA9IDI7CiAgICAgaWYgKGN1cnJlbnRTY2FsZUZhY3RvciA9PSByZXF1aXJlZFNjYWxlRmFj
dG9yKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5CmluZGV4IGMwYjMyNjYwZmZlODA5Y2U3ZThhMDAyMDkzOTA3ZjQ5ZDJmZDgw
NTMuLjAwNmYwZTMwMjY1MmNkZWRmNmZiNjM2ODc0YWVlYjA0NjExOTI2NzYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC0xNzk2LDYgKzE3OTYs
NDAgQEAgZGVmIF9jaGVja19wYXJhbWV0ZXJfbmFtZV9hZ2FpbnN0X3RleHQocGFyYW1ldGVyLCB0
ZXh0LCBlcnJvcik6CiAgICAgcmV0dXJuIFRydWUKIAogCitkZWYgX2NoZWNrX2lkZW50aWZpZXJf
bmFtZV9mb3JfYWNyb255bXMoaWRlbnRpZmllciwgbGluZV9udW1iZXIsIGlzX2NsYXNzX29yX25h
bWVzcGFjZV9vcl9zdHJ1Y3RfbmFtZSwgZXJyb3IpOgorICAgICIiIkNoZWNrcyB0byBzZWUgaWYg
dGhlIGlkZW50aWZpZXIgbmFtZSBjb250YWlucyBhbiBhY3JvbnltIHdpdGggaW1wcm9wZXIgY2Fz
ZS4KKworICAgIFVzaW5nICJ1cmwiIGlzIG9rYXkgYXQgdGhlIHN0YXJ0IG9mIGFuIGlkZW50aWZp
ZXIgbmFtZSwgYW5kICJVUkwiIGlzIG9rYXkgaW4gdGhlCisgICAgbWlkZGxlIG9yIGF0IHRoZSBl
bmQgb2YgYW4gaWRlbnRpZmllciBuYW1lLCBidXQgIlVybCIgaXMgbmV2ZXIgb2theS4KKyAgICAi
IiIKKyAgICBhY3JvbnltcyA9ICd8Jy5qb2luKFsnTUlNRScsICdVUkwnXSkKKworICAgIHN0YXJ0
X3JlID0gcmUuY29tcGlsZSgnXiglcykofCQpJyAlIGFjcm9ueW1zLCByZS5JR05PUkVDQVNFKQor
ICAgIHN0YXJ0X2V4cGVjdGVkX3JlID0gcmUuY29tcGlsZSgnXiglcykoW146XXwkKScgJSBhY3Jv
bnltcy5sb3dlcigpKQorICAgICMgSWRlbnRpZmllcnMgdGhhdCBzdGFydCB3aXRoIGFuIGFjcm9u
eW0gbXVzdCBiZSBhbGwgbG93ZXJjYXNlLCBleGNlcHQgZm9yIGNsYXNzL25hbWVzcGFjZS9zdHJ1
Y3QgbmFtZXMuCisgICAgaWYgc3RhcnRfcmUuc2VhcmNoKGlkZW50aWZpZXIpIGFuZCBub3Qgc3Rh
cnRfZXhwZWN0ZWRfcmUuc2VhcmNoKGlkZW50aWZpZXIpOgorICAgICAgICBzdGFydF91cHBlcmNh
c2VfcmUgPSByZS5jb21waWxlKCdeKCVzKScgJSBhY3JvbnltcykKKyAgICAgICAgIyBJZ25vcmUg
Y2xhc3MvbmFtZXNwYWNlL3N0cnVjdCBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggYWxsLXVwcGVyY2Fz
ZSBhY3Jvbnltcy4KKyAgICAgICAgaWYgc3RhcnRfdXBwZXJjYXNlX3JlLnNlYXJjaChpZGVudGlm
aWVyKSBhbmQgXAorICAgICAgICAgICAgICAgIChpc19jbGFzc19vcl9uYW1lc3BhY2Vfb3Jfc3Ry
dWN0X25hbWUgb3IgaWRlbnRpZmllci5maW5kKCc6OicpICE9IC0xKToKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisgICAgICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvbmFtaW5n
L2Fjcm9ueW0nLCA1LAorICAgICAgICAgICAgICAnVGhlIGlkZW50aWZpZXIgbmFtZSAiJXMiIHN0
YXJ0cyB3aXRoIGEgYWNyb255bSB0aGF0IGlzIG5vdCBhbGwgbG93ZXJjYXNlLicgJSBpZGVudGlm
aWVyKQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgRklYTUU6IEhhcmQgdG8gY2hlY2sg
bWlkZGxlIHdvcmRzIHdpdGhvdXQga25vd2luZyB0aGF0IHRoZSB3b3JkIHRvIHRoZSBsZWZ0IGRv
ZXNuJ3QgZW5kIHdpdGggYW4gYWNyb255bS4KKworICAgICMgSWRlbnRpZmllcnMgdGhhdCBlbmQg
d2l0aCBhbiBhY3JvbnltIG11c3QgYmUgYWxsIHVwcGVyY2FzZSwgZXhjZXB0IGZvciB2YXJpYWJs
ZXMgbGlrZSAnbV91cmwnIGFuZCAnQ2xhc3M6OnVybCgpJy4KKyAgICBlbmRfcmUgPSByZS5jb21w
aWxlKCdbXl86XSglcykkJyAlIGFjcm9ueW1zLCByZS5JR05PUkVDQVNFKQorICAgIGVuZF9leHBl
Y3RlZF9yZSA9IHJlLmNvbXBpbGUoJ1teXzpdKCVzKSQnICUgYWNyb255bXMpCisgICAgaWYgZW5k
X3JlLnNlYXJjaChpZGVudGlmaWVyKSBhbmQgbm90IGVuZF9leHBlY3RlZF9yZS5zZWFyY2goaWRl
bnRpZmllcik6CisgICAgICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvbmFtaW5n
L2Fjcm9ueW0nLCA1LAorICAgICAgICAgICAgICAnVGhlIGlkZW50aWZpZXIgbmFtZSAiJXMiIGVu
ZHMgd2l0aCBhIGFjcm9ueW0gdGhhdCBpcyBub3QgYWxsIHVwcGVyY2FzZS4nICUgaWRlbnRpZmll
cikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gVHJ1ZQorCisKIGRlZiBfZXJy
b3JfcmVkdW5kYW50X3NwZWNpZmllcihsaW5lX251bWJlciwgcmVkdW5kYW50X3NwZWNpZmllciwg
Z29vZF9zcGVjaWZpZXIsIGVycm9yKToKICAgICBlcnJvcihsaW5lX251bWJlciwgJ3JlYWRhYmls
aXR5L2luaGVyaXRhbmNlJywgNCwKICAgICAgICAgICAnIiVzIiBpcyByZWR1bmRhbnQgc2luY2Ug
ZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyAiJXMiJwpAQCAtMzcwMCw3ICszNzM0LDcg
QEAgZGVmIGNoZWNrX2xhbmd1YWdlKGZpbGVuYW1lLCBjbGVhbl9saW5lcywgbGluZV9udW1iZXIs
IGZpbGVfZXh0ZW5zaW9uLCBpbmNsdWRlX3MKIAogCiBkZWYgY2hlY2tfaWRlbnRpZmllcl9uYW1l
X2luX2RlY2xhcmF0aW9uKGZpbGVuYW1lLCBsaW5lX251bWJlciwgbGluZSwgZmlsZV9zdGF0ZSwg
ZXJyb3IpOgotICAgICIiIkNoZWNrcyBpZiBpZGVudGlmaWVyIG5hbWVzIGNvbnRhaW4gYW55IHVu
ZGVyc2NvcmVzLgorICAgICIiIkNoZWNrcyBpZiBpZGVudGlmaWVyIG5hbWVzIGNvbnRhaW4gYW55
IGFudGktcGF0dGVybnMgbGlrZSB1bmRlcnNjb3Jlcy4KIAogICAgIEFzIGlkZW50aWZpZXJzIGlu
IGxpYnJhcmllcyB3ZSBhcmUgdXNpbmcgaGF2ZSBhIGJ1bmNoIG9mCiAgICAgdW5kZXJzY29yZXMs
IHdlIG9ubHkgd2FybiBhYm91dCB0aGUgZGVjbGFyYXRpb25zIG9mIGlkZW50aWZpZXJzCkBAIC0z
NzQ1LDEwICszNzc5LDE4IEBAIGRlZiBjaGVja19pZGVudGlmaWVyX25hbWVfaW5fZGVjbGFyYXRp
b24oZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBsaW5lLCBmaWxlX3N0YXRlCiAgICAgbGluZSA9IHN1
YihyJ2xvbmcgKGxvbmcgKT8oPz1sb25nfGRvdWJsZXxpbnQpJywgJycsIGxpbmUpCiAgICAgIyBD
b252ZXJ0IHVuc2lnbmVkL3NpZ25lZCB0eXBlcyB0byBzaW1wbGUgdHlwZXMsIHRvby4KICAgICBs
aW5lID0gc3ViKHInKHVuc2lnbmVkfHNpZ25lZCkgKD89Y2hhcnxzaG9ydHxpbnR8bG9uZyknLCAn
JywgbGluZSkKLSAgICBsaW5lID0gc3ViKHInXGIoaW5saW5lfHVzaW5nfHN0YXRpY3xjb25zdHx2
b2xhdGlsZXxhdXRvfHJlZ2lzdGVyfGV4dGVybnx0eXBlZGVmfHJlc3RyaWN0fHN0cnVjdHxjbGFz
c3x2aXJ0dWFsKSg/PVxXKScsICcnLCBsaW5lKQorCisgICAgaXNfY2xhc3Nfb3JfbmFtZXNwYWNl
X29yX3N0cnVjdF9uYW1lID0gRmFsc2UKKyAgICBjbGFzc19uYW1lc3BhY2Vfc3RydWN0X25hbWVf
cmUgPSByZS5jb21waWxlKCdcXGIoY2xhc3N8ZXhwbGljaXR8bmFtZXNwYWNlfHN0cnVjdHwlcyko
Pz1cXFcpJyAlICd8Jy5qb2luKF9FWFBPUlRfTUFDUk9TKSkKKyAgICBpZiBjbGFzc19uYW1lc3Bh
Y2Vfc3RydWN0X25hbWVfcmUuc2VhcmNoKGxpbmUpOgorICAgICAgICBpc19jbGFzc19vcl9uYW1l
c3BhY2Vfb3Jfc3RydWN0X25hbWUgPSBUcnVlCisKKyAgICAjIFJlbW92ZSBrZXl3b3JkcyB0aGF0
IGFyZW4ndCB0eXBlcy4KKyAgICBsaW5lID0gc3ViKHInXGIoaW5saW5lfHVzaW5nfHN0YXRpY3xj
b25zdHx2b2xhdGlsZXxyZWdpc3RlcnxleHRlcm58dHlwZWRlZnxyZXN0cmljdHxzdHJ1Y3R8Y2xh
c3N8dmlydHVhbCkoPz1cVyknLCAnJywgbGluZSkKIAogICAgICMgUmVtb3ZlICJuZXciIGFuZCAi
bmV3IChleHByKSIgdG8gc2ltcGxpZnksIHRvby4KLSAgICBsaW5lID0gc3ViKHInbmV3XHMqKFwo
W14pXSpcKSk/JywgJycsIGxpbmUpCisgICAgbGluZSA9IHN1YihyJ25ld1xzKycsICcnLCBsaW5l
KQorICAgIGxpbmUgPSBzdWIociduZXdccyooXChbXildKlwpKScsICcnLCBsaW5lKQogCiAgICAg
IyBSZW1vdmUgYWxsIHRlbXBsYXRlIHBhcmFtZXRlcnMgYnkgcmVtb3ZpbmcgbWF0Y2hpbmcgPCBh
bmQgPi4KICAgICAjIExvb3AgdW50aWwgbm8gdGVtcGxhdGVzIGFyZSByZW1vdmVkIHRvIHJlbW92
ZSBuZXN0ZWQgdGVtcGxhdGVzLgpAQCAtMzgzOCw2ICszODgwLDggQEAgZGVmIGNoZWNrX2lkZW50
aWZpZXJfbmFtZV9pbl9kZWNsYXJhdGlvbihmaWxlbmFtZSwgbGluZV9udW1iZXIsIGxpbmUsIGZp
bGVfc3RhdGUKICAgICAgICAgaWYgbW9kaWZpZWRfaWRlbnRpZmllciA9PSAnbCc6CiAgICAgICAg
ICAgICBlcnJvcihsaW5lX251bWJlciwgJ3JlYWRhYmlsaXR5L25hbWluZycsIDQsIGlkZW50aWZp
ZXIgKyAiIGlzIGluY29ycmVjdGx5IG5hbWVkLiBEb24ndCB1c2UgdGhlIHNpbmdsZSBsZXR0ZXIg
J2wnIGFzIGFuIGlkZW50aWZpZXIgbmFtZS4iKQogCisgICAgICAgIF9jaGVja19pZGVudGlmaWVy
X25hbWVfZm9yX2Fjcm9ueW1zKGlkZW50aWZpZXIsIGxpbmVfbnVtYmVyLCBpc19jbGFzc19vcl9u
YW1lc3BhY2Vfb3Jfc3RydWN0X25hbWUsIGVycm9yKQorCiAgICAgICAgICMgVGhlcmUgY2FuIGJl
IG9ubHkgb25lIGRlY2xhcmF0aW9uIGluIG5vbi1mb3ItY29udHJvbCBzdGF0ZW1lbnRzLgogICAg
ICAgICBpZiBjb250cm9sX3N0YXRlbWVudDoKICAgICAgICAgICAgIHJldHVybgpAQCAtNDMyMSw2
ICs0MzY1LDcgQEAgY2xhc3MgQ3BwQ2hlY2tlcihvYmplY3QpOgogICAgICAgICAncmVhZGFiaWxp
dHkvbXVsdGlsaW5lX3N0cmluZycsCiAgICAgICAgICdyZWFkYWJpbGl0eS9wYXJhbWV0ZXJfbmFt
ZScsCiAgICAgICAgICdyZWFkYWJpbGl0eS9uYW1pbmcnLAorICAgICAgICAncmVhZGFiaWxpdHkv
bmFtaW5nL2Fjcm9ueW0nLAogICAgICAgICAncmVhZGFiaWxpdHkvbmFtaW5nL3Byb3RlY3RlZCcs
CiAgICAgICAgICdyZWFkYWJpbGl0eS9uYW1pbmcvdW5kZXJzY29yZXMnLAogICAgICAgICAncmVh
ZGFiaWxpdHkvbnVsbCcsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL2NwcF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CmluZGV4IGZiMTcyZTViNzZjY2Y2MTA4MTE2OGNiZDRm
OTljMTQ4NTk3YzQ2Y2EuLjE5Y2RlNDkzNjM2Mzc2NWUwOTIzOTMwNDc2MThjYmI2N2EwMzc0ZjYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3Vu
aXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3Bw
X3VuaXR0ZXN0LnB5CkBAIC01OTQ5LDYgKzU5NDksNzkgQEAgY2xhc3MgV2ViS2l0U3R5bGVUZXN0
KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAne1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnfVxuJywgJ3Rlc3QuY3BwJywgcGFyYW1ldGVyX2Vycm9yX3J1bGVzKSkKIAorICAgIGRlZiB0
ZXN0X2lkZW50aWZpZXJfbmFtZXNfd2l0aF9hY3JvbnltcyhzZWxmKToKKyAgICAgICAgaWRlbnRp
Zmllcl9lcnJvcl9ydWxlcyA9ICgnLScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJytyZWFkYWJpbGl0eS9uYW1pbmcvYWNyb255bScpCisKKyAgICAgICAgIyBTdGFydCBvZiBw
YXJhbWV0ZXIgbmFtZS4KKyAgICAgICAgZXJyb3Jfc3RhcnQgPSAnVGhlIGlkZW50aWZpZXIgbmFt
ZSAiJXMiIHN0YXJ0cyB3aXRoIGEgYWNyb255bSB0aGF0IGlzIG5vdCBhbGwgbG93ZXJjYXNlLidc
CisgICAgICAgICAgICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L25hbWluZy9hY3JvbnltXSBb
NV0nCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBsb2FkKFVSTCB1cmwpOycsICd0ZXN0LmNwcCcs
IGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9y
X3N0YXJ0ICUgJ1VybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xp
bnQoJ3ZvaWQgbG9hZChVUkwgVXJsKTsnLCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1
bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcl9zdGFydCAlICdVUkwnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2b2lkIGxvYWQoVVJMIFVS
TCk7JywgJ3Rlc3QuY3BwJywgaWRlbnRpZmllcl9lcnJvcl9ydWxlcykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xp
bnQoJ3ZvaWQgbG9hZChVUkwgdXJsVG9Mb2FkKTsnLCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vy
cm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcl9zdGFydCAlICdVcmxU
b0xvYWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2b2lk
IGxvYWQoVVJMIFVybFRvTG9hZCk7JywgJ3Rlc3QuY3BwJywgaWRlbnRpZmllcl9lcnJvcl9ydWxl
cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3Jfc3RhcnQgJSAnVVJMVG9Mb2FkJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBsb2FkKFVS
TCBVUkxUb0xvYWQpOycsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5wZXJmb3JtX2xpbnQoJ2ZyaWVuZCBjbGFzcyBVUkw7JywgJ3Rlc3QuY3BwJywgaWRlbnRpZmll
cl9lcnJvcl9ydWxlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xpbnQoJ2VudW0gY2xhc3MgVVJMUGFydDsnLCAn
dGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndXNp
bmcgbmFtZXNwYWNlIFVSTEhlbHBlcnM7JywgJ3Rlc3QuY3BwJywgaWRlbnRpZmllcl9lcnJvcl9y
dWxlcykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgnZXhwbGljaXQgVVJMKEhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpOycsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVy
Zm9ybV9saW50KCdXVEZfRVhQT1JUX1BSSVZBVEUgVVJMKENGVVJMUmVmKTsnLCAndGVzdC5jcHAn
LCBpZGVudGlmaWVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBVUkw6Omlu
dmFsaWRhdGUoKScsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVy
Zm9ybV9saW50KCd2b2lkIFVSTDo6VVJMKGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgU3RyaW5nJiBy
ZWxhdGl2ZSwgY29uc3QgVVJMVGV4dEVuY29kaW5nKiBlbmNvZGluZyknLCAndGVzdC5jcHAnLCBp
ZGVudGlmaWVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgnVVJMIFVSTDo6aXNvbGF0
ZWRDb3B5KCkgY29uc3QnLCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1bGVzKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LnBlcmZvcm1fbGludCgnVVJMUGFyc2VyOjpVUkxQYXJzZXIoY29uc3QgU3RyaW5nJiBpbnB1dCwg
Y29uc3QgVVJMJiBiYXNlLCBjb25zdCBVUkxUZXh0RW5jb2RpbmcqIG5vblVURjhRdWVyeUVuY29k
aW5nKScsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCcnLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9s
aW50KCdib29sIFVSTFBhcnNlcjo6aW50ZXJuYWxWYWx1ZXNDb25zaXN0ZW50KGNvbnN0IFVSTCYg
dXJsKScsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wZXJmb3Jt
X2xpbnQoJ1N0cmluZyBtX3VybDsnLCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1bGVz
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLnBlcmZvcm1fbGludCgnSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnVybCgpJywgJ3Rlc3QuY3BwJywgaWRlbnRpZmllcl9lcnJvcl9ydWxlcykp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcl9zdGFydCAlICdVcmw6OlVybCcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xpbnQoJ3ZvaWQgVXJsOjpVcmwo
KScsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGVycm9yX3N0YXJ0ICUgJ1VybFBhcnNlOjpVcmxQYXJzZScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5wZXJmb3JtX2xpbnQoJ3ZvaWQgVXJsUGFyc2U6OlVybFBhcnNl
KCknLCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1bGVzKSkKKworICAgICAgICAjIEZJ
WE1FOiBIYXJkIHRvIGNoZWNrIG1pZGRsZSB3b3JkcyB3aXRob3V0IGtub3dpbmcgdGhhdCB0aGUg
d29yZCB0byB0aGUgbGVmdCBkb2Vzbid0IGVuZCB3aXRoIGFuIGFjcm9ueW0uCisKKyAgICAgICAg
ZXJyb3JfZW5kID0gJ1RoZSBpZGVudGlmaWVyIG5hbWUgIiVzIiBlbmRzIHdpdGggYSBhY3Jvbnlt
IHRoYXQgaXMgbm90IGFsbCB1cHBlcmNhc2UuJ1wKKyAgICAgICAgICAgICAgICAgICAgJyAgW3Jl
YWRhYmlsaXR5L25hbWluZy9hY3JvbnltXSBbNV0nCisKKyAgICAgICAgIyBFbmQgb2YgcGFyYW1l
dGVyIG5hbWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3JfZW5kICUgJ2xvYWR1cmwn
LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2b2lkIGxvYWQo
VVJMIGxvYWR1cmwpOycsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJyb3JfcnVsZXMpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yX2VuZCAlICdsb2FkVXJsJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgndm9pZCBsb2FkKFVSTCBsb2FkVXJsKTsn
LCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBlcmZvcm1fbGludCgn
dm9pZCBsb2FkKFVSTCBsb2FkVVJMKTsnLCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1
bGVzKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYucGVyZm9ybV9saW50KCd2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6aW5z
cGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmIG5ld1VSTCknLCAndGVzdC5jcHAnLCBpZGVu
dGlmaWVyX2Vycm9yX3J1bGVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcl9lbmQg
JSAndGVzdFBhdGhPclVybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wZXJmb3Jt
X2xpbnQoJ3N0YXRpYyB2b2lkIGNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQoY29uc3QgY2hhciog
dGVzdFBhdGhPclVybCknLCAndGVzdC5jcHAnLCBpZGVudGlmaWVyX2Vycm9yX3J1bGVzKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcl9lbmQgJSAnbG9jYWxQYXRoT3JVcmwnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGVyZm9ybV9saW50KCdhdXRvIGxvY2FsUGF0aE9y
VXJsID0gU3RyaW5nKHRlc3RQYXRoT3JVUkwpOycsICd0ZXN0LmNwcCcsIGlkZW50aWZpZXJfZXJy
b3JfcnVsZXMpKQorCiAgICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6CiAgICAgICAgICMgQSBj
b21tZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGlzIG9rLgogICAgICAgICBzZWxmLmFz
c2VydF9saW50KCcvLyBjb21tZW50JywgJycpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>