<?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>20247</bug_id>
          
          <creation_ts>2008-07-31 17:57:06 -0700</creation_ts>
          <short_desc>setAttributeNode() does not work when attribute name has a capital letter in it</short_desc>
          <delta_ts>2008-12-12 03:35:25 -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>DOM</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Roman">eroman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>jchaffraix</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>87538</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Roman">eroman</who>
    <bug_when>2008-07-31 17:57:06 -0700</bug_when>
    <thetext>When an attribute is set using setAttributeNode(), it does not get set when the name has a capital letter in it.

This problem causes problems on this site:
http://www.staralliance.com/en/travellers/index.html

Works fine in Firefox and IE, and I don&apos;t see anything in the spec which restricts the attribute names in this fashion (moreover the plain old setAttribute() does not have this problem).

Reproduces for me in Safari 3.1, and with nightly webkit.
Test case on its way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87539</commentid>
    <comment_count>1</comment_count>
      <attachid>22592</attachid>
    <who name="Eric Roman">eroman</who>
    <bug_when>2008-07-31 17:58:05 -0700</bug_when>
    <thetext>Created attachment 22592
sets attributes using setAttributeNode() -- those with capitals in their name fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87541</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Roman">eroman</who>
    <bug_when>2008-07-31 22:25:16 -0700</bug_when>
    <thetext>The problem is that when inserting an attribute via setAttributeNode(), we do not normalize the key to lowercase.

The code in getAttribute() expects all the keys to be lowercased, since it does an equality test on the lowercase of the name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87555</commentid>
    <comment_count>3</comment_count>
      <attachid>22595</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-08-01 02:05:09 -0700</bug_when>
    <thetext>Created attachment 22595
get/set test case

Interesting - looks like in Firefox, Element.setAttributeNode(node) does not change the case of node&apos;s name, but the inserted node has a lowercase name:
        var attrib = document.createAttribute(&quot;myAttrib&quot;);
        attrib.nodeValue = &quot;XXX&quot;;
        getNode().setAttributeNode(attrib);
        alert(getNode().getAttributeNode(&quot;myAttrib&quot;).name);
        alert(attrib.name);

Also, getAttributeNode is case-insensitive in HTML in Firefox 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87556</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-08-01 02:07:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/6118218&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87620</commentid>
    <comment_count>5</comment_count>
      <attachid>22610</attachid>
    <who name="Eric Roman">eroman</who>
    <bug_when>2008-08-01 14:07:57 -0700</bug_when>
    <thetext>Created attachment 22610
Several attribute tests, with static compatibility summary for firefox2, firefox3, opera9.5, safari3.1, ie7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89116</commentid>
    <comment_count>6</comment_count>
      <attachid>22938</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-22 09:39:44 -0700</bug_when>
    <thetext>Created attachment 22938
Proposed fix: add bool to getAttributeItem to tune case sensitivity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89118</commentid>
    <comment_count>7</comment_count>
      <attachid>22938</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-22 09:49:10 -0700</bug_when>
    <thetext>Comment on attachment 22938
Proposed fix: add bool to getAttributeItem to tune case sensitivity

Looks like a great fix!

 10         Add a boolean parameter to getAttributeItem to choose between case sensitive and case insisitive

Typo here. It should be &quot;insensitive&quot;.

 177             if (name == (shouldIgnoreAttributeCase ? m_attributes[i]-&gt;name().toString().lower() : m_attributes[i]-&gt;name().toString()))

Calling lower() is a slower way to do a case insensitive comparison that often allocates memory. A faster way is to call equalIgnoringCase.

 71     Attribute* getAttributeItem(const String&amp; name, bool shouldIgnoreAttributeCase = false) const;

Can we do without the default value? How many callers are there that rely on the default?

What&apos;s the performance impact of this change? The function seems simple enough that I could imagine having multiple copies of it if there are callers who have no reason to pass the boolean, but on the other hand it&apos;s possibly slow enough already that this extra work has little impact.

 82 function testAttribNodeNamePreservesCaseGetNode2() {

I&apos;d prefer that even JavaScript follow our coding guidelines and put braces on a separate line for function definitions.

 92     if (!a) {
 93         return &quot;FAIL&quot;;
 94     }

And omit braces for one line if statements.

review- because of the equalIgnoringCase issue; please consider the other comments too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89157</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-22 20:15:53 -0700</bug_when>
    <thetext>&gt; 
&gt;  177             if (name == (shouldIgnoreAttributeCase ?
&gt; m_attributes[i]-&gt;name().toString().lower() :
&gt; m_attributes[i]-&gt;name().toString()))
&gt; 
&gt; Calling lower() is a slower way to do a case insensitive comparison that often
&gt; allocates memory. A faster way is to call equalIgnoringCase.

Ok, I will change that.

&gt; 
&gt;  71     Attribute* getAttributeItem(const String&amp; name, bool
&gt; shouldIgnoreAttributeCase = false) const;
&gt; 
&gt; Can we do without the default value? How many callers are there that rely on
&gt; the default?

There is ~5/6 callers that do so. 

&gt; What&apos;s the performance impact of this change? The function seems simple enough
&gt; that I could imagine having multiple copies of it if there are callers who have
&gt; no reason to pass the boolean, but on the other hand it&apos;s possibly slow enough
&gt; already that this extra work has little impact.

I have not evaluated the performance issues. As there is a few callers and it is showing the peculiarities in how strings are handled to match an attribute (case sensitive or not, using lower case name or not, ...), I think it is better to simply remove the default value as you suggested.

&gt;  82 function testAttribNodeNamePreservesCaseGetNode2() {
&gt; 
&gt; I&apos;d prefer that even JavaScript follow our coding guidelines and put braces on
&gt; a separate line for function definitions.
&gt; 
&gt;  92     if (!a) {
&gt;  93         return &quot;FAIL&quot;;
&gt;  94     }
&gt; 
&gt; And omit braces for one line if statements.
&gt; 

I will make it abide by our coding style rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89168</commentid>
    <comment_count>9</comment_count>
      <attachid>22952</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-23 04:01:04 -0700</bug_when>
    <thetext>Created attachment 22952
Updated version: tackles Darin&apos;s comments &amp; removed one call to lower()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89171</commentid>
    <comment_count>10</comment_count>
      <attachid>22952</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-08-23 11:40:30 -0700</bug_when>
    <thetext>Comment on attachment 22952
Updated version: tackles Darin&apos;s comments &amp; removed one call to lower()

r=me

Why didn&apos;t you change Element::hasAttribute to remove the call to lower() there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89175</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-23 17:52:35 -0700</bug_when>
    <thetext>&gt; Why didn&apos;t you change Element::hasAttribute to remove the call to lower()
&gt; there?

I did try to remove this call too but as strange as it may seem, it is required: if removed we would fail several tests.

I have tried several approaches before finding this one that does not lead to any test failure. Maybe it could be removed but it is better for now to just keep it. I will add a comment about the possibility to remove the call before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89359</commentid>
    <comment_count>12</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-08-26 03:31:54 -0700</bug_when>
    <thetext>Landed in r35931 with a comment about the call to lower() in hasAttribute.

Thanks to Eric Roman for the nice reduced test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101177</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-03 03:54:17 -0800</bug_when>
    <thetext>Note that the behavior still doesn&apos;t quite match Firefox though, according to the second attached test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102339</commentid>
    <comment_count>14</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-12 03:35:25 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Note that the behavior still doesn&apos;t quite match Firefox though, according to
&gt; the second attached test.
&gt; 

We discussed this over IRC with Alexey. IE and Firefox have different behaviours so I have sided with IE (and Opera) when fixing the 2nd test case. So it is normal that we do not match Firefox on this one.

Sorry for not mentioning this in the first place.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22592</attachid>
            <date>2008-07-31 17:58:05 -0700</date>
            <delta_ts>2008-07-31 17:58:05 -0700</delta_ts>
            <desc>sets attributes using setAttributeNode() -- those with capitals in their name fail</desc>
            <filename>capital-name-set-attrib-node.html</filename>
            <type>text/html</type>
            <size>933</size>
            <attacher name="Eric Roman">eroman</attacher>
            
              <data encoding="base64">PGh0bWw+DQogIDxoZWFkPg0KICAgIDxzY3JpcHQ+DQogICAgICBmdW5jdGlvbiBnZXROb2RlKCkg
ew0KICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vZGUnKTsNCiAgICAg
IH0NCg0KICAgICAgZnVuY3Rpb24gc2V0QXR0cmliKG5hbWUsIHZhbHVlKSB7DQogICAgICAgIHZh
ciBhdHRyaWIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUobmFtZSk7DQogICAgICAgIGF0dHJp
Yi5ub2RlVmFsdWUgPSB2YWx1ZTsNCiAgICAgICAgZ2V0Tm9kZSgpLnNldEF0dHJpYnV0ZU5vZGUo
YXR0cmliKTsNCiAgICAgIH0NCg0KICAgICAgZnVuY3Rpb24gZ2V0QXR0cmliKG5hbWUpIHsNCiAg
ICAgICAgcmV0dXJuIGdldE5vZGUoKS5nZXRBdHRyaWJ1dGUobmFtZSk7DQogICAgICB9DQogICAg
PC9zY3JpcHQ+DQogIDwvaGVhZD4NCjxib2R5Pg0KDQogIDxkaXYgaWQ9bm9kZT48L2Rpdj4NCiAg
PGgyPlJlc3VsdHM6PC9oMj4NCjxwcmU+PHNjcmlwdD4NCiAgICB2YXIgbmFtZTEgPSAibXlsb3dl
cmNhc2VhdHRyaWIiOw0KICAgIHZhciBuYW1lMiA9ICJteUF0dHJpYiI7DQoNCiAgICBzZXRBdHRy
aWIobmFtZTEsICJYWFgiKTsNCiAgICBzZXRBdHRyaWIobmFtZTIsICJZWVkiKTsNCg0KICAgIGRv
Y3VtZW50LndyaXRlbG4obmFtZTEgKyAiOiAiICsgZ2V0QXR0cmliKG5hbWUxKSk7DQogICAgLy8g
VGhpcyBzaG91bGQgTk9UIGJlIG51bGwNCiAgICBkb2N1bWVudC53cml0ZWxuKG5hbWUyICsgIjog
IiArIGdldEF0dHJpYihuYW1lMikpOw0KDQogICAgaWYgKGdldEF0dHJpYihuYW1lMikgPT0gbnVs
bCkgew0KICAgICAgZG9jdW1lbnQud3JpdGVsbigiPHA+PGI+ISEhIEZBSUxVUkUgISEhPC9iPiAt
LSAiICsgbmFtZTIgKyAiIHdhcyBudWxsPC9wPiIpOw0KICAgIH0NCiAgPC9zY3JpcHQ+PC9wcmU+
IA0KPC9ib2R5Pg0KPC9odG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22595</attachid>
            <date>2008-08-01 02:05:09 -0700</date>
            <delta_ts>2008-08-01 02:05:09 -0700</delta_ts>
            <desc>get/set test case</desc>
            <filename>attribute.html</filename>
            <type>text/html</type>
            <size>694</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWw+DQo8Ym9keT4NCg0KICA8ZGl2IGlkPW5vZGU+PC9kaXY+DQo8c2NyaXB0Pg0KICAgIHZh
ciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vZGUiKTsNCiAgICB2YXIgYXR0cmli
ID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJteUF0dHJpYiIpOw0KICAgIGF0dHJpYi5ub2Rl
VmFsdWUgPSAiWFhYIjsNCiAgICBub2RlLnNldEF0dHJpYnV0ZU5vZGUoYXR0cmliKTsNCg0KICAg
IGFsZXJ0KChuZXcgWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkpOw0KICAg
IHRyeSB7DQogICAgICAgIGFsZXJ0KCdnZXRBdHRyaWJ1dGVOb2RlKCJteUF0dHJpYiIpOiAnICsg
bm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCJteUF0dHJpYiIpLm5hbWUpOw0KICAgIH0gY2F0Y2ggKGV4
KSB7DQogICAgICAgIGFsZXJ0KCJObyBteUF0dHJpYiBhdHJpYnV0ZSIpOw0KICAgIH0NCiAgICB0
cnkgew0KICAgICAgICBhbGVydCgnZ2V0QXR0cmlidXRlTm9kZSgibXlhdHRyaWIiKTogJyArIG5v
ZGUuZ2V0QXR0cmlidXRlTm9kZSgibXlhdHRyaWIiKS5uYW1lKTsNCiAgICB9IGNhdGNoIChleCkg
ew0KICAgICAgICBhbGVydCgiTm8gbXlhdHRyaWIgYXRyaWJ1dGUiKTsNCiAgICB9DQogICAgYWxl
cnQoImF0dHJpYi5uYW1lOiAiICsgYXR0cmliLm5hbWUpOw0KICA8L3NjcmlwdD4NCjwvYm9keT4N
CjwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22610</attachid>
            <date>2008-08-01 14:07:57 -0700</date>
            <delta_ts>2008-08-01 14:07:57 -0700</delta_ts>
            <desc>Several attribute tests, with static compatibility summary for firefox2, firefox3, opera9.5, safari3.1, ie7</desc>
            <filename>getattrib-compat-matrix.html</filename>
            <type>text/html</type>
            <size>7189</size>
            <attacher name="Eric Roman">eroman</attacher>
            
              <data encoding="base64">PGh0bWw+CiAgPGhlYWQ+CiAgICA8c2NyaXB0PgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBUZXN0cwogICAgLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgIGZ1bmN0aW9uIHRlc3RHZXRBdHRy
aWJ1dGVDYXNlSW5zZW5zaXRpdmUoZGl2KSB7CiAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoIm1peGVk
Q2FzZUF0dHJpYiIsICJ4Iik7CgogICAgICAvLyBEbyBvcmlnaW5hbCBjYXNlIGxvb2t1cCwgYW5k
IGxvd2VyY2FzZSBsb29rdXAKICAgICAgcmV0dXJuIGRpdi5nZXRBdHRyaWJ1dGUoIm1peGVkY2Fz
ZWF0dHJpYiIpOwogICAgfQoKICAgIHRlc3RHZXRBdHRyaWJ1dGVDYXNlSW5zZW5zaXRpdmUuZXhw
ZWN0ZWRSZXN1bHQgPSAnIngiJzsKCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICAgIAogICAgZnVuY3Rpb24gdGVzdEdldEF0dHJpYnV0ZU5vZGVNaXhl
ZENhc2UoZGl2KSB7CiAgICAgIHZhciBhID0gZGl2Lm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmli
dXRlKCJtaXhlZENhc2VBdHRyaWIiKTsKICAgICAgYS5ub2RlVmFsdWUgPSAieCI7CiAgICAgIGRp
di5zZXRBdHRyaWJ1dGVOb2RlKGEpOwogICAgICByZXR1cm4gZGl2LmdldEF0dHJpYnV0ZSgibWl4
ZWRDYXNlQXR0cmliIik7CiAgICB9CgogICAgdGVzdEdldEF0dHJpYnV0ZU5vZGVNaXhlZENhc2Uu
ZXhwZWN0ZWRSZXN1bHQgPSAnIngiJzsKICAgIHRlc3RHZXRBdHRyaWJ1dGVOb2RlTWl4ZWRDYXNl
LmNvbXBhdGliaWxpdHkgPSBbCiAgICAgICdTYWZhcmkzLjE6ICJudWxsIicsCiAgICAgICdGeDIs
IEZ4MywgT3BlcmE5LjUsIFNhZmFyaTMuMTogIngiJwogICAgXTsKICAgIAogICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgIGZ1bmN0aW9uIHRl
c3RHZXRBdHRyaWJ1dGVOb2RlTG93ZXJDYXNlKGRpdikgewogICAgICB2YXIgYSA9IGRpdi5vd25l
ckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgibG93ZXJjYXNlYXR0cmliIik7CiAgICAgIGEubm9k
ZVZhbHVlID0gIngiOwogICAgICBkaXYuc2V0QXR0cmlidXRlTm9kZShhKTsKICAgICAgcmV0dXJu
IGRpdi5nZXRBdHRyaWJ1dGUoImxvd2VyQ2FzZUF0dHJpYiIpOwogICAgfQoKICAgIHRlc3RHZXRB
dHRyaWJ1dGVOb2RlTG93ZXJDYXNlLmV4cGVjdGVkUmVzdWx0ID0gJyJ4Iic7CgogICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgIGZ1bmN0aW9u
IHRlc3RTZXRBdHRyaWJ1dGVOb2RlS2VlcHNSZWYoZGl2KSB7CiAgICAgIHZhciBhID0gZGl2Lm93
bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJhdHRyaWJfbmFtZSIpOwogICAgICBhLm5vZGVW
YWx1ZSA9ICIwIjsKICAgICAgZGl2LnNldEF0dHJpYnV0ZU5vZGUoYSk7CgogICAgICAvLyBNdXRh
dGUgdGhlIGF0dHJpYnV0ZSBub2RlCiAgICAgIGEubm9kZVZhbHVlID0gIjEiCiAgICAgIAogICAg
ICByZXR1cm4gZGl2LmdldEF0dHJpYnV0ZSgiYXR0cmliX25hbWUiKTsKICAgIH0KCiAgICB0ZXN0
U2V0QXR0cmlidXRlTm9kZUtlZXBzUmVmLmV4cGVjdGVkUmVzdWx0ID0gJyIxIic7CgogICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgIGZ1bmN0
aW9uIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2UoZGl2KSB7CiAgICAgIHZhciBhID0g
ZGl2Lm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJBIik7CiAgICAgIGEubm9kZVZhbHVl
ID0gIngiOwogICAgICBkaXYuc2V0QXR0cmlidXRlTm9kZShhKTsKICAgICAgCiAgICAgIHZhciBy
ZXN1bHQgPSBbIGEubmFtZSwgYS5ub2RlTmFtZSBdOwogICAgICByZXR1cm4gcmVzdWx0LmpvaW4o
IiwiKTsKICAgIH0KICAgIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2UuZXhwZWN0ZWRS
ZXN1bHQgPSAnIkEsQSInOwoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogICAgCiAgICBmdW5jdGlvbiB0ZXN0QXR0cmliTm9kZU5hbWVQcmVzZXJ2ZXND
YXNlR2V0Tm9kZSgpIHsKICAgICAgLy8gZ2V0QXR0cmlidXRlTm9kZSBkb2VzbnQgd29yayBvbiBE
SVZzLCB1c2UgYm9keSBlbGVtZW50CiAgICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsKCiAg
ICAgIHZhciBhID0gYm9keS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiQSIpOwogICAg
ICBhLm5vZGVWYWx1ZSA9ICJ4IjsKCiAgICAgIGJvZHkuc2V0QXR0cmlidXRlTm9kZShhKTsKCiAg
ICAgIGEgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZU5vZGUoIkEiKTsKICAgICAgaWYgKCFh
KSB7CiAgICAgICAgcmV0dXJuICJGQUlMIjsKICAgICAgfQogICAgICAKICAgICAgdmFyIHJlc3Vs
dCA9IFsgYS5uYW1lLCBhLm5vZGVOYW1lIF07CiAgICAgIHJldHVybiByZXN1bHQuam9pbigiLCIp
OwogICAgfQoKICAgIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2VHZXROb2RlLmV4cGVj
dGVkUmVzdWx0ID0gJyJBLEEiJzsKICAgIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2VH
ZXROb2RlLmNvbXBhdGliaWxpdHkgPSBbCiAgICAgICdGeDIsIEZ4MzogImEsYSInLAogICAgICAn
U2FmYXJpMy4xOiAiRkFJTCInLAogICAgICAnSUU3LCBPcGVyYTkuNTogIkEsQSInCiAgICBdOwog
ICAgCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAg
IAogICAgZnVuY3Rpb24gdGVzdEF0dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2FzZUdldE5vZGUyKCkg
ewogICAgICAvLyBnZXRBdHRyaWJ1dGVOb2RlIGRvZXNudCB3b3JrIG9uIERJVnMsIHVzZSBib2R5
IGVsZW1lbnQKICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5OwoKICAgICAgdmFyIGEgPSBi
b2R5Lm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJCIik7CiAgICAgIGEubm9kZVZhbHVl
ID0gIngiOwoKICAgICAgYm9keS5zZXRBdHRyaWJ1dGVOb2RlKGEpOwoKICAgICAgYSA9IGRvY3Vt
ZW50LmJvZHkuZ2V0QXR0cmlidXRlTm9kZSgiQiIpOwogICAgICBpZiAoIWEpIHsKICAgICAgICBy
ZXR1cm4gIkZBSUwiOwogICAgICB9CgogICAgICAvLyBOb3cgY3JlYXRlIG5vZGUgc2Vjb25kIHRp
bWUgLS0gdGhpcyB0aW1lIGNhc2UgaXMgcHJlc2VydmVkIGluIEZGIQogICAgICBhID0gYm9keS5v
d25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiQiIpOwogICAgICBhLm5vZGVWYWx1ZSA9ICJ4
IjsKICAgICAgYm9keS5zZXRBdHRyaWJ1dGVOb2RlKGEpOwoKICAgICAgYSA9IGRvY3VtZW50LmJv
ZHkuZ2V0QXR0cmlidXRlTm9kZSgiQiIpOwogICAgICAKICAgICAgdmFyIHJlc3VsdCA9IFsgYS5u
YW1lLCBhLm5vZGVOYW1lIF07CiAgICAgIHJldHVybiByZXN1bHQuam9pbigiLCIpOwogICAgfQoK
ICAgIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2VHZXROb2RlMi5leHBlY3RlZFJlc3Vs
dCA9ICciQixCIic7CiAgICB0ZXN0QXR0cmliTm9kZU5hbWVQcmVzZXJ2ZXNDYXNlR2V0Tm9kZTIu
Y29tcGF0aWJpbGl0eSA9IFsKICAgICAgJ0Z4MiwgRngzLCBPcGVyYTkuNSwgSUU3OiAiQixCIics
CiAgICAgICdTYWZhcmkzLjE6ICJGQUlMIicsCiAgICAgICcjIyMjIFRoaXMgaXMgd29ua3kgZm9y
IGZpcmVmb3gsIHNpbmNlIHRoZSB0ZXN0IGFib3ZlIGZhaWxzISAjIyMjJwogICAgXQogICAgCiAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAg
ZnVuY3Rpb24gdGVzdEF0dHJpYk5vZGVOYW1lR2V0TXV0YXRlKCkgewogICAgICAvLyBnZXRBdHRy
aWJ1dGVOb2RlIGRvZXNudCB3b3JrIG9uIERJVnMsIHVzZSBib2R5IGVsZW1lbnQKICAgICAgdmFy
IGJvZHkgPSBkb2N1bWVudC5ib2R5OwoKICAgICAgdmFyIGEgPSBib2R5Lm93bmVyRG9jdW1lbnQu
Y3JlYXRlQXR0cmlidXRlKCJjIik7CiAgICAgIGEubm9kZVZhbHVlID0gIjAiOwogICAgICBib2R5
LnNldEF0dHJpYnV0ZU5vZGUoYSk7CgogICAgICBhID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1
dGVOb2RlKCJjIik7CiAgICAgIGEudmFsdWUgPSAiMSI7CgogICAgICBhID0gZG9jdW1lbnQuYm9k
eS5nZXRBdHRyaWJ1dGVOb2RlKCJjIik7CiAgICAgIAogICAgICByZXR1cm4gYS5ub2RlVmFsdWU7
CiAgICB9CgogICAgdGVzdEF0dHJpYk5vZGVOYW1lR2V0TXV0YXRlLmV4cGVjdGVkUmVzdWx0ID0g
JyIxIic7CgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAgICAKICAgIHZhciBBTExfVEVTVFMgPSBbCiAgICAgIHRlc3RHZXRBdHRyaWJ1dGVDYXNlSW5z
ZW5zaXRpdmUsCiAgICAgIHRlc3RHZXRBdHRyaWJ1dGVOb2RlTWl4ZWRDYXNlLAogICAgICB0ZXN0
R2V0QXR0cmlidXRlTm9kZUxvd2VyQ2FzZSwKICAgICAgdGVzdFNldEF0dHJpYnV0ZU5vZGVLZWVw
c1JlZiwKICAgICAgdGVzdEF0dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2FzZSwKICAgICAgdGVzdEF0
dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2FzZUdldE5vZGUsCiAgICAgIHRlc3RBdHRyaWJOb2RlTmFt
ZVByZXNlcnZlc0Nhc2VHZXROb2RlMiwKICAgICAgdGVzdEF0dHJpYk5vZGVOYW1lR2V0TXV0YXRl
CiAgICBdOwoKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQoKICAgIGZ1bmN0aW9uIHJ1blRlc3RzKHRlc3RzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAvLyBSdW4gdGhlIHRlc3QKICAgICAgICB2
YXIgdGVzdERpdnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdERpdnMnKTsKICAgICAg
ICB2YXIgZGl2ID0gYWRkTm9kZSh0ZXN0RGl2cywgJ2RpdicpOwogICAgICAgIHZhciB0ZXN0Rm4g
PSB0ZXN0c1tpXTsKICAgICAgICB2YXIgcmVzdWx0ID0gdGVzdEZuKGRpdik7CgogICAgICAgIC8v
IExvZyB0aGUgdGVzdCByZXN1bHQKICAgICAgICBwcmludFRlc3RSZXN1bHQoaSwgdGVzdEZuLCBy
ZXN1bHQpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcHJpbnRUZXN0UmVzdWx0KGksIHRl
c3RGbiwgcmVzdWx0KSB7CiAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeVJlc3VsdChyZXN1bHQpOwoK
ICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUKICAgICAgdmFyIHRyID0gYWRk
Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdFJlc3VsdHNUYm9keScpLCAndHInKTsK
CiAgICAgIGFkZE5vZGUodHIsICd0ZCcsIGkpOwogICAgICBhZGROb2RlKGFkZE5vZGUodHIsICd0
ZCcpLCAncHJlJywgdGVzdEZuLnRvU3RyaW5nKCkpOwogICAgICAKICAgICAgYWRkTm9kZShhZGRO
b2RlKHRyLCAndGQnKSwgJ3ByZScsIHJlc3VsdCkuY2xhc3NOYW1lID0gInJlc3VsdCI7CiAgICAg
IGFkZE5vZGUoYWRkTm9kZSh0ciwgJ3RkJyksICdwcmUnLCB0ZXN0Rm4uZXhwZWN0ZWRSZXN1bHQp
LmNsYXNzTmFtZSA9ICJyZXN1bHQiOwoKICAgICAgaWYgKHRlc3RGbi5leHBlY3RlZFJlc3VsdCAh
PSByZXN1bHQpIHsKICAgICAgICB0ci5jbGFzc05hbWUgPSAiZmFpbGVkVGVzdCI7CiAgICAgIH0K
CiAgICAgIC8vIEJ1bGxldCBsaXN0IHdpdGggKHN0YXRpYykgY29tcGF0aWJpbGl0eSByZXN1bHRz
CiAgICAgIGNvbXBhdFRkID0gYWRkTm9kZSh0ciwgJ3RkJyk7CiAgICAgIGlmICh0ZXN0Rm4uY29t
cGF0aWJpbGl0eSkgewogICAgICAgIHZhciB1bCA9IGFkZE5vZGUoY29tcGF0VGQsICd1bCcpOwog
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdEZuLmNvbXBhdGliaWxpdHkubGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgIGFkZE5vZGUodWwsICdsaScsIHRlc3RGbi5jb21wYXRpYmlsaXR5W2ld
KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29tcGF0VGQuaW5uZXJIVE1MID0g
IiZuYnNwOyI7CiAgICAgIH0KCiAgICAgIAogICAgfQoKICAgIGZ1bmN0aW9uIHN0cmluZ2lmeVJl
c3VsdCh4KSB7CiAgICAgIGlmICh0eXBlb2YoeCkgPT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1
cm4gJyInICsgeCArICciJzsKICAgICAgfQogICAgICByZXR1cm4gIiIgKyB4OwogICAgfQoKICAg
IGZ1bmN0aW9uIGFkZE5vZGUocGFyZW50LCBub2RlTmFtZSwgb3B0X3RleHQpIHsKICAgICAgdmFy
IGRvYyA9ICBwYXJlbnQub3duZXJEb2N1bWVudDsKICAgICAgdmFyIG5ld05vZGUgPSBkb2MuY3Jl
YXRlRWxlbWVudChub2RlTmFtZSk7CiAgICAgIGlmIChvcHRfdGV4dCAhPSB1bmRlZmluZWQpIHsK
ICAgICAgICBuZXdOb2RlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShvcHRfdGV4dCkp
OwogICAgICB9CiAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChuZXdOb2RlKTsKICAgICAgcmV0dXJu
IG5ld05vZGU7CiAgICB9CgogICAgPC9zY3JpcHQ+CgogICAgPHN0eWxlPgogICAgICB0ZCwgdGgg
ewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIHZlcnRpY2FsLWFsaWdu
OiB0b3A7CiAgICAgIH0KICAgICAgLnJlc3VsdCB7CiAgICAgICAgY29sb3I6IGJsdWU7CiAgICAg
ICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgICAgLmZhaWxlZFRlc3QgdGQgewogICAg
ICAgIGJhY2tncm91bmQ6IHJnYigyNTUsMjIwLDIyMCk7CiAgICAgIH0KICAgIDwvc3R5bGU+Cgog
IDwvaGVhZD4KICA8Ym9keSBvbmxvYWQ9cnVuVGVzdHMoQUxMX1RFU1RTKT4KCiAgICA8aDM+Q29t
cGF0IHRlc3RzIGZvciBnZXRBdHRyaWJ1dGUoKSwgZ2V0QXR0cmlidXRlTm9kZSgpLCBzZXRBdHRy
aWJ1dGVOb2RlKCk8L2gzPgogICAgPHRhYmxlPgogICAgICA8dGhlYWQ+CiAgICAgICAgPHRyPgog
ICAgICAgICAgPHRoPjwvdGg+CiAgICAgICAgICA8dGg+VGVzdDwvdGg+CiAgICAgICAgICA8dGg+
UmVzdWx0PC90aD4KICAgICAgICAgIDx0aD5FeHBlY3RlZDwvdGg+CiAgICAgICAgICA8dGg+Q29t
cGF0aWJpbGl0eSBOb3RlczwvdGg+CiAgICAgICAgPC90cj4KICAgICAgPC90aGVhZD4KICAgICAg
PHRib2R5IGlkPXRlc3RSZXN1bHRzVGJvZHk+CiAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgoK
ICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZSIgaWQ9dGVzdERpdnM+PC9kaXY+PC9ib2R5Pgo8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22938</attachid>
            <date>2008-08-22 09:39:44 -0700</date>
            <delta_ts>2008-09-27 12:08:16 -0700</delta_ts>
            <desc>Proposed fix: add bool to getAttributeItem to tune case sensitivity</desc>
            <filename>bug20247-setAttribute.patch</filename>
            <type>text/plain</type>
            <size>11450</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTg4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDgtMDgtMjIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIwMjQ3OiBzZXRBdHRyaWJ1dGVOb2RlKCkgZG9lcyBub3Qgd29yayB3aGVuIGF0
dHJpYnV0ZSBuYW1lIGhhcyBhIGNhcGl0YWwgbGV0dGVyIGluIGl0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI0NworCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS82MTE4MjE4PgorCisgICAgICAgIEFkZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGdl
dEF0dHJpYnV0ZUl0ZW0gdG8gY2hvb3NlIGJldHdlZW4gY2FzZSBzZW5zaXRpdmUgYW5kIGNhc2Ug
aW5zaXNpdGl2ZQorICAgICAgICBjaGVjay4gVGhpcyBrZWVwcyB0aGUgYmVoYXZpb3VyIGZvciBz
ZXRBdHRyaWJ1dGUgLyBoYXNBdHRyaWJ1dGUgKGNhc2Ugc2Vuc2l0aXZlKSBhbmQgZ2V0QXR0cmli
dXRlCisgICAgICAgIChjYXNlIGluc2Vuc2l0aXZlIGZvciBIVE1MIGVsZW1lbnQpLgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL0VsZW1lbnQvZ2V0QXR0cmlidXRlLWNoZWNrLWNhc2Utc2Vuc2l0
aXZpdHkuaHRtbAorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkQXR0ck1hcDo6Z2V0TmFtZWRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hbWVkQXR0ck1hcDo6Z2V0QXR0cmlidXRlSXRlbSk6CisgICAgICAgICog
ZG9tL05hbWVkQXR0ck1hcC5oOgorCiAyMDA4LTA4LTIxICBEYW4gQmVybnN0ZWluICA8bWl0ekBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dCBhbmQgQWxleGV5
IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzNTg4OCkKKysrIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsNyArNDkwLDcgQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRBdHRyaWJ1dAogI2VuZGlmCiAKICAgICBpZiAobmFt
ZWRBdHRyTWFwKQotICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gbmFtZWRBdHRyTWFwLT5nZXRB
dHRyaWJ1dGVJdGVtKGxvY2FsTmFtZSkpCisgICAgICAgIGlmIChBdHRyaWJ1dGUqIGEgPSBuYW1l
ZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0obG9jYWxOYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKHRoaXMpKSkKICAgICAgICAgICAgIHJldHVybiBhLT52YWx1ZSgpOwogICAgIAogICAg
IHJldHVybiBudWxsQXRvbTsKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkocmV2aXNpb24gMzU4ODgp
CisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIGJvb2wgTmFtZWRBdHRyTWFwOjppc01hcHBlZEF0dHJpYnV0ZU1hcCgKIFBhc3NS
ZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjpnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAogewogICAgIFN0cmluZyBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKG1fZWxlbWVudCkgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwotICAgIEF0dHJpYnV0ZSogYSA9
IGdldEF0dHJpYnV0ZUl0ZW0obG9jYWxOYW1lKTsKKyAgICBBdHRyaWJ1dGUqIGEgPSBnZXRBdHRy
aWJ1dGVJdGVtKGxvY2FsTmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQp
KTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiAwOwogICAgIApAQCAtMTY0LDE2ICsxNjQs
MTggQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZEF0dHJNYXA6Oml0ZW0gKHVucwogICAgIHJldHVy
biBtX2F0dHJpYnV0ZXNbaW5kZXhdLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKIH0K
IAotQXR0cmlidXRlKiBOYW1lZEF0dHJNYXA6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAorLy8gV2UgdXNlIGEgYm9vbGVhbiBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBj
YWxsaW5nIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Ugc28gdGhhdCB0aGUgY2FsbGVyCisvLyBj
YW4gdHVuZSB0aGUgYmVoYXZpb3VyIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBzZW5zaXRpdmUgd2hl
cmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KQorQXR0cmlidXRlKiBOYW1lZEF0dHJNYXA6OmdldEF0
dHJpYnV0ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0
ZUNhc2UpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgIGlmICghbV9hdHRyaWJ1dGVz
W2ldLT5uYW1lKCkuaGFzUHJlZml4KCkgJiYgCiAgICAgICAgICAgICBtX2F0dHJpYnV0ZXNbaV0t
Pm5hbWUoKS5sb2NhbE5hbWUoKSA9PSBuYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBtX2F0
dHJpYnV0ZXNbaV0uZ2V0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9hdHRyaWJ1dGVzW2ld
LT5uYW1lKCkudG9TdHJpbmcoKSA9PSBuYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmli
dXRlc1tpXS5nZXQoKTsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0gKHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UgPyBtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS50b1N0cmluZygpLmxvd2VyKCkg
OiBtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS50b1N0cmluZygpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9hdHRyaWJ1dGVzW2ldLmdldCgpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KSW5k
ZXg6IFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L05hbWVkQXR0ck1hcC5oCShyZXZpc2lvbiAzNTg4OCkKKysrIFdlYkNvcmUvZG9tL05hbWVkQXR0
ck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAvLyBP
dGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJ
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdl
dCgpOyB9CiAgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpIGNvbnN0OwotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0OworICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSA9IGZhbHNlKSBj
b25zdDsKICAgICAKICAgICB2b2lkIHNocmlua1RvTGVuZ3RoKCkgeyBtX2F0dHJpYnV0ZXMuc2hy
aW5rQ2FwYWNpdHkobGVuZ3RoKCkpOyB9CiAgICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWdu
ZWQgY2FwYWNpdHkpIHsgbV9hdHRyaWJ1dGVzLnJlc2VydmVDYXBhY2l0eShjYXBhY2l0eSk7IH0K
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM1ODg4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDgtMDgtMjIgIEp1bGllbiBDaGFmZnJhaXgg
IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdCBjYXNlIGZvciBCdWcgMjAyNDc6IHNldEF0dHJpYnV0ZU5v
ZGUoKSBkb2VzIG5vdCB3b3JrIHdoZW4gYXR0cmlidXRlIG5hbWUKKyAgICAgICAgaGFzIGEgY2Fw
aXRhbCBsZXR0ZXIgaW4gaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjQ3CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYxMTgyMTg+CisKKyAg
ICAgICAgTW9zdCBvZiB0aGlzIHRlc3QgY2FzZSB3YXMgZG9uZSBieSBFcmljIFJvbWFuIDxtaW5h
dG9hckBnbWFpbC5jb20+LCB0aGUgcmVzdCBieSBhcCBhbmQgd2FzCisgICAgICAgIHR3ZWFrZWQg
YnkgbWUuCisKKyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L2dldEF0dHJpYnV0ZS1jaGVjay1j
YXNlLXNlbnNpdGl2aXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
RWxlbWVudC9nZXRBdHRyaWJ1dGUtY2hlY2stY2FzZS1zZW5zaXRpdml0eS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9FbGVtZW50L3Jlc291cmNlcy9nZXRBdHRyaWJ1dGUtY2hlY2st
Y2FzZS1zZW5zaXRpdml0eS5qczogQWRkZWQuCisKIDIwMDgtMDgtMjEgIERhbiBCZXJuc3RlaW4g
IDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb24gSG9uZXljdXR0IGFu
ZCBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVu
dC9nZXRBdHRyaWJ1dGUtY2hlY2stY2FzZS1zZW5zaXRpdml0eS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9nZXRBdHRyaWJ1dGUtY2hlY2st
Y2FzZS1zZW5zaXRpdml0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9FbGVtZW50L2dldEF0dHJpYnV0ZS1jaGVjay1jYXNlLXNlbnNpdGl2aXR5LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorVGhpcyBmaWxlIHRlc3Qg
dGhlIGJlaGF2aW91ciBvZiBnZXRBdHRyaWJ1dGUgd2l0aCByZWdhcmQgdG8gY2FzZS4KKworU2Vl
IEJ1ZyAyMDI0Nzogc2V0QXR0cmlidXRlTm9kZSgpIGRvZXMgbm90IHdvcmsgd2hlbiBhdHRyaWJ1
dGUgbmFtZSBoYXMgYSBjYXBpdGFsIGxldHRlciBpbiBpdAorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyB0ZXN0R2V0QXR0cmlidXRlQ2FzZUluc2Vuc2l0aXZlKCkgaXMgIngi
CitQQVNTIHRlc3RHZXRBdHRyaWJ1dGVOb2RlTWl4ZWRDYXNlKCkgaXMgIngiCitQQVNTIHRlc3RH
ZXRBdHRyaWJ1dGVOb2RlTG93ZXJDYXNlKCkgaXMgIngiCitQQVNTIHRlc3RTZXRBdHRyaWJ1dGVO
b2RlS2VlcHNSZWYoKSBpcyAiMSIKK1BBU1MgdGVzdEF0dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2Fz
ZSgpIGlzICJBLEEiCitQQVNTIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2VHZXROb2Rl
KCkgaXMgIkEsQSIKK1BBU1MgdGVzdEF0dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2FzZUdldE5vZGUy
KCkgaXMgIkIsQiIKK1BBU1MgdGVzdEF0dHJpYk5vZGVOYW1lR2V0TXV0YXRlKCkgaXMgIjEiCitQ
QVNTIChuZXcgWE1MU2VyaWFsaXplcikuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkgaXMgIjxkaXYg
bXlBdHRyaWI9XCJYWFhcIj48L2Rpdj4iCitQQVNTIG5vZGUuZ2V0QXR0cmlidXRlTm9kZSgnbXlB
dHRyaWInKS5uYW1lIGlzICJteUF0dHJpYiIKK1BBU1Mgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdt
eWF0dHJpYicpLm5hbWUgaXMgIm15QXR0cmliIgorUEFTUyBhdHRyaWIubmFtZSBpcyAibXlBdHRy
aWIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9nZXRBdHRyaWJ1dGUtY2hlY2stY2Fz
ZS1zZW5zaXRpdml0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0Vs
ZW1lbnQvZ2V0QXR0cmlidXRlLWNoZWNrLWNhc2Utc2Vuc2l0aXZpdHkuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvZ2V0QXR0cmlidXRlLWNoZWNrLWNh
c2Utc2Vuc2l0aXZpdHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9nZXRBdHRy
aWJ1dGUtY2hlY2stY2FzZS1zZW5zaXRpdml0eS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Jlc291cmNlcy9nZXRB
dHRyaWJ1dGUtY2hlY2stY2FzZS1zZW5zaXRpdml0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9FbGVtZW50L3Jlc291cmNlcy9nZXRBdHRyaWJ1dGUtY2hlY2stY2FzZS1z
ZW5zaXRpdml0eS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1l
bnQvcmVzb3VyY2VzL2dldEF0dHJpYnV0ZS1jaGVjay1jYXNlLXNlbnNpdGl2aXR5LmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorZGVzY3JpcHRpb24oCisiPHA+VGhpcyBmaWxlIHRl
c3QgdGhlIGJlaGF2aW91ciBvZiBnZXRBdHRyaWJ1dGUgd2l0aCByZWdhcmQgdG8gY2FzZS48L3A+
PHA+U2VlIEJ1ZyAyMDI0Nzogc2V0QXR0cmlidXRlTm9kZSgpIGRvZXMgbm90IHdvcmsgd2hlbiBh
dHRyaWJ1dGUgbmFtZSBoYXMgYSBjYXBpdGFsIGxldHRlciBpbiBpdDwvcD4iCispOworCitmdW5j
dGlvbiB0ZXN0R2V0QXR0cmlidXRlQ2FzZUluc2Vuc2l0aXZlKCkgeworICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkaXYuc2V0QXR0cmlidXRlKCJtaXhl
ZENhc2VBdHRyaWIiLCAieCIpOworCisgICAgLy8gRG8gb3JpZ2luYWwgY2FzZSBsb29rdXAsIGFu
ZCBsb3dlcmNhc2UgbG9va3VwCisgICAgcmV0dXJuIGRpdi5nZXRBdHRyaWJ1dGUoIm1peGVkY2Fz
ZWF0dHJpYiIpOworfQorCitzaG91bGRCZSgidGVzdEdldEF0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2
ZSgpIiwgJyJ4IicpOworCitmdW5jdGlvbiB0ZXN0R2V0QXR0cmlidXRlTm9kZU1peGVkQ2FzZSgp
IHsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgdmFy
IGEgPSBkaXYub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIm1peGVkQ2FzZUF0dHJpYiIp
OworICAgIGEubm9kZVZhbHVlID0gIngiOworICAgIGRpdi5zZXRBdHRyaWJ1dGVOb2RlKGEpOwor
ICAgIHJldHVybiBkaXYuZ2V0QXR0cmlidXRlKCJtaXhlZENhc2VBdHRyaWIiKTsKK30KKworc2hv
dWxkQmUoInRlc3RHZXRBdHRyaWJ1dGVOb2RlTWl4ZWRDYXNlKCkiLCAnIngiJyk7CisgICAgCitm
dW5jdGlvbiB0ZXN0R2V0QXR0cmlidXRlTm9kZUxvd2VyQ2FzZShkaXYpIHsKKyAgICB2YXIgZGl2
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgdmFyIGEgPSBkaXYub3duZXJE
b2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoImxvd2VyY2FzZWF0dHJpYiIpOworICAgIGEubm9kZVZh
bHVlID0gIngiOworICAgIGRpdi5zZXRBdHRyaWJ1dGVOb2RlKGEpOworICAgIHJldHVybiBkaXYu
Z2V0QXR0cmlidXRlKCJsb3dlckNhc2VBdHRyaWIiKTsKK30KKworc2hvdWxkQmUoInRlc3RHZXRB
dHRyaWJ1dGVOb2RlTG93ZXJDYXNlKCkiLCAnIngiJyk7CisKK2Z1bmN0aW9uIHRlc3RTZXRBdHRy
aWJ1dGVOb2RlS2VlcHNSZWYoZGl2KSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOworICAgIHZhciBhID0gZGl2Lm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmli
dXRlKCJhdHRyaWJfbmFtZSIpOworICAgIGEubm9kZVZhbHVlID0gIjAiOworICAgIGRpdi5zZXRB
dHRyaWJ1dGVOb2RlKGEpOworCisgICAgLy8gTXV0YXRlIHRoZSBhdHRyaWJ1dGUgbm9kZQorICAg
IGEubm9kZVZhbHVlID0gIjEiCisgICAgCisgICAgcmV0dXJuIGRpdi5nZXRBdHRyaWJ1dGUoImF0
dHJpYl9uYW1lIik7Cit9CisKK3Nob3VsZEJlKCJ0ZXN0U2V0QXR0cmlidXRlTm9kZUtlZXBzUmVm
KCkiLCAnIjEiJyk7CisKK2Z1bmN0aW9uIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2Uo
KSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgIHZh
ciBhID0gZGl2Lm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJBIik7CisgICAgYS5ub2Rl
VmFsdWUgPSAieCI7CisgICAgZGl2LnNldEF0dHJpYnV0ZU5vZGUoYSk7CisgICAgICAKKyAgICB2
YXIgcmVzdWx0ID0gWyBhLm5hbWUsIGEubm9kZU5hbWUgXTsKKyAgICByZXR1cm4gcmVzdWx0Lmpv
aW4oIiwiKTsKK30KKworc2hvdWxkQmUoInRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2Uo
KSIsICciQSxBIicpOworCisgICAgCitmdW5jdGlvbiB0ZXN0QXR0cmliTm9kZU5hbWVQcmVzZXJ2
ZXNDYXNlR2V0Tm9kZSgpIHsKKyAgICAvLyBnZXRBdHRyaWJ1dGVOb2RlIGRvZXNudCB3b3JrIG9u
IERJVnMsIHVzZSBib2R5IGVsZW1lbnQKKyAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7CisK
KyAgICB2YXIgYSA9IGJvZHkub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIkEiKTsKKyAg
ICBhLm5vZGVWYWx1ZSA9ICJ4IjsKKworICAgIGJvZHkuc2V0QXR0cmlidXRlTm9kZShhKTsKKwor
ICAgIGEgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZU5vZGUoIkEiKTsKKyAgICBpZiAoIWEp
IHsKKyAgICAgICAgcmV0dXJuICJGQUlMIjsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gWyBh
Lm5hbWUsIGEubm9kZU5hbWUgXTsKKyAgICByZXR1cm4gcmVzdWx0LmpvaW4oIiwiKTsKK30KKwor
c2hvdWxkQmUoInRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2VHZXROb2RlKCkiLCAnIkEs
QSInKTsKKworZnVuY3Rpb24gdGVzdEF0dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2FzZUdldE5vZGUy
KCkgeworICAgIC8vIGdldEF0dHJpYnV0ZU5vZGUgZG9lc250IHdvcmsgb24gRElWcywgdXNlIGJv
ZHkgZWxlbWVudAorICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsKKworICAgIHZhciBhID0g
Ym9keS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiQiIpOworICAgIGEubm9kZVZhbHVl
ID0gIngiOworCisgICAgYm9keS5zZXRBdHRyaWJ1dGVOb2RlKGEpOworCisgICAgYSA9IGRvY3Vt
ZW50LmJvZHkuZ2V0QXR0cmlidXRlTm9kZSgiQiIpOworICAgIGlmICghYSkgeworICAgICAgICBy
ZXR1cm4gIkZBSUwiOworICAgIH0KKworICAgIC8vIE5vdyBjcmVhdGUgbm9kZSBzZWNvbmQgdGlt
ZSAtLSB0aGlzIHRpbWUgY2FzZSBpcyBwcmVzZXJ2ZWQgaW4gRkYhCisgICAgYSA9IGJvZHkub3du
ZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoIkIiKTsKKyAgICBhLm5vZGVWYWx1ZSA9ICJ4IjsK
KyAgICBib2R5LnNldEF0dHJpYnV0ZU5vZGUoYSk7CisKKyAgICBhID0gZG9jdW1lbnQuYm9keS5n
ZXRBdHRyaWJ1dGVOb2RlKCJCIik7CisgICAgICAKKyAgICB2YXIgcmVzdWx0ID0gWyBhLm5hbWUs
IGEubm9kZU5hbWUgXTsKKyAgICByZXR1cm4gcmVzdWx0LmpvaW4oIiwiKTsKK30KKworc2hvdWxk
QmUoInRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2VHZXROb2RlMigpIiwgJyJCLEIiJyk7
CisKK2Z1bmN0aW9uIHRlc3RBdHRyaWJOb2RlTmFtZUdldE11dGF0ZSgpIHsKKyAgICAvLyBnZXRB
dHRyaWJ1dGVOb2RlIGRvZXNudCB3b3JrIG9uIERJVnMsIHVzZSBib2R5IGVsZW1lbnQKKyAgICB2
YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7CisKKyAgICB2YXIgYSA9IGJvZHkub3duZXJEb2N1bWVu
dC5jcmVhdGVBdHRyaWJ1dGUoImMiKTsKKyAgICBhLm5vZGVWYWx1ZSA9ICIwIjsKKyAgICBib2R5
LnNldEF0dHJpYnV0ZU5vZGUoYSk7CisKKyAgICBhID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1
dGVOb2RlKCJjIik7CisgICAgYS52YWx1ZSA9ICIxIjsKKworICAgIGEgPSBkb2N1bWVudC5ib2R5
LmdldEF0dHJpYnV0ZU5vZGUoImMiKTsKKworICAgIHJldHVybiBhLm5vZGVWYWx1ZTsKK30KKwor
c2hvdWxkQmUoInRlc3RBdHRyaWJOb2RlTmFtZUdldE11dGF0ZSgpIiwgJyIxIicpOworCit2YXIg
bm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwordmFyIGF0dHJpYiA9IGRvY3Vt
ZW50LmNyZWF0ZUF0dHJpYnV0ZSgibXlBdHRyaWIiKTsKK2F0dHJpYi5ub2RlVmFsdWUgPSAiWFhY
IjsKK25vZGUuc2V0QXR0cmlidXRlTm9kZShhdHRyaWIpOworCitzaG91bGRCZSgiKG5ldyBYTUxT
ZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyhub2RlKSIsICciPGRpdiBteUF0dHJpYj1cXCJY
WFhcXCI+PC9kaXY+IicpOworc2hvdWxkQmUoIm5vZGUuZ2V0QXR0cmlidXRlTm9kZSgnbXlBdHRy
aWInKS5uYW1lIiwgJyJteUF0dHJpYiInKTsKK3Nob3VsZEJlKCJub2RlLmdldEF0dHJpYnV0ZU5v
ZGUoJ215YXR0cmliJykubmFtZSIsICcibXlBdHRyaWIiJyk7CitzaG91bGRCZSgiYXR0cmliLm5h
bWUiLCAnIm15QXR0cmliIicpOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="10206"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22952</attachid>
            <date>2008-08-23 04:01:04 -0700</date>
            <delta_ts>2008-08-23 11:40:30 -0700</delta_ts>
            <desc>Updated version: tackles Darin&apos;s comments &amp; removed one call to lower()</desc>
            <filename>bug20247-setAttribute-updated.patch</filename>
            <type>text/plain</type>
            <size>13210</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNTg4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDgtMDgtMjIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIwMjQ3OiBzZXRBdHRyaWJ1dGVOb2RlKCkgZG9lcyBub3Qgd29yayB3aGVuIGF0
dHJpYnV0ZSBuYW1lIGhhcyBhIGNhcGl0YWwgbGV0dGVyIGluIGl0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI0NworCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS82MTE4MjE4PgorCisgICAgICAgIEFkZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGdl
dEF0dHJpYnV0ZUl0ZW0gdG8gY2hvb3NlIGJldHdlZW4gY2FzZSBzZW5zaXRpdmUgYW5kIGNhc2Ug
aW5zZW5zaXRpdmUKKyAgICAgICAgY2hlY2suIFRoaXMga2VlcHMgdGhlIGJlaGF2aW91ciBmb3Ig
c2V0QXR0cmlidXRlIC8gaGFzQXR0cmlidXRlIChjYXNlIHNlbnNpdGl2ZSkgYW5kIGdldEF0dHJp
YnV0ZQorICAgICAgICAoY2FzZSBpbnNlbnNpdGl2ZSBmb3IgSFRNTCBlbGVtZW50KS4KKworICAg
ICAgICBUZXN0OiBmYXN0L2RvbS9FbGVtZW50L2dldEF0dHJpYnV0ZS1jaGVjay1jYXNlLXNlbnNp
dGl2aXR5Lmh0bWwKKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL05hbWVkQXR0ck1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXA6OmdldE5hbWVkSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXA6OmdldEF0dHJpYnV0ZUl0ZW0pOgorICAgICAgICAq
IGRvbS9OYW1lZEF0dHJNYXAuaDoKKwogMjAwOC0wOC0yMSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvbiBIb25leWN1dHQgYW5kIEFsZXhl
eSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMzU4ODgpCisrKyBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkwLDcgKzQ5MCw3IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXQKICNlbmRpZgogCiAgICAgaWYgKG5h
bWVkQXR0ck1hcCkKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogYSA9IG5hbWVkQXR0ck1hcC0+Z2V0
QXR0cmlidXRlSXRlbShsb2NhbE5hbWUpKQorICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gbmFt
ZWRBdHRyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UodGhpcykpKQogICAgICAgICAgICAgcmV0dXJuIGEtPnZhbHVlKCk7CiAgICAgCiAgICAgcmV0
dXJuIG51bGxBdG9tOwpAQCAtNTExLDcgKzUxMSw3IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmli
dXRlKGNvbnN0IEF0b21pY1MKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IChz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpICYmICFuYW1lLnN0cmluZygpLmltcGwoKS0+
aXNMb3dlcigpKSA/IEF0b21pY1N0cmluZyhuYW1lLnN0cmluZygpLmxvd2VyKCkpIDogbmFtZTsK
IAogICAgIC8vIGFsbG9jYXRlIGF0dHJpYnV0ZW1hcCBpZiBuZWNlc3NhcnkKLSAgICBBdHRyaWJ1
dGUqIG9sZCA9IGF0dHJpYnV0ZXMoZmFsc2UpLT5nZXRBdHRyaWJ1dGVJdGVtKGxvY2FsTmFtZSk7
CisgICAgQXR0cmlidXRlKiBvbGQgPSBhdHRyaWJ1dGVzKGZhbHNlKS0+Z2V0QXR0cmlidXRlSXRl
bShsb2NhbE5hbWUsIGZhbHNlKTsKIAogICAgIGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9u
KCk7CiAKQEAgLTExMjEsNyArMTEyMSw3IEBAIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlKGNv
bnN0IFN0cmluZyYKICAgICBpZiAoIWF0dHJzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
U3RyaW5nIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1l
Lmxvd2VyKCkgOiBuYW1lOwotICAgIHJldHVybiBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShsb2Nh
bE5hbWUpOworICAgIHJldHVybiBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShsb2NhbE5hbWUsIGZh
bHNlKTsKIH0KIAogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L2RvbS9OYW1lZEF0dHJNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05hbWVkQXR0
ck1hcC5jcHAJKHJldmlzaW9uIDM1ODg4KQorKysgV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsNyBAQCBib29sIE5hbWVkQXR0ck1hcDo6aXNN
YXBwZWRBdHRyaWJ1dGVNYXAoCiAKIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjpnZXRO
YW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFN0cmluZyBsb2NhbE5h
bWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKG1fZWxlbWVudCkgPyBuYW1lLmxvd2VyKCkg
OiBuYW1lOwotICAgIEF0dHJpYnV0ZSogYSA9IGdldEF0dHJpYnV0ZUl0ZW0obG9jYWxOYW1lKTsK
KyAgICBBdHRyaWJ1dGUqIGEgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UobV9lbGVtZW50KSk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKQEAgLTY2LDggKzY1LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZEF0dHJNYXA6Omdl
dE5hbWVkSQogCiBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkQXR0ck1hcDo6cmVtb3ZlTmFtZWRJdGVt
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgU3RyaW5nIGxv
Y2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50KSA/IG5hbWUubG93
ZXIoKSA6IG5hbWU7Ci0gICAgQXR0cmlidXRlKiBhID0gZ2V0QXR0cmlidXRlSXRlbShsb2NhbE5h
bWUpOworICAgIEF0dHJpYnV0ZSogYSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgc2hvdWxkSWdu
b3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQpKTsKICAgICBpZiAoIWEpIHsKICAgICAgICAgZWMg
PSBOT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE2NCwxNiArMTYyLDE2IEBA
IFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjppdGVtICh1bnMKICAgICByZXR1cm4gbV9h
dHRyaWJ1dGVzW2luZGV4XS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7CiB9CiAKLUF0
dHJpYnV0ZSogTmFtZWRBdHRyTWFwOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3QKK0F0dHJpYnV0ZSogTmFtZWRBdHRyTWFwOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAogewog
ICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47ICsraSkgewogICAgICAgICBpZiAoIW1fYXR0cmlidXRlc1tpXS0+bmFtZSgpLmhhc1By
ZWZpeCgpICYmIAogICAgICAgICAgICAgbV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkubG9jYWxOYW1l
KCkgPT0gbmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzW2ldLmdldCgp
OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpLnRvU3RyaW5n
KCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaV0uZ2V0KCk7CisK
KyAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlID8gZXF1YWxJZ25vcmlu
Z0Nhc2UobV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkudG9TdHJpbmcoKSwgbmFtZSkgOiBuYW1lID09
IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpLnRvU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4
OiBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9O
YW1lZEF0dHJNYXAuaAkocmV2aXNpb24gMzU4ODgpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgLy8gT3Ro
ZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4XS5nZXQo
KTsgfQogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdDsKLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdDsKKyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OwogICAg
IAogICAgIHZvaWQgc2hyaW5rVG9MZW5ndGgoKSB7IG1fYXR0cmlidXRlcy5zaHJpbmtDYXBhY2l0
eShsZW5ndGgoKSk7IH0KICAgICB2b2lkIHJlc2VydmVDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0
eSkgeyBtX2F0dHJpYnV0ZXMucmVzZXJ2ZUNhcGFjaXR5KGNhcGFjaXR5KTsgfQpJbmRleDogV2Vi
Q29yZS9kb20vTmFtZWRNYXBwZWRBdHRyTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
TmFtZWRNYXBwZWRBdHRyTWFwLmgJKHJldmlzaW9uIDM1ODg4KQorKysgV2ViQ29yZS9kb20vTmFt
ZWRNYXBwZWRBdHRyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogICAgIE1hcHBlZEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lKSBjb25zdAogICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxNYXBwZWRBdHRy
aWJ1dGUqPihOYW1lZEF0dHJNYXA6OmdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpOyB9CiAgICAgTWFw
cGVkQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
LSAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8TWFwcGVkQXR0cmlidXRlKj4oTmFtZWRBdHRy
TWFwOjpnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKTsgfQorICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxNYXBwZWRBdHRyaWJ1dGUqPihOYW1lZEF0dHJNYXA6OmdldEF0dHJpYnV0ZUl0ZW0obmFt
ZSwgZmFsc2UpKTsgfQogCiBwcml2YXRlOgogICAgIENsYXNzTmFtZXMgbV9jbGFzc05hbWVzOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMzU4ODgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOC0wOC0yMiAgSnVsaWVuIENoYWZmcmFpeCAg
PGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUZXN0IGNhc2UgZm9yIEJ1ZyAyMDI0Nzogc2V0QXR0cmlidXRlTm9k
ZSgpIGRvZXMgbm90IHdvcmsgd2hlbiBhdHRyaWJ1dGUgbmFtZQorICAgICAgICBoYXMgYSBjYXBp
dGFsIGxldHRlciBpbiBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAyNDcKKworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjExODIxOD4KKworICAg
ICAgICBNb3N0IG9mIHRoaXMgdGVzdCBjYXNlIHdhcyBkb25lIGJ5IEVyaWMgUm9tYW4gPG1pbmF0
b2FyQGdtYWlsLmNvbT4sIHRoZSByZXN0IGJ5IGFwIGFuZCB3YXMKKyAgICAgICAgdHdlYWtlZCBi
eSBtZS4KKworICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvZ2V0QXR0cmlidXRlLWNoZWNrLWNh
c2Utc2Vuc2l0aXZpdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9F
bGVtZW50L2dldEF0dHJpYnV0ZS1jaGVjay1jYXNlLXNlbnNpdGl2aXR5Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2dldEF0dHJpYnV0ZS1jaGVjay1j
YXNlLXNlbnNpdGl2aXR5LmpzOiBBZGRlZC4KKwogMjAwOC0wOC0yMSAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvbiBIb25leWN1dHQgYW5k
IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50
L2dldEF0dHJpYnV0ZS1jaGVjay1jYXNlLXNlbnNpdGl2aXR5LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2dldEF0dHJpYnV0ZS1jaGVjay1j
YXNlLXNlbnNpdGl2aXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0VsZW1lbnQvZ2V0QXR0cmlidXRlLWNoZWNrLWNhc2Utc2Vuc2l0aXZpdHktZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACitUaGlzIGZpbGUgdGVzdCB0
aGUgYmVoYXZpb3VyIG9mIGdldEF0dHJpYnV0ZSB3aXRoIHJlZ2FyZCB0byBjYXNlLgorCitTZWUg
QnVnIDIwMjQ3OiBzZXRBdHRyaWJ1dGVOb2RlKCkgZG9lcyBub3Qgd29yayB3aGVuIGF0dHJpYnV0
ZSBuYW1lIGhhcyBhIGNhcGl0YWwgbGV0dGVyIGluIGl0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIHRlc3RHZXRBdHRyaWJ1dGVDYXNlSW5zZW5zaXRpdmUoKSBpcyAieCIK
K1BBU1MgdGVzdEdldEF0dHJpYnV0ZU5vZGVNaXhlZENhc2UoKSBpcyAieCIKK1BBU1MgdGVzdEdl
dEF0dHJpYnV0ZU5vZGVMb3dlckNhc2UoKSBpcyAieCIKK1BBU1MgdGVzdFNldEF0dHJpYnV0ZU5v
ZGVLZWVwc1JlZigpIGlzICIxIgorUEFTUyB0ZXN0QXR0cmliTm9kZU5hbWVQcmVzZXJ2ZXNDYXNl
KCkgaXMgIkEsQSIKK1BBU1MgdGVzdEF0dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2FzZUdldE5vZGUo
KSBpcyAiQSxBIgorUEFTUyB0ZXN0QXR0cmliTm9kZU5hbWVQcmVzZXJ2ZXNDYXNlR2V0Tm9kZTIo
KSBpcyAiQixCIgorUEFTUyB0ZXN0QXR0cmliTm9kZU5hbWVHZXRNdXRhdGUoKSBpcyAiMSIKK1BB
U1MgKG5ldyBYTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyhub2RlKSBpcyAiPGRpdiBt
eUF0dHJpYj1cIlhYWFwiPjwvZGl2PiIKK1BBU1Mgbm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdteUF0
dHJpYicpLm5hbWUgaXMgIm15QXR0cmliIgorUEFTUyBub2RlLmdldEF0dHJpYnV0ZU5vZGUoJ215
YXR0cmliJykubmFtZSBpcyAibXlBdHRyaWIiCitQQVNTIGF0dHJpYi5uYW1lIGlzICJteUF0dHJp
YiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9FbGVtZW50L2dldEF0dHJpYnV0ZS1jaGVjay1jYXNl
LXNlbnNpdGl2aXR5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxl
bWVudC9nZXRBdHRyaWJ1dGUtY2hlY2stY2FzZS1zZW5zaXRpdml0eS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVudC9nZXRBdHRyaWJ1dGUtY2hlY2stY2Fz
ZS1zZW5zaXRpdml0eS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2dldEF0dHJp
YnV0ZS1jaGVjay1jYXNlLXNlbnNpdGl2aXR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2dldEF0
dHJpYnV0ZS1jaGVjay1jYXNlLXNlbnNpdGl2aXR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0VsZW1lbnQvcmVzb3VyY2VzL2dldEF0dHJpYnV0ZS1jaGVjay1jYXNlLXNl
bnNpdGl2aXR5LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vRWxlbWVu
dC9yZXNvdXJjZXMvZ2V0QXR0cmlidXRlLWNoZWNrLWNhc2Utc2Vuc2l0aXZpdHkuanMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACitkZXNjcmlwdGlvbigKKyI8cD5UaGlzIGZpbGUgdGVz
dCB0aGUgYmVoYXZpb3VyIG9mIGdldEF0dHJpYnV0ZSB3aXRoIHJlZ2FyZCB0byBjYXNlLjwvcD48
cD5TZWUgQnVnIDIwMjQ3OiBzZXRBdHRyaWJ1dGVOb2RlKCkgZG9lcyBub3Qgd29yayB3aGVuIGF0
dHJpYnV0ZSBuYW1lIGhhcyBhIGNhcGl0YWwgbGV0dGVyIGluIGl0PC9wPiIKKyk7CisKK2Z1bmN0
aW9uIHRlc3RHZXRBdHRyaWJ1dGVDYXNlSW5zZW5zaXRpdmUoKQoreworICAgIHZhciBkaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkaXYuc2V0QXR0cmlidXRlKCJtaXhl
ZENhc2VBdHRyaWIiLCAieCIpOworCisgICAgLy8gRG8gb3JpZ2luYWwgY2FzZSBsb29rdXAsIGFu
ZCBsb3dlcmNhc2UgbG9va3VwLgorICAgIHJldHVybiBkaXYuZ2V0QXR0cmlidXRlKCJtaXhlZGNh
c2VhdHRyaWIiKTsKK30KKworc2hvdWxkQmUoInRlc3RHZXRBdHRyaWJ1dGVDYXNlSW5zZW5zaXRp
dmUoKSIsICcieCInKTsKKworZnVuY3Rpb24gdGVzdEdldEF0dHJpYnV0ZU5vZGVNaXhlZENhc2Uo
KQoreworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICB2
YXIgYSA9IGRpdi5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgibWl4ZWRDYXNlQXR0cmli
Iik7CisgICAgYS5ub2RlVmFsdWUgPSAieCI7CisgICAgZGl2LnNldEF0dHJpYnV0ZU5vZGUoYSk7
CisgICAgcmV0dXJuIGRpdi5nZXRBdHRyaWJ1dGUoIm1peGVkQ2FzZUF0dHJpYiIpOworfQorCitz
aG91bGRCZSgidGVzdEdldEF0dHJpYnV0ZU5vZGVNaXhlZENhc2UoKSIsICcieCInKTsKKyAgICAK
K2Z1bmN0aW9uIHRlc3RHZXRBdHRyaWJ1dGVOb2RlTG93ZXJDYXNlKGRpdikKK3sKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgdmFyIGEgPSBkaXYub3du
ZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoImxvd2VyY2FzZWF0dHJpYiIpOworICAgIGEubm9k
ZVZhbHVlID0gIngiOworICAgIGRpdi5zZXRBdHRyaWJ1dGVOb2RlKGEpOworICAgIHJldHVybiBk
aXYuZ2V0QXR0cmlidXRlKCJsb3dlckNhc2VBdHRyaWIiKTsKK30KKworc2hvdWxkQmUoInRlc3RH
ZXRBdHRyaWJ1dGVOb2RlTG93ZXJDYXNlKCkiLCAnIngiJyk7CisKK2Z1bmN0aW9uIHRlc3RTZXRB
dHRyaWJ1dGVOb2RlS2VlcHNSZWYoZGl2KQoreworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKKyAgICB2YXIgYSA9IGRpdi5vd25lckRvY3VtZW50LmNyZWF0ZUF0
dHJpYnV0ZSgiYXR0cmliX25hbWUiKTsKKyAgICBhLm5vZGVWYWx1ZSA9ICIwIjsKKyAgICBkaXYu
c2V0QXR0cmlidXRlTm9kZShhKTsKKworICAgIC8vIE11dGF0ZSB0aGUgYXR0cmlidXRlIG5vZGUu
CisgICAgYS5ub2RlVmFsdWUgPSAiMSI7CisgICAgCisgICAgcmV0dXJuIGRpdi5nZXRBdHRyaWJ1
dGUoImF0dHJpYl9uYW1lIik7Cit9CisKK3Nob3VsZEJlKCJ0ZXN0U2V0QXR0cmlidXRlTm9kZUtl
ZXBzUmVmKCkiLCAnIjEiJyk7CisKK2Z1bmN0aW9uIHRlc3RBdHRyaWJOb2RlTmFtZVByZXNlcnZl
c0Nhc2UoKQoreworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICB2YXIgYSA9IGRpdi5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiQSIpOworICAg
IGEubm9kZVZhbHVlID0gIngiOworICAgIGRpdi5zZXRBdHRyaWJ1dGVOb2RlKGEpOworICAgICAg
CisgICAgdmFyIHJlc3VsdCA9IFsgYS5uYW1lLCBhLm5vZGVOYW1lIF07CisgICAgcmV0dXJuIHJl
c3VsdC5qb2luKCIsIik7Cit9CisKK3Nob3VsZEJlKCJ0ZXN0QXR0cmliTm9kZU5hbWVQcmVzZXJ2
ZXNDYXNlKCkiLCAnIkEsQSInKTsKKworICAgIAorZnVuY3Rpb24gdGVzdEF0dHJpYk5vZGVOYW1l
UHJlc2VydmVzQ2FzZUdldE5vZGUoKQoreworICAgIC8vIGdldEF0dHJpYnV0ZU5vZGUgZG9lc250
IHdvcmsgb24gRElWcywgdXNlIGJvZHkgZWxlbWVudAorICAgIHZhciBib2R5ID0gZG9jdW1lbnQu
Ym9keTsKKworICAgIHZhciBhID0gYm9keS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgi
QSIpOworICAgIGEubm9kZVZhbHVlID0gIngiOworCisgICAgYm9keS5zZXRBdHRyaWJ1dGVOb2Rl
KGEpOworCisgICAgYSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlTm9kZSgiQSIpOworICAg
IGlmICghYSkKKyAgICAgICAgcmV0dXJuICJGQUlMIjsKKworICAgIHZhciByZXN1bHQgPSBbIGEu
bmFtZSwgYS5ub2RlTmFtZSBdOworICAgIHJldHVybiByZXN1bHQuam9pbigiLCIpOworfQorCitz
aG91bGRCZSgidGVzdEF0dHJpYk5vZGVOYW1lUHJlc2VydmVzQ2FzZUdldE5vZGUoKSIsICciQSxB
IicpOworCitmdW5jdGlvbiB0ZXN0QXR0cmliTm9kZU5hbWVQcmVzZXJ2ZXNDYXNlR2V0Tm9kZTIo
KQoreworICAgIC8vIGdldEF0dHJpYnV0ZU5vZGUgZG9lc250IHdvcmsgb24gRElWcywgdXNlIGJv
ZHkgZWxlbWVudAorICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsKKworICAgIHZhciBhID0g
Ym9keS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiQiIpOworICAgIGEubm9kZVZhbHVl
ID0gIngiOworCisgICAgYm9keS5zZXRBdHRyaWJ1dGVOb2RlKGEpOworCisgICAgYSA9IGRvY3Vt
ZW50LmJvZHkuZ2V0QXR0cmlidXRlTm9kZSgiQiIpOworICAgIGlmICghYSkKKyAgICAgICAgcmV0
dXJuICJGQUlMIjsKKworICAgIC8vIE5vdyBjcmVhdGUgbm9kZSBzZWNvbmQgdGltZSAtLSB0aGlz
IHRpbWUgY2FzZSBpcyBwcmVzZXJ2ZWQgaW4gRkYhCisgICAgYSA9IGJvZHkub3duZXJEb2N1bWVu
dC5jcmVhdGVBdHRyaWJ1dGUoIkIiKTsKKyAgICBhLm5vZGVWYWx1ZSA9ICJ4IjsKKyAgICBib2R5
LnNldEF0dHJpYnV0ZU5vZGUoYSk7CisKKyAgICBhID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1
dGVOb2RlKCJCIik7CisgICAgICAKKyAgICB2YXIgcmVzdWx0ID0gWyBhLm5hbWUsIGEubm9kZU5h
bWUgXTsKKyAgICByZXR1cm4gcmVzdWx0LmpvaW4oIiwiKTsKK30KKworc2hvdWxkQmUoInRlc3RB
dHRyaWJOb2RlTmFtZVByZXNlcnZlc0Nhc2VHZXROb2RlMigpIiwgJyJCLEIiJyk7CisKK2Z1bmN0
aW9uIHRlc3RBdHRyaWJOb2RlTmFtZUdldE11dGF0ZSgpCit7CisgICAgLy8gZ2V0QXR0cmlidXRl
Tm9kZSBkb2VzbnQgd29yayBvbiBESVZzLCB1c2UgYm9keSBlbGVtZW50LgorICAgIHZhciBib2R5
ID0gZG9jdW1lbnQuYm9keTsKKworICAgIHZhciBhID0gYm9keS5vd25lckRvY3VtZW50LmNyZWF0
ZUF0dHJpYnV0ZSgiYyIpOworICAgIGEubm9kZVZhbHVlID0gIjAiOworICAgIGJvZHkuc2V0QXR0
cmlidXRlTm9kZShhKTsKKworICAgIGEgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZU5vZGUo
ImMiKTsKKyAgICBhLnZhbHVlID0gIjEiOworCisgICAgYSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0
cmlidXRlTm9kZSgiYyIpOworCisgICAgcmV0dXJuIGEubm9kZVZhbHVlOworfQorCitzaG91bGRC
ZSgidGVzdEF0dHJpYk5vZGVOYW1lR2V0TXV0YXRlKCkiLCAnIjEiJyk7CisKK3ZhciBub2RlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cit2YXIgYXR0cmliID0gZG9jdW1lbnQuY3Jl
YXRlQXR0cmlidXRlKCJteUF0dHJpYiIpOworYXR0cmliLm5vZGVWYWx1ZSA9ICJYWFgiOworbm9k
ZS5zZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYik7CisKK3Nob3VsZEJlKCIobmV3IFhNTFNlcmlhbGl6
ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpIiwgJyI8ZGl2IG15QXR0cmliPVxcIlhYWFxcIj48
L2Rpdj4iJyk7CitzaG91bGRCZSgibm9kZS5nZXRBdHRyaWJ1dGVOb2RlKCdteUF0dHJpYicpLm5h
bWUiLCAnIm15QXR0cmliIicpOworc2hvdWxkQmUoIm5vZGUuZ2V0QXR0cmlidXRlTm9kZSgnbXlh
dHRyaWInKS5uYW1lIiwgJyJteUF0dHJpYiInKTsKK3Nob3VsZEJlKCJhdHRyaWIubmFtZSIsICci
bXlBdHRyaWIiJyk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="10213"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>