<?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>17403</bug_id>
          
          <creation_ts>2008-02-16 23:19:51 -0800</creation_ts>
          <short_desc>WebKit Creates Invalid Xhtml Links with Ajax</short_desc>
          <delta_ts>2019-02-06 09:02:36 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Charlie">cfis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfis</cc>
    
    <cc>jchaffraix</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>70918</commentid>
    <comment_count>0</comment_count>
    <who name="Charlie">cfis</who>
    <bug_when>2008-02-16 23:19:51 -0800</bug_when>
    <thetext>In xhtml, links must be escaped like this:

&lt;a id=&quot;search_link&quot; href=&quot;http://www.google.com/search?q=webkit&amp;amp;start=10&quot;&gt;Original Search&lt;/a&gt;

Safari 3.x correctly handles this when loading an XHTML document, but not when replacing parts of the document using Ajax.  What happens is Safari interprets the links as:

http://www.google.com/search?q=webkit&amp;#38;start=10

Which is wrong - the start parameter will not be sent along.

I have attached an example showing the problem:

1.  Open the document
2.  Click the link, and you&apos;ll go to page #2 of a Google search on Webkit.
3.  Hit the replace button which will replace the link in a similar way that an Ajax call will work.  Note I took the replace method from the Prototype library.
4.  Now click the link again - you&apos;ll see page 1 of the results, *not* page 2.  

And that&apos;s the bug - Safari mucks up &amp;amp; is xhtml links, cause all parameters after the first one to be dropped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70919</commentid>
    <comment_count>1</comment_count>
      <attachid>19168</attachid>
    <who name="Charlie">cfis</who>
    <bug_when>2008-02-16 23:20:44 -0800</bug_when>
    <thetext>Created attachment 19168
Shows xhtml link handling bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70920</commentid>
    <comment_count>2</comment_count>
    <who name="Charlie">cfis</who>
    <bug_when>2008-02-16 23:24:42 -0800</bug_when>
    <thetext>Note by the way, the example works correctly in Firefox 2.x and Opera 9.20</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71039</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-18 03:41:08 -0800</bug_when>
    <thetext>Confirmed with r30368 - internally, we are doubly encoding the ampersand as &quot;&amp;amp;#38;&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71364</commentid>
    <comment_count>4</comment_count>
    <who name="Charlie">cfis</who>
    <bug_when>2008-02-21 01:02:58 -0800</bug_when>
    <thetext>Any thoughts on fixes?  This issue makes using xhtml/ajax with Safari a bit painful since any replaced links are wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71370</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-21 01:52:45 -0800</bug_when>
    <thetext>I think you would get better results by using DOM manipulation methods instead of createContextualFragment. If this is unacceptably hard to re-architecture the code you have, the next thing I&apos;d try is fixing up URL with DOM methods after parsing with createContextualFragment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71456</commentid>
    <comment_count>6</comment_count>
    <who name="Charlie">cfis</who>
    <bug_when>2008-02-21 19:27:18 -0800</bug_when>
    <thetext>DOM manipulation really isn&apos;t the best solution in this case because XHTML is being returned from a server.  Thus its a whole lot easier to use createContextualFragment - the alternative would be to use DOM Parser to first parse the content, and then copy it over to the DOM.  But my guess is you&apos;d run into the same bug anyway.

I say that because we did try the trick of looping over all A elements that are inserted and reset their href values.  It didn&apos;t work...the same issue occurs.

This really seems like a bug in webkit since inserting html/xhtml text into the DOM works with every browser *except* Safari with xhtml (and obviously IE with xhtml). 

Note that we use xhtml because mapbuzz is a mapping site, and we make heavy use of SVG.  In addition, in some places we atom feeds into xhtml documents to speed up some search results.  Thus we depend on XML namespaces (or IE&apos;s proprietary solution of XML data islands).

Thanks for the comments, and we would of course be happy to test any patches.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71491</commentid>
    <comment_count>7</comment_count>
      <attachid>19277</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-22 03:59:27 -0800</bug_when>
    <thetext>Created attachment 19277
further reduced test case

This looks like a bug in createContextualFragment(), not in URL handling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71492</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-22 04:02:43 -0800</bug_when>
    <thetext>DOMParser seems to work, you can try it as a workaround:

    var html = &apos;&lt;div foo=&quot;&amp;amp;&quot;/&gt;&apos;
    var newDoc = (new DOMParser).parseFromString(html, &apos;application/xml&apos;);

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74323</commentid>
    <comment_count>9</comment_count>
    <who name="Charlie">cfis</who>
    <bug_when>2008-03-18 14:44:49 -0700</bug_when>
    <thetext>Alexey,

Unfortunately DOMParser does *not* work.

To flesh out your example:

var parser = new DOMParser()
var doc = parser.parseFromString(html.stripScripts(), &apos;application/xhtml+xml&apos;);
var node = document.importNode(doc.documentElement, true)
element.innerHTML = &apos; &apos; // the space is needed...WebKit bug
element.appendChild(node)

All these operations work.  But what you end up with is inserted XHTML that has:

* Broken images - the &lt;img&gt; tags are correct but no image shows up
* Broken links - Safari renders the links (they have a blue underline), but if you mouse over them no links show up in the status bar and if you click on them they do not work

After doing the appendChild, alert(element.innerHTML) shows the correct XHTML is inserted.  But the inserted XHTML simply doesn&apos;t work...

So this solution is a no-go (and seems to reveal a bunch more bugs).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74394</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-03-18 23:28:08 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; * Broken images - the &lt;img&gt; tags are correct but no image shows up

  That&apos;s bug 17897 (not a DOMParser issue).

&gt; * Broken links - Safari renders the links (they have a blue underline), but if
&gt; you mouse over them no links show up in the status bar and if you click on them
&gt; they do not work

  I do not remember seeing a bug for this, but it sounds related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74396</commentid>
    <comment_count>11</comment_count>
    <who name="Charlie">cfis</who>
    <bug_when>2008-03-18 23:35:35 -0700</bug_when>
    <thetext>Ah, interesting - thanks for the pointer.

Any chance of getting the issue in createContextualFragment() fixed so that the URIs come out right when setting innerHTML in an XHTML document?

Thanks for the help Alexey.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75394</commentid>
    <comment_count>12</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-03-26 19:00:47 -0700</bug_when>
    <thetext>I think I have found the cause of the bug.
We are failing in XMLTokenizer::parseXMLDocumentFragment. The arguments are good but the result of xmlParseBalancedChunkMemory is wrong (it converts &quot;&amp;amp;&quot; to &quot;&amp;#38;&quot;)
I had a look at libxml to know why we fail : when you use xmlParseBalancedChunkMemory, the library automatically converts &apos;&amp;&apos; to &quot;&amp;#38&quot; which explains the bug.
A look at libxml suggests that there is two possibilities to solve the bug: correcting the values when creating the DocumentFragment or using another libxml API. Any suggestion on how to proceed here ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75623</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-03-28 03:48:46 -0700</bug_when>
    <thetext>What is the other libxml2 API? If it&apos;s more suitable for the task, we should definitely consider using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75666</commentid>
    <comment_count>14</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-03-28 13:44:16 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; What is the other libxml2 API? If it&apos;s more suitable for the task, we should
&gt; definitely consider using it.
&gt; 

I had no in mind when writing the mail as my libxml2 knowledge was too weak. After looking a bit more into the code and the documentation, I am pretty sure we will have to switch to another API. The candidate I am testing is xmlParseChunk as we can provide an xmlParseCtxPtr (which will give us more control over the parsing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75800</commentid>
    <comment_count>15</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-03-29 19:23:36 -0700</bug_when>
    <thetext>&gt; I had no in mind when writing the mail as my libxml2 knowledge was too weak.
&gt; After looking a bit more into the code and the documentation, I am pretty sure
&gt; we will have to switch to another API. The candidate I am testing is
&gt; xmlParseChunk as we can provide an xmlParseCtxPtr (which will give us more
&gt; control over the parsing).
&gt; 

I was wrong about xmlParseChunk. We need a function that can parse a fragment or &quot;content&quot; as defined in the libxml documentation (see http://bugs.webkit.org/show_bug.cgi?id=5142 for more explainations).
There is 4 APIs that does fragment parsing: xmlParseBalancedChunkMemory, xmlParseBalancedChunkMemoryRecover, xmlParseContent and xmlParseInNodeContext.
The first two are out because they are more or less the same and we are trying to find a replacement. The last one does not sound correct for what we want.
I have investigated xmlParseContext with no results for the moment. I will continue to digg that API a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77357</commentid>
    <comment_count>16</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-04-12 15:02:49 -0700</bug_when>
    <thetext>As advised by Alexey, I have contacted the libxml mailing list to have their view about what we wanted to do and the way to do it (see http://mail.gnome.org/archives/xml/2008-April/msg00017.html).
It seems that parsing a content is quite tricky and the only way is to use the internal function xmlParseContent.
As precised in the link, we need to initialize the parser ourselves (we also need to interpret the errors ourselves) which will lead to some non portable code.
However we already use some internal properties and the addition is quite small so it should be worth the effort of merging some of our parsing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77358</commentid>
    <comment_count>17</comment_count>
      <attachid>20493</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-04-12 15:07:03 -0700</bug_when>
    <thetext>Created attachment 20493
First version: switch DocumentFragment parsing to xmlParseContent

Tested and no regression found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77494</commentid>
    <comment_count>18</comment_count>
      <attachid>20521</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-04-13 23:56:55 -0700</bug_when>
    <thetext>Created attachment 20521
test contextual parsing

The only problem I can see is that is that createContextualFragment is still not contextual - it doesn&apos;t use any context from the node it is invoked on, see this test case. Even in the original test case, the elements would end up in null namespace AFAICT. Daniel says there are many things that are contextual, besides namespaces - are there any others that we should care about?

 483     // XML_PARSE_NODICT: default dictionnary option.

An extra &quot;n&quot; in &quot;dictionary&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77530</commentid>
    <comment_count>19</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-04-14 03:50:49 -0700</bug_when>
    <thetext>&gt; The only problem I can see is that is that createContextualFragment is still
&gt; not contextual - it doesn&apos;t use any context from the node it is invoked on, see
&gt; this test case. Even in the original test case, the elements would end up in
&gt; null namespace AFAICT. 

IMHO, I think you are wrong here. Check XMLTokenizer::startElementNs: there is a check for the namespace. If none is provided by libxml then we check the prefix against m_prefixToNamespaceMap (which is initialized from the Element provided as a parent). If no prefix was found, we put the node in the default namespace.
(LayoutTests/fast/dom/set-innnerHTML also check for namespace and I had a hard time with it)

&gt; Daniel says there are many things that are contextual,
&gt; besides namespaces - are there any others that we should care about?

I would say that others are internal to libxml (like tree structure or parser state to detect if the tree is well formed).

I have tried to match libxml behaviour to avoid any regression here (preferring portable API whenever I could).

&gt;  483     // XML_PARSE_NODICT: default dictionnary option.
&gt; 
&gt; An extra &quot;n&quot; in &quot;dictionary&quot; here.
&gt; 
Oups...

There is also a memory leak as we never free m_context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77533</commentid>
    <comment_count>20</comment_count>
      <attachid>20493</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-04-14 04:22:01 -0700</bug_when>
    <thetext>Comment on attachment 20493
First version: switch DocumentFragment parsing to xmlParseContent

&gt; IMHO, I think you are wrong here.

Indeed, I didn&apos;t realize that this logic was in WebCore, not libxml.

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77538</commentid>
    <comment_count>21</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-04-14 04:53:11 -0700</bug_when>
    <thetext>Committed in r31860.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77568</commentid>
    <comment_count>22</comment_count>
    <who name="Charlie">cfis</who>
    <bug_when>2008-04-14 08:13:43 -0700</bug_when>
    <thetext>Thanks everyone for the quick fix - I&apos;ll give it a spin in one of this week&apos;s nightly builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502804</commentid>
    <comment_count>23</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:02:36 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>19168</attachid>
            <date>2008-02-16 23:20:44 -0800</date>
            <delta_ts>2008-02-16 23:20:44 -0800</delta_ts>
            <desc>Shows xhtml link handling bug</desc>
            <filename>links.xhtml</filename>
            <type>application/xhtml+xml</type>
            <size>918</size>
            <attacher name="Charlie">cfis</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIg
Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPg0KPGh0
bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ+DQo8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYt
OCIgLz4NCjx0aXRsZT5VbnRpdGxlZCBEb2N1bWVudDwvdGl0bGU+DQo8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+DQo8IVtDREFUQVsNCmZ1bmN0aW9uIHJlcGxhY2UoKQ0Kew0KCXZhcglo
dG1sID0gJzxhIGlkPSJzZWFyY2hfbGluayIgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3Nl
YXJjaD9xPXdlYmtpdCZhbXA7c3RhcnQ9MTAiPlJlcGxhY2VkIFNlYXJjaDwvYT4nDQoJdmFyIGVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VhcmNoX2xpbmsnKQ0KICB2YXIgcmFu
Z2UgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsNCiAgcmFuZ2Uuc2VsZWN0
Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOw0KICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxk
KA0KICAgICAgICByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCksIGVsZW1lbnQp
Ow0KfQ0KXV0+DQo8L3NjcmlwdD4NCjwvaGVhZD4NCg0KPGJvZHk+DQoJPHA+DQoJCTxhIGlkPSJz
ZWFyY2hfbGluayIgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPXdlYmtpdCZh
bXA7c3RhcnQ9MTAiPk9yaWdpbmFsIFNlYXJjaDwvYT4NCgk8L3A+DQoJPGJ1dHRvbiBvbmNsaWNr
PSJyZXBsYWNlKCk7IHJldHVybiBmYWxzZSI+UmVwbGFjZTwvYnV0dG9uPg0KPC9ib2R5Pg0KPC9o
dG1sPg0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>19277</attachid>
            <date>2008-02-22 03:59:27 -0800</date>
            <delta_ts>2008-02-22 03:59:27 -0800</delta_ts>
            <desc>further reduced test case</desc>
            <filename>links.xhtml</filename>
            <type>application/xhtml+xml</type>
            <size>551</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ+DQo8dGl0
bGU+VW50aXRsZWQgRG9jdW1lbnQ8L3RpdGxlPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPg0KPCFbQ0RBVEFbDQpmdW5jdGlvbiB0ZXN0KCkNCnsNCgl2YXIJaHRtbCA9ICc8ZGl2IGZv
bz0iJmFtcDsiLz4nDQoJdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5DQogICAgdmFyIHJhbmdl
ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7DQogICAgcmFuZ2Uuc2VsZWN0
Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOw0KICAgIHZhciBmcmFnbWVudCA9IHJhbmdlLmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChodG1sKTsNCg0KICAgIGFsZXJ0KCJTaG91bGQgYmUgJjogIiArIGZy
YWdtZW50LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdmb28nKSk7DQp9DQpdXT4NCjwvc2NyaXB0
Pg0KPC9oZWFkPg0KDQo8Ym9keT4NCgk8YnV0dG9uIG9uY2xpY2s9InRlc3QoKTsgcmV0dXJuIGZh
bHNlIj5UZXN0PC9idXR0b24+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20493</attachid>
            <date>2008-04-12 15:07:03 -0700</date>
            <delta_ts>2008-04-14 04:22:01 -0700</delta_ts>
            <desc>First version: switch DocumentFragment parsing to xmlParseContent</desc>
            <filename>bug17403-CL.patch</filename>
            <type>text/plain</type>
            <size>11373</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjMzFmMDI4Li5lZjE5OWEzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMDQt
MTIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5b3V0IHRlc3QgZm9yIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDAzOgorICAgICAgICBXZWJL
aXQgQ3JlYXRlcyBJbnZhbGlkIFhodG1sIExpbmtzIHdpdGggQWpheAorCisgICAgICAgICogZmFz
dC9wYXJzZXIvYW1wZXJzYW5kLWVzY2FwZWQtcGFyc2VYTUxGcmFnbWVudC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvcGFyc2VyL2FtcGVyc2FuZC1lc2NhcGVkLXBhcnNlWE1M
RnJhZ21lbnQueGh0bWw6IEFkZGVkLgorCiAyMDA4LTA0LTExICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2FtcGVyc2FuZC1lc2NhcGVkLXBhcnNlWE1MRnJh
Z21lbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvYW1wZXJzYW5kLWVz
Y2FwZWQtcGFyc2VYTUxGcmFnbWVudC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjQwZWVkYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvcGFyc2VyL2FtcGVyc2FuZC1lc2NhcGVkLXBhcnNlWE1MRnJhZ21lbnQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNSBAQAorVGVzdCBjYXNlIGZvciBidWcgMTc0MDM6IFdlYktpdCBDcmVhdGVz
IEludmFsaWQgWGh0bWwgTGlua3Mgd2l0aCBBamF4CisKK1lvdSBzaG91bGQgc2VlIHRoZSBzZW50
ZW5jZTogJ1Nob3VsZCBiZSAmOiAmJyAod2l0aG91dCB0aGUgcXVvdGVzKQorCitTaG91bGQgYmUg
JjogJgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9wYXJzZXIvYW1wZXJzYW5kLWVzY2Fw
ZWQtcGFyc2VYTUxGcmFnbWVudC54aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvcGFyc2VyL2FtcGVy
c2FuZC1lc2NhcGVkLXBhcnNlWE1MRnJhZ21lbnQueGh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uM2UxOWU4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvcGFyc2VyL2FtcGVyc2FuZC1lc2NhcGVkLXBhcnNlWE1MRnJhZ21lbnQueGh0bWwKQEAgLTAs
MCArMSwyNSBAQAorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgor
PGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cis8IVtDREFUQVsKK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIHZhciBodG1sID0gJzxkaXYgZm9vPSImYW1wOyIvPicKKyAgICB2
YXIgZWxlbWVudCA9IGRvY3VtZW50LmJvZHkKKyAgICB2YXIgcmFuZ2UgPSBlbGVtZW50Lm93bmVy
RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxl
bWVudCk7CisgICAgdmFyIGZyYWdtZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KGh0bWwpOworCisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiU2hvdWxkIGJlICY6ICIgKyBmcmFnbWVudC5maXJzdENoaWxkLmdldEF0dHJpYnV0
ZSgnZm9vJykpKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KK11dPgorPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+Cis8cD4gVGVzdCBjYXNlIGZvciA8YSBo
cmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQwMyI+YnVnIDE3
NDAzPC9hPjogV2ViS2l0IENyZWF0ZXMgSW52YWxpZCBYaHRtbCBMaW5rcyB3aXRoIEFqYXg8L3A+
Cis8cD4gWW91IHNob3VsZCBzZWUgdGhlIHNlbnRlbmNlOiAnU2hvdWxkIGJlICZhbXA7OiAmYW1w
OycgKHdpdGhvdXQgdGhlIHF1b3RlcykgPC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMWNiNzRmLi45
Yzc4OWYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDA4LTA0LTEyICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNo
YWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEJ1ZyAxNzQwMzogV2ViS2l0IENyZWF0ZXMgSW52YWxpZCBYaHRtbCBMaW5r
cyB3aXRoIEFqYXgKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0MDMKKworICAgICAgICBUaGUgcHJldmlvdXMgY29kZSBoYWQgY2FsbGJhY2tzIGZvciB0
aGUgbm9ybWFsIHBhcnNpbmcgKGZ1bGwgZG9jdW1lbnQpIGFuZCBmcmFnbWVudCBwYXJzaW5nLgor
ICAgICAgICBUaGUgZGlmZmVyZW5jZSB3YXMgaW5kdWNlZCBieSB0aGUgbWV0aG9kIHdlIHdlcmUg
dXNpbmcgd2hpY2ggZGlkIG5vdCBhY2NlcHQgYSB4bWxQYXJzZXJDdHh0LgorICAgICAgICBUaGUg
Y29kZSBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIGFsbG93IHVzIHRvIHNoYXJlIHRoZSBjYWxsYmFj
a3MgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNhc2VzLgorICAgICAgICBBIGRyYXdiYWNrIGlzIHRo
YXQgd2UgaGF2ZSB0byB1c2UgeG1sUGFyc2VDb250ZW50IHdoaWNoIGlzIGFuIGludGVybmFsIGxp
YnhtbCBtZXRob2QgYW5kIHRodXMKKyAgICAgICAgc29tZSBpbnRlcm5hbCBpbnRpYWxpemF0aW9u
IGlzIGRvbmUgaW4gV2ViQ29yZS4KKworICAgICAgICBUZXN0OiBmYXN0L3BhcnNlci9hbXBlcnNh
bmQtZXNjYXBlZC1wYXJzZVhNTEZyYWdtZW50LnhodG1sCisKKyAgICAgICAgKiBkb20vWE1MVG9r
ZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVN0cmluZ1BhcnNlcik6IE1vdmVk
IGRpZEluaXQgaW4gdGhlIGdsb2JhbCBzY29wZSBhcyBpdCBpcyBzaGFyZWQgYnkgdGhlCisgICAg
ICAgIDIgY3JlYXRlIG1ldGhvZHMuCisKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lbW9yeVBh
cnNlcik6IENyZWF0ZSBhIG1lbW9yeSBwYXJzZXIgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgY29k
ZS4KKyAgICAgICAgSW5pdGlhbGl6ZSB0aGUgeG1sUGFyc2VyQ29udGV4dCB0byBjYWxsIHhtbFBh
cnNlQ29udGVudCBpbiBwYXJzZVhNTERvY3VtZW50RnJhZ21lbnQuCisKKyAgICAgICAgKFdlYkNv
cmU6OlhNTFRva2VuaXplcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQpOiBDaGVjayBtX3BhcnNp
bmdGcmFnbWVudCB0byBrbm93CisgICAgICAgIHdoaWNoIGNyZWF0ZSBtZXRob2QgdG8gY2FsbC4K
KworICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBkb20vWE1MVG9rZW5pemVyLmg6IEFk
ZGVkIHBhcnNlWE1MRG9jdW1lbnRGcmFnbWVudCBhcyBhIGZyaWVuZCBvZiBYTUxUb2tlbml6ZXIu
CisKIDIwMDgtMDQtMTIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBncmFkaWVudCBzdXBwb3J0IHRvIGJvcmRlci1pbWFnZSAoZXZlbiB0aG91Z2ggaXQncyBt
b3N0bHkganVzdCB3ZWlyZCkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIu
Y3BwIGIvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAppbmRleCA1ZDliMjY4Li5jYzQ0MTYw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCisrKyBiL1dlYkNvcmUv
ZG9tL1hNTFRva2VuaXplci5jcHAKQEAgLTQzNyw5ICs0MzcsMTAgQEAgdm9pZCBzZXRMb2FkZXJG
b3JMaWJYTUxDYWxsYmFja3MoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiAgICAgZ2xvYmFsRG9jTG9h
ZGVyID0gZG9jTG9hZGVyOwogfQogCitzdGF0aWMgYm9vbCBkaWRJbml0ID0gZmFsc2U7CisKIHN0
YXRpYyB4bWxQYXJzZXJDdHh0UHRyIGNyZWF0ZVN0cmluZ1BhcnNlcih4bWxTQVhIYW5kbGVyUHRy
IGhhbmRsZXJzLCB2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBzdGF0aWMgYm9vbCBkaWRJbml0ID0g
ZmFsc2U7CiAgICAgaWYgKCFkaWRJbml0KSB7CiAgICAgICAgIHhtbEluaXRQYXJzZXIoKTsKICAg
ICAgICAgeG1sUmVnaXN0ZXJJbnB1dENhbGxiYWNrcyhtYXRjaEZ1bmMsIG9wZW5GdW5jLCByZWFk
RnVuYywgY2xvc2VGdW5jKTsKQEAgLTQ1NCw2ICs0NTUsNDQgQEAgc3RhdGljIHhtbFBhcnNlckN0
eHRQdHIgY3JlYXRlU3RyaW5nUGFyc2VyKHhtbFNBWEhhbmRsZXJQdHIgaGFuZGxlcnMsIHZvaWQq
IHVzZXIKICAgICBjb25zdCBVQ2hhciBCT00gPSAweEZFRkY7CiAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PigmQk9NKTsKICAgICB4bWxTd2l0Y2hFbmNvZGluZyhwYXJzZXIsIEJPTUhpZ2hCeXRlID09IDB4
RkYgPyBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxFIDogWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZC
RSk7CisKKyAgICByZXR1cm4gcGFyc2VyOworfQorCisKKy8vIENodW5rIHNob3VsZCBiZSBlbmNv
ZGVkIGluIFVURi04CitzdGF0aWMgeG1sUGFyc2VyQ3R4dFB0ciBjcmVhdGVNZW1vcnlQYXJzZXIo
eG1sU0FYSGFuZGxlclB0ciBoYW5kbGVycywgdm9pZCogdXNlckRhdGEsIGNvbnN0IGNoYXIqIGNo
dW5rKQoreworICAgIGlmICghZGlkSW5pdCkgeworICAgICAgICB4bWxJbml0UGFyc2VyKCk7Cisg
ICAgICAgIHhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MobWF0Y2hGdW5jLCBvcGVuRnVuYywgcmVh
ZEZ1bmMsIGNsb3NlRnVuYyk7CisgICAgICAgIHhtbFJlZ2lzdGVyT3V0cHV0Q2FsbGJhY2tzKG1h
dGNoRnVuYywgb3BlbkZ1bmMsIHdyaXRlRnVuYywgY2xvc2VGdW5jKTsKKyAgICAgICAgbGlieG1s
TG9hZGVyVGhyZWFkID0gY3VycmVudFRocmVhZCgpOworICAgICAgICBkaWRJbml0ID0gdHJ1ZTsK
KyAgICB9CisKKyAgICB4bWxQYXJzZXJDdHh0UHRyIHBhcnNlciA9IHhtbENyZWF0ZU1lbW9yeVBh
cnNlckN0eHQoY2h1bmssIHhtbFN0cmxlbigoY29uc3QgeG1sQ2hhciopY2h1bmspKTsKKworICAg
IGlmICghcGFyc2VyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIENvcHkgdGhlIHNheCBo
YW5kbGVyCisgICAgbWVtY3B5KHBhcnNlci0+c2F4LCBoYW5kbGVycywgc2l6ZW9mKHhtbFNBWEhh
bmRsZXIpKTsKKworICAgIC8vIFNldCBwYXJzZXIgb3B0aW9ucy4KKyAgICAvLyBYTUxfUEFSU0Vf
Tk9ESUNUOiBkZWZhdWx0IGRpY3Rpb25uYXJ5IG9wdGlvbi4KKyAgICAvLyBYTUxfUEFSU0VfTk9F
TlQ6IGZvcmNlIGVudGl0aWVzIHN1YnN0aXR1dGlvbnMuCisgICAgeG1sQ3R4dFVzZU9wdGlvbnMo
cGFyc2VyLCBYTUxfUEFSU0VfTk9ESUNUIHwgWE1MX1BBUlNFX05PRU5UKTsKKworICAgIC8vIElu
dGVybmFsIGluaXRpYWxpemF0aW9uCisgICAgcGFyc2VyLT5zYXgyID0gMTsKKyAgICBwYXJzZXIt
Pmluc3RhdGUgPSBYTUxfUEFSU0VSX0NPTlRFTlQ7IC8vIFdlIGFyZSBwYXJzaW5nIGEgQ09OVEVO
VAorICAgIHBhcnNlci0+ZGVwdGggPSAwOworICAgIHBhcnNlci0+c3RyX3htbCA9IHhtbERpY3RM
b29rdXAocGFyc2VyLT5kaWN0LCBCQURfQ0FTVCAieG1sIiwgMyk7CisgICAgcGFyc2VyLT5zdHJf
eG1sbnMgPSB4bWxEaWN0TG9va3VwKHBhcnNlci0+ZGljdCwgQkFEX0NBU1QgInhtbG5zIiwgNSk7
CisgICAgcGFyc2VyLT5zdHJfeG1sX25zID0geG1sRGljdExvb2t1cChwYXJzZXItPmRpY3QsIFhN
TF9YTUxfTkFNRVNQQUNFLCAzNik7CisgICAgcGFyc2VyLT5fcHJpdmF0ZSA9IHVzZXJEYXRhOwor
CiAgICAgcmV0dXJuIHBhcnNlcjsKIH0KICNlbmRpZgpAQCAtMTI1NywxMSArMTI5NiwxMiBAQCB2
b2lkIFhNTFRva2VuaXplcjo6ZXhpdFRleHQoKQogICAgICAgICBzZXRDdXJyZW50Tm9kZShwYXIp
OwogfQogCi12b2lkIFhNTFRva2VuaXplcjo6aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoKQordm9p
ZCBYTUxUb2tlbml6ZXI6OmluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IGNoYXIqIGNodW5r
KQogewogI2lmbmRlZiBVU0VfUVhNTFNUUkVBTQogICAgIHhtbFNBWEhhbmRsZXIgc2F4OwogICAg
IG1lbXNldCgmc2F4LCAwLCBzaXplb2Yoc2F4KSk7CisKICAgICBzYXguZXJyb3IgPSBub3JtYWxF
cnJvckhhbmRsZXI7CiAgICAgc2F4LmZhdGFsRXJyb3IgPSBmYXRhbEVycm9ySGFuZGxlcjsKICAg
ICBzYXguY2hhcmFjdGVycyA9IGNoYXJhY3RlcnNIYW5kbGVyOwpAQCAtMTI4NCw5ICsxMzI0LDEy
IEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCgpCiAgICAgbV9z
YXdFcnJvciA9IGZhbHNlOwogICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gZmFsc2U7CiAgICAgbV9z
YXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKLSAgICAKKwogI2lmbmRlZiBVU0VfUVhNTFNUUkVBTQot
ICAgIG1fY29udGV4dCA9IGNyZWF0ZVN0cmluZ1BhcnNlcigmc2F4LCB0aGlzKTsKKyAgICBpZiAo
bV9wYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fY29udGV4dCA9IGNyZWF0ZU1lbW9yeVBhcnNl
cigmc2F4LCB0aGlzLCBjaHVuayk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQgPSBjcmVh
dGVTdHJpbmdQYXJzZXIoJnNheCwgdGhpcyk7CiAjZW5kaWYKIH0KIApAQCAtMTU0NCw3NSArMTU4
NywzMCBAQCB2b2lkIFhNTFRva2VuaXplcjo6cmVzdW1lUGFyc2luZygpCiAgICAgICAgIGVuZCgp
OwogfQogCi0jaWZuZGVmIFVTRV9RWE1MU1RSRUFNCi1zdGF0aWMgdm9pZCBiYWxhbmNlZFN0YXJ0
RWxlbWVudE5zSGFuZGxlcih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBsb2NhbG5hbWUs
IGNvbnN0IHhtbENoYXIqIHByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHhtbENoYXIqIHVyaSwgaW50IG5iX25hbWVzcGFjZXMsIGNvbnN0IHht
bENoYXIqKiBuYW1lc3BhY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG5iX2F0dHJpYnV0ZXMsIGludCBuYl9kZWZhdWx0ZWQsIGNvbnN0IHhtbENoYXIq
KiBsaWJ4bWxBdHRyaWJ1dGVzKQorYm9vbCBwYXJzZVhNTERvY3VtZW50RnJhZ21lbnQoY29uc3Qg
U3RyaW5nJiBjaHVuaywgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVu
dCkKIHsKLSAgIHN0YXRpY19jYXN0PFhNTFRva2VuaXplcio+KGNsb3N1cmUpLT5zdGFydEVsZW1l
bnROcyhsb2NhbG5hbWUsIHByZWZpeCwgdXJpLCBuYl9uYW1lc3BhY2VzLCBuYW1lc3BhY2VzLCBu
Yl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0ZWQsIGxpYnhtbEF0dHJpYnV0ZXMpOwotfQotCi1zdGF0
aWMgdm9pZCBiYWxhbmNlZEVuZEVsZW1lbnROc0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3Qg
eG1sQ2hhciogbG9jYWxuYW1lLCBjb25zdCB4bWxDaGFyKiBwcmVmaXgsIGNvbnN0IHhtbENoYXIq
IHVyaSkKLXsKLSAgICBzdGF0aWNfY2FzdDxYTUxUb2tlbml6ZXIqPihjbG9zdXJlKS0+ZW5kRWxl
bWVudE5zKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJhbGFuY2VkQ2hhcmFjdGVyc0hhbmRsZXIodm9p
ZCogY2xvc3VyZSwgY29uc3QgeG1sQ2hhciogcywgaW50IGxlbikKLXsKLSAgICBzdGF0aWNfY2Fz
dDxYTUxUb2tlbml6ZXIqPihjbG9zdXJlKS0+Y2hhcmFjdGVycyhzLCBsZW4pOwotfQotCi1zdGF0
aWMgdm9pZCBiYWxhbmNlZFByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIodm9pZCogY2xvc3Vy
ZSwgY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4bWxDaGFyKiBkYXRhKQotewotICAgIHN0
YXRpY19jYXN0PFhNTFRva2VuaXplcio+KGNsb3N1cmUpLT5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
dGFyZ2V0LCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgYmFsYW5jZWRDZGF0YUJsb2NrSGFuZGxl
cih2b2lkKiBjbG9zdXJlLCBjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVuKQotewotICAgIHN0YXRp
Y19jYXN0PFhNTFRva2VuaXplcio+KGNsb3N1cmUpLT5jZGF0YUJsb2NrKHMsIGxlbik7Ci19Ci0K
LXN0YXRpYyB2b2lkIGJhbGFuY2VkQ29tbWVudEhhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3Qg
eG1sQ2hhciogY29tbWVudCkKLXsKLSAgICBzdGF0aWNfY2FzdDxYTUxUb2tlbml6ZXIqPihjbG9z
dXJlKS0+Y29tbWVudChjb21tZW50KTsKLX0KLQotV1RGX0FUVFJJQlVURV9QUklOVEYoMiwgMykK
LXN0YXRpYyB2b2lkIGJhbGFuY2VkV2FybmluZ0hhbmRsZXIodm9pZCogY2xvc3VyZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSwgLi4uKQotewotICAgIHZhX2xpc3QgYXJnczsKLSAgICB2YV9zdGFydChh
cmdzLCBtZXNzYWdlKTsKLSAgICBzdGF0aWNfY2FzdDxYTUxUb2tlbml6ZXIqPihjbG9zdXJlKS0+
ZXJyb3IoWE1MVG9rZW5pemVyOjp3YXJuaW5nLCBtZXNzYWdlLCBhcmdzKTsKLSAgICB2YV9lbmQo
YXJncyk7Ci19Ci0jZW5kaWYKLWJvb2wgcGFyc2VYTUxEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50
KQotewotICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgIGlmICghY2h1bmsubGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgWE1MVG9rZW5pemVyIHRva2VuaXplcihmcmFn
bWVudCwgcGFyZW50KTsKICAgICAKICNpZm5kZWYgVVNFX1FYTUxTVFJFQU0KLSAgICB4bWxTQVhI
YW5kbGVyIHNheDsKLSAgICBtZW1zZXQoJnNheCwgMCwgc2l6ZW9mKHNheCkpOworICAgIHRva2Vu
aXplci5pbml0aWFsaXplUGFyc2VyQ29udGV4dChjaHVuay51dGY4KCkuZGF0YSgpKTsKKworICAg
IHhtbFBhcnNlQ29udGVudCh0b2tlbml6ZXIubV9jb250ZXh0KTsKIAotICAgIHNheC5jaGFyYWN0
ZXJzID0gYmFsYW5jZWRDaGFyYWN0ZXJzSGFuZGxlcjsKLSAgICBzYXgucHJvY2Vzc2luZ0luc3Ry
dWN0aW9uID0gYmFsYW5jZWRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyOwotICAgIHNheC5z
dGFydEVsZW1lbnROcyA9IGJhbGFuY2VkU3RhcnRFbGVtZW50TnNIYW5kbGVyOwotICAgIHNheC5l
bmRFbGVtZW50TnMgPSBiYWxhbmNlZEVuZEVsZW1lbnROc0hhbmRsZXI7Ci0gICAgc2F4LmNkYXRh
QmxvY2sgPSBiYWxhbmNlZENkYXRhQmxvY2tIYW5kbGVyOwotICAgIHNheC5pZ25vcmFibGVXaGl0
ZXNwYWNlID0gYmFsYW5jZWRDaGFyYWN0ZXJzSGFuZGxlcjsKLSAgICBzYXguY29tbWVudCA9IGJh
bGFuY2VkQ29tbWVudEhhbmRsZXI7Ci0gICAgc2F4Lndhcm5pbmcgPSBiYWxhbmNlZFdhcm5pbmdI
YW5kbGVyOwotICAgIHNheC5pbml0aWFsaXplZCA9IFhNTF9TQVgyX01BR0lDOwotICAgIAotICAg
IGludCByZXN1bHQgPSB4bWxQYXJzZUJhbGFuY2VkQ2h1bmtNZW1vcnkoMCwgJnNheCwgJnRva2Vu
aXplciwgMCwgKGNvbnN0IHhtbENoYXIqKXN0cmluZy51dGY4KCkuZGF0YSgpLCAwKTsKICAgICB0
b2tlbml6ZXIuZW5kRG9jdW1lbnQoKTsKLSAgICByZXR1cm4gcmVzdWx0ID09IDA7CisKKyAgICAv
LyBDaGVjayBpZiBhbGwgdGhlIGNodW5rIGhhcyBiZWVuIHByb2Nlc3NlZC4KKyAgICBsb25nIGJ5
dGVzUHJvY2Vzc2VkID0geG1sQnl0ZUNvbnN1bWVkKHRva2VuaXplci5tX2NvbnRleHQpOworICAg
IGlmIChieXRlc1Byb2Nlc3NlZCA9PSAtMSB8fCAoKHVuc2lnbmVkIGxvbmcpYnl0ZXNQcm9jZXNz
ZWQpID09IHNpemVvZihVQ2hhcikgKiBjaHVuay5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gTm8gZXJyb3IgaWYgdGhlIGNodW5rIGlzIHdlbGwgZm9ybWVkIG9yIGl0
IGlzIG5vdCBidXQgd2UgaGF2ZSBubyBlcnJvci4KKyAgICByZXR1cm4gdG9rZW5pemVyLm1fY29u
dGV4dC0+d2VsbEZvcm1lZCB8fCB4bWxDdHh0R2V0TGFzdEVycm9yKHRva2VuaXplci5tX2NvbnRl
eHQpID09IDA7CiAjZWxzZQogICAgIHRva2VuaXplci53cml0ZShTdHJpbmcoIjxxeG1sc3RyZWFt
ZHVtbXllbGVtZW50PiIpLCBmYWxzZSk7Ci0gICAgdG9rZW5pemVyLndyaXRlKHN0cmluZywgZmFs
c2UpOworICAgIHRva2VuaXplci53cml0ZShjaHVuaywgZmFsc2UpOwogICAgIHRva2VuaXplci53
cml0ZShTdHJpbmcoIjwvcXhtbHN0cmVhbWR1bW15ZWxlbWVudD4iKSwgZmFsc2UpOwogICAgIHRv
a2VuaXplci5maW5pc2goKTsKICAgICByZXR1cm4gIXRva2VuaXplci5oYXNFcnJvcigpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmggYi9XZWJDb3JlL2RvbS9YTUxUb2tl
bml6ZXIuaAppbmRleCBlNzU0ZTg0Li4zODBlOGI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Y
TUxUb2tlbml6ZXIuaAorKysgYi9XZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaApAQCAtODEsNiAr
ODEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlG
aW5pc2hlZChDYWNoZWRSZXNvdXJjZSogZmluaXNoZWRPYmopOwogCiAjaWZuZGVmIFVTRV9RWE1M
U1RSRUFNCisKKyAgICAgICAgZnJpZW5kIGJvb2wgcGFyc2VYTUxEb2N1bWVudEZyYWdtZW50KGNv
bnN0IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBw
YXJlbnQpOworCiAgICAgICAgIC8vIGNhbGxiYWNrcyBmcm9tIHBhcnNlciBTQVgKICAgICAgICAg
dm9pZCBlcnJvcihFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHZhX2xpc3QgYXJncykg
V1RGX0FUVFJJQlVURV9QUklOVEYoMywgMCk7IAogICAgICAgICB2b2lkIHN0YXJ0RWxlbWVudE5z
KGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhciogeG1sUHJlZml4LCBj
b25zdCB4bWxDaGFyKiB4bWxVUkksIGludCBuYl9uYW1lc3BhY2VzLApAQCAtMTE1LDcgKzExOCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBpbml0aWFsaXplUGFyc2VyQ29udGV4dCgp
OworICAgICAgICB2b2lkIGluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IGNoYXIqIGNodW5r
ID0gMCk7CiAgICAgICAgIHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSopOwogCiAgICAgICAgIHZv
aWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2soKTsK
</data>
<flag name="review"
          id="8928"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>20521</attachid>
            <date>2008-04-13 23:56:55 -0700</date>
            <delta_ts>2008-04-13 23:56:55 -0700</delta_ts>
            <desc>test contextual parsing</desc>
            <filename>contextual.xhtml</filename>
            <type>application/xhtml+xml</type>
            <size>600</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ+DQo8dGl0
bGU+VW50aXRsZWQgRG9jdW1lbnQ8L3RpdGxlPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPg0KPCFbQ0RBVEFbDQpmdW5jdGlvbiB0ZXN0KCkNCnsNCgl2YXIJaHRtbCA9ICc8Zm9vbnM6
ZGl2IGZvbz0iJmFtcDsiLz4nDQoJdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5DQogICAgdmFy
IHJhbmdlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7DQogICAgcmFuZ2Uu
c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOw0KICAgIHZhciBmcmFnbWVudCA9IHJhbmdlLmNy
ZWF0ZUNvbnRleHR1YWxGcmFnbWVudChodG1sKTsNCg0KICAgIGFsZXJ0KCJTaG91bGQgYmUgJjog
IiArIGZyYWdtZW50LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCdmb28nKSk7DQp9DQpdXT4NCjwv
c2NyaXB0Pg0KPC9oZWFkPg0KDQo8Ym9keSB4bWxuczpmb29ucz0iaHR0cDovL3d3dy53My5vcmcv
MTk5OS94aHRtbCI+DQoJPGJ1dHRvbiBvbmNsaWNrPSJ0ZXN0KCk7IHJldHVybiBmYWxzZSI+VGVz
dDwvYnV0dG9uPg0KPC9ib2R5Pg0KPC9odG1sPg0K
</data>

          </attachment>
      

    </bug>

</bugzilla>