<?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>52390</bug_id>
          
          <creation_ts>2011-01-13 12:09:50 -0800</creation_ts>
          <short_desc>Must strip comments from WebGL shaders before enforcing character set</short_desc>
          <delta_ts>2011-01-20 12:45:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>50929</dependson>
    
    <dependson>52396</dependson>
          <blocked>52833</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>333864</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-13 12:09:50 -0800</bug_when>
    <thetext>The checks added in https://bugs.webkit.org/show_bug.cgi?id=50929 which verify that WebGL shaders must only contain characters from the ESSL character set are too strict. We are rejecting shaders which contain quotes in comments, which is causing much user content to break. We can allow these shaders to work by stripping comments before handing the shaders down to the OpenGL implementation. When doing so we need to be careful to preserve line numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334832</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-14 19:39:13 -0800</bug_when>
    <thetext>As part of this fix, the changes from https://bugs.webkit.org/show_bug.cgi?id=52396 are going to be reverted. They are allowing invalid characters to be passed to entry points which should not allow them under any circumstances (bindAttribLocation, getAttribLocation, and getUniformLocation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334841</commentid>
    <comment_count>2</comment_count>
      <attachid>79051</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-14 20:28:29 -0800</bug_when>
    <thetext>Created attachment 79051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335019</commentid>
    <comment_count>3</comment_count>
      <attachid>79051</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-16 01:08:52 -0800</bug_when>
    <thetext>Comment on attachment 79051
Patch

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

A few small nits below to consider. Thanks!

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:153
&gt; +        void process(UChar character);

Remove &quot;character&quot; as it adds no information.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:250
&gt; +                if (peek(temp)) {

Might be nice to collapse this with the previous if
if (c == &apos;/&apos; &amp;&amp; peek(temp)) {

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:290
&gt; +                if (peek(temp) &amp;&amp; temp == &apos;/&apos;) {

Would be nice to combine these if&apos;s (like before).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335888</commentid>
    <comment_count>4</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-18 10:05:12 -0800</bug_when>
    <thetext>I see &quot; &apos; ` are added back to the invalid charset now that comments are stripped first.  However, won&apos;t something like that fail?

#ERROR &quot;...&quot;

Gregg mentioned that the above is actually in the GLSL conformance test, so it should be legal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336058</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 13:31:52 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 79051 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79051&amp;action=review
&gt; 
&gt; A few small nits below to consider. Thanks!
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:153
&gt; &gt; +        void process(UChar character);
&gt; 
&gt; Remove &quot;character&quot; as it adds no information.

Done.

&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:250
&gt; &gt; +                if (peek(temp)) {
&gt; 
&gt; Might be nice to collapse this with the previous if
&gt; if (c == &apos;/&apos; &amp;&amp; peek(temp)) {

Done.

&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:290
&gt; &gt; +                if (peek(temp) &amp;&amp; temp == &apos;/&apos;) {
&gt; 
&gt; Would be nice to combine these if&apos;s (like before).

Done.

Will address all of these in the landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336060</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 13:35:26 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I see &quot; &apos; ` are added back to the invalid charset now that comments are stripped first.  However, won&apos;t something like that fail?
&gt; 
&gt; #ERROR &quot;...&quot;
&gt; 
&gt; Gregg mentioned that the above is actually in the GLSL conformance test, so it should be legal.

It probably will. Feel free to file a separate bug about that issue. I think it&apos;s more important at this point to get back to a state where obviously invalid characters are rejected from APIs like getUniformLocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336083</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 14:12:11 -0800</bug_when>
    <thetext>Committed r76063: &lt;http://trac.webkit.org/changeset/76063&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336210</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-18 16:48:53 -0800</bug_when>
    <thetext>webkit-patch failure-reason seems to think that this caused a canvas test to start failing on leopard?

SUCCESS: Build 26796 (r76065) was the first to show failures: set([u&apos;canvas/philip/tests/2d.text.draw.align.center.html&apos;])</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336212</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 16:50:43 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; webkit-patch failure-reason seems to think that this caused a canvas test to start failing on leopard?
&gt; 
&gt; SUCCESS: Build 26796 (r76065) was the first to show failures: set([u&apos;canvas/philip/tests/2d.text.draw.align.center.html&apos;])

As far as I have seen that test has been failing at least intermittently for a while. I don&apos;t think there&apos;s any way this patch could have caused it to start failing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79051</attachid>
            <date>2011-01-14 20:28:29 -0800</date>
            <delta_ts>2011-01-16 01:08:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52390-20110114202827.patch</filename>
            <type>text/plain</type>
            <size>17741</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1ODY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTQgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE11c3Qgc3RyaXAgY29tbWVudHMgZnJvbSBXZWJHTCBzaGFkZXJz
IGJlZm9yZSBlbmZvcmNpbmcgY2hhcmFjdGVyIHNldAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzOTAKKworICAgICAgICBTdHJpcCBjb21tZW50cyBm
cm9tIGluY29taW5nIHNoYWRlcnMsIHByZXNlcnZpbmcgbGluZSBudW1iZXJzLAorICAgICAgICBi
ZWZvcmUgdmFsaWRhdGluZyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgRVNTTCBjaGFyYWN0ZXIg
c2V0LgorICAgICAgICBSZXZlcnQgY2hhbmdlcyBmcm9tIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0Lzc1NzM1IHdoaWNoCisgICAgICAgIGFsbG93ZWQgaW52YWxpZCBjaGFyYWN0ZXJz
IHRvIGJlIHBhc3NlZCB0byBjZXJ0YWluIEFQSXMuCisKKyAgICAgICAgVGVzdGVkIHdpdGggV2Vi
R0wgbGF5b3V0IHRlc3RzLCBjb25mb3JtYW5jZSB0ZXN0IHN1aXRlIGFuZCBzZXZlcmFsCisgICAg
ICAgIFdlYkdMIGRlbW9zIGluIGJvdGggU2FmYXJpIGFuZCBDaHJvbWl1bS4KKworICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHJpcENvbW1lbnRzOjpTdHJpcENvbW1lbnRzOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hhZGVyU291cmNlKToKKwogMjAxMS0wMS0xNCAg
VG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFs
ZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc1ODMzKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTEwMSwxMiArMTAyLDExIEBAIG5hbWVzcGFjZSB7CiAKICAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRvIHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVm
aW5lZCBpbgogICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCi0gICAgLy8gV2Ug
bWFrZSBleGNlcHRpb25zIGZvciAiICcgYC4KICAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVu
c2lnbmVkIGNoYXIgYykKICAgICB7CiAgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJl
IHZhbGlkIGV4Y2VwdCAiICQgYCBAIFwgJyBERUwuCiAgICAgICAgIGlmIChjID49IDMyICYmIGMg
PD0gMTI2Ci0gICAgICAgICAgICAmJiBjICE9ICckJyAmJiBjICE9ICdAJyAmJiBjICE9ICdcXCcp
CisgICAgICAgICAgICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9
ICdAJyAmJiBjICE9ICdcXCcgJiYgYyAhPSAnXCcnKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIC8vIEhvcml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9y
bSBmZWVkLCBjYXJyaWFnZSByZXR1cm4KICAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCkBAIC0x
MTUsNiArMTE1LDE5MyBAQCBuYW1lc3BhY2UgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCisgICAgLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dz
IG5vbi1BU0NJSSBjaGFyYWN0ZXJzCisgICAgLy8gdG8gYmUgdXNlZCBpbiBjb21tZW50cyB3aXRo
b3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9ucyBu
b3QgZXhwZWN0aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgR0xTTCBFUyBzZXQuCisgICAgY2xh
c3MgU3RyaXBDb21tZW50cyB7CisgICAgcHVibGljOgorICAgICAgICBTdHJpcENvbW1lbnRzKGNv
bnN0IFN0cmluZyYgc3RyKQorICAgICAgICAgICAgOiBtX3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZM
aW5lKQorICAgICAgICAgICAgLCBtX3NvdXJjZVN0cmluZyhzdHIpCisgICAgICAgICAgICAsIG1f
bGVuZ3RoKHN0ci5sZW5ndGgoKSkKKyAgICAgICAgICAgICwgbV9wb3NpdGlvbigwKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZSgpOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHJl
c3VsdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmco
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBoYXNNb3JlQ2hhcmFj
dGVycygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9wb3NpdGlvbiA8IG1fbGVu
Z3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcGFyc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJhY3RlcnMoKSkgeworICAgICAgICAgICAgICAgIHBy
b2Nlc3MoY3VycmVudCgpKTsKKyAgICAgICAgICAgICAgICAvLyBwcm9jZXNzKCkgbWlnaHQgYWR2
YW5jZSB0aGUgcG9zaXRpb24uCisgICAgICAgICAgICAgICAgaWYgKGhhc01vcmVDaGFyYWN0ZXJz
KCkpCisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgcHJvY2VzcyhVQ2hhciBjaGFyYWN0ZXIpOworCisgICAgICAg
IGJvb2wgcGVlayhVQ2hhciYgY2hhcmFjdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bV9wb3NpdGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFd
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBj
dXJyZW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fcG9zaXRpb24gPCBtX2xl
bmd0aCk7CisgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbl07Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGFkdmFuY2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICArK21fcG9zaXRpb247CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzTmV3bGluZShVQ2hh
ciBjaGFyYWN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8g
Y2Fub25pY2FsaXplIG5ld2xpbmUgcmVsYXRlZCBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgcmV0
dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGVtaXQoVUNoYXIgY2hhcmFjdGVyKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBl
bnVtIFBhcnNlU3RhdGUgeworICAgICAgICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBBU0NJSSBu
b24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgeWV0IG9uCisgICAgICAgICAgICAvLyB0aGlzIGxpbmUu
IFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29yCisgICAgICAgICAgICAv
LyBkaXJlY3RpdmUuCisgICAgICAgICAgICBCZWdpbm5pbmdPZkxpbmUsCisKKyAgICAgICAgICAg
IC8vIEhhdmUgc2VlbiBhdCBsZWFzdCBvbmUgQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVy
CisgICAgICAgICAgICAvLyBvbiB0aGlzIGxpbmUuCisgICAgICAgICAgICBNaWRkbGVPZkxpbmUs
CisKKyAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFz
c2VzIHRocm91Z2ggYWxsCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQg
b2YgdGhlIGxpbmUuIERpc2FibGVzIGNvbW1lbnQKKyAgICAgICAgICAgIC8vIHByb2Nlc3Npbmcu
CisgICAgICAgICAgICBJblByZXByb2Nlc3NvckRpcmVjdGl2ZSwKKworICAgICAgICAgICAgLy8g
SGFuZGxpbmcgYSBzaW5nbGUtbGluZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCisgICAg
ICAgICAgICAvLyByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgorICAgICAgICAgICAgSW5T
aW5nbGVMaW5lQ29tbWVudCwKKworICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5l
IGNvbW1lbnQuIE5ld2xpbmVzIGFyZSBwYXNzZWQKKyAgICAgICAgICAgIC8vIHRocm91Z2ggdG8g
cHJlc2VydmUgbGluZSBudW1iZXJzLgorICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50Cisg
ICAgICAgIH07CisKKyAgICAgICAgUGFyc2VTdGF0ZSBtX3BhcnNlU3RhdGU7CisgICAgICAgIFN0
cmluZyBtX3NvdXJjZVN0cmluZzsKKyAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgICAg
IHVuc2lnbmVkIG1fcG9zaXRpb247CisgICAgICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwor
ICAgIH07CisKKyAgICB2b2lkIFN0cmlwQ29tbWVudHM6OnByb2Nlc3MoVUNoYXIgYykKKyAgICB7
CisgICAgICAgIGlmIChpc05ld2xpbmUoYykpIHsKKyAgICAgICAgICAgIC8vIE5vIG1hdHRlciB3
aGF0IHN0YXRlIHdlIGFyZSBpbiwgcGFzcyB0aHJvdWdoIG5ld2xpbmVzCisgICAgICAgICAgICAv
LyBzbyB3ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgICAgICBlbWl0KGMpOworCisg
ICAgICAgICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKKyAgICAg
ICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBCZWdpbm5pbmdPZkxpbmU7CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFVDaGFyIHRlbXAgPSAwOworICAgICAgICBz
d2l0Y2ggKG1fcGFyc2VTdGF0ZSkgeworICAgICAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKKyAg
ICAgICAgICAgIGlmIChXVEY6OmlzQVNDSUlTcGFjZShjKSkgeworICAgICAgICAgICAgICAgIGVt
aXQoYyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChjID09ICcjJykgeworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluUHJl
cHJvY2Vzc29yRGlyZWN0aXZlOworICAgICAgICAgICAgICAgIGVtaXQoYyk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRyYW5zaXRpb24g
dG8gbm9ybWFsIHN0YXRlIGFuZCByZS1oYW5kbGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgbV9w
YXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5lOworICAgICAgICAgICAgcHJvY2VzcyhjKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWlkZGxlT2ZMaW5lOgorICAgICAgICAgICAg
aWYgKGMgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgaWYgKHBlZWsodGVtcCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgICAg
ICAgICAgZW1pdCgnICcpOworICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVsdGlMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEVtaXQgdGhlIGNvbW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFuIHVuY2xvc2VkIGNvbW1lbnQgYW5kIHdlIHdhbnQg
dG8gbGF0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hbCBhbiBlcnJvci4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVtaXQoJyonKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAg
ICAgICAgIC8vIE5vIG1hdHRlciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAor
ICAgICAgICAgICAgLy8gdGhyb3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3Rh
dGUuIFRoaXMKKyAgICAgICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8g
ZG8gbG9uZyB0ZXJtLCBidXQgaXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNl
cnJvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLgorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKKyAgICAg
ICAgICAgIC8vIFRoZSBuZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRh
a2VzIGNhcmUKKyAgICAgICAgICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBn
ZXQgb3V0IG9mIHRoZQorICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxv
dyBhbGwgb3RoZXIgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgSW5NdWx0aUxpbmVDb21tZW50OgorICAgICAgICAgICAgaWYgKGMgPT0gJyonKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBlZWsodGVtcCkgJiYgdGVtcCA9PSAnLycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdCgnKicpOworICAgICAgICAgICAgICAgICAgICBlbWl0KCcvJyk7CisgICAg
ICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAgICAgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90
aGVyIGNoYXJhY3RlcnMuIFVuY2xlYXIgd2hldGhlciB3ZSBtYXkKKyAgICAgICAgICAgIC8vIHdh
bnQgb3IgbmVlZCB0byBqdXN0IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQorICAg
ICAgICAgICAgLy8gdG8gcHJlc2VydmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJw
b3Nlcy4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogfSAvLyBuYW1lc3Bh
Y2UgYW5vbnltb3VzCiAKIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlciB7CkBAIC0yNTQ3LDkgKzI3
MzQsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZQogICAgIFVO
VVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmlu
ZyhzdHJpbmcpKQorICAgIFN0cmluZyBzdHJpbmdXaXRob3V0Q29tbWVudHMgPSBTdHJpcENvbW1l
bnRzKHN0cmluZykucmVzdWx0KCk7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZyhzdHJpbmdXaXRo
b3V0Q29tbWVudHMpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zaGFkZXJTb3Vy
Y2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZyk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJT
b3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRDb21tZW50cyk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NzU4NjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyNCBAQAorMjAxMS0wMS0xNCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTXVzdCBzdHJp
cCBjb21tZW50cyBmcm9tIFdlYkdMIHNoYWRlcnMgYmVmb3JlIGVuZm9yY2luZyBjaGFyYWN0ZXIg
c2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjM5
MAorCisgICAgICAgIEluY29ycG9yYXRlZCBub24tQVNDSUkgR0xTTCBjb25mb3JtYW5jZSB0ZXN0
cyBmcm9tIEtocm9ub3MKKyAgICAgICAgcmVwb3NpdG9yeS4gVXBkYXRlZCBhbmQgc3luY2hyb25p
emVkIGludmFsaWQtcGFzc2VkLXBhcmFtcy5odG1sCisgICAgICAgIHdpdGggS2hyb25vcyByZXBv
c2l0b3J5LCB1bmRvaW5nIGNoYW5nZXMgZnJvbQorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQu
b3JnL2NoYW5nZXNldC83NTczNSAuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbHNs
LWNvbmZvcm1hbmNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9p
bnZhbGlkLXBhc3NlZC1wYXJhbXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL2ludmFsaWQtcGFzc2VkLXBhcmFtcy5odG1sOgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3NoYWRlcnMvMDBfc2hhZGVycy50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvc2hhZGVycy9taXNjOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9zaGFk
ZXJzL21pc2MvMDBfc2hhZGVycy50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL3NoYWRlcnMvbWlzYy9ub24tYXNjaWktY29tbWVudHMudmVydDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvc2hhZGVycy9taXNjL25vbi1hc2NpaS52ZXJ0OiBBZGRlZC4K
KwogMjAxMS0wMS0xNCAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBOb3QgcmV2aWV3ZWQsIHVwZGF0ZSBvZiB0ZXN0IGV4cGVjdGF0aW9ucy4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsc2wtY29uZm9ybWFuY2UtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsc2wtY29uZm9y
bWFuY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3NTgzMykKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2dsc2wtY29uZm9ybWFuY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC05NCw2ICs5NCw4IEBAIFBBU1MgW3NoYWRlcnMvaW1wbGljaXQvdGVybmFyeV9pbnRfZmxv
YXQKIFBBU1MgW3NoYWRlcnMvaW1wbGljaXQvdGVybmFyeV9pdmVjMl92ZWMyLnZlcnQvZnNoYWRl
cl06IGltcGxpY2l0IGNhc3Qgb2YgaXZlYzIgdG8gdmVjMiBpbiB0ZXJuYXJ5IGV4cHJlc3Npb24g
c2hvdWxkIGZhaWwKIFBBU1MgW3NoYWRlcnMvaW1wbGljaXQvdGVybmFyeV9pdmVjM192ZWMzLnZl
cnQvZnNoYWRlcl06IGltcGxpY2l0IGNhc3Qgb2YgaXZlYzMgdG8gdmVjMyBpbiB0ZXJuYXJ5IGV4
cHJlc3Npb24gc2hvdWxkIGZhaWwKIFBBU1MgW3NoYWRlcnMvaW1wbGljaXQvdGVybmFyeV9pdmVj
NF92ZWM0LnZlcnQvZnNoYWRlcl06IGltcGxpY2l0IGNhc3Qgb2YgaXZlYzQgdG8gdmVjNCBpbiB0
ZXJuYXJ5IGV4cHJlc3Npb24gc2hvdWxkIGZhaWwKK1BBU1MgW3NoYWRlcnMvbWlzYy9ub24tYXNj
aWkudmVydC9mc2hhZGVyXTogTm9uIGFzY2lpIGRhdGEgaW4gc291cmNlIHNob3VsZCBmYWlsCitQ
QVNTIFtzaGFkZXJzL21pc2Mvbm9uLWFzY2lpLWNvbW1lbnRzLnZlcnQvZnNoYWRlcl06IE5vbiBh
c2NpaSBjb21tZW50cyBpbiBzb3VyY2Ugc2hvdWxkIHN1Y2NlZWQKIFBBU1MgW3NoYWRlcnMvcmVz
ZXJ2ZWQvX3dlYmdsX2ZpZWxkLnZlcnQvZnNoYWRlcl06IHVzZSBvZiByZXNlcnZlZCBfd2ViZ2wg
cHJlZml4IGFzIHN0cnVjdHVyZSBmaWVsZCBzaG91bGQgZmFpbAogUEFTUyBbc2hhZGVycy9yZXNl
cnZlZC9fd2ViZ2xfZnVuY3Rpb24udmVydC9mc2hhZGVyXTogdXNlIG9mIHJlc2VydmVkIF93ZWJn
bCBwcmVmaXggYXMgZnVuY3Rpb24gbmFtZSBzaG91bGQgZmFpbAogUEFTUyBbc2hhZGVycy9yZXNl
cnZlZC9fd2ViZ2xfc3RydWN0LnZlcnQvZnNoYWRlcl06IHVzZSBvZiByZXNlcnZlZCBfd2ViZ2wg
cHJlZml4IGFzIHN0cnVjdHVyZSBuYW1lIHNob3VsZCBmYWlsCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9pbnZhbGlkLXBhc3NlZC1wYXJhbXMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ludmFsaWQtcGFzc2VkLXBh
cmFtcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDc1ODMzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvaW52YWxpZC1wYXNzZWQtcGFyYW1zLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNjMsMjQgKzYzLDQyIEBAIFBBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRl
eHQuTk9fRVIKIFBBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuTk9fRVJST1IKIAog
VGVzdCBzaGFkZXJTb3VyY2UoKSB3aXRoIGludmFsaWQgY2hhcmFjdGVycworUEFTUyBjb250ZXh0
LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgogUEFTUyBjb250ZXh0LmdldEVycm9yKCkg
aXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250
ZXh0Lk5PX0VSUk9SCiBQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURf
VkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuTk9fRVJST1IKK1BBU1Mg
Y29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0
LmdldEVycm9yKCkgaXMgY29udGV4dC5OT19FUlJPUgorUEFTUyBjb250ZXh0LmdldEVycm9yKCkg
aXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250
ZXh0Lk5PX0VSUk9SCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURf
VkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuTk9fRVJST1IKIFBBU1Mg
Y29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQogCiBUZXN0IGJpbmRB
dHRyaWJMb2NhdGlvbigpIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzCiBQQVNTIGNvbnRleHQuZ2V0
RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKIFBBU1MgY29udGV4dC5nZXRFcnJvcigp
IGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQogUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29u
dGV4dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklO
VkFMSURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9W
QUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCiAK
IFRlc3QgZ2V0QXR0cmliTG9jYXRpb24oKSB3aXRoIGludmFsaWQgY2hhcmFjdGVycwogUEFTUyBj
b250ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCiBQQVNTIGNvbnRleHQu
Z2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKIFBBU1MgY29udGV4dC5nZXRFcnJv
cigpIGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMg
Y29udGV4dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0
LklOVkFMSURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJ
RF9WQUxVRQogCiBUZXN0IGdldFVuaWZvcm1Mb2NhdGlvbigpIHdpdGggaW52YWxpZCBjaGFyYWN0
ZXJzCiBQQVNTIGNvbnRleHQuZ2V0RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKIFBB
U1MgY29udGV4dC5nZXRFcnJvcigpIGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQogUEFTUyBjb250
ZXh0LmdldEVycm9yKCkgaXMgY29udGV4dC5JTlZBTElEX1ZBTFVFCitQQVNTIGNvbnRleHQuZ2V0
RXJyb3IoKSBpcyBjb250ZXh0LklOVkFMSURfVkFMVUUKK1BBU1MgY29udGV4dC5nZXRFcnJvcigp
IGlzIGNvbnRleHQuSU5WQUxJRF9WQUxVRQorUEFTUyBjb250ZXh0LmdldEVycm9yKCkgaXMgY29u
dGV4dC5JTlZBTElEX1ZBTFVFCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW52YWxpZC1wYXNzZWQtcGFyYW1z
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW52YWxp
ZC1wYXNzZWQtcGFyYW1zLmh0bWwJKHJldmlzaW9uIDc1ODMzKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvaW52YWxpZC1wYXNzZWQtcGFyYW1zLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDE3ICs3NywyNyBAQCBzaG91bGRHZW5lcmF0ZUdMRXJyb3IoY29udGV4dCwgY29udGV4
dC5OCiAKIGRlYnVnKCIiKTsKIGRlYnVnKCJTZXQgdXAgYSBwcm9ncmFtIHRvIHRlc3QgaW52YWxp
ZCBjaGFyYWN0ZXJzIik7Ci12YXIgaW52YWxpZFNldCA9IFsnJCcsICdAJywgJ1xcJ107Cit2YXIg
aW52YWxpZFNldCA9IFsnIicsICckJywgJ2AnLCAnQCcsICdcXCcsICInIl07CiB2YXIgdmFsaWRV
bmlmb3JtTmFtZSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BR
UlNUVVZXWFlaXzEyMzQ1Njc4OTAiOwogdmFyIHZhbGlkQXR0cmliTmFtZSA9ICJhYmNkZWZnaGlq
a2xtbm9wcXJzdHV2d3h5el9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTAiOwot
dmFyIHZhbGlkU2hhZGVyU291cmNlID0gInVuaWZvcm0gZmxvYXQgIiArIHZhbGlkVW5pZm9ybU5h
bWUgKyAiO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAidmFyeWluZyBmbG9hdCAiICsg
dmFsaWRBdHRyaWJOYW1lICsgIjtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgInZvaWQg
bWFpbigpIHtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgdmFsaWRBdHRyaWJOYW1lICAr
ICIgPSAiICsgdmFsaWRVbmlmb3JtTmFtZSArICI7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICArICJnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKTsgfVxuIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICsgIi8vListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyAiOworZnVu
Y3Rpb24gZ2VuZXJhdGVTaGFkZXJTb3VyY2Uob3B0X2ludmFsaWRJZGVudGlmaWVyQ2hhciwgb3B0
X2ludmFsaWRDb21tZW50Q2hhcikgeworICB2YXIgaW52YWxpZElkZW50aWZpZXJTdHJpbmcgPSAi
IjsKKyAgdmFyIGludmFsaWRDb21tZW50U3RyaW5nID0gIiI7CisgIGlmIChvcHRfaW52YWxpZElk
ZW50aWZpZXJDaGFyICE9IHVuZGVmaW5lZCkgeworICAgIGludmFsaWRJZGVudGlmaWVyU3RyaW5n
ICs9IG9wdF9pbnZhbGlkSWRlbnRpZmllckNoYXI7CisgIH0KKyAgaWYgKG9wdF9pbnZhbGlkQ29t
bWVudENoYXIgIT0gdW5kZWZpbmVkKSB7CisgICAgaW52YWxpZENvbW1lbnRTdHJpbmcgKz0gb3B0
X2ludmFsaWRDb21tZW50Q2hhcjsKKyAgfQorICByZXR1cm4gInVuaWZvcm0gZmxvYXQgIiArIHZh
bGlkVW5pZm9ybU5hbWUgKyBpbnZhbGlkSWRlbnRpZmllclN0cmluZyArICI7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgInZhcnlpbmcgZmxvYXQgIiArIHZhbGlkQXR0cmliTmFtZSAr
ICI7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyB2YWxpZEF0dHJpYk5hbWUgICsgIiA9ICIgKyB2YWxp
ZFVuaWZvcm1OYW1lICsgIjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiZ2xfUG9z
aXRpb24gPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7IH1cbiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICsgIi8vListLyolPD5bXSgpe31efCZ+PSE6Oyw/IyAiICsgaW52YWxpZENvbW1l
bnRTdHJpbmc7Cit9CiB2YXIgdlNoYWRlciA9IGNvbnRleHQuY3JlYXRlU2hhZGVyKGNvbnRleHQu
VkVSVEVYX1NIQURFUik7Ci1jb250ZXh0LnNoYWRlclNvdXJjZSh2U2hhZGVyLCB2YWxpZFNoYWRl
clNvdXJjZSk7Citjb250ZXh0LnNoYWRlclNvdXJjZSh2U2hhZGVyLCBnZW5lcmF0ZVNoYWRlclNv
dXJjZSgpKTsKIGNvbnRleHQuY29tcGlsZVNoYWRlcih2U2hhZGVyKTsKIHNob3VsZEJlKCJjb250
ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC5OT19FUlJPUiIpOwogdmFyIGZTaGFkZXIgPSBjb250
ZXh0LmNyZWF0ZVNoYWRlcihjb250ZXh0LkZSQUdNRU5UX1NIQURFUik7CkBAIC0xMTMsNyArMTIz
LDEwIEBAIHNob3VsZEJlKCJjb250ZXh0LmdldEVycm9yKCkiLCAiY29udGV4dC4KIGRlYnVnKCIi
KTsKIGRlYnVnKCJUZXN0IHNoYWRlclNvdXJjZSgpIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIik7
CiBmb3IgKHZhciBpID0gMDsgaSA8IGludmFsaWRTZXQubGVuZ3RoOyArK2kpIHsKLSAgdmFyIGlu
dmFsaWRTaGFkZXJTb3VyY2UgPSB2YWxpZFNoYWRlclNvdXJjZSArICJcbi8vIiArIGludmFsaWRT
ZXRbaV07CisgIHZhciB2YWxpZFNoYWRlclNvdXJjZSA9IGdlbmVyYXRlU2hhZGVyU291cmNlKHVu
ZGVmaW5lZCwgaW52YWxpZFNldFtpXSk7CisgIGNvbnRleHQuc2hhZGVyU291cmNlKHZTaGFkZXIs
IHZhbGlkU2hhZGVyU291cmNlKTsKKyAgc2hvdWxkQmUoImNvbnRleHQuZ2V0RXJyb3IoKSIsICJj
b250ZXh0Lk5PX0VSUk9SIik7CisgIHZhciBpbnZhbGlkU2hhZGVyU291cmNlID0gZ2VuZXJhdGVT
aGFkZXJTb3VyY2UoaW52YWxpZFNldFtpXSwgdW5kZWZpbmVkKTsKICAgY29udGV4dC5zaGFkZXJT
b3VyY2UodlNoYWRlciwgaW52YWxpZFNoYWRlclNvdXJjZSk7CiAgIHNob3VsZEJlKCJjb250ZXh0
LmdldEVycm9yKCkiLCAiY29udGV4dC5JTlZBTElEX1ZBTFVFIik7CiB9CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zaGFkZXJzLzAwX3NoYWRlcnMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NoYWRlcnMvMDBfc2hhZGVycy50eHQJ
KHJldmlzaW9uIDc1ODMzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2hhZGVy
cy8wMF9zaGFkZXJzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKIGltcGxpY2l0
LzAwX3NoYWRlcnMudHh0CittaXNjLzAwX3NoYWRlcnMudHh0CiByZXNlcnZlZC8wMF9zaGFkZXJz
LnR4dAogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zaGFkZXJzL21pc2Mv
MDBfc2hhZGVycy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvc2hhZGVycy9taXNjLzAwX3NoYWRlcnMudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvc2hhZGVycy9taXNjLzAwX3NoYWRlcnMudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMgQEAKK25vbi1hc2NpaS52ZXJ0Citub24tYXNjaWktY29tbWVudHMu
dmVydAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zaGFkZXJzL21pc2Mv
bm9uLWFzY2lpLWNvbW1lbnRzLnZlcnQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvc2hhZGVycy9taXNjL25vbi1hc2NpaS1jb21tZW50cy52ZXJ0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2hhZGVycy9taXNjL25vbi1h
c2NpaS1jb21tZW50cy52ZXJ0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKy8vIE5vbiBh
c2NpaSBjb21tZW50cyBpbiBzb3VyY2Ugc2hvdWxkIHN1Y2NlZWQKKy8vIIKxguqCzYJggnKCYoJo
gmiCxYLNgsiCooLFgreBQgorLy8ggnOCiIKJgpOBQIJogpOBQIJtgo+ClIFAgmCCcoJigmiCaAor
LyoKKyAqIIJzgoiCiYKTgUCCaIKTgUCCbYKPgpSBQIJggnKCYoJogmgKKyAqLwordm9pZCBtYWlu
KCkgeworICBnbF9Qb3NpdGlvbiA9IHZlYzQoMSwxLDEsMSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9zaGFkZXJzL21pc2Mvbm9uLWFzY2lpLnZlcnQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2hhZGVycy9taXNjL25vbi1hc2Np
aS52ZXJ0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2hh
ZGVycy9taXNjL25vbi1hc2NpaS52ZXJ0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKy8v
IE5vbiBhc2NpaSBkYXRhIGluIHNvdXJjZSBzaG91bGQgZmFpbAorLy8gU2VlIEdMU0wgRVMgU3Bl
YyAxLjAuMTcgc2VjdGlvbiAzLjEgYW5kIDMuMgorLy8ggrGC6oLNgmCCcoJigmiCaILFgs2CyIKi
gsWCt4FCCisvLyCCc4KIgomCk4FAgmiCk4FAgm2Cj4KUgUCCYIJygmKCaIJoCit1bmlmb3JtIG1h
dDQggm2Cj4KUgmCCcoJigmiCaDsKK3ZvaWQgbWFpbigpIHsKKyAgZ2xfUG9zaXRpb24gPSB2ZWM0
KDEsMSwxLDEpOworfQo=
</data>
<flag name="review"
          id="70434"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="70435"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>