<?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>50366</bug_id>
          
          <creation_ts>2010-12-01 18:22:42 -0800</creation_ts>
          <short_desc>XPath lexer misinterprets expression starting with &quot;div&quot;.</short_desc>
          <delta_ts>2010-12-04 23:28:52 -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>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yonathan Randolph">yonathan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>315984</commentid>
    <comment_count>0</comment_count>
    <who name="Yonathan Randolph">yonathan</who>
    <bug_when>2010-12-01 18:22:42 -0800</bug_when>
    <thetext>The following expression fails because the first token is interpreted as binary operator &quot;div&quot;, not the step &quot;div&quot;.
document.evaluate(&apos;div&apos;, document.body, null, XPathResult.SINGLE_NODE_VALUE, null)
(Error: INVALID_EXPRESSION_ERR: DOM XPath Exception 51)

It&apos;s easy to work around the bug:
document.evaluate(&apos;./div&apos;, document.body, null, XPathResult.SINGLE_NODE_VALUE, null)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315985</commentid>
    <comment_count>1</comment_count>
      <attachid>75344</attachid>
    <who name="Yonathan Randolph">yonathan</who>
    <bug_when>2010-12-01 18:30:13 -0800</bug_when>
    <thetext>Created attachment 75344
XPath parser patch.

Note: if you&apos;re not seeing the error, try adding some whitespace to the XPath: &quot;  div&quot;. It fails in Chrome at least.

Does anyone know what tests I should add for this? I didn&apos;t see unit tests in the last few changes to XPathParser.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316025</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-01 23:00:47 -0800</bug_when>
    <thetext>The only text in the spec I can see that&apos;s related is this disambiguation rule in &lt;http://www.w3.org/TR/xpath/#exprlex&gt;:

&quot;Otherwise, the token must not be recognized as a MultiplyOperator, an OperatorName, a NodeType, a FunctionName, or an AxisName.&quot;

I&apos;m not sure how exactly to interpret this - there is no case that allows an OperatorName in disambiguation rules! The proposed patch agrees with common sense, but may be operating at a level that&apos;s different from what&apos;s implied by the spec.

&gt; Does anyone know what tests I should add for this?

See existing tests in LayoutTests/fast/xpath, for example document-order.html or complex-id.html. The most recent changes to this file didn&apos;t affect observed behavior, so they didn&apos;t have regression tests.

Besides &apos;div&apos;, there should be a test for &apos;mod&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316467</commentid>
    <comment_count>3</comment_count>
      <attachid>75424</attachid>
    <who name="Yonathan Randolph">yonathan</who>
    <bug_when>2010-12-02 15:45:25 -0800</bug_when>
    <thetext>Created attachment 75424
Unit test for parsing div, mod, and *.

(In reply to comment #2)
&gt; The only text in the spec I can see that&apos;s related is this disambiguation rule in &lt;http://www.w3.org/TR/xpath/#exprlex&gt;:
&gt; 
&gt; &quot;Otherwise, the token must not be recognized as a MultiplyOperator, an OperatorName, a NodeType, a FunctionName, or an AxisName.&quot;
&gt; 
&gt; I&apos;m not sure how exactly to interpret this - there is no case that allows an OperatorName in disambiguation rules! The proposed patch agrees with common sense, but may be operating at a level that&apos;s different from what&apos;s implied by the spec.

No, I had to read it twice too. The first bullet point tells you the only cases an ambiguous binary operators can happen:

&quot;If there is a preceding token and the preceding token is not one of @, ::, (, [, , or an Operator, then a * must be recognized as a MultiplyOperator and an NCName must be recognized as an OperatorName.&quot;

The bug was that the parser didn&apos;t properly check for &quot;If there is a preceding token&quot;. It tested m_nextPos (which changes with whitespace) rather than the previous token value.

&gt; 
&gt; &gt; Does anyone know what tests I should add for this?
&gt; 
&gt; See existing tests in LayoutTests/fast/xpath, for example document-order.html or complex-id.html. The most recent changes to this file didn&apos;t affect observed behavior, so they didn&apos;t have regression tests.
&gt; 
&gt; Besides &apos;div&apos;, there should be a test for &apos;mod&apos;.

I&apos;ve added a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316487</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-02 16:05:03 -0800</bug_when>
    <thetext>Looks great. Could you please combine these into a single patch, and mark it for review (set review? flag when adding an attachment)?

+&lt;p&gt;Test that an NCName and * are interpreted as an operator when it is in
+binary operator context, and as a NameTest otherwise..

Nit: two periods at the end.

-/* Returns whether the last parsed token matches the [32] Operator rule
- * (check http://www.w3.org/TR/xpath#exprlex). Necessary to disambiguate
- * the tokens.
+/* Returns whether the current token can possibly be a binary operator, given
+ * the previous token. Necessary to disambiguate some of the operators
+ * (* (multiply), div, and, or, mod) in the [32] Operator rule
+ * (check http://www.w3.org/TR/xpath#exprlex).
  */

Nit: this is a pre-existing issue, but we don&apos;t use C comments in C++ code as a matter of coding style.

-    if (isOperatorContext()) {
+    if (isBinaryOperatorContext()) {
         if (name == &quot;and&quot;) //### hash?
             return Token(AND);

I&apos;m wondering what this ### comment is about.

+++ fast/xpath/ambiguous-operators.html	(revision 0)

I&apos;d try to add as many tests as I can think of, even if redundant. Say, &quot;div/div&quot;, &quot;(12) div 4&quot; or &quot;div + div&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316650</commentid>
    <comment_count>5</comment_count>
      <attachid>75461</attachid>
    <who name="Yonathan Randolph">yonathan</who>
    <bug_when>2010-12-02 20:59:53 -0800</bug_when>
    <thetext>Created attachment 75461
Updated patch with exhaustive test and slight bug fix.

I&apos;ve done what you&apos;ve asked for.

&gt; -    if (isOperatorContext()) {
&gt; +    if (isBinaryOperatorContext()) {
&gt;          if (name == &quot;and&quot;) //### hash?
&gt;              return Token(AND);
&gt; 
&gt; I&apos;m wondering what this ### comment is about.

I don&apos;t understand it either.

&gt; I&apos;d try to add as many tests as I can think of, even if redundant. Say, &quot;div/div&quot;, &quot;(12) div 4&quot; or &quot;div + div&quot;.
I&apos;ve begrudgingly made the test exhaustive (I think). Turns out this was actually a good idea, because I found a case I didn&apos;t notice earlier: node test immediately following comma.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316652</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-02 21:02:44 -0800</bug_when>
    <thetext>Attachment 75461 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/fast/xpath/ambiguous-operators-expected.txt&apos;, u&apos;LayoutTests/fast/xpath/ambiguous-operators.html&apos;, u&apos;WebCore/xml/XPathParser.cpp&apos;, u&apos;WebCore/xml/XPathParser.h&apos;]&quot; exit_code: 1
WebCore/xml/XPathParser.cpp:134:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316662</commentid>
    <comment_count>7</comment_count>
      <attachid>75463</attachid>
    <who name="Yonathan Randolph">yonathan</who>
    <bug_when>2010-12-02 21:25:32 -0800</bug_when>
    <thetext>Created attachment 75463
Mollify check-webkit-style a little.

Also I forgot to include ChangeLogs to svn diff earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316670</commentid>
    <comment_count>8</comment_count>
      <attachid>75463</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-02 22:11:27 -0800</bug_when>
    <thetext>Comment on attachment 75463
Mollify check-webkit-style a little.

r=me. Also marking approved for commit queue - it&apos;s been having some trouble lately, so let&apos;s see if it works.

&gt; Turns out this was actually a good idea, because I found a case I didn&apos;t notice earlier: node test immediately following comma.

I&apos;d glad to hear that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316672</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-02 22:14:06 -0800</bug_when>
    <thetext>Interestingly, Firefox 3.6 fails two of the subtests:

FAIL - - div: raised [Exception... &quot;The expression cannot be converted to return the specified type.&quot; code: &quot;52&quot; nsresult: &quot;0x805b0034 (NS_ERROR_DOM_TYPE_ERR)&quot; location: &quot;file:///Users/ap/Safari/OpenSource/LayoutTests/fast/xpath/xpath-test-pre.js Line: 28&quot;]

FAIL - - *: raised [Exception... &quot;The expression cannot be converted to return the specified type.&quot; code: &quot;52&quot; nsresult: &quot;0x805b0034 (NS_ERROR_DOM_TYPE_ERR)&quot; location: &quot;file:///Users/ap/Safari/OpenSource/LayoutTests/fast/xpath/xpath-test-pre.js Line: 28&quot;]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316702</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-03 00:10:07 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 75463:

inspector/styles-disable-inherited.html

Please file bugs against the tests.  These tests were authored by pfeldman@chromium.org.  The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316704</commentid>
    <comment_count>11</comment_count>
      <attachid>75463</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-03 00:12:26 -0800</bug_when>
    <thetext>Comment on attachment 75463
Mollify check-webkit-style a little.

Clearing flags on attachment: 75463

Committed r73247: &lt;http://trac.webkit.org/changeset/73247&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316705</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-03 00:12:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317351</commentid>
    <comment_count>13</comment_count>
    <who name="Yonathan Randolph">yonathan</who>
    <bug_when>2010-12-04 23:28:52 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Interestingly, Firefox 3.6 fails two of the subtests:

By the way, it seems that Gecko fails because it removes &quot;redundant&quot; double minus operators, and then the return value doesn&apos;t get coerced to number anymore. I filed the bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=616774</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75344</attachid>
            <date>2010-12-01 18:30:13 -0800</date>
            <delta_ts>2010-12-02 21:25:32 -0800</delta_ts>
            <desc>XPath parser patch.</desc>
            <filename>xpath-lexer.patch</filename>
            <type>text/plain</type>
            <size>2805</size>
            <attacher name="Yonathan Randolph">yonathan</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDczMDky
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTIt
MDEgIFlvbmF0aGFuIFJhbmRvbHBoICA8eW9uYXRoYW5AZ21haWwuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFhQYXRoIGxleGVyIG1pc2ludGVy
cHJldHMgZXhwcmVzc2lvbiBzdGFydGluZyB3aXRoICJkaXYiLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAzNjYKKworICAgICAgICBObyBuZXcgdGVz
dHMuIChPT1BTISkKKworICAgICAgICAqIHhtbC9YUGF0aFBhcnNlci5jcHA6CisgICAgICAgICog
eG1sL1hQYXRoUGFyc2VyLmg6CisKIDIwMTAtMTItMDEgIEppYSBQdSAgPGpwdUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiB4bWwvWFBhdGhQYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB4bWwvWFBhdGhQYXJzZXIuaAkocmV2aXNpb24gNjg2NTEpCisr
KyB4bWwvWFBhdGhQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQAogICAg
ICAgICAgICAgdm9pZCBkZWxldGVOb2RlVGVzdChTdGVwOjpOb2RlVGVzdCopOwogCiAgICAgICAg
IHByaXZhdGU6Ci0gICAgICAgICAgICBib29sIGlzT3BlcmF0b3JDb250ZXh0KCkgY29uc3Q7Cisg
ICAgICAgICAgICBib29sIGlzQmluYXJ5T3BlcmF0b3JDb250ZXh0KCkgY29uc3Q7CiAKICAgICAg
ICAgICAgIHZvaWQgc2tpcFdTKCk7CiAgICAgICAgICAgICBUb2tlbiBtYWtlVG9rZW5BbmRBZHZh
bmNlKGludCB0eXBlLCBpbnQgYWR2YW5jZSA9IDEpOwpJbmRleDogeG1sL1hQYXRoUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSB4bWwvWFBhdGhQYXJzZXIuY3BwCShyZXZpc2lvbiA2ODY1MSkKKysr
IHhtbC9YUGF0aFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCwyMCArMTI0LDE5IEBA
CiAgICAgcmV0dXJuIG5vZGVUeXBlTmFtZXMuY29udGFpbnMobmFtZSk7CiB9CiAKLS8qIFJldHVy
bnMgd2hldGhlciB0aGUgbGFzdCBwYXJzZWQgdG9rZW4gbWF0Y2hlcyB0aGUgWzMyXSBPcGVyYXRv
ciBydWxlCi0gKiAoY2hlY2sgaHR0cDovL3d3dy53My5vcmcvVFIveHBhdGgjZXhwcmxleCkuIE5l
Y2Vzc2FyeSB0byBkaXNhbWJpZ3VhdGUKLSAqIHRoZSB0b2tlbnMuCisvKiBSZXR1cm5zIHdoZXRo
ZXIgdGhlIGN1cnJlbnQgdG9rZW4gY2FuIHBvc3NpYmx5IGJlIGEgYmluYXJ5IG9wZXJhdG9yLCBn
aXZlbgorICogdGhlIHByZXZpb3VzIHRva2VuLiBOZWNlc3NhcnkgdG8gZGlzYW1iaWd1YXRlIHNv
bWUgb2YgdGhlIG9wZXJhdG9ycworICogKCogKG11bHRpcGx5KSwgZGl2LCBhbmQsIG9yLCBtb2Qp
IGluIHRoZSBbMzJdIE9wZXJhdG9yIHJ1bGUKKyAqIChjaGVjayBodHRwOi8vd3d3LnczLm9yZy9U
Ui94cGF0aCNleHBybGV4KS4KICAqLwotYm9vbCBQYXJzZXI6OmlzT3BlcmF0b3JDb250ZXh0KCkg
Y29uc3QKK2Jvb2wgUGFyc2VyOjppc0JpbmFyeU9wZXJhdG9yQ29udGV4dCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1fbmV4dFBvcyA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBzd2l0
Y2ggKG1fbGFzdFRva2VuVHlwZSkgewogICAgICAgICBjYXNlIEFORDogY2FzZSBPUjogY2FzZSBN
VUxPUDoKICAgICAgICAgY2FzZSAnLyc6IGNhc2UgU0xBU0hTTEFTSDogY2FzZSAnfCc6IGNhc2Ug
UExVUzogY2FzZSBNSU5VUzoKICAgICAgICAgY2FzZSBFUU9QOiBjYXNlIFJFTE9QOgogICAgICAg
ICBjYXNlICdAJzogY2FzZSBBWElTTkFNRTogICBjYXNlICcoJzogY2FzZSAnWyc6CisgICAgICAg
IGNhc2UgMDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzE5LDcgKzMxOCw3IEBACiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoUkVMT1AsIEVxVGVzdE9wOjpPUF9HRSwgMik7
CiAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShSRUxPUCwgRXFUZXN0T3A6
Ok9QX0dUKTsKICAgICAgICAgY2FzZSAnKic6Ci0gICAgICAgICAgICBpZiAoaXNPcGVyYXRvckNv
bnRleHQoKSkKKyAgICAgICAgICAgIGlmIChpc0JpbmFyeU9wZXJhdG9yQ29udGV4dCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKE1VTE9QLCBOdW1lcmljT3A6
Ok9QX011bCk7CiAgICAgICAgICAgICArK21fbmV4dFBvczsKICAgICAgICAgICAgIHJldHVybiBU
b2tlbihOQU1FVEVTVCwgIioiKTsKQEAgLTMzOCw3ICszMzcsNyBAQAogCiAgICAgc2tpcFdTKCk7
CiAgICAgLy8gSWYgd2UncmUgaW4gYW4gb3BlcmF0b3IgY29udGV4dCwgY2hlY2sgZm9yIGFueSBv
cGVyYXRvciBuYW1lcwotICAgIGlmIChpc09wZXJhdG9yQ29udGV4dCgpKSB7CisgICAgaWYgKGlz
QmluYXJ5T3BlcmF0b3JDb250ZXh0KCkpIHsKICAgICAgICAgaWYgKG5hbWUgPT0gImFuZCIpIC8v
IyMjIGhhc2g/CiAgICAgICAgICAgICByZXR1cm4gVG9rZW4oQU5EKTsKICAgICAgICAgaWYgKG5h
bWUgPT0gIm9yIikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75424</attachid>
            <date>2010-12-02 15:45:25 -0800</date>
            <delta_ts>2010-12-02 21:25:32 -0800</delta_ts>
            <desc>Unit test for parsing div, mod, and *.</desc>
            <filename>xpath-lexer-test.patch</filename>
            <type>text/plain</type>
            <size>2613</size>
            <attacher name="Yonathan Randolph">yonathan</attacher>
            
              <data encoding="base64">SW5kZXg6IGZhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZmFzdC94cGF0aC9hbWJpZ3VvdXMtb3BlcmF0b3JzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIGZhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3QgdGhhdCBhbiBOQ05hbWUgYW5kICog
YXJlIGludGVycHJldGVkIGFzIGFuIG9wZXJhdG9yIHdoZW4gaXQgaXMgaW4gYmluYXJ5IG9wZXJh
dG9yIGNvbnRleHQsIGFuZCBhcyBhIE5hbWVUZXN0IG90aGVyd2lzZS4uCisKK1NlZSBidWcgNTAz
NjY6IFhQYXRoIGxleGVyIG1pc2ludGVycHJldHMgZXhwcmVzc2lvbiBzdGFydGluZyB3aXRoICJk
aXYiLgorCitQQVNTICAgZGl2CitQQVNTIGRpdgorUEFTUyAxMiBkaXYgNAorUEFTUyBtb2QKK1BB
U1MgbW9kIG1vZCBtb2QKK1BBU1MgKG1vZCkgbW9kIDUKK1BBU1MgICogCitQQVNTICogKiAqCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
ZmFzdC94cGF0aC9hbWJpZ3VvdXMtb3BlcmF0b3JzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC94
cGF0aC9hbWJpZ3VvdXMtb3BlcmF0b3JzLmh0bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3hwYXRo
L2FtYmlndW91cy1vcGVyYXRvcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InhwYXRoLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGVzdCB0aGF0IGFuIE5DTmFtZSBhbmQgKiBh
cmUgaW50ZXJwcmV0ZWQgYXMgYW4gb3BlcmF0b3Igd2hlbiBpdCBpcyBpbgorYmluYXJ5IG9wZXJh
dG9yIGNvbnRleHQsIGFuZCBhcyBhIE5hbWVUZXN0IG90aGVyd2lzZS4uCisKKzxwPlNlZSA8YSBo
cmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDM2NiI+YnVnIDUw
MzY2PC9hPjoKK1hQYXRoIGxleGVyIG1pc2ludGVycHJldHMgZXhwcmVzc2lvbiBzdGFydGluZyB3
aXRoICJkaXYiLjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgordmFy
IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7Cit0ZXN0KGRvY3VtZW50
LCBkb2N1bWVudC5ib2R5LCAiICBkaXYiLCBbZGl2XSwgbnVsbCk7Cit0ZXN0KGRvY3VtZW50LCBk
b2N1bWVudC5ib2R5LCAiZGl2IiwgW2Rpdl0sIG51bGwpOwordGVzdChkb2N1bWVudCwgZG9jdW1l
bnQuYm9keSwgIjEyIGRpdiA0IiwgMywgbnVsbCk7CisKK3ZhciB4bWxEb2MgPSAobmV3IERPTVBh
cnNlcikucGFyc2VGcm9tU3RyaW5nKCI8bW9kPjg8L21vZD4iLCAidGV4dC94bWwiKTsKK3Rlc3Qo
eG1sRG9jLCB4bWxEb2MsICJtb2QiLCBbeG1sRG9jLmRvY3VtZW50RWxlbWVudF0sIG51bGwpOwor
dGVzdCh4bWxEb2MsIHhtbERvYywgIm1vZCBtb2QgbW9kIiwgMCwgbnVsbCk7Cit0ZXN0KHhtbERv
YywgeG1sRG9jLCAiKG1vZCkgbW9kIDUiLCAzLCBudWxsKTsKKwordGVzdCh4bWxEb2MsIHhtbERv
YywgIiAqICIsIFt4bWxEb2MuZG9jdW1lbnRFbGVtZW50XSwgbnVsbCk7Cit0ZXN0KHhtbERvYywg
eG1sRG9jLCAiKiAqICoiLCA2NCwgbnVsbCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBDaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzIwOCkKKysrIENoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTEyLTAyICBZb25hdGhhbiBSYW5kb2xwaCAg
PHlvbmF0aGFuQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBYUGF0aCBsZXhlciBtaXNpbnRlcnByZXRzIGV4cHJlc3Npb24gc3RhcnRp
bmcgd2l0aCAiZGl2Ii4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUwMzY2CisKKyAgICAgICAgKiBmYXN0L3hwYXRoL2FtYmlndW91cy1vcGVyYXRvcnMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3hwYXRoL2FtYmlndW91cy1vcGVy
YXRvcnMuaHRtbDogQWRkZWQuCisKIDIwMTAtMTItMDIgIEppYW4gTGkgIDxqaWFubGlAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75461</attachid>
            <date>2010-12-02 20:59:53 -0800</date>
            <delta_ts>2010-12-02 21:25:32 -0800</delta_ts>
            <desc>Updated patch with exhaustive test and slight bug fix.</desc>
            <filename>xpath-lexer.patch</filename>
            <type>text/plain</type>
            <size>10010</size>
            <attacher name="Yonathan Randolph">yonathan</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94cGF0aC9hbWJpZ3VvdXMtb3Bl
cmF0b3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHBh
dGgvYW1iaWd1b3VzLW9wZXJhdG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzMgQEAKK1Rlc3QgdGhhdCBhbiBOQ05hbWUgYW5kICogYXJlIGludGVycHJldGVkIGFzIGFu
IG9wZXJhdG9yIHdoZW4gaW4gYmluYXJ5IG9wZXJhdG9yIGNvbnRleHQsIGFuZCBhcyBhIE5hbWVU
ZXN0IG90aGVyd2lzZS4KKworU2VlIGJ1ZyA1MDM2NjogWFBhdGggbGV4ZXIgbWlzaW50ZXJwcmV0
cyBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggImRpdiIuCisKK1BBU1MgZGl2CitQQVNTICAgZGl2
CitQQVNTIChkaXYpIGRpdiAoZGl2KQorUEFTUyBzZWxmOjpub2RlKClbZGl2XSBkaXYgMQorUEFT
UyAuIGRpdiAuCitQQVNTIC4uIGRpdiAuLgorUEFTUyBzdHJpbmcoZGl2L0BkaXYpCitQQVNTIHN1
YnN0cmluZy1iZWZvcmUoJzE5OTInLCBkaXYpCitQQVNTIHNlbGY6OmRpdgorUEFTUyAqIGRpdiA0
CitQQVNTICczJyBkaXYgNAorUEFTUyAiMyIgZGl2IDQKK1BBU1MgMTIgZGl2IDQKK1BBU1MgdHJ1
ZSgpIGFuZCBkaXYKK1BBU1MgZmFsc2UoKSBvciBkaXYKK1BBU1MgZGl2IG1vZCBkaXYKK1BBU1Mg
ZGl2IGRpdiBkaXYKK1BBU1MgMyAqIGRpdgorUEFTUyBkaXYvZGl2CitQQVNTIGRpdi8vZGl2CitQ
QVNTIHp6fGRpdgorUEFTUyBkaXYrZGl2CitQQVNTIC0gLSBkaXYKK1BBU1MgNSAtZGl2CitQQVNT
IGRpdj1kaXYKK1BBU1MgZGl2IT1kaXYKK1BBU1MgZGl2PGRpdgorUEFTUyBkaXY8PWRpdgorUEFT
UyBkaXY+ZGl2CitQQVNTIGRpdj49ZGl2CitQQVNTICoKK1BBU1MgICAqCitQQVNTICgqKSAqICgq
KQorUEFTUyBzZWxmOjpub2RlKClbKl0gKiAxCitQQVNTIC4gKiAuCitQQVNTIC4uICogLi4KK1BB
U1Mgc3Vic3RyaW5nLWJlZm9yZSgnMTk5MicsICopCitQQVNTIHNlbGY6OioKK1BBU1MgKiAqIDQK
K1BBU1MgJzMnICogNAorUEFTUyAiMyIgKiA0CitQQVNTIDEyICogNAorUEFTUyB0cnVlKCkgYW5k
ICoKK1BBU1MgZmFsc2UoKSBvciAqCitQQVNTICogbW9kICoKK1BBU1MgKiBkaXYgKgorUEFTUyAz
ICogKgorUEFTUyAqLyoKK1BBU1MgKi8vKgorUEFTUyB6enwqCitQQVNTICorKgorUEFTUyAtIC0g
KgorUEFTUyA1IC0qCitQQVNTICo9KgorUEFTUyAqIT0qCitQQVNTICo8KgorUEFTUyAqPD0qCitQ
QVNTICo+KgorUEFTUyAqPj0qCitQQVNTIG9yOm9yCitQQVNTIG9yOioKK1BBU1MgbW9kCitQQVNT
IG1vZCBtb2QgbW9kCitQQVNTIChtb2QpIG1vZCA1CitQQVNTIHN0cmluZyhtb2QvQGFuZCkKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3hwYXRoL2FtYmlndW91cy1vcGVyYXRvcnMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hwYXRoL2FtYmlndW91cy1vcGVyYXRvcnMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InhwYXRoLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyNj
b250ZXh0IHtkaXNwbGF5Om5vbmV9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0
IHRoYXQgYW4gTkNOYW1lIGFuZCAqIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvcGVyYXRvciB3aGVu
IGluCitiaW5hcnkgb3BlcmF0b3IgY29udGV4dCwgYW5kIGFzIGEgTmFtZVRlc3Qgb3RoZXJ3aXNl
LgorCis8cD5TZWUgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTAzNjYiPmJ1ZyA1MDM2NjwvYT46CitYUGF0aCBsZXhlciBtaXNpbnRlcnByZXRzIGV4cHJl
c3Npb24gc3RhcnRpbmcgd2l0aCAiZGl2Ii48L3A+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorCis8ZGl2IGlkPSJjb250ZXh0Ij4KKyAgPGRpdiBpZD0idHdvIiBkaXY9IngiPjI8L2Rpdj4K
KzwvZGl2PgorCis8c2NyaXB0PgordmFyIGNvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29udGV4dCcpOwordmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0d28nKTsK
KworLy8gPT09PT09PT09PT0gZGl2ID09PT09PT09PT09CisKK3Rlc3QoZG9jdW1lbnQsIGNvbnRl
eHQsICJkaXYiLCBbZGl2XSwgbnVsbCk7ICAvLyBkaXYgd2l0aCBubyBwcmVjZWRpbmcgdG9rZW4K
K3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIgIGRpdiIsIFtkaXZdLCBudWxsKTsKKy8vIGRpdiBm
b2xsb3dpbmcgZXZlcnkgcG9zc2libGUgWzI4XSBFeHByVG9rZW4gaHR0cDovL3d3dy53My5vcmcv
VFIveHBhdGgvCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiKGRpdikgZGl2IChkaXYpIiwgMi8y
LCBudWxsKTsgIC8vIGRpdiBhZnRlciAoIGFuZCApCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAi
c2VsZjo6bm9kZSgpW2Rpdl0gZGl2IDEiLCAyLzEsIG51bGwpOyAgLy8gZGl2IGFmdGVyIFsgYW5k
IF0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIuIGRpdiAuIiwgMi8yLCBudWxsKTsgIC8vIGRp
diBhZnRlciAuCit0ZXN0KGRvY3VtZW50LCBkaXYsICIuLiBkaXYgLi4iLCAyLzIsIG51bGwpOyAg
Ly8gZGl2IGFmdGVyIC4uCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAic3RyaW5nKGRpdi9AZGl2
KSIsICJ4IiwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgQAordGVzdChkb2N1bWVudCwgY29udGV4dCwg
InN1YnN0cmluZy1iZWZvcmUoJzE5OTInLCBkaXYpIiwgIjE5OSIsIG51bGwpOyAgLy8gZGl2IGFm
dGVyICwKK3Rlc3QoZG9jdW1lbnQsIGRpdiwgInNlbGY6OmRpdiIsIFtkaXZdLCBudWxsKTsgIC8v
IGRpdiBhZnRlciA6OgordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiogZGl2IDQiLCAyLzQsIG51
bGwpOyAgLy8gZGl2IGFmdGVyIE5hbWVUZXN0ICoKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIn
MycgZGl2IDQiLCAzLzQsIG51bGwpOyAgLy8gZGl2IGFmdGVyIExpdGVyYWwKK3Rlc3QoZG9jdW1l
bnQsIGNvbnRleHQsICJcIjNcIiBkaXYgNCIsIDMvNCwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgTGl0
ZXJhbAordGVzdChkb2N1bWVudCwgY29udGV4dCwgIjEyIGRpdiA0IiwgMTIvNCwgbnVsbCk7ICAv
LyBkaXYgYWZ0ZXIgTnVtYmVyCisKKy8vIGRpdiBmb2xsb3dpbmcgZXZlcnkgWzMyXSBPcGVyYXRv
cgordGVzdChkb2N1bWVudCwgY29udGV4dCwgInRydWUoKSBhbmQgZGl2IiwgdHJ1ZSwgbnVsbCk7
ICAvLyBkaXYgYWZ0ZXIgT3BlcmF0b3JOYW1lIGFuZAordGVzdChkb2N1bWVudCwgY29udGV4dCwg
ImZhbHNlKCkgb3IgZGl2IiwgdHJ1ZSwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgT3BlcmF0b3JOYW1l
IG9yCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2IG1vZCBkaXYiLCAwLCBudWxsKTsgIC8v
IGRpdiBhZnRlciBPcGVyYXRvck5hbWUgbW9kCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2
IGRpdiBkaXYiLCAxLCBudWxsKTsgIC8vIGRpdiBhZnRlciBPcGVyYXRvck5hbWUgZGl2Cit0ZXN0
KGRvY3VtZW50LCBjb250ZXh0LCAiMyAqIGRpdiIsIDYsIG51bGwpOyAgLy8gZGl2IGFmdGVyIE11
bHRpcGx5T3BlcmF0b3IKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJkaXYvZGl2IiwgW10sIG51
bGwpOyAgLy8gZGl2IGFmdGVyIC8KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJkaXYvL2RpdiIs
IFtdLCBudWxsKTsgIC8vIGRpdiBhZnRlciAvLwordGVzdChkb2N1bWVudCwgY29udGV4dCwgInp6
fGRpdiIsIFtkaXZdLCBudWxsKTsgIC8vIGRpdiBhZnRlciB8Cit0ZXN0KGRvY3VtZW50LCBjb250
ZXh0LCAiZGl2K2RpdiIsIDQsIG51bGwpOyAgLy8gZGl2IGFmdGVyICsKK3Rlc3QoZG9jdW1lbnQs
IGNvbnRleHQsICItIC0gZGl2IiwgMiwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgdW5hcnkgLQordGVz
dChkb2N1bWVudCwgY29udGV4dCwgIjUgLWRpdiIsIDMsIG51bGwpOyAgLy8gZGl2IGFmdGVyIGJp
bmFyeSAtCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2PWRpdiIsIHRydWUsIG51bGwpOyAg
Ly8gZGl2IGFmdGVyID0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJkaXYhPWRpdiIsIGZhbHNl
LCBudWxsKTsgIC8vIGRpdiBhZnRlciA9Cit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2PGRp
diIsIGZhbHNlLCBudWxsKTsgIC8vIGRpdiBhZnRlciA8Cit0ZXN0KGRvY3VtZW50LCBjb250ZXh0
LCAiZGl2PD1kaXYiLCB0cnVlLCBudWxsKTsgIC8vIGRpdiBhZnRlciA8PQordGVzdChkb2N1bWVu
dCwgY29udGV4dCwgImRpdj5kaXYiLCBmYWxzZSwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgPgordGVz
dChkb2N1bWVudCwgY29udGV4dCwgImRpdj49ZGl2IiwgdHJ1ZSwgbnVsbCk7ICAvLyBkaXYgYWZ0
ZXIgPj0KKworCisvLyA9PT09PT09PT09PSAqID09PT09PT09PT09CisKK3Rlc3QoZG9jdW1lbnQs
IGNvbnRleHQsICIqIiwgW2Rpdl0sIG51bGwpOyAgLy8gKiB3aXRoIG5vIHByZWNlZGluZyB0b2tl
bgordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiAgKiIsIFtkaXZdLCBudWxsKTsKKy8vICogZm9s
bG93aW5nIGV2ZXJ5IHBvc3NpYmxlIFsyOF0gRXhwclRva2VuIGh0dHA6Ly93d3cudzMub3JnL1RS
L3hwYXRoLwordGVzdChkb2N1bWVudCwgY29udGV4dCwgIigqKSAqICgqKSIsIDIqMiwgbnVsbCk7
ICAvLyAqIGFmdGVyICggYW5kICkKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJzZWxmOjpub2Rl
KClbKl0gKiAxIiwgMioxLCBudWxsKTsgIC8vICogYWZ0ZXIgWyBhbmQgXQordGVzdChkb2N1bWVu
dCwgY29udGV4dCwgIi4gKiAuIiwgMioyLCBudWxsKTsgIC8vICogYWZ0ZXIgLgordGVzdChkb2N1
bWVudCwgZGl2LCAiLi4gKiAuLiIsIDIqMiwgbnVsbCk7ICAvLyAqIGFmdGVyIC4uCisvLyAoKiBj
YW4ndCBmb2xsb3cgQCkKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJzdWJzdHJpbmctYmVmb3Jl
KCcxOTkyJywgKikiLCAiMTk5IiwgbnVsbCk7ICAvLyAqIGFmdGVyICwKK3Rlc3QoZG9jdW1lbnQs
IGRpdiwgInNlbGY6OioiLCBbZGl2XSwgbnVsbCk7ICAvLyAqIGFmdGVyIDo6Cit0ZXN0KGRvY3Vt
ZW50LCBjb250ZXh0LCAiKiAqIDQiLCAyKjQsIG51bGwpOyAgLy8gKiBhZnRlciBOYW1lVGVzdCAq
Cit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiJzMnICogNCIsIDMqNCwgbnVsbCk7ICAvLyAqIGFm
dGVyIExpdGVyYWwKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJcIjNcIiAqIDQiLCAzKjQsIG51
bGwpOyAgLy8gKiBhZnRlciBMaXRlcmFsCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiMTIgKiA0
IiwgMTIqNCwgbnVsbCk7ICAvLyAqIGFmdGVyIE51bWJlcgorCisvLyAqIGZvbGxvd2luZyBldmVy
eSBbMzJdIE9wZXJhdG9yCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAidHJ1ZSgpIGFuZCAqIiwg
dHJ1ZSwgbnVsbCk7ICAvLyAqIGFmdGVyIE9wZXJhdG9yTmFtZSBhbmQKK3Rlc3QoZG9jdW1lbnQs
IGNvbnRleHQsICJmYWxzZSgpIG9yICoiLCB0cnVlLCBudWxsKTsgIC8vICogYWZ0ZXIgT3BlcmF0
b3JOYW1lIG9yCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiKiBtb2QgKiIsIDAsIG51bGwpOyAg
Ly8gKiBhZnRlciBPcGVyYXRvck5hbWUgbW9kCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiKiBk
aXYgKiIsIDEsIG51bGwpOyAgLy8gKiBhZnRlciBPcGVyYXRvck5hbWUgZGl2Cit0ZXN0KGRvY3Vt
ZW50LCBjb250ZXh0LCAiMyAqICoiLCA2LCBudWxsKTsgIC8vICogYWZ0ZXIgTXVsdGlwbHlPcGVy
YXRvcgordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiovKiIsIFtdLCBudWxsKTsgIC8vICogYWZ0
ZXIgLwordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiovLyoiLCBbXSwgbnVsbCk7ICAvLyAqIGFm
dGVyIC8vCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAienp8KiIsIFtkaXZdLCBudWxsKTsgIC8v
ICogYWZ0ZXIgfAordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiorKiIsIDQsIG51bGwpOyAgLy8g
KiBhZnRlciArCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiLSAtICoiLCAyLCBudWxsKTsgIC8v
ICogYWZ0ZXIgdW5hcnkgLQordGVzdChkb2N1bWVudCwgY29udGV4dCwgIjUgLSoiLCAzLCBudWxs
KTsgIC8vICogYWZ0ZXIgYmluYXJ5IC0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIqPSoiLCB0
cnVlLCBudWxsKTsgIC8vICogYWZ0ZXIgPQordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiohPSoi
LCBmYWxzZSwgbnVsbCk7ICAvLyAqIGFmdGVyID0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIq
PCoiLCBmYWxzZSwgbnVsbCk7ICAvLyAqIGFmdGVyIDwKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQs
ICIqPD0qIiwgdHJ1ZSwgbnVsbCk7ICAvLyAqIGFmdGVyIDw9Cit0ZXN0KGRvY3VtZW50LCBjb250
ZXh0LCAiKj4qIiwgZmFsc2UsIG51bGwpOyAgLy8gKiBhZnRlciA+Cit0ZXN0KGRvY3VtZW50LCBj
b250ZXh0LCAiKj49KiIsIHRydWUsIG51bGwpOyAgLy8gKiBhZnRlciA+PQorCit2YXIgeG1sRG9j
ID0gKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZygiPG9yIHhtbG5zPSd1cmknPjU8L29y
PiIsICJ0ZXh0L3htbCIpOwordmFyIG5zUmVzb2x2ZXIgPSBmdW5jdGlvbihwcmVmaXgpIHtyZXR1
cm4gJ3VyaSc7fQorLy8gZGl2IGFuZCAqIGFmdGVyIDoKK3Rlc3QoeG1sRG9jLCB4bWxEb2MsICJv
cjpvciIsIFt4bWxEb2MuZG9jdW1lbnRFbGVtZW50XSwgbnNSZXNvbHZlcik7Cit0ZXN0KHhtbERv
YywgeG1sRG9jLCAib3I6KiIsIFt4bWxEb2MuZG9jdW1lbnRFbGVtZW50XSwgbnNSZXNvbHZlcik7
CisKKy8vIEEgZmV3IHRlc3RzIHdpdGggbW9kIGFzIHdlbGwKK3ZhciB4bWxEb2MyID0gKG5ldyBE
T01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZygiPG1vZCBhbmQ9J3gnPjg8L21vZD4iLCAidGV4dC94
bWwiKTsKK3Rlc3QoeG1sRG9jMiwgeG1sRG9jMiwgIm1vZCIsIFt4bWxEb2MyLmRvY3VtZW50RWxl
bWVudF0sIG51bGwpOwordGVzdCh4bWxEb2MyLCB4bWxEb2MyLCAibW9kIG1vZCBtb2QiLCAwLCBu
dWxsKTsKK3Rlc3QoeG1sRG9jMiwgeG1sRG9jMiwgIihtb2QpIG1vZCA1IiwgMywgbnVsbCk7Cit0
ZXN0KHhtbERvYzIsIHhtbERvYzIsICJzdHJpbmcobW9kL0BhbmQpIiwgJ3gnLCBudWxsKTsKKwor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3htbC9YUGF0aFBhcnNlci5oCShyZXZpc2lvbiA2ODY1MSkKKysrIFdlYkNvcmUveG1sL1hQ
YXRoUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAg
IHZvaWQgZGVsZXRlTm9kZVRlc3QoU3RlcDo6Tm9kZVRlc3QqKTsKIAogICAgICAgICBwcml2YXRl
OgotICAgICAgICAgICAgYm9vbCBpc09wZXJhdG9yQ29udGV4dCgpIGNvbnN0OworICAgICAgICAg
ICAgYm9vbCBpc0JpbmFyeU9wZXJhdG9yQ29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgICAgICB2
b2lkIHNraXBXUygpOwogICAgICAgICAgICAgVG9rZW4gbWFrZVRva2VuQW5kQWR2YW5jZShpbnQg
dHlwZSwgaW50IGFkdmFuY2UgPSAxKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDY4
NjUxKQorKysgV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsMjAgKzEyNCwxOCBAQAogICAgIHJldHVybiBub2RlVHlwZU5hbWVzLmNvbnRhaW5zKG5hbWUp
OwogfQogCi0vKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGxhc3QgcGFyc2VkIHRva2VuIG1hdGNoZXMg
dGhlIFszMl0gT3BlcmF0b3IgcnVsZQotICogKGNoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL3hw
YXRoI2V4cHJsZXgpLiBOZWNlc3NhcnkgdG8gZGlzYW1iaWd1YXRlCi0gKiB0aGUgdG9rZW5zLgot
ICovCi1ib29sIFBhcnNlcjo6aXNPcGVyYXRvckNvbnRleHQoKSBjb25zdAorLy8gUmV0dXJucyB3
aGV0aGVyIHRoZSBjdXJyZW50IHRva2VuIGNhbiBwb3NzaWJseSBiZSBhIGJpbmFyeSBvcGVyYXRv
ciwgZ2l2ZW4KKy8vIHRoZSBwcmV2aW91cyB0b2tlbi4gTmVjZXNzYXJ5IHRvIGRpc2FtYmlndWF0
ZSBzb21lIG9mIHRoZSBvcGVyYXRvcnMKKy8vICgqIChtdWx0aXBseSksIGRpdiwgYW5kLCBvciwg
bW9kKSBpbiB0aGUgWzMyXSBPcGVyYXRvciBydWxlCisvLyAoY2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIveHBhdGgjZXhwcmxleCkuCitib29sIFBhcnNlcjo6aXNCaW5hcnlPcGVyYXRvckNvbnRl
eHQoKSBjb25zdAogewotICAgIGlmIChtX25leHRQb3MgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgc3dpdGNoIChtX2xhc3RUb2tlblR5cGUpIHsKKyAgICAgICAgY2FzZSAwOgor
ICAgICAgICBjYXNlICdAJzogY2FzZSBBWElTTkFNRTogY2FzZSAnKCc6IGNhc2UgJ1snOiBjYXNl
ICcsJzoKICAgICAgICAgY2FzZSBBTkQ6IGNhc2UgT1I6IGNhc2UgTVVMT1A6CiAgICAgICAgIGNh
c2UgJy8nOiBjYXNlIFNMQVNIU0xBU0g6IGNhc2UgJ3wnOiBjYXNlIFBMVVM6IGNhc2UgTUlOVVM6
CiAgICAgICAgIGNhc2UgRVFPUDogY2FzZSBSRUxPUDoKLSAgICAgICAgY2FzZSAnQCc6IGNhc2Ug
QVhJU05BTUU6ICAgY2FzZSAnKCc6IGNhc2UgJ1snOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTksNyAr
MzE3LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShSRUxP
UCwgRXFUZXN0T3A6Ok9QX0dFLCAyKTsKICAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRB
ZHZhbmNlKFJFTE9QLCBFcVRlc3RPcDo6T1BfR1QpOwogICAgICAgICBjYXNlICcqJzoKLSAgICAg
ICAgICAgIGlmIChpc09wZXJhdG9yQ29udGV4dCgpKQorICAgICAgICAgICAgaWYgKGlzQmluYXJ5
T3BlcmF0b3JDb250ZXh0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFk
dmFuY2UoTVVMT1AsIE51bWVyaWNPcDo6T1BfTXVsKTsKICAgICAgICAgICAgICsrbV9uZXh0UG9z
OwogICAgICAgICAgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCAiKiIpOwpAQCAtMzM4LDcgKzMz
Niw3IEBACiAKICAgICBza2lwV1MoKTsKICAgICAvLyBJZiB3ZSdyZSBpbiBhbiBvcGVyYXRvciBj
b250ZXh0LCBjaGVjayBmb3IgYW55IG9wZXJhdG9yIG5hbWVzCi0gICAgaWYgKGlzT3BlcmF0b3JD
b250ZXh0KCkpIHsKKyAgICBpZiAoaXNCaW5hcnlPcGVyYXRvckNvbnRleHQoKSkgewogICAgICAg
ICBpZiAobmFtZSA9PSAiYW5kIikgLy8jIyMgaGFzaD8KICAgICAgICAgICAgIHJldHVybiBUb2tl
bihBTkQpOwogICAgICAgICBpZiAobmFtZSA9PSAib3IiKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75463</attachid>
            <date>2010-12-02 21:25:32 -0800</date>
            <delta_ts>2010-12-03 00:12:26 -0800</delta_ts>
            <desc>Mollify check-webkit-style a little.</desc>
            <filename>xpath-lexer.patch</filename>
            <type>text/plain</type>
            <size>16142</size>
            <attacher name="Yonathan Randolph">yonathan</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94cGF0aC9hbWJpZ3VvdXMtb3Bl
cmF0b3JzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHBh
dGgvYW1iaWd1b3VzLW9wZXJhdG9ycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzMgQEAKK1Rlc3QgdGhhdCBhbiBOQ05hbWUgYW5kICogYXJlIGludGVycHJldGVkIGFzIGFu
IG9wZXJhdG9yIHdoZW4gaW4gYmluYXJ5IG9wZXJhdG9yIGNvbnRleHQsIGFuZCBhcyBhIE5hbWVU
ZXN0IG90aGVyd2lzZS4KKworU2VlIGJ1ZyA1MDM2NjogWFBhdGggbGV4ZXIgbWlzaW50ZXJwcmV0
cyBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggImRpdiIuCisKK1BBU1MgZGl2CitQQVNTICAgZGl2
CitQQVNTIChkaXYpIGRpdiAoZGl2KQorUEFTUyBzZWxmOjpub2RlKClbZGl2XSBkaXYgMQorUEFT
UyAuIGRpdiAuCitQQVNTIC4uIGRpdiAuLgorUEFTUyBzdHJpbmcoZGl2L0BkaXYpCitQQVNTIHN1
YnN0cmluZy1iZWZvcmUoJzE5OTInLCBkaXYpCitQQVNTIHNlbGY6OmRpdgorUEFTUyAqIGRpdiA0
CitQQVNTICczJyBkaXYgNAorUEFTUyAiMyIgZGl2IDQKK1BBU1MgMTIgZGl2IDQKK1BBU1MgdHJ1
ZSgpIGFuZCBkaXYKK1BBU1MgZmFsc2UoKSBvciBkaXYKK1BBU1MgZGl2IG1vZCBkaXYKK1BBU1Mg
ZGl2IGRpdiBkaXYKK1BBU1MgMyAqIGRpdgorUEFTUyBkaXYvZGl2CitQQVNTIGRpdi8vZGl2CitQ
QVNTIHp6fGRpdgorUEFTUyBkaXYrZGl2CitQQVNTIC0gLSBkaXYKK1BBU1MgNSAtZGl2CitQQVNT
IGRpdj1kaXYKK1BBU1MgZGl2IT1kaXYKK1BBU1MgZGl2PGRpdgorUEFTUyBkaXY8PWRpdgorUEFT
UyBkaXY+ZGl2CitQQVNTIGRpdj49ZGl2CitQQVNTICoKK1BBU1MgICAqCitQQVNTICgqKSAqICgq
KQorUEFTUyBzZWxmOjpub2RlKClbKl0gKiAxCitQQVNTIC4gKiAuCitQQVNTIC4uICogLi4KK1BB
U1Mgc3Vic3RyaW5nLWJlZm9yZSgnMTk5MicsICopCitQQVNTIHNlbGY6OioKK1BBU1MgKiAqIDQK
K1BBU1MgJzMnICogNAorUEFTUyAiMyIgKiA0CitQQVNTIDEyICogNAorUEFTUyB0cnVlKCkgYW5k
ICoKK1BBU1MgZmFsc2UoKSBvciAqCitQQVNTICogbW9kICoKK1BBU1MgKiBkaXYgKgorUEFTUyAz
ICogKgorUEFTUyAqLyoKK1BBU1MgKi8vKgorUEFTUyB6enwqCitQQVNTICorKgorUEFTUyAtIC0g
KgorUEFTUyA1IC0qCitQQVNTICo9KgorUEFTUyAqIT0qCitQQVNTICo8KgorUEFTUyAqPD0qCitQ
QVNTICo+KgorUEFTUyAqPj0qCitQQVNTIG9yOm9yCitQQVNTIG9yOioKK1BBU1MgbW9kCitQQVNT
IG1vZCBtb2QgbW9kCitQQVNTIChtb2QpIG1vZCA1CitQQVNTIHN0cmluZyhtb2QvQGFuZCkKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3hwYXRoL2FtYmlndW91cy1vcGVyYXRvcnMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hwYXRoL2FtYmlndW91cy1vcGVyYXRvcnMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InhwYXRoLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KKyNj
b250ZXh0IHtkaXNwbGF5Om5vbmV9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0
IHRoYXQgYW4gTkNOYW1lIGFuZCAqIGFyZSBpbnRlcnByZXRlZCBhcyBhbiBvcGVyYXRvciB3aGVu
IGluCitiaW5hcnkgb3BlcmF0b3IgY29udGV4dCwgYW5kIGFzIGEgTmFtZVRlc3Qgb3RoZXJ3aXNl
LgorCis8cD5TZWUgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTAzNjYiPmJ1ZyA1MDM2NjwvYT46CitYUGF0aCBsZXhlciBtaXNpbnRlcnByZXRzIGV4cHJl
c3Npb24gc3RhcnRpbmcgd2l0aCAiZGl2Ii48L3A+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorCis8ZGl2IGlkPSJjb250ZXh0Ij4KKyAgPGRpdiBpZD0idHdvIiBkaXY9IngiPjI8L2Rpdj4K
KzwvZGl2PgorCis8c2NyaXB0PgordmFyIGNvbnRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29udGV4dCcpOwordmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0d28nKTsK
KworLy8gPT09PT09PT09PT0gZGl2ID09PT09PT09PT09CisKK3Rlc3QoZG9jdW1lbnQsIGNvbnRl
eHQsICJkaXYiLCBbZGl2XSwgbnVsbCk7ICAvLyBkaXYgd2l0aCBubyBwcmVjZWRpbmcgdG9rZW4K
K3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIgIGRpdiIsIFtkaXZdLCBudWxsKTsKKy8vIGRpdiBm
b2xsb3dpbmcgZXZlcnkgcG9zc2libGUgWzI4XSBFeHByVG9rZW4gaHR0cDovL3d3dy53My5vcmcv
VFIveHBhdGgvCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiKGRpdikgZGl2IChkaXYpIiwgMi8y
LCBudWxsKTsgIC8vIGRpdiBhZnRlciAoIGFuZCApCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAi
c2VsZjo6bm9kZSgpW2Rpdl0gZGl2IDEiLCAyLzEsIG51bGwpOyAgLy8gZGl2IGFmdGVyIFsgYW5k
IF0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIuIGRpdiAuIiwgMi8yLCBudWxsKTsgIC8vIGRp
diBhZnRlciAuCit0ZXN0KGRvY3VtZW50LCBkaXYsICIuLiBkaXYgLi4iLCAyLzIsIG51bGwpOyAg
Ly8gZGl2IGFmdGVyIC4uCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAic3RyaW5nKGRpdi9AZGl2
KSIsICJ4IiwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgQAordGVzdChkb2N1bWVudCwgY29udGV4dCwg
InN1YnN0cmluZy1iZWZvcmUoJzE5OTInLCBkaXYpIiwgIjE5OSIsIG51bGwpOyAgLy8gZGl2IGFm
dGVyICwKK3Rlc3QoZG9jdW1lbnQsIGRpdiwgInNlbGY6OmRpdiIsIFtkaXZdLCBudWxsKTsgIC8v
IGRpdiBhZnRlciA6OgordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiogZGl2IDQiLCAyLzQsIG51
bGwpOyAgLy8gZGl2IGFmdGVyIE5hbWVUZXN0ICoKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIn
MycgZGl2IDQiLCAzLzQsIG51bGwpOyAgLy8gZGl2IGFmdGVyIExpdGVyYWwKK3Rlc3QoZG9jdW1l
bnQsIGNvbnRleHQsICJcIjNcIiBkaXYgNCIsIDMvNCwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgTGl0
ZXJhbAordGVzdChkb2N1bWVudCwgY29udGV4dCwgIjEyIGRpdiA0IiwgMTIvNCwgbnVsbCk7ICAv
LyBkaXYgYWZ0ZXIgTnVtYmVyCisKKy8vIGRpdiBmb2xsb3dpbmcgZXZlcnkgWzMyXSBPcGVyYXRv
cgordGVzdChkb2N1bWVudCwgY29udGV4dCwgInRydWUoKSBhbmQgZGl2IiwgdHJ1ZSwgbnVsbCk7
ICAvLyBkaXYgYWZ0ZXIgT3BlcmF0b3JOYW1lIGFuZAordGVzdChkb2N1bWVudCwgY29udGV4dCwg
ImZhbHNlKCkgb3IgZGl2IiwgdHJ1ZSwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgT3BlcmF0b3JOYW1l
IG9yCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2IG1vZCBkaXYiLCAwLCBudWxsKTsgIC8v
IGRpdiBhZnRlciBPcGVyYXRvck5hbWUgbW9kCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2
IGRpdiBkaXYiLCAxLCBudWxsKTsgIC8vIGRpdiBhZnRlciBPcGVyYXRvck5hbWUgZGl2Cit0ZXN0
KGRvY3VtZW50LCBjb250ZXh0LCAiMyAqIGRpdiIsIDYsIG51bGwpOyAgLy8gZGl2IGFmdGVyIE11
bHRpcGx5T3BlcmF0b3IKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJkaXYvZGl2IiwgW10sIG51
bGwpOyAgLy8gZGl2IGFmdGVyIC8KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJkaXYvL2RpdiIs
IFtdLCBudWxsKTsgIC8vIGRpdiBhZnRlciAvLwordGVzdChkb2N1bWVudCwgY29udGV4dCwgInp6
fGRpdiIsIFtkaXZdLCBudWxsKTsgIC8vIGRpdiBhZnRlciB8Cit0ZXN0KGRvY3VtZW50LCBjb250
ZXh0LCAiZGl2K2RpdiIsIDQsIG51bGwpOyAgLy8gZGl2IGFmdGVyICsKK3Rlc3QoZG9jdW1lbnQs
IGNvbnRleHQsICItIC0gZGl2IiwgMiwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgdW5hcnkgLQordGVz
dChkb2N1bWVudCwgY29udGV4dCwgIjUgLWRpdiIsIDMsIG51bGwpOyAgLy8gZGl2IGFmdGVyIGJp
bmFyeSAtCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2PWRpdiIsIHRydWUsIG51bGwpOyAg
Ly8gZGl2IGFmdGVyID0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJkaXYhPWRpdiIsIGZhbHNl
LCBudWxsKTsgIC8vIGRpdiBhZnRlciA9Cit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiZGl2PGRp
diIsIGZhbHNlLCBudWxsKTsgIC8vIGRpdiBhZnRlciA8Cit0ZXN0KGRvY3VtZW50LCBjb250ZXh0
LCAiZGl2PD1kaXYiLCB0cnVlLCBudWxsKTsgIC8vIGRpdiBhZnRlciA8PQordGVzdChkb2N1bWVu
dCwgY29udGV4dCwgImRpdj5kaXYiLCBmYWxzZSwgbnVsbCk7ICAvLyBkaXYgYWZ0ZXIgPgordGVz
dChkb2N1bWVudCwgY29udGV4dCwgImRpdj49ZGl2IiwgdHJ1ZSwgbnVsbCk7ICAvLyBkaXYgYWZ0
ZXIgPj0KKworCisvLyA9PT09PT09PT09PSAqID09PT09PT09PT09CisKK3Rlc3QoZG9jdW1lbnQs
IGNvbnRleHQsICIqIiwgW2Rpdl0sIG51bGwpOyAgLy8gKiB3aXRoIG5vIHByZWNlZGluZyB0b2tl
bgordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiAgKiIsIFtkaXZdLCBudWxsKTsKKy8vICogZm9s
bG93aW5nIGV2ZXJ5IHBvc3NpYmxlIFsyOF0gRXhwclRva2VuIGh0dHA6Ly93d3cudzMub3JnL1RS
L3hwYXRoLwordGVzdChkb2N1bWVudCwgY29udGV4dCwgIigqKSAqICgqKSIsIDIqMiwgbnVsbCk7
ICAvLyAqIGFmdGVyICggYW5kICkKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJzZWxmOjpub2Rl
KClbKl0gKiAxIiwgMioxLCBudWxsKTsgIC8vICogYWZ0ZXIgWyBhbmQgXQordGVzdChkb2N1bWVu
dCwgY29udGV4dCwgIi4gKiAuIiwgMioyLCBudWxsKTsgIC8vICogYWZ0ZXIgLgordGVzdChkb2N1
bWVudCwgZGl2LCAiLi4gKiAuLiIsIDIqMiwgbnVsbCk7ICAvLyAqIGFmdGVyIC4uCisvLyAoKiBj
YW4ndCBmb2xsb3cgQCkKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJzdWJzdHJpbmctYmVmb3Jl
KCcxOTkyJywgKikiLCAiMTk5IiwgbnVsbCk7ICAvLyAqIGFmdGVyICwKK3Rlc3QoZG9jdW1lbnQs
IGRpdiwgInNlbGY6OioiLCBbZGl2XSwgbnVsbCk7ICAvLyAqIGFmdGVyIDo6Cit0ZXN0KGRvY3Vt
ZW50LCBjb250ZXh0LCAiKiAqIDQiLCAyKjQsIG51bGwpOyAgLy8gKiBhZnRlciBOYW1lVGVzdCAq
Cit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiJzMnICogNCIsIDMqNCwgbnVsbCk7ICAvLyAqIGFm
dGVyIExpdGVyYWwKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICJcIjNcIiAqIDQiLCAzKjQsIG51
bGwpOyAgLy8gKiBhZnRlciBMaXRlcmFsCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiMTIgKiA0
IiwgMTIqNCwgbnVsbCk7ICAvLyAqIGFmdGVyIE51bWJlcgorCisvLyAqIGZvbGxvd2luZyBldmVy
eSBbMzJdIE9wZXJhdG9yCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAidHJ1ZSgpIGFuZCAqIiwg
dHJ1ZSwgbnVsbCk7ICAvLyAqIGFmdGVyIE9wZXJhdG9yTmFtZSBhbmQKK3Rlc3QoZG9jdW1lbnQs
IGNvbnRleHQsICJmYWxzZSgpIG9yICoiLCB0cnVlLCBudWxsKTsgIC8vICogYWZ0ZXIgT3BlcmF0
b3JOYW1lIG9yCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiKiBtb2QgKiIsIDAsIG51bGwpOyAg
Ly8gKiBhZnRlciBPcGVyYXRvck5hbWUgbW9kCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiKiBk
aXYgKiIsIDEsIG51bGwpOyAgLy8gKiBhZnRlciBPcGVyYXRvck5hbWUgZGl2Cit0ZXN0KGRvY3Vt
ZW50LCBjb250ZXh0LCAiMyAqICoiLCA2LCBudWxsKTsgIC8vICogYWZ0ZXIgTXVsdGlwbHlPcGVy
YXRvcgordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiovKiIsIFtdLCBudWxsKTsgIC8vICogYWZ0
ZXIgLwordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiovLyoiLCBbXSwgbnVsbCk7ICAvLyAqIGFm
dGVyIC8vCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAienp8KiIsIFtkaXZdLCBudWxsKTsgIC8v
ICogYWZ0ZXIgfAordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiorKiIsIDQsIG51bGwpOyAgLy8g
KiBhZnRlciArCit0ZXN0KGRvY3VtZW50LCBjb250ZXh0LCAiLSAtICoiLCAyLCBudWxsKTsgIC8v
ICogYWZ0ZXIgdW5hcnkgLQordGVzdChkb2N1bWVudCwgY29udGV4dCwgIjUgLSoiLCAzLCBudWxs
KTsgIC8vICogYWZ0ZXIgYmluYXJ5IC0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIqPSoiLCB0
cnVlLCBudWxsKTsgIC8vICogYWZ0ZXIgPQordGVzdChkb2N1bWVudCwgY29udGV4dCwgIiohPSoi
LCBmYWxzZSwgbnVsbCk7ICAvLyAqIGFmdGVyID0KK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQsICIq
PCoiLCBmYWxzZSwgbnVsbCk7ICAvLyAqIGFmdGVyIDwKK3Rlc3QoZG9jdW1lbnQsIGNvbnRleHQs
ICIqPD0qIiwgdHJ1ZSwgbnVsbCk7ICAvLyAqIGFmdGVyIDw9Cit0ZXN0KGRvY3VtZW50LCBjb250
ZXh0LCAiKj4qIiwgZmFsc2UsIG51bGwpOyAgLy8gKiBhZnRlciA+Cit0ZXN0KGRvY3VtZW50LCBj
b250ZXh0LCAiKj49KiIsIHRydWUsIG51bGwpOyAgLy8gKiBhZnRlciA+PQorCit2YXIgeG1sRG9j
ID0gKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZygiPG9yIHhtbG5zPSd1cmknPjU8L29y
PiIsICJ0ZXh0L3htbCIpOwordmFyIG5zUmVzb2x2ZXIgPSBmdW5jdGlvbihwcmVmaXgpIHtyZXR1
cm4gJ3VyaSc7fQorLy8gZGl2IGFuZCAqIGFmdGVyIDoKK3Rlc3QoeG1sRG9jLCB4bWxEb2MsICJv
cjpvciIsIFt4bWxEb2MuZG9jdW1lbnRFbGVtZW50XSwgbnNSZXNvbHZlcik7Cit0ZXN0KHhtbERv
YywgeG1sRG9jLCAib3I6KiIsIFt4bWxEb2MuZG9jdW1lbnRFbGVtZW50XSwgbnNSZXNvbHZlcik7
CisKKy8vIEEgZmV3IHRlc3RzIHdpdGggbW9kIGFzIHdlbGwKK3ZhciB4bWxEb2MyID0gKG5ldyBE
T01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZygiPG1vZCBhbmQ9J3gnPjg8L21vZD4iLCAidGV4dC94
bWwiKTsKK3Rlc3QoeG1sRG9jMiwgeG1sRG9jMiwgIm1vZCIsIFt4bWxEb2MyLmRvY3VtZW50RWxl
bWVudF0sIG51bGwpOwordGVzdCh4bWxEb2MyLCB4bWxEb2MyLCAibW9kIG1vZCBtb2QiLCAwLCBu
dWxsKTsKK3Rlc3QoeG1sRG9jMiwgeG1sRG9jMiwgIihtb2QpIG1vZCA1IiwgMywgbnVsbCk7Cit0
ZXN0KHhtbERvYzIsIHhtbERvYzIsICJzdHJpbmcobW9kL0BhbmQpIiwgJ3gnLCBudWxsKTsKKwor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3htbC9YUGF0aFBhcnNlci5oCShyZXZpc2lvbiA2ODY1MSkKKysrIFdlYkNvcmUveG1sL1hQ
YXRoUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgICAg
IHZvaWQgZGVsZXRlTm9kZVRlc3QoU3RlcDo6Tm9kZVRlc3QqKTsKIAogICAgICAgICBwcml2YXRl
OgotICAgICAgICAgICAgYm9vbCBpc09wZXJhdG9yQ29udGV4dCgpIGNvbnN0OworICAgICAgICAg
ICAgYm9vbCBpc0JpbmFyeU9wZXJhdG9yQ29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgICAgICB2
b2lkIHNraXBXUygpOwogICAgICAgICAgICAgVG9rZW4gbWFrZVRva2VuQW5kQWR2YW5jZShpbnQg
dHlwZSwgaW50IGFkdmFuY2UgPSAxKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAJKHJldmlzaW9uIDY4
NjUxKQorKysgV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQsMjMgKzEyNCwyMSBAQAogICAgIHJldHVybiBub2RlVHlwZU5hbWVzLmNvbnRhaW5zKG5hbWUp
OwogfQogCi0vKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGxhc3QgcGFyc2VkIHRva2VuIG1hdGNoZXMg
dGhlIFszMl0gT3BlcmF0b3IgcnVsZQotICogKGNoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL3hw
YXRoI2V4cHJsZXgpLiBOZWNlc3NhcnkgdG8gZGlzYW1iaWd1YXRlCi0gKiB0aGUgdG9rZW5zLgot
ICovCi1ib29sIFBhcnNlcjo6aXNPcGVyYXRvckNvbnRleHQoKSBjb25zdAorLy8gUmV0dXJucyB3
aGV0aGVyIHRoZSBjdXJyZW50IHRva2VuIGNhbiBwb3NzaWJseSBiZSBhIGJpbmFyeSBvcGVyYXRv
ciwgZ2l2ZW4KKy8vIHRoZSBwcmV2aW91cyB0b2tlbi4gTmVjZXNzYXJ5IHRvIGRpc2FtYmlndWF0
ZSBzb21lIG9mIHRoZSBvcGVyYXRvcnMKKy8vICgqIChtdWx0aXBseSksIGRpdiwgYW5kLCBvciwg
bW9kKSBpbiB0aGUgWzMyXSBPcGVyYXRvciBydWxlCisvLyAoY2hlY2sgaHR0cDovL3d3dy53My5v
cmcvVFIveHBhdGgjZXhwcmxleCkuCitib29sIFBhcnNlcjo6aXNCaW5hcnlPcGVyYXRvckNvbnRl
eHQoKSBjb25zdAogewotICAgIGlmIChtX25leHRQb3MgPT0gMCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgc3dpdGNoIChtX2xhc3RUb2tlblR5cGUpIHsKLSAgICAgICAgY2FzZSBBTkQ6
IGNhc2UgT1I6IGNhc2UgTVVMT1A6Ci0gICAgICAgIGNhc2UgJy8nOiBjYXNlIFNMQVNIU0xBU0g6
IGNhc2UgJ3wnOiBjYXNlIFBMVVM6IGNhc2UgTUlOVVM6Ci0gICAgICAgIGNhc2UgRVFPUDogY2Fz
ZSBSRUxPUDoKLSAgICAgICAgY2FzZSAnQCc6IGNhc2UgQVhJU05BTUU6ICAgY2FzZSAnKCc6IGNh
c2UgJ1snOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSAwOgorICAgIGNhc2UgJ0AnOiBjYXNlIEFY
SVNOQU1FOiBjYXNlICcoJzogY2FzZSAnWyc6IGNhc2UgJywnOgorICAgIGNhc2UgQU5EOiBjYXNl
IE9SOiBjYXNlIE1VTE9QOgorICAgIGNhc2UgJy8nOiBjYXNlIFNMQVNIU0xBU0g6IGNhc2UgJ3wn
OiBjYXNlIFBMVVM6IGNhc2UgTUlOVVM6CisgICAgY2FzZSBFUU9QOiBjYXNlIFJFTE9QOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogfQogCkBAIC0yNzksNTggKzI3Nyw1OCBAQAogCiAgICAgY2hhciBjb2RlID0gcGVla0N1
ckhlbHBlcigpOwogICAgIHN3aXRjaCAoY29kZSkgewotICAgICAgICBjYXNlICcoJzogY2FzZSAn
KSc6IGNhc2UgJ1snOiBjYXNlICddJzoKLSAgICAgICAgY2FzZSAnQCc6IGNhc2UgJywnOiBjYXNl
ICd8JzoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKGNvZGUpOwotICAg
ICAgICBjYXNlICdcJyc6Ci0gICAgICAgIGNhc2UgJ1wiJzoKLSAgICAgICAgICAgIHJldHVybiBs
ZXhTdHJpbmcoKTsKLSAgICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAn
Myc6IGNhc2UgJzQnOgotICAgICAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNl
ICc4JzogY2FzZSAnOSc6CisgICAgY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICdbJzogY2FzZSAn
XSc6CisgICAgY2FzZSAnQCc6IGNhc2UgJywnOiBjYXNlICd8JzoKKyAgICAgICAgcmV0dXJuIG1h
a2VUb2tlbkFuZEFkdmFuY2UoY29kZSk7CisgICAgY2FzZSAnXCcnOgorICAgIGNhc2UgJ1wiJzoK
KyAgICAgICAgcmV0dXJuIGxleFN0cmluZygpOworICAgIGNhc2UgJzAnOiBjYXNlICcxJzogY2Fz
ZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2Ug
JzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICAgIHJldHVybiBsZXhOdW1iZXIoKTsKKyAg
ICBjYXNlICcuJzogeworICAgICAgICBjaGFyIG5leHQgPSBwZWVrQWhlYWRIZWxwZXIoKTsKKyAg
ICAgICAgaWYgKG5leHQgPT0gJy4nKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFk
dmFuY2UoRE9URE9ULCAyKTsKKyAgICAgICAgaWYgKG5leHQgPj0gJzAnICYmIG5leHQgPD0gJzkn
KQogICAgICAgICAgICAgcmV0dXJuIGxleE51bWJlcigpOwotICAgICAgICBjYXNlICcuJzogewot
ICAgICAgICAgICAgY2hhciBuZXh0ID0gcGVla0FoZWFkSGVscGVyKCk7Ci0gICAgICAgICAgICBp
ZiAobmV4dCA9PSAnLicpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFu
Y2UoRE9URE9ULCAyKTsKLSAgICAgICAgICAgIGlmIChuZXh0ID49ICcwJyAmJiBuZXh0IDw9ICc5
JykKLSAgICAgICAgICAgICAgICByZXR1cm4gbGV4TnVtYmVyKCk7Ci0gICAgICAgICAgICByZXR1
cm4gbWFrZVRva2VuQW5kQWR2YW5jZSgnLicpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgJy8n
OgotICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICcvJykKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShTTEFTSFNMQVNILCAyKTsKLSAgICAgICAg
ICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNlKCcvJyk7Ci0gICAgICAgIGNhc2UgJysnOgot
ICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoUExVUyk7Ci0gICAgICAgIGNh
c2UgJy0nOgotICAgICAgICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoTUlOVVMpOwot
ICAgICAgICBjYXNlICc9JzoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZhbmNl
KEVRT1AsIEVxVGVzdE9wOjpPUF9FUSk7Ci0gICAgICAgIGNhc2UgJyEnOgotICAgICAgICAgICAg
aWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVRva2VuQW5kQWR2YW5jZShFUU9QLCBFcVRlc3RPcDo6T1BfTkUsIDIpOworICAgICAgICByZXR1
cm4gbWFrZVRva2VuQW5kQWR2YW5jZSgnLicpOworICAgIH0KKyAgICBjYXNlICcvJzoKKyAgICAg
ICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VG9rZW5BbmRBZHZhbmNlKFNMQVNIU0xBU0gsIDIpOworICAgICAgICByZXR1cm4gbWFrZVRva2Vu
QW5kQWR2YW5jZSgnLycpOworICAgIGNhc2UgJysnOgorICAgICAgICByZXR1cm4gbWFrZVRva2Vu
QW5kQWR2YW5jZShQTFVTKTsKKyAgICBjYXNlICctJzoKKyAgICAgICAgcmV0dXJuIG1ha2VUb2tl
bkFuZEFkdmFuY2UoTUlOVVMpOworICAgIGNhc2UgJz0nOgorICAgICAgICByZXR1cm4gbWFrZVRv
a2VuQW5kQWR2YW5jZShFUU9QLCBFcVRlc3RPcDo6T1BfRVEpOworICAgIGNhc2UgJyEnOgorICAg
ICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQorICAgICAgICAgICAgcmV0dXJuIG1h
a2VUb2tlbkFuZEFkdmFuY2UoRVFPUCwgRXFUZXN0T3A6Ok9QX05FLCAyKTsKKyAgICAgICAgcmV0
dXJuIFRva2VuKFhQQVRIX0VSUk9SKTsKKyAgICBjYXNlICc8JzoKKyAgICAgICAgaWYgKHBlZWtB
aGVhZEhlbHBlcigpID09ICc9JykKKyAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZh
bmNlKFJFTE9QLCBFcVRlc3RPcDo6T1BfTEUsIDIpOworICAgICAgICByZXR1cm4gbWFrZVRva2Vu
QW5kQWR2YW5jZShSRUxPUCwgRXFUZXN0T3A6Ok9QX0xUKTsKKyAgICBjYXNlICc+JzoKKyAgICAg
ICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09ICc9JykKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBFcVRlc3RPcDo6T1BfR0UsIDIpOworICAgICAgICByZXR1
cm4gbWFrZVRva2VuQW5kQWR2YW5jZShSRUxPUCwgRXFUZXN0T3A6Ok9QX0dUKTsKKyAgICBjYXNl
ICcqJzoKKyAgICAgICAgaWYgKGlzQmluYXJ5T3BlcmF0b3JDb250ZXh0KCkpCisgICAgICAgICAg
ICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShNVUxPUCwgTnVtZXJpY09wOjpPUF9NdWwpOwor
ICAgICAgICArK21fbmV4dFBvczsKKyAgICAgICAgcmV0dXJuIFRva2VuKE5BTUVURVNULCAiKiIp
OworICAgIGNhc2UgJyQnOiB7IC8vICQgUU5hbWUKKyAgICAgICAgbV9uZXh0UG9zKys7CisgICAg
ICAgIFN0cmluZyBuYW1lOworICAgICAgICBpZiAoIWxleFFOYW1lKG5hbWUpKQogICAgICAgICAg
ICAgcmV0dXJuIFRva2VuKFhQQVRIX0VSUk9SKTsKLSAgICAgICAgY2FzZSAnPCc6Ci0gICAgICAg
ICAgICBpZiAocGVla0FoZWFkSGVscGVyKCkgPT0gJz0nKQotICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVG9rZW5BbmRBZHZhbmNlKFJFTE9QLCBFcVRlc3RPcDo6T1BfTEUsIDIpOwotICAgICAg
ICAgICAgcmV0dXJuIG1ha2VUb2tlbkFuZEFkdmFuY2UoUkVMT1AsIEVxVGVzdE9wOjpPUF9MVCk7
Ci0gICAgICAgIGNhc2UgJz4nOgotICAgICAgICAgICAgaWYgKHBlZWtBaGVhZEhlbHBlcigpID09
ICc9JykKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVRva2VuQW5kQWR2YW5jZShSRUxPUCwg
RXFUZXN0T3A6Ok9QX0dFLCAyKTsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVG9rZW5BbmRBZHZh
bmNlKFJFTE9QLCBFcVRlc3RPcDo6T1BfR1QpOwotICAgICAgICBjYXNlICcqJzoKLSAgICAgICAg
ICAgIGlmIChpc09wZXJhdG9yQ29udGV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VG9rZW5BbmRBZHZhbmNlKE1VTE9QLCBOdW1lcmljT3A6Ok9QX011bCk7Ci0gICAgICAgICAgICAr
K21fbmV4dFBvczsKLSAgICAgICAgICAgIHJldHVybiBUb2tlbihOQU1FVEVTVCwgIioiKTsKLSAg
ICAgICAgY2FzZSAnJCc6IHsgLy8gJCBRTmFtZQotICAgICAgICAgICAgbV9uZXh0UG9zKys7Ci0g
ICAgICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAgIGlmICghbGV4UU5hbWUobmFtZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuKFhQQVRIX0VSUk9SKTsKLSAgICAgICAgICAg
IHJldHVybiBUb2tlbihWQVJJQUJMRVJFRkVSRU5DRSwgbmFtZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIFRva2VuKFZBUklBQkxFUkVGRVJFTkNFLCBuYW1lKTsKICAgICB9CisgICAgfQog
CiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKCFsZXhOQ05hbWUobmFtZSkpCkBAIC0zMzgsNyAr
MzM2LDcgQEAKIAogICAgIHNraXBXUygpOwogICAgIC8vIElmIHdlJ3JlIGluIGFuIG9wZXJhdG9y
IGNvbnRleHQsIGNoZWNrIGZvciBhbnkgb3BlcmF0b3IgbmFtZXMKLSAgICBpZiAoaXNPcGVyYXRv
ckNvbnRleHQoKSkgeworICAgIGlmIChpc0JpbmFyeU9wZXJhdG9yQ29udGV4dCgpKSB7CiAgICAg
ICAgIGlmIChuYW1lID09ICJhbmQiKSAvLyMjIyBoYXNoPwogICAgICAgICAgICAgcmV0dXJuIFRv
a2VuKEFORCk7CiAgICAgICAgIGlmIChuYW1lID09ICJvciIpCkBAIC00MjYsMjYgKzQyNCwyNiBA
QAogICAgIFRva2VuIHRvayA9IG5leHRUb2tlbigpOwogCiAgICAgc3dpdGNoICh0b2sudHlwZSkg
ewotICAgICAgICBjYXNlIEFYSVNOQU1FOgotICAgICAgICAgICAgeXlsdmFsLT5heGlzID0gdG9r
LmF4aXM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNVUxPUDoKLSAgICAgICAg
ICAgIHl5bHZhbC0+bnVtb3AgPSB0b2subnVtb3A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSRUxPUDoKLSAgICAgICAgY2FzZSBFUU9QOgotICAgICAgICAgICAgeXlsdmFsLT5l
cW9wID0gdG9rLmVxb3A7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOT0RFVFlQ
RToKLSAgICAgICAgY2FzZSBQSToKLSAgICAgICAgY2FzZSBGVU5DVElPTk5BTUU6Ci0gICAgICAg
IGNhc2UgTElURVJBTDoKLSAgICAgICAgY2FzZSBWQVJJQUJMRVJFRkVSRU5DRToKLSAgICAgICAg
Y2FzZSBOVU1CRVI6Ci0gICAgICAgIGNhc2UgTkFNRVRFU1Q6Ci0gICAgICAgICAgICB5eWx2YWwt
PnN0ciA9IG5ldyBTdHJpbmcodG9rLnN0cik7Ci0gICAgICAgICAgICByZWdpc3RlclN0cmluZyh5
eWx2YWwtPnN0cik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYSVNOQU1FOgorICAg
ICAgICB5eWx2YWwtPmF4aXMgPSB0b2suYXhpczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
VUxPUDoKKyAgICAgICAgeXlsdmFsLT5udW1vcCA9IHRvay5udW1vcDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBSRUxPUDoKKyAgICBjYXNlIEVRT1A6CisgICAgICAgIHl5bHZhbC0+ZXFvcCA9
IHRvay5lcW9wOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5PREVUWVBFOgorICAgIGNhc2Ug
UEk6CisgICAgY2FzZSBGVU5DVElPTk5BTUU6CisgICAgY2FzZSBMSVRFUkFMOgorICAgIGNhc2Ug
VkFSSUFCTEVSRUZFUkVOQ0U6CisgICAgY2FzZSBOVU1CRVI6CisgICAgY2FzZSBOQU1FVEVTVDoK
KyAgICAgICAgeXlsdmFsLT5zdHIgPSBuZXcgU3RyaW5nKHRvay5zdHIpOworICAgICAgICByZWdp
c3RlclN0cmluZyh5eWx2YWwtPnN0cik7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJl
dHVybiB0b2sudHlwZTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzIzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTItMDIgIFlvbmF0aGFuIFJhbmRv
bHBoICA8eW9uYXRoYW5AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFhQYXRoIGxleGVyIG1pc2ludGVycHJldHMgZXhwcmVzc2lvbiBz
dGFydGluZyB3aXRoICJkaXYiLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTAzNjYKKworICAgICAgICAqIHhtbC9YUGF0aFBhcnNlci5jcHA6CisgICAg
ICAgICogeG1sL1hQYXRoUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2Vy
Ojppc09wZXJhdG9yQ29udGV4dCk6IHJlbW92ZWQgKHJlbmFtZWQpCisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6UGFyc2VyOjppc0JpbmFyeU9wZXJhdG9yQ29udGV4dCk6IGFkZGVkCisKIDIwMTAt
MTItMDIgIFl1dGEgS2l0YW11cmEgIDx5dXRha0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczMjMzKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMTItMDIgIFlvbmF0aGFuIFJhbmRvbHBoICA8eW9uYXRoYW5AZ21haWwuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFhQYXRoIGxleGVy
IG1pc2ludGVycHJldHMgZXhwcmVzc2lvbiBzdGFydGluZyB3aXRoICJkaXYiLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAzNjYKKworICAgICAgICAq
IGZhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QveHBhdGgvYW1iaWd1b3VzLW9wZXJhdG9ycy5odG1sOiBBZGRlZC4KKwogMjAx
MC0xMi0wMiAgWXV0YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>