<?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>26005</bug_id>
          
          <creation_ts>2009-05-25 00:33:46 -0700</creation_ts>
          <short_desc>Optimization for XPath //* does not preserve context size</short_desc>
          <delta_ts>2009-05-28 09:26:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>fearphage+bugmail</cc>
    
    <cc>kangax</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123017</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-25 00:33:46 -0700</bug_when>
    <thetext>//* is an abbreviated form for /descendant-or-self::node()/child::*. When applying predicates to the last step, the context should contain all children elements of a given node, so e.g. //*[2] locates all second children elements in document.

We wrongfully optimize this to /descendant:node()/self::*, so the context for predicates always contains a single element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123019</commentid>
    <comment_count>1</comment_count>
      <attachid>30645</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-25 00:37:14 -0700</bug_when>
    <thetext>Created attachment 30645
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123279</commentid>
    <comment_count>2</comment_count>
      <attachid>30705</attachid>
    <who name="Phred">fearphage+bugmail</who>
    <bug_when>2009-05-27 06:01:25 -0700</bug_when>
    <thetext>Created attachment 30705
test case showing before and after dom append

As best I can discern the spec http://www.w3.org/TR/xpath#path-abbrev :

&quot;//para selects all the para descendants of the document root and thus selects all para elements in the same document as the context node&quot;

There exist no parent document for the context node in the original URL, thus there should be no answer (null). Firefox 2 returned null and Opera currently returns null in this case. However once it is appended to the document, the answer refers to the root element as it should.

The bug here is that you are executing from the current document root regardless of whether the context node exist in the document or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123282</commentid>
    <comment_count>3</comment_count>
    <who name="Phred">fearphage+bugmail</who>
    <bug_when>2009-05-27 06:08:55 -0700</bug_when>
    <thetext>The previous comment was actually meant for Bug 25931.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123382</commentid>
    <comment_count>4</comment_count>
      <attachid>30733</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-28 03:05:11 -0700</bug_when>
    <thetext>Created attachment 30733
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123415</commentid>
    <comment_count>5</comment_count>
      <attachid>30733</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-28 09:04:54 -0700</bug_when>
    <thetext>Comment on attachment 30733
proposed fix

&gt; + * Copyright (C) 2005 Frerich Raabe &lt;raabe@kde.org&gt;
&gt; + * Copyright (C) 2006, 2009 Apple, Inc.

No comma in Apple Inc.

&gt; +    switch (axis) {
&gt; +        case Step::AttributeAxis:
&gt; +            return Node::ATTRIBUTE_NODE;
&gt; +        case Step::NamespaceAxis:
&gt; +            return Node::XPATH_NAMESPACE_NODE;
&gt; +        default:
&gt; +            return Node::ELEMENT_NODE;
&gt; +    }

I like to leave out the &quot;default&quot; case so that gcc can warn me about unhandled enum values. This is practical when the cases end with return statements, since the default return statement can go outside the switch, perhaps with an ASSERT_NOT_REACHED().

&gt; +                // In XPath land, namespace nodes are not accessible on the attribute axis.
&gt; +                if (node-&gt;namespaceURI() == &quot;http://www.w3.org/2000/xmlns/&quot;)
&gt; +                    return false;

Since namespaces are atomic strings, comparing to an AtomicString constant may be slightly more efficient, and it would also be nice to have that string in some common place.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123424</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-28 09:26:07 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/44232&gt;.

(In reply to comment #5)
&gt; No comma in Apple Inc.

Fixed.

&gt; I like to leave out the &quot;default&quot; case so that gcc can warn me about unhandled
&gt; enum values. This is practical when the cases end with return statements, since
&gt; the default return statement can go outside the switch, perhaps with an
&gt; ASSERT_NOT_REACHED().

I think that in this case, leaving element axis as default is more natural.

&gt; Since namespaces are atomic strings, comparing to an AtomicString constant may
&gt; be slightly more efficient, and it would also be nice to have that string in
&gt; some common place.

Agreed, will keep this in mind for future patches.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>30645</attachid>
            <date>2009-05-25 00:37:14 -0700</date>
            <delta_ts>2009-05-25 00:37:14 -0700</delta_ts>
            <desc>test case</desc>
            <filename>position.html</filename>
            <type>text/html</type>
            <size>4237</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPGJhc2UgaHJlZj0iaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9leHBvcnQvNDQwNDkvdHJ1bmsvTGF5b3V0VGVzdHMvZmFzdC94cGF0aC9wb3NpdGlv
bi5odG1sIj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgo8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9InhwYXRoLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
PC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cgo8c2NyaXB0PgoKdmFyIFJP
T1QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKUk9PVC5pbm5lckhUTUwgPSAnPHA+
YTwvcD48ZGl2PjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjwvZGl2Pic7
CnZhciBDSElMRDEgPSBST09ULmZpcnN0Q2hpbGQ7CnZhciBDSElMRDFURVhUID0gQ0hJTEQxLmZp
cnN0Q2hpbGQ7CnZhciBDSElMRDIgPSBST09ULmxhc3RDaGlsZDsKdmFyIENISUxEMjEgPSBDSElM
RDIuZmlyc3RDaGlsZDsKdmFyIENISUxEMjIgPSBDSElMRDIxLm5leHRTaWJsaW5nOwp2YXIgQ0hJ
TEQyMyA9IENISUxEMjIubmV4dFNpYmxpbmc7CgogICAgcmVzdWx0ID0gZG9jdW1lbnQuZXZhbHVh
dGUoIi4vLyoiLCBST09ULCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRSwgbnVsbCk7CiAgICBjaGVja1NuYXBzaG90KCIuLy8qIiwgcmVzdWx0LCBbQ0hJTEQxLCBD
SElMRDIsIENISUxEMjEsIENISUxEMjIsIENISUxEMjNdKTsKCiAgICByZXN1bHQgPSBkb2N1bWVu
dC5ldmFsdWF0ZSgiKltwb3NpdGlvbigpID0gMl0iLCBST09ULCBudWxsLCBYUGF0aFJlc3VsdC5P
UkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVja1NuYXBzaG90KCIqW3Bv
c2l0aW9uKCkgPSAyXSIsIHJlc3VsdCwgW0NISUxEMl0pOwoKICAgIHJlc3VsdCA9IGRvY3VtZW50
LmV2YWx1YXRlKCIuLy8qW3Bvc2l0aW9uKCkgPSAyXSIsIFJPT1QsIG51bGwsIFhQYXRoUmVzdWx0
Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgIGNoZWNrU25hcHNob3QoIi4v
LypbcG9zaXRpb24oKSA9IDJdIiwgcmVzdWx0LCBbQ0hJTEQyLCBDSElMRDIyXSk7CgogICAgcmVz
dWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoIi4vLi8uLy8qWzJdLy4iLCBST09ULCBudWxsLCBYUGF0
aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVja1NuYXBz
aG90KCIuLy4vLi8vKlsyXS8uIiwgcmVzdWx0LCBbQ0hJTEQyLCBDSElMRDIyXSk7CgogICAgcmVz
dWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoIi4vLyovc3BhblsyXSIsIFJPT1QsIG51bGwsIFhQYXRo
UmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgIGNoZWNrU25hcHNo
b3QoIi4vLyovc3BhblsyXSIsIHJlc3VsdCwgW0NISUxEMjJdKTsKCiAgICByZXN1bHQgPSBkb2N1
bWVudC5ldmFsdWF0ZSgiLi8vKltwb3NpdGlvbigpID0gMV0iLCBST09ULCBudWxsLCBYUGF0aFJl
c3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVja1NuYXBzaG90
KCIuLy8qW3Bvc2l0aW9uKCkgPSAxXSIsIHJlc3VsdCwgW0NISUxEMSwgQ0hJTEQyMV0pOwoKICAg
IHJlc3VsdCA9IGRvY3VtZW50LmV2YWx1YXRlKCIuL2Rlc2NlbmRhbnQtb3Itc2VsZjo6bm9kZSgp
L2NoaWxkOjoqW3Bvc2l0aW9uKCkgPSAyXSIsIFJPT1QsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgIGNoZWNrU25hcHNob3QoIi4vZGVzY2Vu
ZGFudC1vci1zZWxmOjpub2RlKCkvY2hpbGQ6OipbcG9zaXRpb24oKSA9IDJdIiwgcmVzdWx0LCBb
Q0hJTEQyLCBDSElMRDIyXSk7CgogICAgcmVzdWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoImRlc2Nl
bmRhbnQtb3Itc2VsZjo6bm9kZSgpL2NoaWxkOjoqW3Bvc2l0aW9uKCkgPSAyXSIsIFJPT1QsIG51
bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgIGNo
ZWNrU25hcHNob3QoImRlc2NlbmRhbnQtb3Itc2VsZjo6bm9kZSgpL2NoaWxkOjoqW3Bvc2l0aW9u
KCkgPSAyXSIsIHJlc3VsdCwgW0NISUxEMiwgQ0hJTEQyMl0pOwoKICAgIHJlc3VsdCA9IGRvY3Vt
ZW50LmV2YWx1YXRlKCIuLy8qLypbMl0iLCBST09ULCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVE
X05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVja1NuYXBzaG90KCIuLy8qLypbMl0i
LCByZXN1bHQsIFtDSElMRDIyXSk7CgogICAgcmVzdWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoInBy
ZWNlZGluZzo6bm9kZSgpWzFdIiwgQ0hJTEQyLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05P
REVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVja1NuYXBzaG90KCJwcmVjZWRpbmc6Om5v
ZGUoKVsxXSIsIHJlc3VsdCwgW0NISUxEMVRFWFRdKTsKCiAgICByZXN1bHQgPSBkb2N1bWVudC5l
dmFsdWF0ZSgicHJlY2VkaW5nOjpub2RlKClbMl0iLCBDSElMRDIsIG51bGwsIFhQYXRoUmVzdWx0
Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgIGNoZWNrU25hcHNob3QoInBy
ZWNlZGluZzo6bm9kZSgpWzJdIiwgcmVzdWx0LCBbQ0hJTEQxXSk7CgogICAgcmVzdWx0ID0gZG9j
dW1lbnQuZXZhbHVhdGUoInByZWNlZGluZzo6bm9kZSgpWzNdIiwgQ0hJTEQyLCBudWxsLCBYUGF0
aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVja1NuYXBz
aG90KCJwcmVjZWRpbmc6Om5vZGUoKVszXSIsIHJlc3VsdCwgW10pOwoKICAgIHJlc3VsdCA9IGRv
Y3VtZW50LmV2YWx1YXRlKCJwcmVjZWRpbmc6Om5vZGUoKS8qWzNdIiwgQ0hJTEQyLCBudWxsLCBY
UGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVja1Nu
YXBzaG90KCJwcmVjZWRpbmc6Om5vZGUoKS8qWzNdIiwgcmVzdWx0LCBbXSk7CgogICAgcmVzdWx0
ID0gZG9jdW1lbnQuZXZhbHVhdGUoImFuY2VzdG9yOjpub2RlKClbMl0iLCBDSElMRDIxLCBudWxs
LCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICBjaGVj
a1NuYXBzaG90KCJhbmNlc3Rvcjo6bm9kZSgpWzJdIiwgcmVzdWx0LCBbUk9PVF0pOwoKICAgIHJl
c3VsdCA9IGRvY3VtZW50LmV2YWx1YXRlKCJhbmNlc3Rvci1vci1zZWxmOjpub2RlKClbMl0iLCBD
SElMRDIxLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVs
bCk7CiAgICBjaGVja1NuYXBzaG90KCJhbmNlc3Rvci1vci1zZWxmOjpub2RlKClbMl0iLCByZXN1
bHQsIFtDSElMRDJdKTsKCiAgICByZXN1bHQgPSBkb2N1bWVudC5ldmFsdWF0ZSgiYW5jZXN0b3It
b3Itc2VsZjo6bm9kZSgpWzNdIiwgQ0hJTEQyMSwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOwogICAgY2hlY2tTbmFwc2hvdCgiYW5jZXN0b3Itb3It
c2VsZjo6bm9kZSgpWzNdIiwgcmVzdWx0LCBbUk9PVF0pOwoKdmFyIFJPT1QyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7ClJPT1QyLmlubmVySFRNTCA9ICc8cCBudW09IjEiPjwvcD48
cCBudW09IjIiIHR5cGU9Indhcm5pbmciPjwvcD48cCBudW09IjMiIHR5cGU9Indhcm5pbmciPjwv
cD48cCBudW09IjQiIHR5cGU9Indhcm5pbmciPjwvcD48cCBudW09IjUiIHR5cGU9Indhcm5pbmci
PjwvcD48cCBudW09IjYiIHR5cGU9Indhcm5pbmciPjwvcD4nOwoKICAgIHNob3VsZEJlKCJkb2N1
bWVudC5ldmFsdWF0ZSgncFtAdHlwZT1cIndhcm5pbmdcIl1bNV0vQG51bScsIFJPT1QyLCBudWxs
LCBYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRSwgbnVsbCkuc3RyaW5nVmFsdWUiLCAiJzYnIik7CiAg
ICBzaG91bGRCZSgiZG9jdW1lbnQuZXZhbHVhdGUoJ3BbNV1bQHR5cGU9XCJ3YXJuaW5nXCJdL0Bu
dW0nLCBST09UMiwgbnVsbCwgWFBhdGhSZXN1bHQuU1RSSU5HX1RZUEUsIG51bGwpLnN0cmluZ1Zh
bHVlIiwgIic1JyIpOwoKICAgIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwoKPC9zY3Jp
cHQ+CjxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>30705</attachid>
            <date>2009-05-27 06:01:25 -0700</date>
            <delta_ts>2009-05-28 03:05:27 -0700</delta_ts>
            <desc>test case showing before and after dom append</desc>
            <filename>test-absolute-xpath.htm</filename>
            <type>text/html</type>
            <size>590</size>
            <attacher name="Phred">fearphage+bugmail</attacher>
            
              <data encoding="base64">PHByZT48L3ByZT4NCjxzY3JpcHQ+DQp2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSwgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ByZScpWzBdLCBy
ZXN1bHQ7DQplbC5pbm5lckhUTUwgPSAnPHA+YTwvcD48cD5iPC9wPic7DQoNCnJlc3VsdCA9IGRv
Y3VtZW50LmV2YWx1YXRlKCcvLyonLCBlbCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUsIG51bGwpOw0Kb3V0cHV0LnRleHRDb250ZW50ICs9ICdcbm5vZGUgbm90
IGluIGRvY3VtZW50L3Jlc3VsdC5zbmFwc2hvdEl0ZW0oMCkgPSAnICsgcmVzdWx0LnNuYXBzaG90
SXRlbSgwKTsNCg0KZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7DQoNCnJlc3VsdCA9IGRv
Y3VtZW50LmV2YWx1YXRlKCcvLyonLCBlbCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RF
X1NOQVBTSE9UX1RZUEUsIG51bGwpOw0Kb3V0cHV0LnRleHRDb250ZW50ICs9ICdcbm5vZGUgYXBw
ZW5kZWQgdG8gYm9keS9yZXN1bHQuc25hcHNob3RJdGVtKDApID0gJyArIHJlc3VsdC5zbmFwc2hv
dEl0ZW0oMCk7DQo8L3NjcmlwdD4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30733</attachid>
            <date>2009-05-28 03:05:11 -0700</date>
            <delta_ts>2009-05-28 09:04:54 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>XPathBrokenOptimization.txt</filename>
            <type>text/plain</type>
            <size>30444</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDIyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMDUtMjggIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjAwNQorICAgICAgICBP
cHRpbWl6YXRpb24gZm9yIFhQYXRoIC8vKiBkb2VzIG5vdCBwcmVzZXJ2ZSBjb250ZXh0IHNpemUK
KworICAgICAgICBUZXN0OiBmYXN0L3hwYXRoL3Bvc2l0aW9uLmh0bWwKKworICAgICAgICBGaXhl
ZCB0aGUgYnVnIGJ5IHJlbW92aW5nIHRoZSBpbmNvcnJlY3Qgb3B0aW1pemF0aW9uLCBhbmQgbWFk
ZSBlbm91Z2ggbWljcm8tb3B0aW1pemF0aW9ucyB0bworICAgICAgICBnZXQgYSBwZXJmb3JtYW5j
ZSBwcm9ncmVzc2lvbiBvbiBteSB0ZXN0cy4KKworICAgICAgICAqIHhtbC9YUGF0aFBhdGguaDog
UmVtb3ZlZCBicm9rZW4gb3B0aW1pemVTdGVwUGFpcigpLgorCisgICAgICAgICogeG1sL1hQYXRo
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjpldmFsdWF0
ZSk6IFN0eWxlIGZpeC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlvblBhdGg6OmFw
cGVuZFN0ZXApOiBEb24ndCBjYWxsIG9wdGltaXplU3RlcFBhaXIoKS4KKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpMb2NhdGlvblBhdGg6Omluc2VydEZpcnN0U3RlcCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlBhdGg6OlBhdGgpOiBTdHlsZSBmaXguCisKKyAgICAgICAgKiB4
bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpwcmltYXJ5Tm9kZVR5
cGUpOiBUdXJuZWQgdGhpcyBtZW1iZXIgZnVuY3Rpb24gaW50byBhIHN0YXRpYyBpbmxpbmUgaGVs
cGVyLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6Om5vZGVNYXRjaGVzKTogRGl0dG8uIERvbid0
IGNoZWNrIGZvciBuYW1lc3BhY2UgYXhpcywgd2hpY2ggaXMgdW5zdXBwb3J0ZWQKKyAgICAgICAg
KGFuZCBtaWdodCBuZXZlciBiZSkuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9k
ZXNJbkF4aXMpOiBVcGRhdGVkIGZvciB0aGUgbmV3IG5vZGVNYXRjaGVzKCkgc2lnbmF0dXJlLgor
CisgICAgICAgICogeG1sL1hQYXRoU3RlcC5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0
ZXA6Ok5vZGVUZXN0OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpOb2Rl
VGVzdDo6bmFtZXNwYWNlVVJJKToKKyAgICAgICAgTWFkZSB0aGVzZSBkYXRhIG1lbWJlcnMgQXRv
bWljU3RyaW5nIHRvIGF2b2lkIHJlcGVhdGVkIGNvbnZlcnNpb25zLiBUaGlzIGlzIHRoZSBiaWdn
ZXN0CisgICAgICAgIHBlcmZvcm1hbmNlIHdpbiBoZXJlLgorCisgICAgICAgICogeG1sL1hQYXRo
VXRpbC5jcHA6IChXZWJDb3JlOjpYUGF0aDo6c3RyaW5nVmFsdWUpOiBSZXNlcnZlIHNvbWUgY2Fw
YWNpdHkgdXBmcm9udC4KKwogMjAwOS0wNS0yOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS94
bWwvWFBhdGhQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhdGguY3Bw
CShyZXZpc2lvbiA0NDIxNykKKysrIFdlYkNvcmUveG1sL1hQYXRoUGF0aC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFi
ZSA8cmFhYmVAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUsIEluYy4KICAqIENvcHlyaWdodCAo
QykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3JnPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtOTQsOSArOTQsOCBAQCBWYWx1ZSBMb2NhdGlvblBhdGg6OmV2YWx1YXRlKCkgY29u
c3QKIHsKICAgICBFdmFsdWF0aW9uQ29udGV4dCYgZXZhbHVhdGlvbkNvbnRleHQgPSBFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpOwogICAgIEV2YWx1YXRpb25Db250ZXh0IGJhY2t1cENv
bnRleHQgPSBldmFsdWF0aW9uQ29udGV4dDsKLSAgICAvKiBGb3IgYWJzb2x1dGUgbG9jYXRpb24g
cGF0aHMsIHRoZSBjb250ZXh0IG5vZGUgaXMgaWdub3JlZCAtIHRoZQotICAgICAqIGRvY3VtZW50
J3Mgcm9vdCBub2RlIGlzIHVzZWQgaW5zdGVhZC4KLSAgICAgKi8KKyAgICAvLyBGb3IgYWJzb2x1
dGUgbG9jYXRpb24gcGF0aHMsIHRoZSBjb250ZXh0IG5vZGUgaXMgaWdub3JlZCAtIHRoZQorICAg
IC8vIGRvY3VtZW50J3Mgcm9vdCBub2RlIGlzIHVzZWQgaW5zdGVhZC4KICAgICBOb2RlKiBjb250
ZXh0ID0gZXZhbHVhdGlvbkNvbnRleHQubm9kZS5nZXQoKTsKICAgICBpZiAobV9hYnNvbHV0ZSAm
JiBjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpIAogICAgICAgICBj
b250ZXh0ID0gY29udGV4dC0+b3duZXJEb2N1bWVudCgpOwpAQCAtMTMzLDQ5ICsxMzIsMTkgQEAg
dm9pZCBMb2NhdGlvblBhdGg6OmV2YWx1YXRlKE5vZGVTZXQmIG5vZAogICAgIG5vZGVzLm1hcmtT
b3J0ZWQoZmFsc2UpOwogfQogCi12b2lkIExvY2F0aW9uUGF0aDo6b3B0aW1pemVTdGVwUGFpcih1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICBTdGVwKiBmaXJzdCA9IG1fc3RlcHNbaW5kZXhdOwotICAg
IAotICAgIGlmIChmaXJzdC0+YXhpcygpID09IFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzCi0g
ICAgICAgICYmIGZpcnN0LT5ub2RlVGVzdCgpLmtpbmQoKSA9PSBTdGVwOjpOb2RlVGVzdDo6QW55
Tm9kZVRlc3QKLSAgICAgICAgJiYgZmlyc3QtPnByZWRpY2F0ZXMoKS5zaXplKCkgPT0gMCkgewot
Ci0gICAgICAgIFN0ZXAqIHNlY29uZCA9IG1fc3RlcHNbaW5kZXggKyAxXTsKLSAgICAgICAgaWYg
KHNlY29uZC0+YXhpcygpID09IFN0ZXA6OkNoaWxkQXhpcwotICAgICAgICAgICAgJiYgc2Vjb25k
LT5ub2RlVGVzdCgpLm5hbWVzcGFjZVVSSSgpLmlzRW1wdHkoKQotICAgICAgICAgICAgJiYgc2Vj
b25kLT5ub2RlVGVzdCgpLmtpbmQoKSA9PSBTdGVwOjpOb2RlVGVzdDo6TmFtZVRlc3QKLSAgICAg
ICAgICAgICYmIHNlY29uZC0+bm9kZVRlc3QoKS5kYXRhKCkgPT0gIioiKSB7Ci0KLSAgICAgICAg
ICAgIC8vIE9wdGltaXplIHRoZSBjb21tb24gY2FzZSBvZiAiLy8qIiBBS0EgZGVzY2VuZGFudC1v
ci1zZWxmOjpub2RlKCkvY2hpbGQ6OiouCi0gICAgICAgICAgICBmaXJzdC0+c2V0QXhpcyhTdGVw
OjpEZXNjZW5kYW50QXhpcyk7Ci0gICAgICAgICAgICBzZWNvbmQtPnNldEF4aXMoU3RlcDo6U2Vs
ZkF4aXMpOwotICAgICAgICAgICAgc2Vjb25kLT5zZXROb2RlVGVzdChTdGVwOjpOb2RlVGVzdDo6
RWxlbWVudE5vZGVUZXN0KTsKLSAgICAgICAgICAgIEFTU0VSVChzZWNvbmQtPm5vZGVUZXN0KCku
ZGF0YSgpLmlzRW1wdHkoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgTG9jYXRpb25Q
YXRoOjphcHBlbmRTdGVwKFN0ZXAqIHN0ZXApCiB7CiAgICAgbV9zdGVwcy5hcHBlbmQoc3RlcCk7
Ci0gICAgCi0gICAgdW5zaWduZWQgc3RlcENvdW50ID0gbV9zdGVwcy5zaXplKCk7Ci0gICAgaWYg
KHN0ZXBDb3VudCA+IDEpCi0gICAgICAgIG9wdGltaXplU3RlcFBhaXIoc3RlcENvdW50IC0gMik7
CiB9CiAKIHZvaWQgTG9jYXRpb25QYXRoOjppbnNlcnRGaXJzdFN0ZXAoU3RlcCogc3RlcCkKIHsK
ICAgICBtX3N0ZXBzLmluc2VydCgwLCBzdGVwKTsKLQotICAgIGlmIChtX3N0ZXBzLnNpemUoKSA+
IDEpCi0gICAgICAgIG9wdGltaXplU3RlcFBhaXIoMCk7CiB9CiAKIFBhdGg6OlBhdGgoRmlsdGVy
KiBmaWx0ZXIsIExvY2F0aW9uUGF0aCogcGF0aCkKLSAgICA6IG1fZmlsdGVyKGZpbHRlciksCi0g
ICAgbV9wYXRoKHBhdGgpCisgICAgOiBtX2ZpbHRlcihmaWx0ZXIpCisgICAgLCBtX3BhdGgocGF0
aCkKIHsKIH0KIApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQYXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS94bWwvWFBhdGhQYXRoLmgJKHJldmlzaW9uIDQ0MjE3KQorKysgV2ViQ29yZS94bWwv
WFBhdGhQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgotICogcGF0aC5o
IC0gQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1
IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDkgQXBwbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsOCAr
NjQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lkIGluc2VydEZpcnN0
U3RlcChTdGVwKiBzdGVwKTsKIAogICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgdm9pZCBv
cHRpbWl6ZVN0ZXBQYWlyKHVuc2lnbmVkIGluZGV4KTsKLQogICAgICAgICAgICAgVmVjdG9yPFN0
ZXAqPiBtX3N0ZXBzOwogICAgICAgICAgICAgYm9vbCBtX2Fic29sdXRlOwogICAgICAgICB9OwpJ
bmRleDogV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YUGF0aFN0ZXAuY3BwCShyZXZpc2lvbiA0NDIxNykKKysrIFdlYkNvcmUveG1sL1hQYXRoU3Rl
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IDIw
MDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1IEZyZXJpY2ggUmFhYmUg
PHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUsIEluYy4K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3Jn
PgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtODAsNiArODAsNzIgQEAgdm9pZCBTdGVwOjpldmFsdWF0
ZShOb2RlKiBjb250ZXh0LCBOb2RlUwogICAgIH0KIH0KIAorc3RhdGljIGlubGluZSBOb2RlOjpO
b2RlVHlwZSBwcmltYXJ5Tm9kZVR5cGUoU3RlcDo6QXhpcyBheGlzKQoreworICAgIHN3aXRjaCAo
YXhpcykgeworICAgICAgICBjYXNlIFN0ZXA6OkF0dHJpYnV0ZUF4aXM6CisgICAgICAgICAgICBy
ZXR1cm4gTm9kZTo6QVRUUklCVVRFX05PREU7CisgICAgICAgIGNhc2UgU3RlcDo6TmFtZXNwYWNl
QXhpczoKKyAgICAgICAgICAgIHJldHVybiBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9ERTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOb2RlOjpFTEVNRU5UX05PREU7Cisg
ICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSogbm9kZSwgU3Rl
cDo6QXhpcyBheGlzLCBjb25zdCBTdGVwOjpOb2RlVGVzdCYgbm9kZVRlc3QpCit7CisgICAgc3dp
dGNoIChub2RlVGVzdC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGVwOjpOb2RlVGVzdDo6VGV4
dE5vZGVUZXN0OgorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
VEVYVF9OT0RFIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RF
OworICAgICAgICBjYXNlIFN0ZXA6Ok5vZGVUZXN0OjpDb21tZW50Tm9kZVRlc3Q6CisgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREU7CisgICAg
ICAgIGNhc2UgU3RlcDo6Tm9kZVRlc3Q6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbk5vZGVUZXN0OiB7
CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBub2RlVGVzdC5kYXRhKCk7
CisgICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5H
X0lOU1RSVUNUSU9OX05PREUgJiYgKG5hbWUuaXNFbXB0eSgpIHx8IG5vZGUtPm5vZGVOYW1lKCkg
PT0gbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTdGVwOjpOb2RlVGVzdDo6RWxlbWVu
dE5vZGVUZXN0OgorICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKTsKKyAg
ICAgICAgY2FzZSBTdGVwOjpOb2RlVGVzdDo6QW55Tm9kZVRlc3Q6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBTdGVwOjpOb2RlVGVzdDo6TmFtZVRlc3Q6IHsKKyAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IG5vZGVUZXN0LmRhdGEoKTsKKyAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0gbm9kZVRlc3QubmFtZXNw
YWNlVVJJKCk7CisKKyAgICAgICAgICAgIGlmIChheGlzID09IFN0ZXA6OkF0dHJpYnV0ZUF4aXMp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkpOworCisg
ICAgICAgICAgICAgICAgLy8gSW4gWFBhdGggbGFuZCwgbmFtZXNwYWNlIG5vZGVzIGFyZSBub3Qg
YWNjZXNzaWJsZSBvbiB0aGUgYXR0cmlidXRlIGF4aXMuCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm5hbWVzcGFjZVVSSSgpID09ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGlmIChu
YW1lID09IHN0YXJBdG9tKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJ
LmlzRW1wdHkoKSB8fCBub2RlLT5uYW1lc3BhY2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+bG9jYWxOYW1lKCkgPT0gbmFtZSAmJiBub2RlLT5u
YW1lc3BhY2VVUkkoKSA9PSBuYW1lc3BhY2VVUkk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIE5vZGUgdGVzdCBvbiB0aGUgbmFtZXNwYWNlIGF4aXMgaXMgbm90IGltcGxlbWVudGVk
IHlldCwgdGhlIGNhbGxlciBoYXMgYSBjaGVjayBmb3IgaXQuCisgICAgICAgICAgICBBU1NFUlQo
YXhpcyAhPSBTdGVwOjpOYW1lc3BhY2VBeGlzKTsKKworICAgICAgICAgICAgLy8gRm9yIG90aGVy
IGF4ZXMsIHRoZSBwcmluY2lwYWwgbm9kZSB0eXBlIGlzIGVsZW1lbnQuCisgICAgICAgICAgICBB
U1NFUlQocHJpbWFyeU5vZGVUeXBlKGF4aXMpID09IE5vZGU6OkVMRU1FTlRfTk9ERSk7CisgICAg
ICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAobmFtZSA9PSBzdGFy
QXRvbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSB8fCBu
YW1lc3BhY2VVUkkgPT0gbm9kZS0+bmFtZXNwYWNlVVJJKCk7CisKKyAgICAgICAgICAgIGlmIChu
b2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIC8vIFBhdGhzIHdpdGhvdXQgbmFtZXNwYWNlcyBzaG91bGQg
bWF0Y2ggSFRNTCBlbGVtZW50cyBpbiBIVE1MIGRvY3VtZW50cyBkZXNwaXRlIHRob3NlIGhhdmlu
ZyBhbiBYSFRNTCBuYW1lc3BhY2UuIE5hbWVzIGFyZSBjb21wYXJlZCBjYXNlLWluc2Vuc2l0aXZl
bHkuCisgICAgICAgICAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+bG9jYWxOYW1lKCksIG5hbWUpICYmIChuYW1lc3BhY2VVUkkuaXNO
dWxsKCkgfHwgbmFtZXNwYWNlVVJJID09IG5vZGUtPm5hbWVzcGFjZVVSSSgpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmhh
c0xvY2FsTmFtZShuYW1lKSAmJiBuYW1lc3BhY2VVUkkgPT0gbm9kZS0+bmFtZXNwYWNlVVJJKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vZGVT
ZXQmIG5vZGVzKSBjb25zdAogewogICAgIEFTU0VSVChub2Rlcy5pc0VtcHR5KCkpOwpAQCAtODks
NyArMTU1LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBObwogICAg
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4
dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4s
IENoaWxkQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVu
ZChuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBEZXNjZW5kYW50QXhpczoK
QEAgLTk3LDE3ICsxNjMsMTcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0
LCBObwogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgZm9yIChOb2RlKiBu
ID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShjb250
ZXh0KSkKLSAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGVNYXRjaGVzKG4sIERlc2NlbmRhbnRBeGlzLCBtX25vZGVUZXN0KSkKICAgICAg
ICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjYXNlIFBhcmVudEF4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1
dGVOb2RlKCkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBuID0gc3RhdGljX2Nhc3Q8QXR0cio+
KGNvbnRleHQpLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNo
ZXMobikpCisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4sIFBhcmVudEF4aXMsIG1f
bm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBjb250ZXh0LT5wYXJlbnRO
b2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG4gJiYgbm9kZU1hdGNoZXMobikpCisgICAgICAg
ICAgICAgICAgaWYgKG4gJiYgbm9kZU1hdGNoZXMobiwgUGFyZW50QXhpcywgbV9ub2RlVGVzdCkp
CiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTExNSwxMSArMTgxLDExIEBAIHZvaWQgU3RlcDo6bm9kZXNJ
bkF4aXMoTm9kZSogY29udGV4dCwgTm8KICAgICAgICAgICAgIE5vZGUqIG4gPSBjb250ZXh0Owog
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgbiA9IHN0YXRpY19jYXN0PEF0dHIqPihjb250ZXh0KS0+b3duZXJFbGVtZW50KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgIGlmIChu
b2RlTWF0Y2hlcyhuLCBBbmNlc3RvckF4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAg
ICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKG4g
PSBuLT5wYXJlbnROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhu
LCBBbmNlc3RvckF4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICBub2Rlcy5h
cHBlbmQobik7CiAgICAgICAgICAgICBub2Rlcy5tYXJrU29ydGVkKGZhbHNlKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTEzMCw3ICsxOTYsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5v
ZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5uZXh0U2libGluZygpOyBuOyBuID0g
bi0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4sIEZvbGxvd2luZ1NpYmxpbmdBeGlzLCBt
X25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFByZWNlZGluZ1NpYmxpbmdBeGlzOgpAQCAtMTM5
LDcgKzIwNSw3IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm8KICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoTm9k
ZSogbiA9IGNvbnRleHQtPnByZXZpb3VzU2libGluZygpOyBuOyBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCkpCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAg
ICAgIGlmIChub2RlTWF0Y2hlcyhuLCBQcmVjZWRpbmdTaWJsaW5nQXhpcywgbV9ub2RlVGVzdCkp
CiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKIAogICAgICAgICAgICAgbm9k
ZXMubWFya1NvcnRlZChmYWxzZSk7CkBAIC0xNDgsMTUgKzIxNCwxNSBAQCB2b2lkIFN0ZXA6Om5v
ZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNB
dHRyaWJ1dGVOb2RlKCkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBwID0gc3RhdGljX2Nhc3Q8
QXR0cio+KGNvbnRleHQpLT5vd25lckVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAo
KHAgPSBwLT50cmF2ZXJzZU5leHROb2RlKCkpKQotICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMocCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhwLCBGb2xs
b3dpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFw
cGVuZChwKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBwID0gY29udGV4dDsgIWlzUm9vdERvbU5vZGUocCk7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gcC0+bmV4dFNpYmxpbmcoKTsgbjsg
biA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
TWF0Y2hlcyhuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLCBG
b2xsb3dpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGMgPSBu
LT5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT50cmF2ZXJzZU5leHROb2RlKG4pKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhjKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMoYywgRm9sbG93aW5nQXhpcywgbV9ub2RlVGVzdCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTE2OSw3ICsyMzUsNyBAQCB2
b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICBOb2Rl
KiBuID0gY29udGV4dDsKICAgICAgICAgICAgIHdoaWxlIChOb2RlKiBwYXJlbnQgPSBuLT5wYXJl
bnQoKSkgewogICAgICAgICAgICAgICAgIGZvciAobiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2Rl
KCk7IG4gIT0gcGFyZW50OyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZU1hdGNoZXMobiwgUHJlY2VkaW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICAgICAgbiA9IHBhcmVudDsK
ICAgICAgICAgICAgIH0KQEAgLTE4MSw3ICsyNDcsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlz
KE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAg
ICAvLyBBdm9pZCBsYXppbHkgY3JlYXRpbmcgYXR0cmlidXRlIG5vZGVzIGZvciBhdHRyaWJ1dGVz
IHRoYXQgd2UgZG8gbm90IG5lZWQgYW55d2F5LgotICAgICAgICAgICAgaWYgKG1fbm9kZVRlc3Qu
a2luZCgpID09IE5vZGVUZXN0OjpOYW1lVGVzdCAmJiBtX25vZGVUZXN0LmRhdGEoKSAhPSAiKiIp
IHsKKyAgICAgICAgICAgIGlmIChtX25vZGVUZXN0LmtpbmQoKSA9PSBOb2RlVGVzdDo6TmFtZVRl
c3QgJiYgbV9ub2RlVGVzdC5kYXRhKCkgIT0gc3RhckF0b20pIHsKICAgICAgICAgICAgICAgICBS
ZWZQdHI8Tm9kZT4gbiA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb250ZXh0KS0+Z2V0QXR0cmli
dXRlTm9kZU5TKG1fbm9kZVRlc3QubmFtZXNwYWNlVVJJKCksIG1fbm9kZVRlc3QuZGF0YSgpKTsK
ICAgICAgICAgICAgICAgICBpZiAobiAmJiBuLT5uYW1lc3BhY2VVUkkoKSAhPSAiaHR0cDovL3d3
dy53My5vcmcvMjAwMC94bWxucy8iKSAvLyBJbiBYUGF0aCBsYW5kLCBuYW1lc3BhY2Ugbm9kZXMg
YXJlIG5vdCBhY2Nlc3NpYmxlIG9uIHRoZSBhdHRyaWJ1dGUgYXhpcy4KICAgICAgICAgICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKG4ucmVsZWFzZSgpKTsKQEAgLTE5NCw3ICsyNjAsNyBAQCB2b2lk
IFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIFJlZlB0cjxBdHRyPiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSktPmNyZWF0ZUF0
dHJJZk5lZWRlZChzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY29udGV4dCkpOwotICAgICAgICAgICAg
ICAgIGlmIChub2RlTWF0Y2hlcyhhdHRyLmdldCgpKSkKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMoYXR0ci5nZXQoKSwgQXR0cmlidXRlQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChhdHRyLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDMsMzAgKzI2OSwzMCBAQCB2b2lkIFN0ZXA6Om5v
ZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICAvLyBYUGF0aCBuYW1lc3Bh
Y2Ugbm9kZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNhc2UgU2VsZkF4aXM6Ci0gICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMoY29udGV4
dCkpCisgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMoY29udGV4dCwgU2VsZkF4aXMsIG1fbm9k
ZVRlc3QpKQogICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgY2FzZSBEZXNjZW5kYW50T3JTZWxmQXhpczoKLSAgICAgICAg
ICAgIGlmIChub2RlTWF0Y2hlcyhjb250ZXh0KSkKKyAgICAgICAgICAgIGlmIChub2RlTWF0Y2hl
cyhjb250ZXh0LCBEZXNjZW5kYW50T3JTZWxmQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlz
QXR0cmlidXRlTm9kZSgpKSAvLyBJbiBYUGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRvIG5v
dCBoYXZlIGNoaWxkcmVuLgogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAg
Zm9yIChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VO
ZXh0Tm9kZShjb250ZXh0KSkKLSAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKKyAgICAg
ICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLCBEZXNjZW5kYW50T3JTZWxmQXhpcywgbV9ub2RlVGVz
dCkpCiAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIEFuY2VzdG9yT3JTZWxmQXhpczogewotICAgICAgICAgICAgaWYgKG5v
ZGVNYXRjaGVzKGNvbnRleHQpKQorICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKGNvbnRleHQs
IEFuY2VzdG9yT3JTZWxmQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgbm9kZXMu
YXBwZW5kKGNvbnRleHQpOwogICAgICAgICAgICAgTm9kZSogbiA9IGNvbnRleHQ7CiAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsKICAgICAgICAgICAgICAgICBu
ID0gc3RhdGljX2Nhc3Q8QXR0cio+KGNvbnRleHQpLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4sIEFuY2VzdG9yT3JTZWxmQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAobiA9
IG4tPnBhcmVudE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4s
IEFuY2VzdG9yT3JTZWxmQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZChuKTsKIAogICAgICAgICAgICAgbm9kZXMubWFya1NvcnRlZChmYWxzZSk7CkBA
IC0yMzcsNzQgKzMwMyw2IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwg
Tm8KIH0KIAogCi1ib29sIFN0ZXA6Om5vZGVNYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0g
ICAgc3dpdGNoIChtX25vZGVUZXN0LmtpbmQoKSkgewotICAgICAgICBjYXNlIE5vZGVUZXN0OjpU
ZXh0Tm9kZVRlc3Q6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpURVhUX05PREUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05P
REU7Ci0gICAgICAgIGNhc2UgTm9kZVRlc3Q6OkNvbW1lbnROb2RlVGVzdDoKLSAgICAgICAgICAg
IHJldHVybiBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERTsKLSAgICAgICAg
Y2FzZSBOb2RlVGVzdDo6UHJvY2Vzc2luZ0luc3RydWN0aW9uTm9kZVRlc3Q6IHsKLSAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fbm9kZVRlc3QuZGF0YSgpOwotICAgICAgICAgICAg
cmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9O
T0RFICYmIChuYW1lLmlzRW1wdHkoKSB8fCBub2RlLT5ub2RlTmFtZSgpID09IG5hbWUpOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgTm9kZVRlc3Q6OkVsZW1lbnROb2RlVGVzdDoKLSAgICAgICAg
ICAgIHJldHVybiBub2RlLT5pc0VsZW1lbnROb2RlKCk7Ci0gICAgICAgIGNhc2UgTm9kZVRlc3Q6
OkFueU5vZGVUZXN0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgTm9k
ZVRlc3Q6Ok5hbWVUZXN0OiB7Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX25v
ZGVUZXN0LmRhdGEoKTsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJID0g
bV9ub2RlVGVzdC5uYW1lc3BhY2VVUkkoKTsKLQotICAgICAgICAgICAgaWYgKG1fYXhpcyA9PSBB
dHRyaWJ1dGVBeGlzKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmlzQXR0cmlidXRl
Tm9kZSgpKTsKLQotICAgICAgICAgICAgICAgIC8vIEluIFhQYXRoIGxhbmQsIG5hbWVzcGFjZSBu
b2RlcyBhcmUgbm90IGFjY2Vzc2libGUgb24gdGhlIGF0dHJpYnV0ZSBheGlzLgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5uYW1lc3BhY2VVUkkoKSA9PSAiaHR0cDovL3d3dy53My5vcmcvMjAw
MC94bWxucy8iKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAobmFtZSA9PSAiKiIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1l
c3BhY2VVUkkuaXNFbXB0eSgpIHx8IG5vZGUtPm5hbWVzcGFjZVVSSSgpID09IG5hbWVzcGFjZVVS
STsKLQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5sb2NhbE5hbWUoKSA9PSBuYW1lICYm
IG5vZGUtPm5hbWVzcGFjZVVSSSgpID09IG5hbWVzcGFjZVVSSTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG1fYXhpcyA9PSBOYW1lc3BhY2VBeGlzKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gTm9kZSB0ZXN0IG9uIHRoZSBuYW1lc3BhY2UgYXhpcyBpcyBub3QgaW1wbGVtZW50ZWQg
eWV0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBGb3Igb3RoZXIgYXhlcywgdGhlIHByaW5jaXBhbCBub2RlIHR5cGUgaXMgZWxl
bWVudC4KLSAgICAgICAgICAgIEFTU0VSVChwcmltYXJ5Tm9kZVR5cGUobV9heGlzKSA9PSBOb2Rl
OjpFTEVNRU5UX05PREUpOwotICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9k
ZTo6RUxFTUVOVF9OT0RFKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gIioiKQotICAgICAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VV
UkkuaXNFbXB0eSgpIHx8IG5hbWVzcGFjZVVSSSA9PSBub2RlLT5uYW1lc3BhY2VVUkkoKTsKLQot
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBub2RlLT5kb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gUGF0aHMgd2l0aG91dCBu
YW1lc3BhY2VzIHNob3VsZCBtYXRjaCBIVE1MIGVsZW1lbnRzIGluIEhUTUwgZG9jdW1lbnRzIGRl
c3BpdGUgdGhvc2UgaGF2aW5nIGFuIFhIVE1MIG5hbWVzcGFjZS4gTmFtZXMgYXJlIGNvbXBhcmVk
IGNhc2UtaW5zZW5zaXRpdmVseS4KLSAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0Nhc2Uoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5sb2NhbE5hbWUoKSwgbmFtZSkgJiYg
KG5hbWVzcGFjZVVSSS5pc051bGwoKSB8fCBuYW1lc3BhY2VVUkkgPT0gbm9kZS0+bmFtZXNwYWNl
VVJJKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+aGFzTG9jYWxOYW1lKG5hbWUpICYmIG5hbWVzcGFjZVVSSSA9PSBub2Rl
LT5uYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5vZGU6Ok5vZGVUeXBlIFN0ZXA6OnByaW1h
cnlOb2RlVHlwZShBeGlzIGF4aXMpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChheGlzKSB7Ci0gICAg
ICAgIGNhc2UgQXR0cmlidXRlQXhpczoKLSAgICAgICAgICAgIHJldHVybiBOb2RlOjpBVFRSSUJV
VEVfTk9ERTsKLSAgICAgICAgY2FzZSBOYW1lc3BhY2VBeGlzOgotICAgICAgICAgICAgcmV0dXJu
IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIE5vZGU6OkVMRU1FTlRfTk9ERTsKLSAgICB9Ci19Ci0KIH0KIH0KIApJbmRleDog
V2ViQ29yZS94bWwvWFBhdGhTdGVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhT
dGVwLmgJKHJldmlzaW9uIDQ0MjE3KQorKysgV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBS
YWFiZSA8cmFhYmVAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUsIEluYy4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsMTMgKzYxLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgICAgICBOb2RlVGVzdChLaW5kIGtpbmQsIGNvbnN0IFN0cmluZyYgZGF0
YSwgY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkkpIDogbV9raW5kKGtpbmQpLCBtX2RhdGEoZGF0
YSksIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkge30KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQot
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVy
biBtX25hbWVzcGFjZVVSSTsgfQorICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgICAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lc3BhY2VVUkk7
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgS2luZCBtX2tpbmQ7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG1fZGF0YTsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgbV9uYW1lc3BhY2VVUkk7CisgICAgICAgICAgICAgICAgQXRvbWljU3Ry
aW5nIG1fZGF0YTsKKyAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2VVUkk7
CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBTdGVwKEF4aXMsIGNvbnN0IE5vZGVUZXN0
JiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzID0gVmVjdG9y
PFByZWRpY2F0ZSo+KCkpOwpAQCAtODYsOSArODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICB2b2lkIHBhcnNlTm9kZVRlc3QoY29uc3QgU3Ry
aW5nJik7CiAgICAgICAgICAgICB2b2lkIG5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vZGVT
ZXQmKSBjb25zdDsKLSAgICAgICAgICAgIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSopIGNvbnN0Owog
ICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZUZyb21Ob2RldGVzdChjb25zdCBTdHJpbmcmIG5v
ZGVUZXN0KSBjb25zdDsKLSAgICAgICAgICAgIE5vZGU6Ok5vZGVUeXBlIHByaW1hcnlOb2RlVHlw
ZShBeGlzKSBjb25zdDsKIAogICAgICAgICAgICAgQXhpcyBtX2F4aXM7CiAgICAgICAgICAgICBO
b2RlVGVzdCBtX25vZGVUZXN0OwpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiA0NDIyMCkKKysr
IFdlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgotICogQ29weXJpZ2h0IDIwMDUgRnJlcmljaCBSYWFiZSA8cmFhYmVAa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDA1IEZyZXJpY2ggUmFhYmUgPHJhYWJlQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDkgQXBwbGUsIEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTIsNiArNTIsNyBAQCBTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGlmIChpc1Jvb3REb21Ob2RlKG5vZGUpIHx8IG5vZGUtPm5vZGVU
eXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgICAgICAgICAgVmVjdG9yPFVD
aGFyPiByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0
KTsKIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsg
bjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG4tPmlzVGV4dE5vZGUoKSkgewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDQyMjUpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0w
NS0yOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI2MDA1CisgICAgICAgIE9wdGltaXphdGlvbiBmb3IgWFBhdGgg
Ly8qIGRvZXMgbm90IHByZXNlcnZlIGNvbnRleHQgc2l6ZQorCisgICAgICAgICogZmFzdC94cGF0
aC9wb3NpdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveHBhdGgvcG9z
aXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgIFRlc3QgZm9yIHRoaXMgYnVnLCBhbmQgZm9yIG90
aGVyIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb3NpdGlvbigpLgorCisgICAgICAgICogZmFzdC94
cGF0aC80WFBhdGgvQ29yZS90ZXN0LmpzOiBVcGRhdGVkIHRvIHdvcmsgd2l0aCBGaXJlZm94IDMg
KGdldEVsZW1lbnRzQnlUYWdOYW1lIGhhbmRsZXMKKyAgICAgICAgbm9kZSBuYW1lcyB3aXRoIG5h
bWVzcGFjZSBwcmVmaXhlcyBkaWZmZXJlbnRseSB0aGVyZSkuCisgICAgICAgICogZmFzdC94cGF0
aC80WFBhdGgvQ29yZS90ZXN0X2xvY2F0aW9uX3BhdGguaHRtbDogRml4ZWQgdGhlIHRlc3QgdG8g
cmVxdWVzdCBvcmRlcmVkIHNuYXBzaG90cworICAgICAgICB3aGVuIHRoZXJlIGlzIG1vcmUgdGhh
biBvbmUgbm9kZSBpbiBleHBlY3RlZCByZXN1bHQsIGFzIHRoZSBjaGVja3MgdmVyaWZ5IG5vZGUg
b3JkZXIuCisKIDIwMDktMDUtMjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
eHBhdGgvcG9zaXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QveHBhdGgvcG9zaXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC94cGF0aC9wb3NpdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjIgQEAKK1BBU1MgLi8vKgorUEFTUyAqW3Bvc2l0aW9uKCkgPSAyXQorUEFTUyAuLy8qW3Bv
c2l0aW9uKCkgPSAyXQorUEFTUyAuLy4vLi8vKlsyXS8uCitQQVNTIC4vLyovc3BhblsyXQorUEFT
UyAuLy8qW3Bvc2l0aW9uKCkgPSAxXQorUEFTUyAuL2Rlc2NlbmRhbnQtb3Itc2VsZjo6bm9kZSgp
L2NoaWxkOjoqW3Bvc2l0aW9uKCkgPSAyXQorUEFTUyBkZXNjZW5kYW50LW9yLXNlbGY6Om5vZGUo
KS9jaGlsZDo6Kltwb3NpdGlvbigpID0gMl0KK1BBU1MgLi8vKi8qWzJdCitQQVNTIHByZWNlZGlu
Zzo6bm9kZSgpWzFdCitQQVNTIHByZWNlZGluZzo6bm9kZSgpWzJdCitQQVNTIHByZWNlZGluZzo6
bm9kZSgpWzNdCitQQVNTIHByZWNlZGluZzo6bm9kZSgpLypbM10KK1BBU1MgYW5jZXN0b3I6Om5v
ZGUoKVsyXQorUEFTUyBhbmNlc3Rvci1vci1zZWxmOjpub2RlKClbMl0KK1BBU1MgYW5jZXN0b3It
b3Itc2VsZjo6bm9kZSgpWzNdCitQQVNTIGRvY3VtZW50LmV2YWx1YXRlKCdwW0B0eXBlPSJ3YXJu
aW5nIl1bNV0vQG51bScsIFJPT1QyLCBudWxsLCBYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRSwgbnVs
bCkuc3RyaW5nVmFsdWUgaXMgJzYnCitQQVNTIGRvY3VtZW50LmV2YWx1YXRlKCdwWzVdW0B0eXBl
PSJ3YXJuaW5nIl0vQG51bScsIFJPT1QyLCBudWxsLCBYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRSwg
bnVsbCkuc3RyaW5nVmFsdWUgaXMgJzUnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFz
dC94cGF0aC9wb3NpdGlvbi1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC94cGF0aC9wb3NpdGlvbi5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QveHBhdGgvcG9zaXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QveHBhdGgvcG9zaXRpb24uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPCEtLTxiYXNlIGhyZWY9Imh0
dHA6Ly90cmFjLndlYmtpdC5vcmcvZXhwb3J0LzQ0MDQ5L3RydW5rL0xheW91dFRlc3RzL2Zhc3Qv
eHBhdGgvcG9zaXRpb24uaHRtbCI+LS0+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ4cGF0aC10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorCit2YXIgUk9PVCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworUk9PVC5pbm5lckhUTUwgPSAnPHA+YTwvcD48ZGl2PjxzcGFuPjwvc3Bhbj48c3Bhbj48
L3NwYW4+PHNwYW4+PC9zcGFuPjwvZGl2Pic7Cit2YXIgQ0hJTEQxID0gUk9PVC5maXJzdENoaWxk
OwordmFyIENISUxEMVRFWFQgPSBDSElMRDEuZmlyc3RDaGlsZDsKK3ZhciBDSElMRDIgPSBST09U
Lmxhc3RDaGlsZDsKK3ZhciBDSElMRDIxID0gQ0hJTEQyLmZpcnN0Q2hpbGQ7Cit2YXIgQ0hJTEQy
MiA9IENISUxEMjEubmV4dFNpYmxpbmc7Cit2YXIgQ0hJTEQyMyA9IENISUxEMjIubmV4dFNpYmxp
bmc7CisKKyAgICByZXN1bHQgPSBkb2N1bWVudC5ldmFsdWF0ZSgiLi8vKiIsIFJPT1QsIG51bGws
IFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBjaGVj
a1NuYXBzaG90KCIuLy8qIiwgcmVzdWx0LCBbQ0hJTEQxLCBDSElMRDIsIENISUxEMjEsIENISUxE
MjIsIENISUxEMjNdKTsKKworICAgIHJlc3VsdCA9IGRvY3VtZW50LmV2YWx1YXRlKCIqW3Bvc2l0
aW9uKCkgPSAyXSIsIFJPT1QsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFLCBudWxsKTsKKyAgICBjaGVja1NuYXBzaG90KCIqW3Bvc2l0aW9uKCkgPSAyXSIsIHJl
c3VsdCwgW0NISUxEMl0pOworCisgICAgcmVzdWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoIi4vLypb
cG9zaXRpb24oKSA9IDJdIiwgUk9PVCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUsIG51bGwpOworICAgIGNoZWNrU25hcHNob3QoIi4vLypbcG9zaXRpb24oKSA9
IDJdIiwgcmVzdWx0LCBbQ0hJTEQyLCBDSElMRDIyXSk7CisKKyAgICByZXN1bHQgPSBkb2N1bWVu
dC5ldmFsdWF0ZSgiLi8uLy4vLypbMl0vLiIsIFJPT1QsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBjaGVja1NuYXBzaG90KCIuLy4vLi8v
KlsyXS8uIiwgcmVzdWx0LCBbQ0hJTEQyLCBDSElMRDIyXSk7CisKKyAgICByZXN1bHQgPSBkb2N1
bWVudC5ldmFsdWF0ZSgiLi8vKi9zcGFuWzJdIiwgUk9PVCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOworICAgIGNoZWNrU25hcHNob3QoIi4vLyov
c3BhblsyXSIsIHJlc3VsdCwgW0NISUxEMjJdKTsKKworICAgIHJlc3VsdCA9IGRvY3VtZW50LmV2
YWx1YXRlKCIuLy8qW3Bvc2l0aW9uKCkgPSAxXSIsIFJPT1QsIG51bGwsIFhQYXRoUmVzdWx0Lk9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBjaGVja1NuYXBzaG90KCIuLy8q
W3Bvc2l0aW9uKCkgPSAxXSIsIHJlc3VsdCwgW0NISUxEMSwgQ0hJTEQyMV0pOworCisgICAgcmVz
dWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoIi4vZGVzY2VuZGFudC1vci1zZWxmOjpub2RlKCkvY2hp
bGQ6OipbcG9zaXRpb24oKSA9IDJdIiwgUk9PVCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOworICAgIGNoZWNrU25hcHNob3QoIi4vZGVzY2VuZGFu
dC1vci1zZWxmOjpub2RlKCkvY2hpbGQ6OipbcG9zaXRpb24oKSA9IDJdIiwgcmVzdWx0LCBbQ0hJ
TEQyLCBDSElMRDIyXSk7CisKKyAgICByZXN1bHQgPSBkb2N1bWVudC5ldmFsdWF0ZSgiZGVzY2Vu
ZGFudC1vci1zZWxmOjpub2RlKCkvY2hpbGQ6OipbcG9zaXRpb24oKSA9IDJdIiwgUk9PVCwgbnVs
bCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOworICAgIGNo
ZWNrU25hcHNob3QoImRlc2NlbmRhbnQtb3Itc2VsZjo6bm9kZSgpL2NoaWxkOjoqW3Bvc2l0aW9u
KCkgPSAyXSIsIHJlc3VsdCwgW0NISUxEMiwgQ0hJTEQyMl0pOworCisgICAgcmVzdWx0ID0gZG9j
dW1lbnQuZXZhbHVhdGUoIi4vLyovKlsyXSIsIFJPT1QsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBjaGVja1NuYXBzaG90KCIuLy8qLypb
Ml0iLCByZXN1bHQsIFtDSElMRDIyXSk7CisKKyAgICByZXN1bHQgPSBkb2N1bWVudC5ldmFsdWF0
ZSgicHJlY2VkaW5nOjpub2RlKClbMV0iLCBDSElMRDIsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBjaGVja1NuYXBzaG90KCJwcmVjZWRp
bmc6Om5vZGUoKVsxXSIsIHJlc3VsdCwgW0NISUxEMVRFWFRdKTsKKworICAgIHJlc3VsdCA9IGRv
Y3VtZW50LmV2YWx1YXRlKCJwcmVjZWRpbmc6Om5vZGUoKVsyXSIsIENISUxEMiwgbnVsbCwgWFBh
dGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOworICAgIGNoZWNrU25h
cHNob3QoInByZWNlZGluZzo6bm9kZSgpWzJdIiwgcmVzdWx0LCBbQ0hJTEQxXSk7CisKKyAgICBy
ZXN1bHQgPSBkb2N1bWVudC5ldmFsdWF0ZSgicHJlY2VkaW5nOjpub2RlKClbM10iLCBDSElMRDIs
IG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAg
ICBjaGVja1NuYXBzaG90KCJwcmVjZWRpbmc6Om5vZGUoKVszXSIsIHJlc3VsdCwgW10pOworCisg
ICAgcmVzdWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoInByZWNlZGluZzo6bm9kZSgpLypbM10iLCBD
SElMRDIsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxs
KTsKKyAgICBjaGVja1NuYXBzaG90KCJwcmVjZWRpbmc6Om5vZGUoKS8qWzNdIiwgcmVzdWx0LCBb
XSk7CisKKyAgICByZXN1bHQgPSBkb2N1bWVudC5ldmFsdWF0ZSgiYW5jZXN0b3I6Om5vZGUoKVsy
XSIsIENISUxEMjEsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
LCBudWxsKTsKKyAgICBjaGVja1NuYXBzaG90KCJhbmNlc3Rvcjo6bm9kZSgpWzJdIiwgcmVzdWx0
LCBbUk9PVF0pOworCisgICAgcmVzdWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoImFuY2VzdG9yLW9y
LXNlbGY6Om5vZGUoKVsyXSIsIENISUxEMjEsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9E
RV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBjaGVja1NuYXBzaG90KCJhbmNlc3Rvci1vci1z
ZWxmOjpub2RlKClbMl0iLCByZXN1bHQsIFtDSElMRDJdKTsKKworICAgIHJlc3VsdCA9IGRvY3Vt
ZW50LmV2YWx1YXRlKCJhbmNlc3Rvci1vci1zZWxmOjpub2RlKClbM10iLCBDSElMRDIxLCBudWxs
LCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CisgICAgY2hl
Y2tTbmFwc2hvdCgiYW5jZXN0b3Itb3Itc2VsZjo6bm9kZSgpWzNdIiwgcmVzdWx0LCBbUk9PVF0p
OworCit2YXIgUk9PVDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK1JPT1QyLmlu
bmVySFRNTCA9ICc8cCBudW09IjEiPjwvcD48cCBudW09IjIiIHR5cGU9Indhcm5pbmciPjwvcD48
cCBudW09IjMiIHR5cGU9Indhcm5pbmciPjwvcD48cCBudW09IjQiIHR5cGU9Indhcm5pbmciPjwv
cD48cCBudW09IjUiIHR5cGU9Indhcm5pbmciPjwvcD48cCBudW09IjYiIHR5cGU9Indhcm5pbmci
PjwvcD4nOworCisgICAgc2hvdWxkQmUoImRvY3VtZW50LmV2YWx1YXRlKCdwW0B0eXBlPVwid2Fy
bmluZ1wiXVs1XS9AbnVtJywgUk9PVDIsIG51bGwsIFhQYXRoUmVzdWx0LlNUUklOR19UWVBFLCBu
dWxsKS5zdHJpbmdWYWx1ZSIsICInNiciKTsKKyAgICBzaG91bGRCZSgiZG9jdW1lbnQuZXZhbHVh
dGUoJ3BbNV1bQHR5cGU9XCJ3YXJuaW5nXCJdL0BudW0nLCBST09UMiwgbnVsbCwgWFBhdGhSZXN1
bHQuU1RSSU5HX1RZUEUsIG51bGwpLnN0cmluZ1ZhbHVlIiwgIic1JyIpOworCisgICAgdmFyIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC94cGF0aC9wb3NpdGlvbi5odG1s
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbAoKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QveHBhdGgvNFhQYXRoL0NvcmUvdGVzdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3hwYXRoLzRYUGF0aC9Db3JlL3Rlc3QuanMJKHJldmlzaW9uIDQ0MjE3
KQorKysgTGF5b3V0VGVzdHMvZmFzdC94cGF0aC80WFBhdGgvQ29yZS90ZXN0LmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIENISUxEMiA9IERPTS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiQ0hJTEQKIEFUVFIyID0gQ0hJTEQyLmdldEF0dHJpYnV0ZU5vZGUoImF0dHIxIik7CiBJREFU
VFIyID0gQ0hJTEQyLmdldEF0dHJpYnV0ZU5vZGUoJ0NPREUnKQogQ0hJTEQzID0gRE9NLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJDSElMRDMiKVswXTsKK2lmICghQ0hJTEQzKQorICAgIENISUxEMyA9
IERPTS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZm9vOkNISUxEMyIpWzBdOwogdGV4dCA9IENISUxE
MS5sYXN0Q2hpbGQ7CiBMQU5HID0gRE9NLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYW5nIilbMF07
CiBOT05BU0NJSVFOQU1FID0gRE9NLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJmXHhmNlx4ZjgiKVsw
XTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHBhdGgvNFhQYXRoL0NvcmUvdGVzdF9sb2NhdGlv
bl9wYXRoLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94cGF0aC80WFBhdGgv
Q29yZS90ZXN0X2xvY2F0aW9uX3BhdGguaHRtbAkocmV2aXNpb24gNDQyMTcpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3hwYXRoLzRYUGF0aC9Db3JlL3Rlc3RfbG9jYXRpb25fcGF0aC5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMCwxMCArMTAsMTAgQEAKIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgog
CiA8c2NyaXB0PgotICAgIHJlc3VsdCA9IERPTS5ldmFsdWF0ZSgiLy8qIiwgQ0hJTEQyLCBudWxs
LCBYUGF0aFJlc3VsdC5VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBy
ZXN1bHQgPSBET00uZXZhbHVhdGUoIi8vKiIsIENISUxEMiwgbnVsbCwgWFBhdGhSZXN1bHQuT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOwogICAgIGNoZWNrU25hcHNob3QoIi8vKiIs
IHJlc3VsdCwgW1JPT1QsIENISUxEMV0uY29uY2F0KEdDSElMRFJFTjEsIFtDSElMRDJdLCBHQ0hJ
TERSRU4yLCBbQ0hJTEQzLCBMQU5HXSwgTENISUxEUkVOKSk7CiAKLSAgICByZXN1bHQgPSBET00u
ZXZhbHVhdGUoIiovKiIsIFJPT1QsIG51bGwsIFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX1NO
QVBTSE9UX1RZUEUsIG51bGwpOworICAgIHJlc3VsdCA9IERPTS5ldmFsdWF0ZSgiKi8qIiwgUk9P
VCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwpOwog
ICAgIGNoZWNrU25hcHNob3QoIiovKiIsIHJlc3VsdCwgR0NISUxEUkVOMS5jb25jYXQoR0NISUxE
UkVOMiwgTENISUxEUkVOKSk7CiAKICAgICByZXN1bHQgPSBET00uZXZhbHVhdGUoIi8iLCBDSElM
RDEsIG51bGwsIFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsIG51bGwp
OwpAQCAtMjIsNyArMjIsNyBAQAogICAgIHJlc3VsdCA9IERPTS5ldmFsdWF0ZSgiL2NoaWxkOjoq
IiwgQ0hJTEQyLCBudWxsLCBYUGF0aFJlc3VsdC5VTk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBF
LCBudWxsKTsKICAgICBjaGVja1NuYXBzaG90KCIvY2hpbGQ6OioiLCByZXN1bHQsIFtST09UXSk7
CiAKLSAgICByZXN1bHQgPSBET00uZXZhbHVhdGUoImNoaWxkOjoqL2NoaWxkOjoqIiwgUk9PVCwg
bnVsbCwgWFBhdGhSZXN1bHQuVU5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7Cisg
ICAgcmVzdWx0ID0gRE9NLmV2YWx1YXRlKCJjaGlsZDo6Ki9jaGlsZDo6KiIsIFJPT1QsIG51bGws
IFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgICBjaGVj
a1NuYXBzaG90KCJjaGlsZDo6Ki9jaGlsZDo6KiIsIHJlc3VsdCwgR0NISUxEUkVOMS5jb25jYXQo
R0NISUxEUkVOMiwgTENISUxEUkVOKSk7CiAKICAgICB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsK
</data>
<flag name="review"
          id="15582"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>