<?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>104685</bug_id>
          
          <creation_ts>2012-12-11 10:41:27 -0800</creation_ts>
          <short_desc>Add Element-specific traversal functions</short_desc>
          <delta_ts>2012-12-11 19:15:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>schenney</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>788584</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-11 10:41:27 -0800</bug_when>
    <thetext>In many cases where we use NodeTraversal we really only want Elements. By having Element specific iteration functions we can tighten the code and make it faster too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788819</commentid>
    <comment_count>1</comment_count>
      <attachid>178882</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-11 14:44:07 -0800</bug_when>
    <thetext>Created attachment 178882
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788835</commentid>
    <comment_count>2</comment_count>
      <attachid>178882</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-12-11 15:02:32 -0800</bug_when>
    <thetext>Comment on attachment 178882
patch

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

&gt; Source/WebCore/ChangeLog:1529
&gt; +        Another build fix.
&gt; +
&gt; +        * html/HTMLPropertiesCollection.cpp:
&gt; +        (WebCore::nextNodeWithProperty):

Please revert these changes.

&gt; Source/WebCore/dom/ContainerNodeAlgorithms.h:319
&gt; +    Element* element = (shouldIncludeRoot == IncludeRoot &amp;&amp; root-&gt;isElementNode()) ? static_cast&lt;Element*&gt;(root) : ElementTraversal::firstWithin(root);

I don&apos;t have toElement?

&gt; Source/WebCore/dom/NodeTraversal.h:102
&gt; +template &lt;class NodeType&gt;
&gt; +inline Element* traverseNextElementTemplate(NodeType* current, const Node* stayWithin)
&gt; +{
&gt; +    Node* node = NodeTraversal::next(current, stayWithin);
&gt; +    while (node &amp;&amp; !node-&gt;isElementNode())
&gt; +        node = NodeTraversal::nextSkippingChildren(node, stayWithin);
&gt; +    return static_cast&lt;Element*&gt;(node);
&gt; +}

I&apos;m sad that we have to duplicate the template like this. Can we had a boolean template argument and share the code between two?

&gt; Source/WebCore/dom/NodeTraversal.h:126
&gt; +template &lt;class NodeType&gt;
&gt; +inline Element* traverseNextElementSkippingChildrenTemplate(NodeType* current, const Node* stayWithin)
&gt; +{
&gt; +    Node* node = NodeTraversal::nextSkippingChildren(current, stayWithin);
&gt; +    while (node &amp;&amp; !node-&gt;isElementNode())
&gt; +        node = NodeTraversal::nextSkippingChildren(node, stayWithin);
&gt; +    return static_cast&lt;Element*&gt;(node);
&gt; +}

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788843</commentid>
    <comment_count>3</comment_count>
      <attachid>178882</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 15:10:51 -0800</bug_when>
    <thetext>Comment on attachment 178882
patch

Attachment 178882 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15277319</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788855</commentid>
    <comment_count>4</comment_count>
      <attachid>178892</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-11 15:23:27 -0800</bug_when>
    <thetext>Created attachment 178892
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788858</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-11 15:24:56 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I&apos;m sad that we have to duplicate the template like this. Can we had a boolean template argument and share the code between two?

I didn&apos;t do this as the templates get pretty messy and hard to understand if we also want optimal code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789114</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-11 19:15:06 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/137406</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178882</attachid>
            <date>2012-12-11 14:44:07 -0800</date>
            <delta_ts>2012-12-11 15:23:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>element-traversal-5.patch</filename>
            <type>text/plain</type>
            <size>56377</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzM0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDEyLTEyLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgRWxlbWVudC1zcGVjaWZp
YyB0cmF2ZXJzYWwgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDQ2ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBuIG1hbnkgY2FzZXMgd2hlcmUgd2UgdXNlIE5vZGVUcmF2ZXJzYWwgd2Ug
cmVhbGx5IG9ubHkgd2FudCBFbGVtZW50cy4gQnkgaGF2aW5nCisgICAgICAgIEVsZW1lbnQgc3Bl
Y2lmaWMgaXRlcmF0aW9uIGZ1bmN0aW9ucyB3ZSBjYW4gdGlnaHRlbiB0aGUgY29kZSBhbmQgbWFr
ZSBpdCBmYXN0ZXIgdG9vLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBFbGVtZW50VHJhdmVy
c2FsIG5hbWVzcGFjZSwgc2ltaWxhciB0byBOb2RlVHJhdmVyc2FsLiBJdCBhbHNvIHN3aXRjaGVz
CisgICAgICAgIGJ1bmNoIG9mIE5vZGVUcmF2ZXJzYWwgY2FsbCBzaXRlcyB0aGF0IG9idmlvdXNs
eSBvbmx5IGNhcmUgYWJvdXQgZWxlbWVudHMgdG8gdXNpbmcKKyAgICAgICAgdGhlIG5ldyBpbnRl
cmZhY2UuCisgICAgICAgIAorICAgICAgICBUaGlzIHNob3VsZCBiZSBhIHNwZWVkdXAgdG9vIGFz
IHdlIGF2b2lkIG51bWJlciBvZiBicmFuY2hlcyBieSBub3QgaGF2aW5nIHRvIGxvb2sKKyAgICAg
ICAgZm9yIGNoaWxkcmVuIG9mIG5vbi1Db250YWluZXJOb2RlcyBhbmQgYnkgYWxsb3dpbmcgdXNl
IG9mIENvbnRhaW5lck5vZGUgc3BlY2lmaWMKKyAgICAgICAgYWNjZXNzb3JzLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEltYWdlTWFwQ2hpbGRyZW4p
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bGlua0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmFsbFZp
c2l0ZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjp2
aXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFs
eXNpcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2NvcGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRh
dGVTdHlsZSk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVjdG9yOjpjb2xsZWN0RGVzY2VuZGFudCk6
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRl
QmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0Jhc2VFbGVtZW50
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpmaXJzdEVsZW1lbnRDaGlsZCk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmNvbGxlY3RT
ZWxlY3RGZWF0dXJlU2V0RnJvbSk6CisgICAgICAgICogZG9tL05vZGVUcmF2ZXJzYWwuaDoKKyAg
ICAgICAgKEVsZW1lbnRUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjp0cmF2ZXJzZU5leHRFbGVtZW50VGVtcGxhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6bmV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbik6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50VHJhdmVyc2FsOjp0cmF2ZXJzZU5leHRFbGVtZW50U2tpcHBpbmdDaGlsZHJlblRlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKToKKyAgICAgICAgKE5vZGVUcmF2ZXJzYWwpOgorICAgICAgICAqIGRvbS9UcmVlU2Nv
cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmZpbmRBbmNob3IpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXBoVW5kZXJOZXdFbGVtZW50KToKKyAgICAgICAg
KiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yRm9y
bSk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29t
cGxldGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3Rh
dGVVbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6bGVnZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50
c0lmTmVlZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXgpOgorICAgICAgICAq
IGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGFiZWxF
bGVtZW50Ojpjb250cm9sKToKKyAgICAgICAgKiBodG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMZWdlbmRFbGVtZW50Ojphc3NvY2lhdGVkQ29udHJvbCk6
CisgICAgICAgICogaHRtbC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudCk6CisgICAgICAgICogaHRtbC9IVE1MTmFtZUNv
bGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDb2xsZWN0aW9uOjp2aXJ0
dWFsSXRlbUFmdGVyKToKKyAgICAgICAgKiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBsZXQpOgor
ICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcyk6CisgICAgICAgICogaHRtbC9zaGFk
b3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3RD
b250ZW50RGlzdHJpYnV0aW9uRGF0YTo6ZW5zdXJlSW5zZXJ0aW9uUG9pbnRMaXN0KToKKyAgICAg
ICAgKiBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0Nv
bnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRpZGF0ZUluQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0SW5QcmVPcmRl
cik6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6Y29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlTGlzdCk6CisgICAg
ICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGVkRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlbW92ZURpc2FsbG93ZWRFbGVtZW50c0Zyb21TdWJ0cmVlKToKKyAg
ICAgICAgKiBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcyk6CisK
IDIwMTItMTItMTEgIE1pY2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgogCiAgICAgICAg
IFtKU0NdIEFkZCB0ZXN0cyBmb3IgZXhwbGljaXQgc2VyaWFsaXphdGlvbiB2YWx1ZXMKQEAgLTE0
MjgsNiArMTUyMywxNSBAQAogCiAgICAgICAgIE5vdCByZXZpZXdlZC4KICAgICAgICAgCisgICAg
ICAgIEFub3RoZXIgYnVpbGQgZml4LgorCisgICAgICAgICogaHRtbC9IVE1MUHJvcGVydGllc0Nv
bGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dE5vZGVXaXRoUHJvcGVydHkpOgor
CisyMDEyLTEyLTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBOb3QgcmV2aWV3ZWQuCisgICAgICAgIAogICAgICAgICBCdWlsZCBmaXguCiAKICAgICAgICAg
KiBodG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHA6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NTcsOCAr
MjY1Nyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2UKICAgICBp
ZiAoIW1hcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChOb2RlKiBjdXJyZW50ID0gbWFw
LT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1
cnJlbnQsIG1hcCkpIHsKLSAgICAgICAgCisgICAgZm9yIChFbGVtZW50KiBjdXJyZW50ID0gRWxl
bWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4obWFwKTsgY3VycmVudDsgY3VycmVudCA9IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHQoY3VycmVudCwgbWFwKSkgewogICAgICAgICAvLyBhZGQgYW4gPGFy
ZWE+IGVsZW1lbnQgZm9yIHRoaXMgY2hpbGQgaWYgaXQgaGFzIGEgbGluawogICAgICAgICBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShhcmVhVGFnKSAmJiBjdXJyZW50LT5pc0xpbmsoKSkgewogICAg
ICAgICAgICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9iamVjdCA9IHN0YXRpY19j
YXN0PEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqPihheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKEltYWdlTWFwTGlua1JvbGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDE4ICsyMDcsMTQgQEAgdm9pZCBT
ZWxlY3RvckNoZWNrZXI6OmNvbGxlY3RJZGVudGlmaWVySAogICAgICpoYXNoID0gMDsKIH0KIAot
c3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcqIGxpbmtBdHRyaWJ1dGUoTm9kZSogbm9k
ZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKEVsZW1l
bnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0xpbmsoKSkKKyAgICBpZiAoIWVsZW1l
bnQtPmlzTGluaygpKQogICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VSVChub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSk7CiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0
dXJuICZlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKICAgICBpZiAoZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAmZWxlbWVudC0+Z2V0QXR0cmlidXRl
KFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKLQogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjI1LDkg
KzEyMjEsOSBAQCB2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhCiB7CiAg
ICAgaWYgKG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkK
LSAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBmb3IgKEVsZW1l
bnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihtX2RvY3VtZW50KTsg
ZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCkpIHsKKyAg
ICAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQorICAgICAgICAgICAgZWxlbWVudC0+c2V0TmVl
ZHNTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KIApAQCAtMTIzNSwxNCArMTIzMSwxNCBAQCB2b2lk
IFNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlCiB7CiAgICAgaWYgKCFtX2xpbmtz
Q2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5jb250YWlucyh2aXNpdGVkSGFzaCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKG1fZG9jdW1lbnQpOyBlbGVtZW50OyBlbGVtZW50
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50KSkgewogICAgICAgICBMaW5rSGFzaCBo
YXNoID0gMDsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYVRhZykpCi0gICAgICAgICAg
ICBoYXNoID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2RlKS0+dmlzaXRlZExp
bmtIYXNoKCk7Ci0gICAgICAgIGVsc2UgaWYgKGNvbnN0IEF0b21pY1N0cmluZyogYXR0ciA9IGxp
bmtBdHRyaWJ1dGUobm9kZSkpCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGFUYWcp
KQorICAgICAgICAgICAgaGFzaCA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4oZWxl
bWVudCktPnZpc2l0ZWRMaW5rSGFzaCgpOworICAgICAgICBlbHNlIGlmIChjb25zdCBBdG9taWNT
dHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpKQogICAgICAgICAgICAgaGFzaCA9
IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRyKTsKICAgICAgICAg
aWYgKGhhc2ggPT0gdmlzaXRlZEhhc2gpCi0gICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFs
eXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0
aW9uQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4
LDcgQEAgdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjphbmFseXplUwogICAgIH0KIH0K
IAotc3RhdGljIGJvb2wgZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3Blcyhjb25zdCBTdHlsZWRF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29w
ZXMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3BlcykKK3N0YXRp
YyBib29sIGVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29wZXMoY29uc3QgRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBjb25zdCBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCiB7CiAgICAgaWYgKCFpZFNjb3Bl
cy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzSUQoKSAmJiBpZFNjb3Blcy5jb250YWlucyhlbGVt
ZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMTE3LDIwICsxMTcsMTUgQEAgdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjpp
bnZhbGlkYQogICAgIEFTU0VSVCghbV9kaXJ0aWVzQWxsU3R5bGUpOwogICAgIGlmIChtX2lkU2Nv
cGVzLmlzRW1wdHkoKSAmJiBtX2NsYXNzU2NvcGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChu
b2RlKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKLSAgICAgICAg
ICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oZG9jdW1lbnQpOworICAgIHdoaWxlIChlbGVtZW50KSB7
CiAgICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2NvcGVzKGVsZW1lbnQsIG1faWRT
Y29wZXMsIG1fY2xhc3NTY29wZXMpKSB7CiAgICAgICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgICAgICAgICAvLyBUaGUgd2hvbGUgc3VidHJlZSBpcyBub3cgaW52
YWxpZGF0ZWQsIHdlIGNhbiBza2lwIHRvIHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSk7CisgICAgICAg
ICAgICBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZWxl
bWVudCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKKyAgICAgICAgZWxlbWVudCA9IEVsZW1lbnRUcmF2
ZXJzYWw6Om5leHQoZWxlbWVudCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkocmV2aXNpb24gMTM3MzI5KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxNiwxMCArMzE2LDggQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQgQ2hpbGRGcmFtZURp
c2Nvbm5lY3Rvcjo6Y29sbGVjdERlc2NlbmRhbnQoTm9kZSogcm9vdCwgU2hvdWxkSW5jbHVkZVJv
b3Qgc2hvdWxkSW5jbHVkZVJvb3QpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc2hvdWxkSW5j
bHVkZVJvb3QgPT0gSW5jbHVkZVJvb3QgPyByb290IDogcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2Rl
OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCByb290KSkgewotICAgICAgICBpZiAo
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSAoc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5jbHVkZVJvb3QgJiYgcm9vdC0+aXNFbGVtZW50Tm9k
ZSgpKSA/IHN0YXRpY19jYXN0PEVsZW1lbnQqPihyb290KSA6IEVsZW1lbnRUcmF2ZXJzYWw6OmZp
cnN0V2l0aGluKHJvb3QpOworICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dChlbGVtZW50LCByb290KSkgewogICAgICAgICBpZiAoZWxlbWVudC0+aGFz
Q3VzdG9tQ2FsbGJhY2tzKCkgJiYgZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQogICAg
ICAgICAgICAgbV9saXN0LmFwcGVuZCh0b0ZyYW1lT3duZXJFbGVtZW50KGVsZW1lbnQpKTsKICAg
ICAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTAsMTUgKzc1MCwxMiBA
QCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvCiB7CiAgICAgQVNTRVJU
KHNjb3BlKTsKICAgICBOb2RlKiByb290Tm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpOwotICAgIGZv
ciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChub2RlLCByb290Tm9kZSkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihyb290Tm9kZSk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIHJvb3ROb2RlKSkgewogICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhY2Nlc3Nr
ZXlBdHRyKTsKICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
bV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVtZW50KTsKIAot
ICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBub2RlLT55b3VuZ2VzdFNoYWRvd1Jvb3Qo
KTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICBmb3IgKFNo
YWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsgcm9v
dCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQogICAgICAgICAgICAgYnVpbGRBY2Nlc3NLZXlN
YXAocm9vdCk7CiAgICAgfQogfQpAQCAtODQ0LDcgKzg0MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZChib29sIGNoYW4KIHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNo
YW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENv
dW50RGVsdGEpOwogICAgIAotICAgIEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9IGZpcnN0
RWxlbWVudENoaWxkKHRoaXMpOworICAgIEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOwogICAgIGlmIChuZXdEb2N1bWVudEVs
ZW1lbnQgPT0gbV9kb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RvY3Vt
ZW50RWxlbWVudCA9IG5ld0RvY3VtZW50RWxlbWVudDsKQEAgLTI2NjcsOSArMjY2NCw5IEBAIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwoKQogICAgIGlmICghZXF1YWxJZ25vcmluZ0ZyYWdt
ZW50SWRlbnRpZmllcihvbGRCYXNlVVJMLCBtX2Jhc2VVUkwpKSB7CiAgICAgICAgIC8vIEJhc2Ug
VVJMIGNoYW5nZSBjaGFuZ2VzIGFueSByZWxhdGl2ZSB2aXNpdGVkIGxpbmtzLgogICAgICAgICAv
LyBGSVhNRTogVGhlcmUgYXJlIG90aGVyIFVSTHMgaW4gdGhlIHRyZWUgdGhhdCB3b3VsZCBuZWVk
IHRvIGJlIHJlLWV2YWx1YXRlZCBvbiBkeW5hbWljIGJhc2UgVVJMIGNoYW5nZS4gU3R5bGUgc2hv
dWxkIGJlIGludmFsaWRhdGVkIHRvby4KLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RD
aGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAgICAg
ICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYVRhZykpCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2RlKS0+aW52YWxpZGF0ZUNhY2hlZFZpc2l0ZWRM
aW5rSGFzaCgpOworICAgICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVy
c2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KGFUYWcpKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4o
ZWxlbWVudCktPmludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTI2ODUsMTUgKzI2ODIsMTUgQEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0Jh
c2VFbGVtZW50KCkKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBocmVmIGF0dHJpYnV0ZSBpbiBhIGJh
c2UgZWxlbWVudCBhbmQgdGhlIGZpcnN0IHRhcmdldCBhdHRyaWJ1dGUgaW4gYSBiYXNlIGVsZW1l
bnQuCiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBocmVmID0gMDsKICAgICBjb25zdCBBdG9taWNT
dHJpbmcqIHRhcmdldCA9IDA7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQoKS0+Zmly
c3RDaGlsZCgpOyBub2RlICYmICghaHJlZiB8fCAhdGFyZ2V0KTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYmFzZVRhZykp
IHsKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdp
dGhpbih0aGlzKTsgZWxlbWVudCAmJiAoIWhyZWYgfHwgIXRhcmdldCk7IGVsZW1lbnQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKGJhc2VUYWcpKSB7CiAgICAgICAgICAgICBpZiAoIWhyZWYpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUpLT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7
CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAg
ICAgaHJlZiA9ICZ2YWx1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghdGFyZ2V0
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZSh0YXJnZXRBdHRyKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgp
KQogICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSAmdmFsdWU7CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAkocmV2aXNpb24g
MTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNywxMCArMTI3LDcgQEAgaW5saW5lIEVsZW1lbnQqIERvY3VtZW50
T3JkZXJlZE1hcDo6Z2V0KAogCiAgICAgaWYgKG1fZHVwbGljYXRlQ291bnRzLmNvbnRhaW5zKGtl
eSkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub2RlIHRoYXQg
bWF0Y2hlczsgaXRlcmF0ZSB0byBmaW5kIHRoZSBmaXJzdCBvbmUuCi0gICAgICAgIGZvciAoTm9k
ZSogbm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGZvciAoZWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNjb3BlLT5yb290Tm9kZSgpKTsgZWxlbWVu
dDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCkpIHsKICAgICAgICAg
ICAgIGlmICgha2V5TWF0Y2hlcyhrZXksIGVsZW1lbnQpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3ZlKGtleSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRl
ICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJQc2V1ZG9FbGVtZW50LmgiCkBAIC0yMTM2LDcgKzIxMzcsNyBAQCBQc2V1ZG9FbGVtZW50KiBF
bGVtZW50OjphZnRlclBzZXVkb0VsZW1lCiAvLyBFbGVtZW50VHJhdmVyc2FsIEFQSQogRWxlbWVu
dCogRWxlbWVudDo6Zmlyc3RFbGVtZW50Q2hpbGQoKSBjb25zdAogewotICAgIHJldHVybiBXZWJD
b3JlOjpmaXJzdEVsZW1lbnRDaGlsZCh0aGlzKTsKKyAgICByZXR1cm4gRWxlbWVudFRyYXZlcnNh
bDo6Zmlyc3RXaXRoaW4odGhpcyk7CiB9CiAKIEVsZW1lbnQqIEVsZW1lbnQ6Omxhc3RFbGVtZW50
Q2hpbGQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAxMzczMjkpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OTcsMTUg
Kzc5Nyw2IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZUludmFsaWRBdHRyaWIKICNlbmRp
ZgogfQogCi1pbmxpbmUgRWxlbWVudCogZmlyc3RFbGVtZW50Q2hpbGQoY29uc3QgQ29udGFpbmVy
Tm9kZSogY29udGFpbmVyKQotewotICAgIEFTU0VSVF9BUkcoY29udGFpbmVyLCBjb250YWluZXIp
OwotICAgIE5vZGUqIGNoaWxkID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUg
KGNoaWxkICYmICFjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY2hpbGQp
OwotfQotCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGF0dHJpYnV0ZURhdGEoKSAmJiBhdHRyaWJ1dGVEYXRhKCktPmhhc0lEKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw4ICsy
MjEsOCBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OmVuc3VyZVNlbGVjdEZlYXR1cmVTCiB2b2lkIEVs
ZW1lbnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJvbShTaGFkb3dSb290KiByb290
KQogewogICAgIGlmIChyb290LT5oYXNFbGVtZW50U2hhZG93KCkpIHsKLSAgICAgICAgZm9yIChO
b2RlKiBub2RlID0gcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlKSkgewotICAgICAgICAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIGVsZW1lbnRT
aGFkb3cgPSBub2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQobm9kZSktPnNoYWRvdygp
IDogMCkgeworICAgICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpmaXJzdFdpdGhpbihyb290KTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6
Om5leHQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBlbGVtZW50
U2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCkpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50U2hh
ZG93LT5lbnN1cmVTZWxlY3RGZWF0dXJlU2V0Q29sbGVjdGVkKCk7CiAgICAgICAgICAgICAgICAg
bV9zZWxlY3RGZWF0dXJlcy5hZGQoZWxlbWVudFNoYWRvdy0+bV9zZWxlY3RGZWF0dXJlcyk7CiAg
ICAgICAgICAgICB9CkBAIC0yMzAsOSArMjMwLDkgQEAgdm9pZCBFbGVtZW50U2hhZG93Ojpjb2xs
ZWN0U2VsZWN0RmVhdHVyZQogICAgIH0KIAogICAgIGlmIChyb290LT5oYXNDb250ZW50RWxlbWVu
dCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgICAgIGlmIChp
c0hUTUxDb250ZW50RWxlbWVudChub2RlKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IENTU1Nl
bGVjdG9yTGlzdCYgbGlzdCA9IHRvSFRNTENvbnRlbnRFbGVtZW50KG5vZGUpLT5zZWxlY3Rvckxp
c3QoKTsKKyAgICAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6
Zmlyc3RXaXRoaW4ocm9vdCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoaXNIVE1MQ29udGVudEVsZW1lbnQoZWxl
bWVudCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIGxpc3QgPSB0
b0hUTUxDb250ZW50RWxlbWVudChlbGVtZW50KS0+c2VsZWN0b3JMaXN0KCk7CiAgICAgICAgICAg
ICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBsaXN0LmZpcnN0KCk7IHNlbGVjdG9y
OyBzZWxlY3RvciA9IGxpc3QubmV4dChzZWxlY3RvcikpCiAgICAgICAgICAgICAgICAgICAgIG1f
c2VsZWN0RmVhdHVyZXMuY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKHNlbGVjdG9yKTsgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L05vZGVUcmF2ZXJzYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRy
YXZlcnNhbC5oCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRy
YXZlcnNhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMjcgQEAKICNpZm5kZWYgTm9k
ZVRyYXZlcnNhbF9oCiAjZGVmaW5lIE5vZGVUcmF2ZXJzYWxfaAogCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE5vZGU7Ci1jbGFzcyBDb250YWlu
ZXJOb2RlOworbmFtZXNwYWNlIEVsZW1lbnRUcmF2ZXJzYWwgeworCisvLyBGaXJzdCBlbGVtZW50
IGNoaWxkIG9mIHRoZSBub2RlLgorRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgTm9kZSopOwor
RWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgQ29udGFpbmVyTm9kZSopOworLy8gUHJlLW9yZGVy
IHRyYXZlcnNhbCBza2lwcGluZyBub24tZWxlbWVudCBub2Rlcy4KK0VsZW1lbnQqIG5leHQoY29u
c3QgTm9kZSopOworRWxlbWVudCogbmV4dChjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdp
dGhpbik7CitFbGVtZW50KiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqKTsKK0VsZW1lbnQqIG5l
eHQoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOworLy8gTGlr
ZSBuZXh0LCBidXQgc2tpcHMgY2hpbGRyZW4uCitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJl
bihjb25zdCBOb2RlKik7CitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2Rl
KiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJl
bihjb25zdCBDb250YWluZXJOb2RlKik7CitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihj
b25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CisKK30KIAogbmFt
ZXNwYWNlIE5vZGVUcmF2ZXJzYWwgewogCkBAIC02MCw2ICs3Nyw1OSBAQCBOb2RlKiBuZXh0UG9z
dE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBOCiBOb2RlKiBwcmV2aW91c1Bvc3RPcmRlcihjb25z
dCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOwogTm9kZSogcHJldmlvdXNTa2lw
cGluZ0NoaWxkcmVuUG9zdE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGlu
ID0gMCk7CiAKK30KKworbmFtZXNwYWNlIEVsZW1lbnRUcmF2ZXJzYWwgeworCit0ZW1wbGF0ZSA8
Y2xhc3MgTm9kZVR5cGU+CitpbmxpbmUgRWxlbWVudCogdHJhdmVyc2VOZXh0RWxlbWVudFRlbXBs
YXRlKE5vZGVUeXBlKiBjdXJyZW50KQoreworICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KGN1cnJlbnQpOworICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihu
b2RlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworfQoraW5saW5l
IEVsZW1lbnQqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJh
dmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgRWxlbWVudCogbmV4
dChjb25zdCBOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHRFbGVtZW50VGVtcGxh
dGUoY3VycmVudCk7IH0KKwordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgoraW5saW5lIEVsZW1l
bnQqIHRyYXZlcnNlTmV4dEVsZW1lbnRUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChjdXJyZW50LCBzdGF5V2l0aGluKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQorICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4obm9kZSwgc3RheVdpdGhpbik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKK30KK2lubGluZSBFbGVtZW50KiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqIGN1
cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dEVsZW1l
bnRUZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5saW5lIEVsZW1lbnQqIG5leHQo
Y29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJh
dmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CitpbmxpbmUg
RWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyByZXR1
cm4gdHJhdmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQsIGN1cnJlbnQpOyB9Citpbmxp
bmUgRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJh
dmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQsIGN1cnJlbnQpOyB9CisKK3RlbXBsYXRl
IDxjbGFzcyBOb2RlVHlwZT4KK2lubGluZSBFbGVtZW50KiB0cmF2ZXJzZU5leHRFbGVtZW50U2tp
cHBpbmdDaGlsZHJlblRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQoreworICAgIE5vZGUqIG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihjdXJyZW50KTsKKyAgICB3
aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKTsKK30KK2lubGluZSBFbGVtZW50KiBuZXh0U2tpcHBpbmdD
aGlsZHJlbihjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5l
eHRFbGVtZW50U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgRWxl
bWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSogY3VycmVudCkgeyByZXR1cm4g
dHJhdmVyc2VOZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShjdXJyZW50KTsgfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CitpbmxpbmUgRWxlbWVudCogdHJhdmVyc2VOZXh0
RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oY3VycmVudCwgc3RheVdpdGhpbik7CisgICAgd2hpbGUgKG5vZGUg
JiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Cit9CitpbmxpbmUgRWxlbWVudCogbmV4dFNraXBwaW5n
Q2hpbGRyZW4oY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdp
dGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0
ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5saW5lIEVsZW1lbnQqIG5leHRTa2lwcGluZ0No
aWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0
dXJuIHRyYXZlcnNlTmV4dEVsZW1lbnRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoY3VycmVudCwg
c3RheVdpdGhpbik7IH0KK30KKworbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgeworCiBOb2RlKiBu
ZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqKTsKIE5vZGUqIG5leHRBbmNlc3RvclNpYmxp
bmcoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlLmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw5ICsxODcsOSBAQCBIVE1MTGFi
ZWxFbGVtZW50KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVuCiAgICAgaWYgKCFtX2xhYmVsc0J5Rm9y
QXR0cmlidXRlKSB7CiAgICAgICAgIC8vIFBvcHVsYXRlIHRoZSBtYXAgb24gZmlyc3QgYWNjZXNz
LgogICAgICAgICBtX2xhYmVsc0J5Rm9yQXR0cmlidXRlID0gYWRvcHRQdHIobmV3IERvY3VtZW50
T3JkZXJlZE1hcCk7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAobm9k
ZS0+aGFzVGFnTmFtZShsYWJlbFRhZykpIHsKLSAgICAgICAgICAgICAgICBIVE1MTGFiZWxFbGVt
ZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihub2RlKTsKKyAgICAg
ICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4o
cm9vdE5vZGUoKSk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVs
ZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShsYWJlbFRhZykp
IHsKKyAgICAgICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0
PEhUTUxMYWJlbEVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGZvclZhbHVlID0gbGFiZWwtPmZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cik7CiAg
ICAgICAgICAgICAgICAgaWYgKCFmb3JWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ICAgIGFkZExhYmVsKGZvclZhbHVlLCBsYWJlbCk7CkBAIC0yMzEsOSArMjMxLDkgQEAgRWxlbWVu
dCogVHJlZVNjb3BlOjpmaW5kQW5jaG9yKGNvbnN0IFN0cgogICAgICAgICByZXR1cm4gMDsKICAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGdldEVsZW1lbnRCeUlkKG5hbWUpKQogICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZSgpOyBub2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAgICAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZShhVGFnKSkgewotICAgICAgICAgICAgSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9
IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4obm9kZSk7CisgICAgZm9yIChFbGVtZW50
KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdE5vZGUoKSk7IGVs
ZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQpKSB7CisgICAg
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGFUYWcpKSB7CisgICAgICAgICAgICBIVE1MQW5j
aG9yRWxlbWVudCogYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihlbGVt
ZW50KTsKICAgICAgICAgICAgIGlmIChyb290Tm9kZSgpLT5kb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIFF1aXJrcyBtb2RlLCBjYXNlIGluc2Vuc2l0aXZl
IGNvbXBhcmlzb24gb2YgbmFtZXMuCiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGFuY2hvci0+bmFtZSgpLCBuYW1lKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAyNSw3ICsxMDI1LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xvbmVQ
YXJhZ3JhcAogICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgp
OwogICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihzdGFydE5vZGUsIG91dGVyTm9kZS5nZXQoKSk7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCBvdXRlck5vZGUuZ2V0KCkpKSB7CiAg
ICAgICAgICAgICAvLyBNb3ZlIGxhc3ROb2RlIHVwIGluIHRoZSB0cmVlIGFzIG11Y2ggYXMgbm9k
ZSB3YXMgbW92ZWQgdXAgaW4gdGhlCi0gICAgICAgICAgICAvLyB0cmVlIGJ5IE5vZGVUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nLCBzbyB0aGF0IHRoZSByZWxhdGl2ZSBkZXB0aCBiZXR3ZWVuCisgICAg
ICAgICAgICAvLyB0cmVlIGJ5IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuLCBz
byB0aGF0IHRoZSByZWxhdGl2ZSBkZXB0aCBiZXR3ZWVuCiAgICAgICAgICAgICAvLyBub2RlIGFu
ZCB0aGUgb3JpZ2luYWwgc3RhcnQgbm9kZSBpcyBtYWludGFpbmVkIGluIHRoZSBjbG9uZS4KICAg
ICAgICAgICAgIHdoaWxlIChzdGFydE5vZGUtPnBhcmVudE5vZGUoKSAhPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnBhcmVudE5v
ZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDcgKzUw
NCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAg
Ly8gaGFuZGxlIGRlbGV0aW5nIGFsbCBub2RlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHNlbGVjdGVk
CiAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0
ZWROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub2RlLmdldCgpKSwgbV9kb3duc3RyZWFtRW5kKSA+PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcganVzdCBibGV3IHBh
c3QgdGhlIGVuZCBwb3NpdGlvbiwgc28gc3RvcCBkZWxldGluZworICAgICAgICAgICAgICAgIC8v
IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuIGp1c3QgYmxldyBwYXN0IHRoZSBl
bmQgcG9zaXRpb24sIHNvIHN0b3AgZGVsZXRpbmcKICAgICAgICAgICAgICAgICBub2RlID0gMDsK
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgp
LT5pc0Rlc2NlbmRhbnRPZihub2RlLmdldCgpKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxO
b2RlPiBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUu
Z2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJ
KHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUzLDEzICsxOTUzLDE0IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGUKIC8vIFNjYW5zIGxvZ2ljYWxseSBmb3J3YXJk
IGZyb20gInN0YXJ0IiwgaW5jbHVkaW5nIGFueSBjaGlsZCBmcmFtZXMuCiBzdGF0aWMgSFRNTEZv
cm1FbGVtZW50KiBzY2FuRm9yRm9ybShOb2RlKiBzdGFydCkKIHsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAg
ICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgIGlmIChub2RlLT5p
c0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4obm9kZSktPmZvcm0oKTsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZnJhbWVU
YWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgewotICAgICAgICAgICAgTm9kZSog
Y2hpbGREb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4obm9kZSkt
PmNvbnRlbnREb2N1bWVudCgpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGFydCAmJiBzdGFy
dC0+aXNFbGVtZW50Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHN0YXJ0KSA6IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHQoc3RhcnQpOworICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50KSkgeworICAgICAgICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShmb3JtVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1l
bnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihl
bGVtZW50KS0+Zm9ybSgpOworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CisgICAgICAgICAgICBOb2Rl
KiBjaGlsZERvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihlbGVt
ZW50KS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoSFRNTEZvcm1FbGVtZW50
KiBmcmFtZVJlc3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jdW1lbnQpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmcmFtZVJlc3VsdDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwyNCArOTYsMjAgQEAgcHJpdmF0ZToKICAg
ICBTdHJpbmcgbV92YWx1ZTsKIH07CiAKLXN0YXRpYyB2b2lkIGNvbXBsZXRlVVJMcyhOb2RlKiBu
b2RlLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwpCitzdGF0aWMgdm9pZCBjb21wbGV0ZVVSTHMoRG9j
dW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCkKIHsKICAgICBW
ZWN0b3I8QXR0cmlidXRlQ2hhbmdlPiBjaGFuZ2VzOwogCiAgICAgS1VSTCBwYXJzZWRCYXNlVVJM
KFBhcnNlZFVSTFN0cmluZywgYmFzZVVSTCk7CiAKLSAgICBOb2RlKiBlbmQgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBub2Rl
OyBuICE9IGVuZDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKLSAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIGlmICghZS0+aGFzQXR0cmlidXRlcygpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZS0+
YXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRl
ID0gZS0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+aXNVUkxBdHRy
aWJ1dGUoKmF0dHJpYnV0ZSkgJiYgIWF0dHJpYnV0ZS0+dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKEF0dHJpYnV0ZUNoYW5nZShlLCBhdHRyaWJ1
dGUtPm5hbWUoKSwgS1VSTChwYXJzZWRCYXNlVVJMLCBhdHRyaWJ1dGUtPnZhbHVlKCkpLnN0cmlu
ZygpKSk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oZnJhZ21lbnQpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxl
bWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCBmcmFnbWVudCkpIHsKKyAgICAgICAgaWYgKCFl
bGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAg
ICAgICBpZiAoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUoKmF0dHJpYnV0ZSkgJiYgIWF0dHJpYnV0
ZS0+dmFsdWUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoQXR0
cmlidXRlQ2hhbmdlKGVsZW1lbnQsIGF0dHJpYnV0ZS0+bmFtZSgpLCBLVVJMKHBhcnNlZEJhc2VV
UkwsIGF0dHJpYnV0ZS0+dmFsdWUoKSkuc3RyaW5nKCkpKTsKICAgICAgICAgfQogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw5IEBAIFBhc3NSZWZQdHI8SFRNTEZpZWxk
U2V0RWxlbWVudD4gSFRNTEZpZWwKIAogdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjppbnZhbGlk
YXRlRGlzYWJsZWRTdGF0ZVVuZGVyKEVsZW1lbnQqIGJhc2UpCiB7Ci0gICAgZm9yIChOb2RlKiBu
b2RlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChub2RlLCBiYXNlKSkgewotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRv
RWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihub2RlKS0+YW5jZXN0b3JEaXNhYmxlZFN0
YXRlV2FzQ2hhbmdlZCgpOworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2
ZXJzYWw6OmZpcnN0V2l0aGluKGJhc2UpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dChlbGVtZW50LCBiYXNlKSkgeworICAgICAgICBpZiAoZWxlbWVudC0+aXNGb3Jt
Q29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqPihlbGVtZW50KS0+YW5jZXN0b3JEaXNhYmxlZFN0YXRlV2FzQ2hhbmdlZCgpOwog
ICAgIH0KIH0KIApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmRp
c2FibGVkQXR0cmliCiB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5n
ZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpj
aGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdl
LCBjaGlsZENvdW50RGVsdGEpOwotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGZpcnN0RWxl
bWVudENoaWxkKCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxp
bmcoKSkgeworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZp
cnN0V2l0aGluKHRoaXMpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oZWxlbWVudCwgdGhpcykpIHsKICAgICAgICAgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUobGVnZW5kVGFnKSkKICAgICAgICAgICAgIGludmFsaWRhdGVEaXNhYmxlZFN0
YXRlVW5kZXIoZWxlbWVudCk7CiAgICAgfQpAQCAtOTEsOSArOTEsOSBAQCBSZW5kZXJPYmplY3Qq
IEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNyZWF0CiAKIEhUTUxMZWdlbmRFbGVtZW50KiBIVE1MRmll
bGRTZXRFbGVtZW50OjpsZWdlbmQoKSBjb25zdAogewotICAgIGZvciAoRWxlbWVudCogbm9kZSA9
IGZpcnN0RWxlbWVudENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0RWxlbWVudFNpYmxp
bmcoKSkgewotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShsZWdlbmRUYWcpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50Kj4obm9kZSk7CisgICAg
Zm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMp
OyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihj
aGlsZCwgdGhpcykpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnQqPihjaGls
ZCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTEzLDE5ICsxMTMsMTYgQEAgdm9pZCBI
VE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudAogCiAgICAgbV9hc3NvY2lhdGVkRWxl
bWVudHMuY2xlYXIoKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpIHsKLSAgICAgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBpZiAobm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7Ci0gICAgICAgICAgICBtX2Fzc29j
aWF0ZWRFbGVtZW50cy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihub2Rl
KSk7CisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RX
aXRoaW4odGhpcyk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVs
ZW1lbnQsIHRoaXMpKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykpIHsKKyAgICAgICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmFwcGVuZChzdGF0aWNfY2Fz
dDxIVE1MT2JqZWN0RWxlbWVudCo+KGVsZW1lbnQpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF0b0VsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgIGlmICghZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmFw
cGVuZChzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSkpOworICAgICAg
ICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9s
RWxlbWVudCo+KGVsZW1lbnQpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDM2ICs1MDUs
MzYgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogCiB1bnNpZ25l
ZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXgoRm9ybUFzc29jaWF0ZWRFbGVtZW50
KiBhc3NvY2lhdGVkRWxlbWVudCkKIHsKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRN
TEVsZW1lbnQoYXNzb2NpYXRlZEVsZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBhc3NvY2lhdGVk
SFRNTEVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFzc29jaWF0ZWRFbGVtZW50KTsKICAgICAvLyBU
cmVhdHMgc2VwYXJhdGVseSB0aGUgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaGFzIHRoZSBmb3Jt
IGF0dHJpYnV0ZQogICAgIC8vIGZvciBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uLgotICAgIGlm
IChlbGVtZW50LT5mYXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgewotICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBwb3NpdGlvbiA9IGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQpOworICAg
IGlmIChhc3NvY2lhdGVkSFRNTEVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZm9ybUF0dHIpKSB7
CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gY29tcGFyZURvY3VtZW50UG9zaXRp
b24oYXNzb2NpYXRlZEhUTUxFbGVtZW50KTsKICAgICAgICAgaWYgKHBvc2l0aW9uICYgRE9DVU1F
TlRfUE9TSVRJT05fUFJFQ0VESU5HKSB7CiAgICAgICAgICAgICArK21fYXNzb2NpYXRlZEVsZW1l
bnRzQmVmb3JlSW5kZXg7CiAgICAgICAgICAgICArK21fYXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJ
bmRleDsKLSAgICAgICAgICAgIHJldHVybiBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5k
ZXhXaXRoRm9ybUF0dHJpYnV0ZShlbGVtZW50LCAwLCBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9y
ZUluZGV4IC0gMSk7CisgICAgICAgICAgICByZXR1cm4gSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxl
bWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoYXNzb2NpYXRlZEhUTUxFbGVtZW50LCAwLCBtX2Fz
c29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4IC0gMSk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHBvc2l0aW9uICYgRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HICYmICEocG9zaXRpb24gJiBE
T0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpKQotICAgICAgICAgICAgcmV0dXJuIEhUTUxG
b3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKGVsZW1lbnQsIG1f
YXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleCwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhX
aXRoRm9ybUF0dHJpYnV0ZShhc3NvY2lhdGVkSFRNTEVsZW1lbnQsIG1fYXNzb2NpYXRlZEVsZW1l
bnRzQWZ0ZXJJbmRleCwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpKTsKICAgICB9CiAKICAg
ICAvLyBDaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGlzIGVsZW1lbnQgaXMgdGhl
IHZlcnkgbGFzdCB0aGluZyBpbgogICAgIC8vIHRoZSBmb3JtJ3MgdHJlZSBvZiBjaGlsZHJlbjsg
d2UgZG9uJ3Qgd2FudCB0byB3YWxrIHRoZSBlbnRpcmUgdHJlZSBpbiB0aGF0CiAgICAgLy8gY29t
bW9uIGNhc2UgdGhhdCBvY2N1cnMgZHVyaW5nIHBhcnNpbmc7IGluc3RlYWQgd2UnbGwganVzdCBy
ZXR1cm4gYSB2YWx1ZQogICAgIC8vIHRoYXQgc2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVtZW50IHRv
IHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KLSAgICBpZiAoTm9kZVRyYXZlcnNhbDo6bmV4dChlbGVt
ZW50LCB0aGlzKSkgeworICAgIGlmIChFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGFzc29jaWF0ZWRI
VE1MRWxlbWVudCwgdGhpcykpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzQmVmb3JlSW5kZXg7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpKSB7Ci0gICAgICAgICAgICBp
ZiAobm9kZSA9PSBlbGVtZW50KSB7CisgICAgICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IHRo
aXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIHRo
aXMpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBhc3NvY2lhdGVkSFRNTEVsZW1lbnQp
IHsKICAgICAgICAgICAgICAgICArK21fYXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleDsKICAg
ICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChu
b2RlLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICAg
ICAgICAmJiB0b0hUTUxFbGVtZW50KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKLSAgICAgICAgICAg
ICAgICArK2k7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpIHx8IHRv
SFRNTEVsZW1lbnQoZWxlbWVudCktPmZvcm0oKSAhPSB0aGlzKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgKytpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBt
X2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXgrKzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTGFiZWxFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1
LDEwIEBAIExhYmVsYWJsZUVsZW1lbnQqIEhUTUxMYWJlbEVsZW1lbnQ6OmNvbnQKICAgICAgICAg
Ly8gU2VhcmNoIHRoZSBjaGlsZHJlbiBhbmQgZGVzY2VuZGFudHMgb2YgdGhlIGxhYmVsIGVsZW1l
bnQgZm9yIGEgZm9ybSBlbGVtZW50LgogICAgICAgICAvLyBwZXIgaHR0cDovL2Rldi53My5vcmcv
aHRtbDUvc3BlYy9PdmVydmlldy5odG1sI3RoZS1sYWJlbC1lbGVtZW50CiAgICAgICAgIC8vIHRo
ZSBmb3JtIGVsZW1lbnQgbXVzdCBiZSAibGFiZWxhYmxlIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50
Ii4KLSAgICAgICAgTm9kZSogbm9kZSA9IHRoaXM7Ci0gICAgICAgIHdoaWxlICgobm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpKSB7Ci0gICAgICAgICAgICBpZiAoTGFiZWxh
YmxlRWxlbWVudCogZWxlbWVudCA9IG5vZGVBc0xhYmVsYWJsZUVsZW1lbnQobm9kZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0
aGlzOworICAgICAgICB3aGlsZSAoKGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVs
ZW1lbnQsIHRoaXMpKSkgeworICAgICAgICAgICAgaWYgKExhYmVsYWJsZUVsZW1lbnQqIGxhYmVs
YWJsZUVsZW1lbnQgPSBub2RlQXNMYWJlbGFibGVFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBsYWJlbGFibGVFbGVtZW50OwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDE4IEBAIFBhc3NSZWZQdHI8
SFRNTExlZ2VuZEVsZW1lbnQ+IEhUTUxMZWdlbmQKIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhU
TUxMZWdlbmRFbGVtZW50Ojphc3NvY2lhdGVkQ29udHJvbCgpCiB7CiAgICAgLy8gQ2hlY2sgaWYg
dGhlcmUncyBhIGZpZWxkc2V0IGJlbG9uZ2luZyB0byB0aGlzIGxlZ2VuZC4KLSAgICBDb250YWlu
ZXJOb2RlKiBmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKKyAgICBFbGVtZW50KiBmaWVsZHNldCA9
IHBhcmVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAoZmllbGRzZXQgJiYgIWZpZWxkc2V0LT5oYXNU
YWdOYW1lKGZpZWxkc2V0VGFnKSkKLSAgICAgICAgZmllbGRzZXQgPSBmaWVsZHNldC0+cGFyZW50
Tm9kZSgpOworICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0LT5wYXJlbnRFbGVtZW50KCk7CiAg
ICAgaWYgKCFmaWVsZHNldCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGaW5kIGZpcnN0
IGZvcm0gZWxlbWVudCBpbnNpZGUgdGhlIGZpZWxkc2V0IHRoYXQgaXMgbm90IGEgbGVnZW5kIGVs
ZW1lbnQuCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjb25zaWRlciB0YWJpbmRleD8KLSAgICBO
b2RlKiBub2RlID0gZmllbGRzZXQ7Ci0gICAgd2hpbGUgKChub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlLCBmaWVsZHNldCkpKSB7Ci0gICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2Rl
KCkpIHsKLSAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxl
bWVudCo+KGVsZW1lbnQpOwotICAgICAgICB9CisgICAgRWxlbWVudCogZWxlbWVudCA9IGZpZWxk
c2V0OworICAgIHdoaWxlICgoZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVu
dCwgZmllbGRzZXQpKSkgeworICAgICAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Kj4oZWxlbWVudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEwICs2
MiwxMCBAQCBIVE1MTWFwRWxlbWVudDo6fkhUTUxNYXBFbGVtZW50KCkKIGJvb2wgSFRNTE1hcEVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQoTGF5b3V0UG9pbnQgbG9jYXRpb24sIGNvbnN0IExheW91dFNp
emUmIHNpemUsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBIVE1MQXJlYUVsZW1lbnQq
IGRlZmF1bHRBcmVhID0gMDsKLSAgICBOb2RlICpub2RlID0gdGhpczsKLSAgICB3aGlsZSAoKG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpKSkgewotICAgICAgICBpZiAobm9k
ZS0+aGFzVGFnTmFtZShhcmVhVGFnKSkgewotICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50KiBh
cmVhRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50Kj4obm9kZSk7CisgICAgRWxlbWVu
dCogZWxlbWVudCA9IHRoaXM7CisgICAgd2hpbGUgKChlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dChlbGVtZW50LCB0aGlzKSkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05h
bWUoYXJlYVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYUVsdCA9IHN0
YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGFy
ZWFFbHQtPmlzRGVmYXVsdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFkZWZhdWx0QXJlYSkK
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEFyZWEgPSBhcmVhRWx0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTM3MzI5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw0NyArNTQsNDUgQEAgRWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjp2aXJ0
dWFsSXRlbQogICAgIEFTU0VSVF9VTlVTRUQob2Zmc2V0SW5BcnJheSwgIW9mZnNldEluQXJyYXkp
OwogICAgIEFTU0VSVChwcmV2aW91cyAhPSBvd25lck5vZGUoKSk7CiAKLSAgICBOb2RlKiBjdXJy
ZW50OworICAgIEVsZW1lbnQqIGN1cnJlbnQ7CiAgICAgaWYgKCFwcmV2aW91cykKLSAgICAgICAg
Y3VycmVudCA9IG93bmVyTm9kZSgpLT5maXJzdENoaWxkKCk7CisgICAgICAgIGN1cnJlbnQgPSBF
bGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihvd25lck5vZGUoKSk7CiAgICAgZWxzZQotICAg
ICAgICBjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChwcmV2aW91cywgb3duZXJOb2RlKCkp
OworICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChwcmV2aW91cywgb3du
ZXJOb2RlKCkpOwogCi0gICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KGN1cnJlbnQsIG93bmVyTm9kZSgpKSkgewotICAgICAgICBpZiAoIWN1cnJlbnQtPmlz
RWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50KiBl
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGN1cnJlbnQpOworICAgIGZvciAoOyBjdXJyZW50OyBj
dXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBvd25lck5vZGUoKSkpIHsK
ICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgV2luZG93TmFtZWRJ
dGVtczoKICAgICAgICAgICAgICAgICAvLyBmaW5kIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0
cywgZW1iZWRzIGFuZCBvYmplY3RzIGJ5IG5hbWUsIAogICAgICAgICAgICAgICAgIC8vIGJ1dCBh
bnl0aGluZyBieSBpZAotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKGltZ1RhZykg
fHwKLSAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShmb3JtVGFnKSB8fAotICAgICAg
ICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwKLSAgICAgICAgICAgICAg
ICAgICAgZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgZS0+
aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0TmFt
ZUF0dHJpYnV0ZSgpID09IG1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
OwotICAgICAgICAgICAgICAgIGlmIChlLT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1RhZ05hbWUoaW1nVGFnKQorICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50LT5oYXNU
YWdOYW1lKGZvcm1UYWcpCisgICAgICAgICAgICAgICAgICAgIHx8IGN1cnJlbnQtPmhhc1RhZ05h
bWUoYXBwbGV0VGFnKQorICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50LT5oYXNUYWdOYW1l
KGVtYmVkVGFnKQorICAgICAgICAgICAgICAgICAgICB8fCBjdXJyZW50LT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmdldE5hbWVBdHRy
aWJ1dGUoKSA9PSBtX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVu
dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmdldElk
QXR0cmlidXRlKCkgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVu
dDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRG9jdW1lbnROYW1l
ZEl0ZW1zOgogICAgICAgICAgICAgICAgIC8vIGZpbmQgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywg
ZW1iZWRzLCBvYmplY3RzIGFuZCBpZnJhbWVzIGJ5IG5hbWUsIAogICAgICAgICAgICAgICAgIC8v
IGFwcGxldHMgYW5kIG9iamVjdCBieSBpZCwgYW5kIGltYWdlcyBieSBpZCBidXQgb25seSBpZiB0
aGV5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBhIG5hbWUgYXR0cmlidXRlICh0aGlzIHZlcnkg
c3RyYW5nZSBydWxlIG1hdGNoZXMgSUUpCi0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05h
bWUoZm9ybVRhZykgfHwgZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZS0+aGFzVGFnTmFtZShp
ZnJhbWVUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXROYW1lQXR0cmlidXRl
KCkgPT0gbV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGUtPmdldE5hbWVBdHRyaWJ1dGUoKSA9PSBtX25hbWUgfHwgZS0+Z2V0
SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoKGUtPmdldE5hbWVBdHRyaWJ1dGUoKSA9PSBtX25h
bWUgfHwgZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlKS0+aXNEb2NOYW1l
ZEl0ZW0oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChlLT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9uYW1lIHx8IChlLT5nZXRJZEF0dHJp
YnV0ZSgpID09IG1fbmFtZSAmJiBlLT5oYXNOYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGU7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoZm9y
bVRhZykgfHwgY3VycmVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgY3VycmVudC0+aGFzVGFn
TmFtZShpZnJhbWVUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5nZXRO
YW1lQXR0cmlidXRlKCkgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5oYXNUYWdOYW1l
KGFwcGxldFRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmdldE5hbWVB
dHRyaWJ1dGUoKSA9PSBtX25hbWUgfHwgY3VycmVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25h
bWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoKGN1cnJlbnQtPmdldE5hbWVBdHRyaWJ1dGUoKSA9PSBtX25hbWUg
fHwgY3VycmVudC0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KGN1cnJlbnQpLT5pc0Rv
Y05hbWVkSXRlbSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKGltZ1RhZykpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmdldE5hbWVBdHRyaWJ1dGUoKSA9PSBt
X25hbWUgfHwgKGN1cnJlbnQtPmdldElkQXR0cmlidXRlKCkgPT0gbV9uYW1lICYmIGN1cnJlbnQt
Pmhhc05hbWUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRp
b21zLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0
LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0Lmgi
CkBAIC00NTcsNyArNDU4LDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNKYXZh
QXBwbAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShnZXRB
dHRyaWJ1dGUodHlwZUF0dHIpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAg
IGZvciAoRWxlbWVudCogY2hpbGQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKEVsZW1lbnQqIGNoaWxk
ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7IGNoaWxkOyBjaGlsZCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGNoaWxkLCB0aGlzKSkgewogICAg
ICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpCiAgICAgICAgICAgICAgICAgJiYg
ZXF1YWxJZ25vcmluZ0Nhc2UoY2hpbGQtPmdldE5hbWVBdHRyaWJ1dGUoKSwgInR5cGUiKQogICAg
ICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKGNo
aWxkLT5nZXRBdHRyaWJ1dGUodmFsdWVBdHRyKS5zdHJpbmcoKSkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczNSwxMyArNzM1LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVt
cygKIAogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmb3VuZFNlbGVjdGVkID0gMDsKICAgICBIVE1M
T3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwotICAgIGZvciAoTm9kZSogY3VycmVudE5v
ZGUgPSB0aGlzLT5maXJzdENoaWxkKCk7IGN1cnJlbnROb2RlOykgewotICAgICAgICBpZiAoIWN1
cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGN1cnJlbnROb2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oY3VycmVudE5vZGUsIHRoaXMpOwor
ICAgIGZvciAoRWxlbWVudCogY3VycmVudEVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJz
dFdpdGhpbih0aGlzKTsgY3VycmVudEVsZW1lbnQ7ICkgeworICAgICAgICBpZiAoIWN1cnJlbnRF
bGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oY3VycmVudEVsZW1lbnQsIHRo
aXMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBIVE1MRWxl
bWVudCogY3VycmVudCA9IHRvSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpOworICAgICAgICBIVE1M
RWxlbWVudCogY3VycmVudCA9IHRvSFRNTEVsZW1lbnQoY3VycmVudEVsZW1lbnQpOwogCiAgICAg
ICAgIC8vIG9wdGdyb3VwIHRhZ3MgbWF5IG5vdCBuZXN0LiBIb3dldmVyLCBib3RoIEZpcmVGb3gg
YW5kIElFIHdpbGwKICAgICAgICAgLy8gZmxhdHRlbiB0aGUgdHJlZSBhdXRvbWF0aWNhbGx5LCBz
byB3ZSBmb2xsb3cgc3VpdC4KQEAgLTc0OSw3ICs3NDgsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpyZWNhbGNMaXN0SXRlbXMoCiAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKG9w
dGdyb3VwVGFnKSkgewogICAgICAgICAgICAgbV9saXN0SXRlbXMuYXBwZW5kKGN1cnJlbnQpOwog
ICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAgICAgICAg
IGN1cnJlbnROb2RlID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgIGN1
cnJlbnRFbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oY3VycmVudCk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc3
NiwxMiArNzc1LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygK
ICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50KTsKIAogICAgICAgICAvLyBJ
biBjb25mb3JtaW5nIEhUTUwgY29kZSwgb25seSA8b3B0Z3JvdXA+IGFuZCA8b3B0aW9uPiB3aWxs
IGJlIGZvdW5kCi0gICAgICAgIC8vIHdpdGhpbiBhIDxzZWxlY3Q+LiBXZSBjYWxsIE5vZGVUcmF2
ZXJzYWw6Om5leHRTaWJsaW5nIHNvIHRoYXQgd2Ugb25seSBzdGVwCisgICAgICAgIC8vIHdpdGhp
biBhIDxzZWxlY3Q+LiBXZSBjYWxsIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
IHNvIHRoYXQgd2Ugb25seSBzdGVwCiAgICAgICAgIC8vIGludG8gdGhvc2UgdGFncyB0aGF0IHdl
IGNob29zZSB0by4gRm9yIHdlYi1jb21wYXQsIHdlIHNob3VsZCBjb3BlCiAgICAgICAgIC8vIHdp
dGggdGhlIGNhc2Ugd2hlcmUgb2RkIHRhZ3MgbGlrZSBhIDxkaXY+IGhhdmUgYmVlbiBhZGRlZCBi
dXQgd2UKICAgICAgICAgLy8gaGFuZGxlIHRoaXMgYmVjYXVzZSBzdWNoIHRhZ3MgaGF2ZSBhbHJl
YWR5IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZQogICAgICAgICAvLyA8c2VsZWN0PidzIHN1YnRyZWUg
YXQgdGhpcyBwb2ludC4KLSAgICAgICAgY3VycmVudE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2tpcHBpbmdDaGlsZHJlbihjdXJyZW50Tm9kZSwgdGhpcyk7CisgICAgICAgIGN1cnJlbnRFbGVt
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oY3VycmVudEVsZW1l
bnQsIHRoaXMpOwogICAgIH0KIAogICAgIGlmICghZm91bmRTZWxlY3RlZCAmJiBtX3NpemUgPD0g
MSAmJiBmaXJzdE9wdGlvbiAmJiAhZmlyc3RPcHRpb24tPnNlbGVjdGVkKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAJKHJl
dmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0
cmlidXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw5ICsxMDIsOSBAQCBjb25zdCBWZWN0
b3I8SW5zZXJ0aW9uUG9pbnQqPiYgU2hhZG93Um9vCiAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNJ
bnNlcnRpb25Qb2ludCgpKQogICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25Qb2ludExpc3Q7CiAK
LSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaGFkb3dSb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChub2RlLCBzaGFkb3dSb290KSkgewotICAgICAgICBpZiAobm9kZS0+aXNJbnNl
cnRpb25Qb2ludCgpKQotICAgICAgICAgICAgbV9pbnNlcnRpb25Qb2ludExpc3QuYXBwZW5kKHRv
SW5zZXJ0aW9uUG9pbnQobm9kZSkpOworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IEVsZW1l
bnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNoYWRvd1Jvb3QpOyBlbGVtZW50OyBlbGVtZW50ID0g
RWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCBzaGFkb3dSb290KSkgeworICAgICAgICBp
ZiAoZWxlbWVudC0+aXNJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgbV9pbnNlcnRpb25Q
b2ludExpc3QuYXBwZW5kKHRvSW5zZXJ0aW9uUG9pbnQoZWxlbWVudCkpOwogICAgIH0KIAogICAg
IHJldHVybiBtX2luc2VydGlvblBvaW50TGlzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcwLDIzICs3NzAsMjIg
QEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRpZGF0ZQogICAgIEFTU0VSVChj
b250YWluZXIpOwogICAgIE5vZGUqIGZvY3VzZWROb2RlID0gKGZvY3VzZWRGcmFtZSgpICYmIGZv
Y3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpKSA/IGZvY3VzZWRGcmFtZSgpLT5kb2N1bWVudCgpLT5m
b2N1c2VkTm9kZSgpIDogMDsKIAotICAgIE5vZGUqIG5vZGUgPSBjb250YWluZXItPmZpcnN0Q2hp
bGQoKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRo
aW4oY29udGFpbmVyKTsKICAgICBGb2N1c0NhbmRpZGF0ZSBjdXJyZW50OwogICAgIGN1cnJlbnQu
cmVjdCA9IHN0YXJ0aW5nUmVjdDsKICAgICBjdXJyZW50LmZvY3VzYWJsZU5vZGUgPSBmb2N1c2Vk
Tm9kZTsKICAgICBjdXJyZW50LnZpc2libGVOb2RlID0gZm9jdXNlZE5vZGU7CiAKLSAgICBmb3Ig
KDsgbm9kZTsgbm9kZSA9IChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xs
SW5EaXJlY3Rpb24obm9kZSwgZGlyZWN0aW9uKSkgPyBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihub2RlLCBjb250YWluZXIpIDogTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBj
b250YWluZXIpKSB7Ci0gICAgICAgIGlmIChub2RlID09IGZvY3VzZWROb2RlKQorICAgIGZvciAo
OyBlbGVtZW50OyBlbGVtZW50ID0gKGVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSB8fCBj
YW5TY3JvbGxJbkRpcmVjdGlvbihlbGVtZW50LCBkaXJlY3Rpb24pKQorICAgICAgICA/IEVsZW1l
bnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGVsZW1lbnQsIGNvbnRhaW5lcikKKyAg
ICAgICAgOiBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIGNvbnRhaW5lcikpIHsKKyAg
ICAgICAgaWYgKGVsZW1lbnQgPT0gZm9jdXNlZE5vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgaWYgKCFlbGVt
ZW50LT5pc0tleWJvYXJkRm9jdXNhYmxlKGV2ZW50KSAmJiAhZWxlbWVudC0+aXNGcmFtZU93bmVy
RWxlbWVudCgpICYmICFjYW5TY3JvbGxJbkRpcmVjdGlvbihlbGVtZW50LCBkaXJlY3Rpb24pKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFub2RlLT5pc0tleWJvYXJkRm9j
dXNhYmxlKGV2ZW50KSAmJiAhbm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpICYmICFjYW5TY3Jv
bGxJbkRpcmVjdGlvbihub2RlLCBkaXJlY3Rpb24pKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgRm9jdXNDYW5kaWRhdGUgY2FuZGlkYXRlID0gRm9jdXNDYW5kaWRhdGUobm9kZSwg
ZGlyZWN0aW9uKTsKKyAgICAgICAgRm9jdXNDYW5kaWRhdGUgY2FuZGlkYXRlID0gRm9jdXNDYW5k
aWRhdGUoZWxlbWVudCwgZGlyZWN0aW9uKTsKICAgICAgICAgaWYgKGNhbmRpZGF0ZS5pc051bGwo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvdW50ZXIuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTE9MaXN0RWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpAQCAtMTkwLDEzICsxOTEsMTMgQEAgc3RhdGljIFJl
bmRlck9iamVjdCogbmV4dEluUHJlT3JkZXIoY29ucwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGNoaWxkID0gc2VsZi0+Zmlyc3RF
bGVtZW50Q2hpbGQoKTsKKyAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGlu
KHNlbGYpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAg
ICAgICAgICAgcmVzdWx0ID0gY2hpbGQtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAocmVz
dWx0KQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgICAgIGNoaWxkID0gRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oY2hpbGQsIHNlbGYpOwogICAgICAgICB9
CiAgICAgICAgIHJlc3VsdCA9IHJlbmRlcmVyT2ZBZnRlclBzZXVkb0VsZW1lbnQoc2VsZi0+cmVu
ZGVyZXIoKSk7CiAgICAgICAgIGlmIChyZXN1bHQpCkBAIC0yMDQsNyArMjA1LDcgQEAgc3RhdGlj
IFJlbmRlck9iamVjdCogbmV4dEluUHJlT3JkZXIoY29ucwogbmV4dHNpYmxpbmc6CiAgICAgICAg
IGlmIChzZWxmID09IHN0YXlXaXRoaW4pCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
Y2hpbGQgPSBzZWxmLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgY2hpbGQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihzZWxmKTsKICAgICAgICAgc2VsZiA9
IHNlbGYtPnBhcmVudEVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFzZWxmKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIWNoaWxkKTsgLy8gV2UgY2FuIG9ubHkgcmVhY2ggdGhpcyBpZiB3ZSBhcmUgc2Vh
cmNoaW5nIGJleW9uZCB0aGUgcm9vdCBlbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NW
R0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxOSArMzQ2LDE5IEBAIHZvaWQg
U1ZHU1ZHRWxlbWVudDo6Zm9yY2VSZWRyYXcoKQogUGFzc1JlZlB0cjxOb2RlTGlzdD4gU1ZHU1ZH
RWxlbWVudDo6Y29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlTGlzdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQsIENvbGxlY3RJbnRlcnNlY3Rp
b25PckVuY2xvc3VyZSBjb2xsZWN0KSBjb25zdAogewogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiBub2RlczsKLSAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChyZWZlcmVuY2VF
bGVtZW50ID8gcmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpOwotICAgIHdoaWxlIChub2RlKSB7Ci0g
ICAgICAgIGlmIChub2RlLT5pc1NWR0VsZW1lbnQoKSkgeyAKKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChyZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxl
bWVudCA6IHRoaXMpOworICAgIHdoaWxlIChlbGVtZW50KSB7CisgICAgICAgIGlmIChlbGVtZW50
LT5pc1NWR0VsZW1lbnQoKSkgeyAKICAgICAgICAgICAgIGlmIChjb2xsZWN0ID09IENvbGxlY3RJ
bnRlcnNlY3Rpb25MaXN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrSW50ZXJzZWN0aW9u
KHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKSwgcmVjdCkpCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tJbnRlcnNl
Y3Rpb24oc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLCByZWN0KSkKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGVsZW1lbnQpOwogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAoY2hlY2tFbmNsb3N1cmUoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVu
dCo+KG5vZGUpLCByZWN0KSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG5vZGUp
OworICAgICAgICAgICAgICAgIGlmIChjaGVja0VuY2xvc3VyZShzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4oZWxlbWVudCksIHJlY3QpKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQo
ZWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlLCByZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVu
dCA6IHRoaXMpOworICAgICAgICBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVt
ZW50LCByZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpOwogICAgIH0K
ICAgICByZXR1cm4gU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG5vZGVzKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5o
IgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgpAQCAtMTAwLDggKzEwMSw4
IEBAIFN0cmluZyBTVkdTdHlsZWRFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CiAKICAgICAvLyBJZiB3
ZSBhcmVuJ3QgYW4gaW5zdGFuY2UgaW4gYSA8dXNlPiBvciB0aGUgPHVzZT4gdGl0bGUgd2FzIG5v
dCBmb3VuZCwgdGhlbiBmaW5kIHRoZSBmaXJzdAogICAgIC8vIDx0aXRsZT4gY2hpbGQgb2YgdGhp
cyBlbGVtZW50LgotICAgIEVsZW1lbnQqIHRpdGxlRWxlbWVudCA9IGZpcnN0RWxlbWVudENoaWxk
KCk7Ci0gICAgZm9yICg7IHRpdGxlRWxlbWVudDsgdGl0bGVFbGVtZW50ID0gdGl0bGVFbGVtZW50
LT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgeworICAgIEVsZW1lbnQqIHRpdGxlRWxlbWVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOworICAgIGZvciAoOyB0aXRsZUVsZW1l
bnQ7IHRpdGxlRWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KHRpdGxlRWxlbWVudCwgdGhpcykpIHsKICAgICAgICAgaWYgKHRpdGxlRWxlbWVudC0+aGFzVGFn
TmFtZShTVkdOYW1lczo6dGl0bGVUYWcpICYmIHRpdGxlRWxlbWVudC0+aXNTVkdFbGVtZW50KCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NCwxOCArNjg0LDE4IEBAIGJvb2wgU1ZH
VXNlRWxlbWVudDo6aGFzQ3ljbGVVc2VSZWZlcmVuY2kKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZShO
b2RlKiBzdWJ0cmVlKQorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50
c0Zyb21TdWJ0cmVlKEVsZW1lbnQqIHN1YnRyZWUpCiB7CiAgICAgQVNTRVJUKCFzdWJ0cmVlLT5p
bkRvY3VtZW50KCkpOwotICAgIE5vZGUqIG5vZGUgPSBzdWJ0cmVlLT5maXJzdENoaWxkKCk7Ci0g
ICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQobm9kZSkp
IHsKLSAgICAgICAgICAgIE5vZGUqIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihub2RlLCBzdWJ0cmVlKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6Zmlyc3RXaXRoaW4oc3VidHJlZSk7CisgICAgd2hpbGUgKGVsZW1lbnQpIHsKKyAg
ICAgICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIEVs
ZW1lbnQqIG5leHQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihlbGVt
ZW50LCBzdWJ0cmVlKTsKICAgICAgICAgICAgIC8vIFRoZSBzdWJ0cmVlIGlzIG5vdCBpbiBkb2N1
bWVudCBzbyB0aGlzIHdvbid0IGdlbmVyYXRlIGV2ZW50cyB0aGF0IGNvdWxkIG11dGF0ZSB0aGUg
dHJlZS4KLSAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZSk7
Ci0gICAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAgICAgICAgIGVsZW1lbnQtPnBhcmVudE5v
ZGUoKS0+cmVtb3ZlQ2hpbGQoZWxlbWVudCk7CisgICAgICAgICAgICBlbGVtZW50ID0gbmV4dDsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLCBzdWJ0cmVlKTsKKyAgICAgICAgICAgIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpu
ZXh0KGVsZW1lbnQsIHN1YnRyZWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDEz
NzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsOSArMjI1LDkgQEAgdm9pZCBTTUlMVGltZUNvbnRh
aW5lcjo6dGltZXJGaXJlZChUaW1lcgogdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9j
dW1lbnRPcmRlckluZGV4ZXMoKQogewogICAgIHVuc2lnbmVkIHRpbWluZ0VsZW1lbnRDb3VudCA9
IDA7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9vd25lclNWR0VsZW1lbnQ7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIG1fb3duZXJTVkdFbGVtZW50KSkgewotICAgICAg
ICBpZiAoU1ZHU01JTEVsZW1lbnQ6OmlzU01JTEVsZW1lbnQobm9kZSkpCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxTVkdTTUlMRWxlbWVudCo+KG5vZGUpLT5zZXREb2N1bWVudE9yZGVySW5kZXgo
dGltaW5nRWxlbWVudENvdW50KyspOworICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IG1fb3du
ZXJTVkdFbGVtZW50OyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChl
bGVtZW50LCBtX293bmVyU1ZHRWxlbWVudCkpIHsKKyAgICAgICAgaWYgKFNWR1NNSUxFbGVtZW50
Ojppc1NNSUxFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU01J
TEVsZW1lbnQqPihlbGVtZW50KS0+c2V0RG9jdW1lbnRPcmRlckluZGV4KHRpbWluZ0VsZW1lbnRD
b3VudCsrKTsKICAgICB9CiAgICAgbV9kb2N1bWVudE9yZGVySW5kZXhlc0RpcnR5ID0gZmFsc2U7
CiB9Cg==
</data>
<flag name="review"
          id="195551"
          type_id="1"
          status="+"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="195559"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178892</attachid>
            <date>2012-12-11 15:23:27 -0800</date>
            <delta_ts>2012-12-11 15:23:27 -0800</delta_ts>
            <desc>patch2</desc>
            <filename>element-traversal-6.patch</filename>
            <type>text/plain</type>
            <size>57146</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzM0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDEyLTEyLTExICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgRWxlbWVudC1zcGVjaWZp
YyB0cmF2ZXJzYWwgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDQ2ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbiBtYW55IGNhc2VzIHdoZXJlIHdlIHVzZSBOb2RlVHJhdmVyc2FsIHdl
IHJlYWxseSBvbmx5IHdhbnQgRWxlbWVudHMuIEJ5IGhhdmluZworICAgICAgICBFbGVtZW50IHNw
ZWNpZmljIGl0ZXJhdGlvbiBmdW5jdGlvbnMgd2UgY2FuIHRpZ2h0ZW4gdGhlIGNvZGUgYW5kIG1h
a2UgaXQgZmFzdGVyIHRvby4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgRWxlbWVudFRyYXZl
cnNhbCBuYW1lc3BhY2UsIHNpbWlsYXIgdG8gTm9kZVRyYXZlcnNhbC4gSXQgYWxzbyBzd2l0Y2hl
cworICAgICAgICBidW5jaCBvZiBOb2RlVHJhdmVyc2FsIGNhbGwgc2l0ZXMgdGhhdCBvYnZpb3Vz
bHkgb25seSBjYXJlIGFib3V0IGVsZW1lbnRzIHRvIHVzaW5nCisgICAgICAgIHRoZSBuZXcgaW50
ZXJmYWNlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzaG91bGQgYmUgYSBzcGVlZHVwIHRvbyBh
cyB3ZSBhdm9pZCBudW1iZXIgb2YgYnJhbmNoZXMgYnkgbm90IGhhdmluZyB0byBsb29rCisgICAg
ICAgIGZvciBjaGlsZHJlbiBvZiBub24tQ29udGFpbmVyTm9kZXMgYW5kIGJ5IGFsbG93aW5nIHVz
ZSBvZiBDb250YWluZXJOb2RlIHNwZWNpZmljCisgICAgICAgIGFjY2Vzc29ycy4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRJbWFnZU1hcENoaWxkcmVu
KToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmxpbmtBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjphbGxW
aXNpdGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6
dmlzaXRlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3Bl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlk
YXRlU3R5bGUpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdERlc2NlbmRhbnQp
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6YnVpbGRBY2Nlc3NLZXlNYXApOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0
ZUJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByb2Nlc3NCYXNlRWxlbWVu
dCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zmlyc3RFbGVtZW50Q2hpbGQpOgorICAgICAg
ICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRWxl
bWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93Ojpjb2xsZWN0
U2VsZWN0RmVhdHVyZVNldEZyb20pOgorICAgICAgICAqIGRvbS9Ob2RlVHJhdmVyc2FsLmg6Cisg
ICAgICAgIChFbGVtZW50VHJhdmVyc2FsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudFRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRUcmF2ZXJzYWw6Om5leHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4pOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1w
bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbik6CisgICAgICAgIChOb2RlVHJhdmVyc2FsKToKKyAgICAgICAgKiBkb20vVHJlZVNj
b3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6bGFiZWxFbGVtZW50Rm9ySWQp
OgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjpmaW5kQW5jaG9yKToKKyAgICAgICAgKiBl
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwaFVuZGVyTmV3RWxlbWVudCk6CisgICAgICAg
ICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAgICAq
IGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvckZv
cm0pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bXBsZXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmludmFsaWRhdGVEaXNhYmxlZFN0
YXRlVW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmxlZ2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVu
dHNJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAg
KiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExhYmVs
RWxlbWVudDo6Y29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRyb2wp
OgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVD
b2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6dmly
dHVhbEl0ZW1BZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNKYXZhQXBwbGV0KToK
KyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMpOgorICAgICAgICAqIGh0bWwvc2hh
ZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290
Q29udGVudERpc3RyaWJ1dGlvbkRhdGE6OmVuc3VyZUluc2VydGlvblBvaW50TGlzdCk6CisgICAg
ICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXND
b250cm9sbGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcik6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dEluUHJlT3Jk
ZXIpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmNvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3QpOgorICAg
ICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0
eWxlZEVsZW1lbnQ6OnRpdGxlKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpyZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZSk6Cisg
ICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRlckluZGV4ZXMpOgor
CiAyMDEyLTEyLTExICBNaWNoYWVsIFBydWV0dCAgPG1pY2hhZWxANjhrLm9yZz4KIAogICAgICAg
ICBbSlNDXSBBZGQgdGVzdHMgZm9yIGV4cGxpY2l0IHNlcmlhbGl6YXRpb24gdmFsdWVzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2NTcsOCArMjY1Nyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
YWRkSW1hZ2UKICAgICBpZiAoIW1hcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChOb2Rl
KiBjdXJyZW50ID0gbWFwLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KGN1cnJlbnQsIG1hcCkpIHsKLSAgICAgICAgCisgICAgZm9yIChFbGVtZW50
KiBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4obWFwKTsgY3VycmVudDsg
Y3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoY3VycmVudCwgbWFwKSkgewogICAgICAg
ICAvLyBhZGQgYW4gPGFyZWE+IGVsZW1lbnQgZm9yIHRoaXMgY2hpbGQgaWYgaXQgaGFzIGEgbGlu
awogICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShhcmVhVGFnKSAmJiBjdXJyZW50LT5p
c0xpbmsoKSkgewogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluayogYXJlYU9i
amVjdCA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsqPihheE9iamVjdENh
Y2hlKCktPmdldE9yQ3JlYXRlKEltYWdlTWFwTGlua1JvbGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDE4ICsy
MDcsMTQgQEAgdm9pZCBTZWxlY3RvckNoZWNrZXI6OmNvbGxlY3RJZGVudGlmaWVySAogICAgICpo
YXNoID0gMDsKIH0KIAotc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcqIGxpbmtBdHRy
aWJ1dGUoTm9kZSogbm9kZSkKK3N0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nKiBsaW5r
QXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0xpbmsoKSkK
KyAgICBpZiAoIWVsZW1lbnQtPmlzTGluaygpKQogICAgICAgICByZXR1cm4gMDsKLQotICAgIEFT
U0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuICZlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsK
ICAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAmZWxlbWVu
dC0+Z2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKLQogICAgIHJldHVybiAwOwog
fQogCkBAIC0xMjI1LDkgKzEyMjEsOSBAQCB2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRl
ZFN0YXRlQ2hhCiB7CiAgICAgaWYgKG1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmIChu
b2RlLT5pc0xpbmsoKSkKLSAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
KyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhp
bihtX2RvY3VtZW50KTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQo
ZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzTGluaygpKQorICAgICAgICAgICAg
ZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KIApAQCAtMTIzNSwxNCAr
MTIzMSwxNCBAQCB2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlCiB7CiAg
ICAgaWYgKCFtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5jb250YWlucyh2aXNpdGVkSGFz
aCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBu
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgeworICAgIGZvciAoRWxlbWVu
dCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKG1fZG9jdW1lbnQpOyBl
bGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50KSkgewogICAg
ICAgICBMaW5rSGFzaCBoYXNoID0gMDsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYVRh
ZykpCi0gICAgICAgICAgICBoYXNoID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihu
b2RlKS0+dmlzaXRlZExpbmtIYXNoKCk7Ci0gICAgICAgIGVsc2UgaWYgKGNvbnN0IEF0b21pY1N0
cmluZyogYXR0ciA9IGxpbmtBdHRyaWJ1dGUobm9kZSkpCisgICAgICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKGFUYWcpKQorICAgICAgICAgICAgaGFzaCA9IHN0YXRpY19jYXN0PEhUTUxBbmNo
b3JFbGVtZW50Kj4oZWxlbWVudCktPnZpc2l0ZWRMaW5rSGFzaCgpOworICAgICAgICBlbHNlIGlm
IChjb25zdCBBdG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpKQogICAg
ICAgICAgICAgaGFzaCA9IHZpc2l0ZWRMaW5rSGFzaChtX2RvY3VtZW50LT5iYXNlVVJMKCksICph
dHRyKTsKICAgICAgICAgaWYgKGhhc2ggPT0gdmlzaXRlZEhhc2gpCi0gICAgICAgICAgICBub2Rl
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjphbmFs
eXplUwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3Bl
cyhjb25zdCBTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiYgaWRTY29wZXMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFz
c1Njb3BlcykKK3N0YXRpYyBib29sIGVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29wZXMoY29uc3Qg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2Nv
cGVzLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCiB7CiAg
ICAgaWYgKCFpZFNjb3Blcy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzSUQoKSAmJiBpZFNjb3Bl
cy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMTE3LDIwICsxMTcsMTUgQEAgdm9pZCBTdHlsZUludmFsaWRh
dGlvbkFuYWx5c2lzOjppbnZhbGlkYQogICAgIEFTU0VSVCghbV9kaXJ0aWVzQWxsU3R5bGUpOwog
ICAgIGlmIChtX2lkU2NvcGVzLmlzRW1wdHkoKSAmJiBtX2NsYXNzU2NvcGVzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+Zmlyc3RDaGlsZCgp
OwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgU3R5bGVkRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKKyAgICBFbGVtZW50KiBl
bGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oZG9jdW1lbnQpOworICAgIHdo
aWxlIChlbGVtZW50KSB7CiAgICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2NvcGVz
KGVsZW1lbnQsIG1faWRTY29wZXMsIG1fY2xhc3NTY29wZXMpKSB7CiAgICAgICAgICAgICBlbGVt
ZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgICAgICAvLyBUaGUgd2hvbGUgc3Vi
dHJlZSBpcyBub3cgaW52YWxpZGF0ZWQsIHdlIGNhbiBza2lwIHRvIHRoZSBuZXh0IHNpYmxpbmcu
Ci0gICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
bm9kZSk7CisgICAgICAgICAgICBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4oZWxlbWVudCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQot
ICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKKyAgICAgICAgZWxlbWVu
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkocmV2aXNpb24g
MTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNiwxMCArMzE2LDggQEAgcHJpdmF0ZToKIAogaW5saW5lIHZv
aWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdERlc2NlbmRhbnQoTm9kZSogcm9vdCwg
U2hvdWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVkZVJvb3QpCiB7Ci0gICAgZm9yIChOb2RlKiBu
b2RlID0gc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5jbHVkZVJvb3QgPyByb290IDogcm9vdC0+Zmly
c3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCByb290KSkg
ewotICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSAoc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5jbHVkZVJvb3QgJiYgcm9v
dC0+aXNFbGVtZW50Tm9kZSgpKSA/IHRvRWxlbWVudChyb290KSA6IEVsZW1lbnRUcmF2ZXJzYWw6
OmZpcnN0V2l0aGluKHJvb3QpOworICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCByb290KSkgewogICAgICAgICBpZiAoZWxlbWVudC0+
aGFzQ3VzdG9tQ2FsbGJhY2tzKCkgJiYgZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQog
ICAgICAgICAgICAgbV9saXN0LmFwcGVuZCh0b0ZyYW1lT3duZXJFbGVtZW50KGVsZW1lbnQpKTsK
ICAgICAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTAsMTUgKzc1MCwx
MiBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvCiB7CiAgICAgQVNT
RVJUKHNjb3BlKTsKICAgICBOb2RlKiByb290Tm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpOwotICAg
IGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlLCByb290Tm9kZSkpIHsKLSAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBF
bGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihyb290Tm9kZSk7IGVsZW1lbnQ7IGVsZW1lbnQg
PSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIHJvb3ROb2RlKSkgewogICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhY2Nl
c3NrZXlBdHRyKTsKICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXkuaW1wbCgpLCBlbGVtZW50KTsK
IAotICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHJvb3QgPSBub2RlLT55b3VuZ2VzdFNoYWRvd1Jv
b3QoKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQorICAgICAgICBmb3Ig
KFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgcm9vdDsg
cm9vdCA9IHJvb3QtPm9sZGVyU2hhZG93Um9vdCgpKQogICAgICAgICAgICAgYnVpbGRBY2Nlc3NL
ZXlNYXAocm9vdCk7CiAgICAgfQogfQpAQCAtODQ0LDcgKzg0MSw3IEBAIHZvaWQgRG9jdW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW4KIHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJl
bkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGls
ZENvdW50RGVsdGEpOwogICAgIAotICAgIEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9IGZp
cnN0RWxlbWVudENoaWxkKHRoaXMpOworICAgIEVsZW1lbnQqIG5ld0RvY3VtZW50RWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOwogICAgIGlmIChuZXdEb2N1bWVu
dEVsZW1lbnQgPT0gbV9kb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX2Rv
Y3VtZW50RWxlbWVudCA9IG5ld0RvY3VtZW50RWxlbWVudDsKQEAgLTI2NjcsOSArMjY2NCw5IEBA
IHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwoKQogICAgIGlmICghZXF1YWxJZ25vcmluZ0Zy
YWdtZW50SWRlbnRpZmllcihvbGRCYXNlVVJMLCBtX2Jhc2VVUkwpKSB7CiAgICAgICAgIC8vIEJh
c2UgVVJMIGNoYW5nZSBjaGFuZ2VzIGFueSByZWxhdGl2ZSB2aXNpdGVkIGxpbmtzLgogICAgICAg
ICAvLyBGSVhNRTogVGhlcmUgYXJlIG90aGVyIFVSTHMgaW4gdGhlIHRyZWUgdGhhdCB3b3VsZCBu
ZWVkIHRvIGJlIHJlLWV2YWx1YXRlZCBvbiBkeW5hbWljIGJhc2UgVVJMIGNoYW5nZS4gU3R5bGUg
c2hvdWxkIGJlIGludmFsaWRhdGVkIHRvby4KLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gZmly
c3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYVRhZykpCi0gICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2RlKS0+aW52YWxpZGF0ZUNhY2hlZFZpc2l0
ZWRMaW5rSGFzaCgpOworICAgICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJh
dmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2
ZXJzYWw6Om5leHQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKGFUYWcpKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50
Kj4oZWxlbWVudCktPmludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTI2ODUsMTUgKzI2ODIsMTUgQEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vz
c0Jhc2VFbGVtZW50KCkKICAgICAvLyBGaW5kIHRoZSBmaXJzdCBocmVmIGF0dHJpYnV0ZSBpbiBh
IGJhc2UgZWxlbWVudCBhbmQgdGhlIGZpcnN0IHRhcmdldCBhdHRyaWJ1dGUgaW4gYSBiYXNlIGVs
ZW1lbnQuCiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBocmVmID0gMDsKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcqIHRhcmdldCA9IDA7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQoKS0+
Zmlyc3RDaGlsZCgpOyBub2RlICYmICghaHJlZiB8fCAhdGFyZ2V0KTsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYmFzZVRh
ZykpIHsKKyAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJz
dFdpdGhpbih0aGlzKTsgZWxlbWVudCAmJiAoIWhyZWYgfHwgIXRhcmdldCk7IGVsZW1lbnQgPSBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKGJhc2VUYWcpKSB7CiAgICAgICAgICAgICBpZiAoIWhyZWYpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0
cik7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgICAg
ICAgICAgaHJlZiA9ICZ2YWx1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghdGFy
Z2V0KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZWxlbWVudC0+ZmFzdEdl
dEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKQogICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSAmdmFsdWU7CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAkocmV2aXNp
b24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNywxMCArMTI3LDcgQEAgaW5saW5lIEVsZW1lbnQqIERvY3Vt
ZW50T3JkZXJlZE1hcDo6Z2V0KAogCiAgICAgaWYgKG1fZHVwbGljYXRlQ291bnRzLmNvbnRhaW5z
KGtleSkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub2RlIHRo
YXQgbWF0Y2hlczsgaXRlcmF0ZSB0byBmaW5kIHRoZSBmaXJzdCBvbmUuCi0gICAgICAgIGZvciAo
Tm9kZSogbm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGZvciAoZWxlbWVu
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNjb3BlLT5yb290Tm9kZSgpKTsgZWxl
bWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCkpIHsKICAgICAg
ICAgICAgIGlmICgha2V5TWF0Y2hlcyhrZXksIGVsZW1lbnQpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3ZlKGtleSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNs
dWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQb2ludGVyTG9ja0NvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJQc2V1ZG9FbGVtZW50LmgiCkBAIC0yMTM2LDcgKzIxMzcsNyBAQCBQc2V1ZG9FbGVtZW50
KiBFbGVtZW50OjphZnRlclBzZXVkb0VsZW1lCiAvLyBFbGVtZW50VHJhdmVyc2FsIEFQSQogRWxl
bWVudCogRWxlbWVudDo6Zmlyc3RFbGVtZW50Q2hpbGQoKSBjb25zdAogewotICAgIHJldHVybiBX
ZWJDb3JlOjpmaXJzdEVsZW1lbnRDaGlsZCh0aGlzKTsKKyAgICByZXR1cm4gRWxlbWVudFRyYXZl
cnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7CiB9CiAKIEVsZW1lbnQqIEVsZW1lbnQ6Omxhc3RFbGVt
ZW50Q2hpbGQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiAxMzczMjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OTcs
MTUgKzc5Nyw2IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZUludmFsaWRBdHRyaWIKICNl
bmRpZgogfQogCi1pbmxpbmUgRWxlbWVudCogZmlyc3RFbGVtZW50Q2hpbGQoY29uc3QgQ29udGFp
bmVyTm9kZSogY29udGFpbmVyKQotewotICAgIEFTU0VSVF9BUkcoY29udGFpbmVyLCBjb250YWlu
ZXIpOwotICAgIE5vZGUqIGNoaWxkID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7Ci0gICAgd2hp
bGUgKGNoaWxkICYmICFjaGlsZC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY2hp
bGQpOwotfQotCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNJRCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiBhdHRyaWJ1dGVEYXRhKCktPmhhc0lEKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw4
ICsyMjEsOCBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OmVuc3VyZVNlbGVjdEZlYXR1cmVTCiB2b2lk
IEVsZW1lbnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJvbShTaGFkb3dSb290KiBy
b290KQogewogICAgIGlmIChyb290LT5oYXNFbGVtZW50U2hhZG93KCkpIHsKLSAgICAgICAgZm9y
IChOb2RlKiBub2RlID0gcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChub2RlKSkgewotICAgICAgICAgICAgaWYgKEVsZW1lbnRTaGFkb3cqIGVsZW1l
bnRTaGFkb3cgPSBub2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQobm9kZSktPnNoYWRv
dygpIDogMCkgeworICAgICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVy
c2FsOjpmaXJzdFdpdGhpbihyb290KTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHQoZWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBlbGVt
ZW50U2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCkpIHsKICAgICAgICAgICAgICAgICBlbGVtZW50
U2hhZG93LT5lbnN1cmVTZWxlY3RGZWF0dXJlU2V0Q29sbGVjdGVkKCk7CiAgICAgICAgICAgICAg
ICAgbV9zZWxlY3RGZWF0dXJlcy5hZGQoZWxlbWVudFNoYWRvdy0+bV9zZWxlY3RGZWF0dXJlcyk7
CiAgICAgICAgICAgICB9CkBAIC0yMzAsOSArMjMwLDkgQEAgdm9pZCBFbGVtZW50U2hhZG93Ojpj
b2xsZWN0U2VsZWN0RmVhdHVyZQogICAgIH0KIAogICAgIGlmIChyb290LT5oYXNDb250ZW50RWxl
bWVudCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgICAgIGlm
IChpc0hUTUxDb250ZW50RWxlbWVudChub2RlKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IENT
U1NlbGVjdG9yTGlzdCYgbGlzdCA9IHRvSFRNTENvbnRlbnRFbGVtZW50KG5vZGUpLT5zZWxlY3Rv
ckxpc3QoKTsKKyAgICAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNh
bDo6Zmlyc3RXaXRoaW4ocm9vdCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2Fs
OjpuZXh0KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBpZiAoaXNIVE1MQ29udGVudEVsZW1lbnQo
ZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIGxpc3Qg
PSB0b0hUTUxDb250ZW50RWxlbWVudChlbGVtZW50KS0+c2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
ICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBsaXN0LmZpcnN0KCk7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IGxpc3QubmV4dChzZWxlY3RvcikpCiAgICAgICAgICAgICAgICAgICAg
IG1fc2VsZWN0RmVhdHVyZXMuY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKHNlbGVjdG9yKTsg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVUcmF2ZXJzYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVRyYXZlcnNhbC5oCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZVRyYXZlcnNhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMjcgQEAKICNpZm5kZWYg
Tm9kZVRyYXZlcnNhbF9oCiAjZGVmaW5lIE5vZGVUcmF2ZXJzYWxfaAogCisjaW5jbHVkZSAiRWxl
bWVudC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE5vZGU7Ci1jbGFzcyBDb250
YWluZXJOb2RlOworbmFtZXNwYWNlIEVsZW1lbnRUcmF2ZXJzYWwgeworCisvLyBGaXJzdCBlbGVt
ZW50IGNoaWxkIG9mIHRoZSBub2RlLgorRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgTm9kZSop
OworRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgQ29udGFpbmVyTm9kZSopOworLy8gUHJlLW9y
ZGVyIHRyYXZlcnNhbCBza2lwcGluZyBub24tZWxlbWVudCBub2Rlcy4KK0VsZW1lbnQqIG5leHQo
Y29uc3QgTm9kZSopOworRWxlbWVudCogbmV4dChjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbik7CitFbGVtZW50KiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqKTsKK0VsZW1lbnQq
IG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOworLy8g
TGlrZSBuZXh0LCBidXQgc2tpcHMgY2hpbGRyZW4uCitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGls
ZHJlbihjb25zdCBOb2RlKik7CitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBO
b2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGls
ZHJlbihjb25zdCBDb250YWluZXJOb2RlKik7CitFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJl
bihjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CisKK30KIAog
bmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgewogCkBAIC02MCw2ICs3Nyw1OSBAQCBOb2RlKiBuZXh0
UG9zdE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBOCiBOb2RlKiBwcmV2aW91c1Bvc3RPcmRlcihj
b25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOwogTm9kZSogcHJldmlvdXNT
a2lwcGluZ0NoaWxkcmVuUG9zdE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0
aGluID0gMCk7CiAKK30KKworbmFtZXNwYWNlIEVsZW1lbnRUcmF2ZXJzYWwgeworCit0ZW1wbGF0
ZSA8Y2xhc3MgTm9kZVR5cGU+CitpbmxpbmUgRWxlbWVudCogdHJhdmVyc2VOZXh0RWxlbWVudFRl
bXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQoreworICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KGN1cnJlbnQpOworICAgIHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnRO
b2RlKCkpCisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihub2RlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworfQoraW5s
aW5lIEVsZW1lbnQqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyByZXR1cm4g
dHJhdmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgRWxlbWVudCog
bmV4dChjb25zdCBOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHRFbGVtZW50VGVt
cGxhdGUoY3VycmVudCk7IH0KKwordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgoraW5saW5lIEVs
ZW1lbnQqIHRyYXZlcnNlTmV4dEVsZW1lbnRUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgY29u
c3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChjdXJyZW50LCBzdGF5V2l0aGluKTsKKyAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4obm9kZSwgc3RheVdpdGhpbik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKTsKK30KK2lubGluZSBFbGVtZW50KiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUq
IGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dEVs
ZW1lbnRUZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5saW5lIEVsZW1lbnQqIG5l
eHQoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4g
dHJhdmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9Citpbmxp
bmUgRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyBy
ZXR1cm4gdHJhdmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQsIGN1cnJlbnQpOyB9Citp
bmxpbmUgRWxlbWVudCogZmlyc3RXaXRoaW4oY29uc3QgTm9kZSogY3VycmVudCkgeyByZXR1cm4g
dHJhdmVyc2VOZXh0RWxlbWVudFRlbXBsYXRlKGN1cnJlbnQsIGN1cnJlbnQpOyB9CisKK3RlbXBs
YXRlIDxjbGFzcyBOb2RlVHlwZT4KK2lubGluZSBFbGVtZW50KiB0cmF2ZXJzZU5leHRFbGVtZW50
U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQoreworICAgIE5vZGUq
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihjdXJyZW50KTsKKyAg
ICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSk7CisgICAgcmV0dXJuIHRv
RWxlbWVudChub2RlKTsKK30KK2lubGluZSBFbGVtZW50KiBuZXh0U2tpcHBpbmdDaGlsZHJlbihj
b25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHRFbGVtZW50
U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgRWxlbWVudCogbmV4
dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VO
ZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShjdXJyZW50KTsgfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgTm9kZVR5cGU+CitpbmxpbmUgRWxlbWVudCogdHJhdmVyc2VOZXh0RWxlbWVudFNr
aXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbikKK3sKKyAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4oY3VycmVudCwgc3RheVdpdGhpbik7CisgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKG5vZGUsIHN0YXlXaXRoaW4pOworICAgIHJldHVybiB0b0VsZW1lbnQobm9k
ZSk7Cit9CitpbmxpbmUgRWxlbWVudCogbmV4dFNraXBwaW5nQ2hpbGRyZW4oY29uc3QgQ29udGFp
bmVyTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVy
c2VOZXh0RWxlbWVudFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGlu
KTsgfQoraW5saW5lIEVsZW1lbnQqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1
cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dEVsZW1l
bnRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0KK30KKwor
bmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgeworCiBOb2RlKiBuZXh0QW5jZXN0b3JTaWJsaW5nKGNv
bnN0IE5vZGUqKTsKIE5vZGUqIG5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSosIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkocmV2
aXNpb24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4Nyw5ICsxODcsOSBAQCBIVE1MTGFiZWxFbGVtZW50KiBUcmVlU2NvcGU6
OmxhYmVsRWxlbWVuCiAgICAgaWYgKCFtX2xhYmVsc0J5Rm9yQXR0cmlidXRlKSB7CiAgICAgICAg
IC8vIFBvcHVsYXRlIHRoZSBtYXAgb24gZmlyc3QgYWNjZXNzLgogICAgICAgICBtX2xhYmVsc0J5
Rm9yQXR0cmlidXRlID0gYWRvcHRQdHIobmV3IERvY3VtZW50T3JkZXJlZE1hcCk7Ci0gICAgICAg
IGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShsYWJlbFRh
ZykpIHsKLSAgICAgICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19j
YXN0PEhUTUxMYWJlbEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgZm9yIChFbGVtZW50KiBlbGVt
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdE5vZGUoKSk7IGVsZW1lbnQ7
IGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQpKSB7CisgICAgICAgICAg
ICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgICAgICAgICBI
VE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihl
bGVtZW50KTsKICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvclZhbHVlID0g
bGFiZWwtPmZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cik7CiAgICAgICAgICAgICAgICAgaWYgKCFm
b3JWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGFkZExhYmVsKGZvclZhbHVl
LCBsYWJlbCk7CkBAIC0yMzEsOSArMjMxLDkgQEAgRWxlbWVudCogVHJlZVNjb3BlOjpmaW5kQW5j
aG9yKGNvbnN0IFN0cgogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoRWxlbWVudCogZWxlbWVu
dCA9IGdldEVsZW1lbnRCeUlkKG5hbWUpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZSgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlKSkgewotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhVGFnKSkgewotICAg
ICAgICAgICAgSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNo
b3JFbGVtZW50Kj4obm9kZSk7CisgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6Zmlyc3RXaXRoaW4ocm9vdE5vZGUoKSk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBFbGVt
ZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKGFUYWcpKSB7CisgICAgICAgICAgICBIVE1MQW5jaG9yRWxlbWVudCogYW5jaG9yID0g
c3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgICAgIGlm
IChyb290Tm9kZSgpLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgewogICAgICAgICAgICAg
ICAgIC8vIFF1aXJrcyBtb2RlLCBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gb2YgbmFtZXMu
CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFuY2hvci0+bmFtZSgpLCBu
YW1lKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNSw3ICsxMDI1LDcg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xvbmVQYXJhZ3JhcAogICAgICAgICBOb2Rl
KiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihzdGFydE5vZGUsIG91
dGVyTm9kZS5nZXQoKSk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihub2RlLCBvdXRlck5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICAvLyBNb3ZlIGxh
c3ROb2RlIHVwIGluIHRoZSB0cmVlIGFzIG11Y2ggYXMgbm9kZSB3YXMgbW92ZWQgdXAgaW4gdGhl
Ci0gICAgICAgICAgICAvLyB0cmVlIGJ5IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nLCBzbyB0
aGF0IHRoZSByZWxhdGl2ZSBkZXB0aCBiZXR3ZWVuCisgICAgICAgICAgICAvLyB0cmVlIGJ5IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuLCBzbyB0aGF0IHRoZSByZWxhdGl2ZSBk
ZXB0aCBiZXR3ZWVuCiAgICAgICAgICAgICAvLyBub2RlIGFuZCB0aGUgb3JpZ2luYWwgc3RhcnQg
bm9kZSBpcyBtYWludGFpbmVkIGluIHRoZSBjbG9uZS4KICAgICAgICAgICAgIHdoaWxlIChzdGFy
dE5vZGUtPnBhcmVudE5vZGUoKSAhPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAg
ICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnBhcmVudE5vZGUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNp
b24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDcgKzUwNCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgLy8gaGFuZGxlIGRlbGV0aW5nIGFs
bCBub2RlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHNlbGVjdGVkCiAgICAgICAgIHdoaWxlIChub2Rl
ICYmIG5vZGUgIT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAg
ICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2Rl
LmdldCgpKSwgbV9kb3duc3RyZWFtRW5kKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm9k
ZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcganVzdCBibGV3IHBhc3QgdGhlIGVuZCBwb3NpdGlvbiwg
c28gc3RvcCBkZWxldGluZworICAgICAgICAgICAgICAgIC8vIE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuIGp1c3QgYmxldyBwYXN0IHRoZSBlbmQgcG9zaXRpb24sIHNvIHN0b3Ag
ZGVsZXRpbmcKICAgICAgICAgICAgICAgICBub2RlID0gMDsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIW1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2Rl
LmdldCgpKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUuZ2V0KCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTUzLDEzICsxOTUzLDE0IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRW
aXNpYmxlVGUKIC8vIFNjYW5zIGxvZ2ljYWxseSBmb3J3YXJkIGZyb20gInN0YXJ0IiwgaW5jbHVk
aW5nIGFueSBjaGlsZCBmcmFtZXMuCiBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9y
bShOb2RlKiBzdGFydCkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1Rh
Z05hbWUoZm9ybVRhZykpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1F
bGVtZW50Kj4obm9kZSk7Ci0gICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgdG9I
VE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSktPmZvcm0oKTsK
LSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoaWZyYW1lVGFnKSkgewotICAgICAgICAgICAgTm9kZSogY2hpbGREb2N1bWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4obm9kZSktPmNvbnRlbnREb2N1bWVudCgpOwor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGFydCAmJiBzdGFydC0+aXNFbGVtZW50Tm9kZSgpID8g
dG9FbGVtZW50KHN0YXJ0KSA6IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoc3RhcnQpOworICAgIGZv
ciAoOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50KSkg
eworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAg
aWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KS0+Zm9ybSgpOworICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVU
YWcpKSB7CisgICAgICAgICAgICBOb2RlKiBjaGlsZERvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lRWxlbWVudEJhc2UqPihlbGVtZW50KS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAg
ICAgICBpZiAoSFRNTEZvcm1FbGVtZW50KiBmcmFtZVJlc3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxk
RG9jdW1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZVJlc3VsdDsKICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niwy
NCArOTYsMjAgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV92YWx1ZTsKIH07CiAKLXN0YXRpYyB2
b2lkIGNvbXBsZXRlVVJMcyhOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwpCitzdGF0
aWMgdm9pZCBjb21wbGV0ZVVSTHMoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFN0
cmluZyYgYmFzZVVSTCkKIHsKICAgICBWZWN0b3I8QXR0cmlidXRlQ2hhbmdlPiBjaGFuZ2VzOwog
CiAgICAgS1VSTCBwYXJzZWRCYXNlVVJMKFBhcnNlZFVSTFN0cmluZywgYmFzZVVSTCk7CiAKLSAg
ICBOb2RlKiBlbmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlKTsK
LSAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICE9IGVuZDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobikpIHsKLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAg
RWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIGlmICgh
ZS0+aGFzQXR0cmlidXRlcygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gZS0+YXR0cmlidXRlQ291bnQoKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGNv
bnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZS0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZS0+aXNVUkxBdHRyaWJ1dGUoKmF0dHJpYnV0ZSkgJiYgIWF0dHJpYnV0ZS0+
dmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKEF0
dHJpYnV0ZUNoYW5nZShlLCBhdHRyaWJ1dGUtPm5hbWUoKSwgS1VSTChwYXJzZWRCYXNlVVJMLCBh
dHRyaWJ1dGUtPnZhbHVlKCkpLnN0cmluZygpKSk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChF
bGVtZW50KiBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oZnJhZ21lbnQp
OyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCBmcmFn
bWVudCkpIHsKKyAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudC0+YXR0cmli
dXRlQ291bnQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0
dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUo
KmF0dHJpYnV0ZSkgJiYgIWF0dHJpYnV0ZS0+dmFsdWUoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgY2hhbmdlcy5hcHBlbmQoQXR0cmlidXRlQ2hhbmdlKGVsZW1lbnQsIGF0dHJpYnV0ZS0+
bmFtZSgpLCBLVVJMKHBhcnNlZEJhc2VVUkwsIGF0dHJpYnV0ZS0+dmFsdWUoKSkuc3RyaW5nKCkp
KTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9CYXNlTXVs
dGlwbGVGaWVsZHNEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9CYXNlTXVsdGlwbGVGaWVsZHNEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAJ
KHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZU11bHRpcGxlRmll
bGRzRGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2
ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGlja2VySW5kaWNhdG9yRWxl
bWVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTG9jYWxlLmgiCkBAIC0zNTgsNyArMzU5LDcgQEAg
dm9pZCBCYXNlTXVsdGlwbGVGaWVsZHNEYXRlQW5kVGltZUlucHV0VAogICAgICAgICByZXR1cm47
CiAKICAgICBBdG9taWNTdHJpbmcgZGlyZWN0aW9uID0gZWxlbWVudCgpLT5sb2NhbGUoKS5pc1JU
TCgpID8gQXRvbWljU3RyaW5nKCJydGwiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSA6IEF0b21pY1N0cmluZygibHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgaWYgKEVsZW1lbnQqIGNvbnRhaW5lciA9IGZpcnN0RWxlbWVudENoaWxkKGVs
ZW1lbnQoKS0+dXNlckFnZW50U2hhZG93Um9vdCgpKSkKKyAgICBpZiAoRWxlbWVudCogY29udGFp
bmVyID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4oZWxlbWVudCgpLT51c2VyQWdlbnRT
aGFkb3dSb290KCkpKQogICAgICAgICBjb250YWluZXItPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OmRpckF0dHIsIGRpcmVjdGlvbik7CiAKICAgICBEYXRlVGltZUVkaXRFbGVtZW50OjpMYXlvdXRQ
YXJhbWV0ZXJzIGxheW91dFBhcmFtZXRlcnMoZWxlbWVudCgpLT5sb2NhbGUoKSwgY3JlYXRlU3Rl
cFJhbmdlKEFueUlzRGVmYXVsdFN0ZXApKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSAr
NTEsOSBAQCBQYXNzUmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsCiAKIHZvaWQg
SFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcihFbGVtZW50
KiBiYXNlKQogewotICAgIGZvciAoTm9kZSogbm9kZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgYmFzZSkpIHsKLSAgICAgICAgaWYg
KG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Kj4obm9kZSktPmFuY2VzdG9yRGlzYWJsZWRTdGF0ZVdhc0NoYW5nZWQoKTsKKyAgICBmb3IgKEVs
ZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihiYXNlKTsgZWxl
bWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgYmFzZSkpIHsK
KyAgICAgICAgaWYgKGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4oZWxlbWVudCktPmFuY2VzdG9y
RGlzYWJsZWRTdGF0ZVdhc0NoYW5nZWQoKTsKICAgICB9CiB9CiAKQEAgLTY3LDcgKzY3LDcgQEAg
dm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYgogdm9pZCBIVE1MRmllbGRT
ZXRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJl
Zm9yZUNoYW5nZSwgTm9kZSogYWZ0ZXJDaGFuZ2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7CiAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNl
ciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKLSAgICBmb3Ig
KEVsZW1lbnQqIGVsZW1lbnQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOyBlbGVtZW50OyBlbGVtZW50
ID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKEVsZW1lbnQqIGVs
ZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgZWxlbWVudDsgZWxl
bWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGVsZW1lbnQsIHRo
aXMpKSB7CiAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGxlZ2VuZFRhZykpCiAgICAg
ICAgICAgICBpbnZhbGlkYXRlRGlzYWJsZWRTdGF0ZVVuZGVyKGVsZW1lbnQpOwogICAgIH0KQEAg
LTkxLDkgKzkxLDkgQEAgUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50OjpjcmVhdAog
CiBIVE1MTGVnZW5kRWxlbWVudCogSFRNTEZpZWxkU2V0RWxlbWVudDo6bGVnZW5kKCkgY29uc3QK
IHsKLSAgICBmb3IgKEVsZW1lbnQqIG5vZGUgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOyBub2RlOyBu
b2RlID0gbm9kZS0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUobGVnZW5kVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
TGVnZW5kRWxlbWVudCo+KG5vZGUpOworICAgIGZvciAoRWxlbWVudCogY2hpbGQgPSBFbGVtZW50
VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0aGlzKTsgY2hpbGQ7IGNoaWxkID0gRWxlbWVudFRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oY2hpbGQsIHRoaXMpKSB7CisgICAgICAgIGlmIChj
aGlsZC0+aGFzVGFnTmFtZShsZWdlbmRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxMZWdlbmRFbGVtZW50Kj4oY2hpbGQpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0K
QEAgLTExMywxOSArMTEzLDE2IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6cmVmcmVzaEVs
ZW1lbnQKIAogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmNsZWFyKCk7CiAKLSAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUsIHRoaXMpKSB7Ci0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkgewotICAgICAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5kKHN0YXRpY19j
YXN0PEhUTUxPYmplY3RFbGVtZW50Kj4obm9kZSkpOworICAgIGZvciAoRWxlbWVudCogZWxlbWVu
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHRoaXMpOyBlbGVtZW50OyBlbGVtZW50
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCB0aGlzKSkgeworICAgICAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7CisgICAgICAgICAgICBtX2Fzc29jaWF0
ZWRFbGVtZW50cy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlbGVtZW50
KSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdG9F
bGVtZW50KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBpZiAoIWVsZW1l
bnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+KG5vZGUpKTsKKyAgICAgICAgbV9hc3NvY2lhdGVkRWxlbWVudHMuYXBwZW5k
KHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KSk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwNSwzNiArNTA1LDM2IEBAIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVu
dDo6Zm9ybUVsZW1lbnRJbmQKIAogdW5zaWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVu
dEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQpCiB7Ci0gICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFzc29jaWF0ZWRFbGVtZW50KTsK
KyAgICBIVE1MRWxlbWVudCogYXNzb2NpYXRlZEhUTUxFbGVtZW50ID0gdG9IVE1MRWxlbWVudChh
c3NvY2lhdGVkRWxlbWVudCk7CiAgICAgLy8gVHJlYXRzIHNlcGFyYXRlbHkgdGhlIGNhc2Ugd2hl
cmUgdGhpcyBlbGVtZW50IGhhcyB0aGUgZm9ybSBhdHRyaWJ1dGUKICAgICAvLyBmb3IgcGVyZm9y
bWFuY2UgY29uc2lkZXJhdGlvbi4KLSAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShm
b3JtQXR0cikpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9zaXRpb24gPSBjb21wYXJlRG9j
dW1lbnRQb3NpdGlvbihlbGVtZW50KTsKKyAgICBpZiAoYXNzb2NpYXRlZEhUTUxFbGVtZW50LT5m
YXN0SGFzQXR0cmlidXRlKGZvcm1BdHRyKSkgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3Np
dGlvbiA9IGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGFzc29jaWF0ZWRIVE1MRWxlbWVudCk7CiAg
ICAgICAgIGlmIChwb3NpdGlvbiAmIERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORykgewogICAg
ICAgICAgICAgKyttX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwogICAgICAgICAgICAg
KyttX2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7Ci0gICAgICAgICAgICByZXR1cm4gSFRN
TEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoZWxlbWVudCwg
MCwgbV9hc3NvY2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleCAtIDEpOworICAgICAgICAgICAgcmV0
dXJuIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleFdpdGhGb3JtQXR0cmlidXRlKGFz
c29jaWF0ZWRIVE1MRWxlbWVudCwgMCwgbV9hc3NvY2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleCAt
IDEpOwogICAgICAgICB9CiAgICAgICAgIGlmIChwb3NpdGlvbiAmIERPQ1VNRU5UX1BPU0lUSU9O
X0ZPTExPV0lORyAmJiAhKHBvc2l0aW9uICYgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZ
KSkKLSAgICAgICAgICAgIHJldHVybiBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kZXhX
aXRoRm9ybUF0dHJpYnV0ZShlbGVtZW50LCBtX2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXgs
IG1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKSk7CisgICAgICAgICAgICByZXR1cm4gSFRNTEZv
cm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4V2l0aEZvcm1BdHRyaWJ1dGUoYXNzb2NpYXRlZEhU
TUxFbGVtZW50LCBtX2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXgsIG1fYXNzb2NpYXRlZEVs
ZW1lbnRzLnNpemUoKSk7CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgZm9yIHRoZSBzcGVjaWFsIGNh
c2Ugd2hlcmUgdGhpcyBlbGVtZW50IGlzIHRoZSB2ZXJ5IGxhc3QgdGhpbmcgaW4KICAgICAvLyB0
aGUgZm9ybSdzIHRyZWUgb2YgY2hpbGRyZW47IHdlIGRvbid0IHdhbnQgdG8gd2FsayB0aGUgZW50
aXJlIHRyZWUgaW4gdGhhdAogICAgIC8vIGNvbW1vbiBjYXNlIHRoYXQgb2NjdXJzIGR1cmluZyBw
YXJzaW5nOyBpbnN0ZWFkIHdlJ2xsIGp1c3QgcmV0dXJuIGEgdmFsdWUKICAgICAvLyB0aGF0IHNh
eXMgImFkZCB0aGlzIGZvcm0gZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheSIuCi0gICAg
aWYgKE5vZGVUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgdGhpcykpIHsKKyAgICBpZiAoRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dChhc3NvY2lhdGVkSFRNTEVsZW1lbnQsIHRoaXMpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGkgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4OwotICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLCB0aGlzKSkgewotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZWxlbWVudCkgeworICAgICAg
ICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVu
dFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCB0aGlzKSkgeworICAgICAgICAgICAgaWYgKGVsZW1l
bnQgPT0gYXNzb2NpYXRlZEhUTUxFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgKyttX2Fzc29j
aWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAg
ICAgICAgICAgICAgICYmIChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUo
b2JqZWN0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+
Zm9ybSgpID09IHRoaXMpCi0gICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgaWYgKCFl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIWVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSB8fCB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5mb3JtKCkg
IT0gdGhpcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICsraTsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4
Kys7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDEwICs3NSwxMCBAQCBMYWJlbGFibGVFbGVtZW50KiBIVE1M
TGFiZWxFbGVtZW50Ojpjb250CiAgICAgICAgIC8vIFNlYXJjaCB0aGUgY2hpbGRyZW4gYW5kIGRl
c2NlbmRhbnRzIG9mIHRoZSBsYWJlbCBlbGVtZW50IGZvciBhIGZvcm0gZWxlbWVudC4KICAgICAg
ICAgLy8gcGVyIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN0aGUt
bGFiZWwtZWxlbWVudAogICAgICAgICAvLyB0aGUgZm9ybSBlbGVtZW50IG11c3QgYmUgImxhYmVs
YWJsZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudCIuCi0gICAgICAgIE5vZGUqIG5vZGUgPSB0aGlz
OwotICAgICAgICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMp
KSkgewotICAgICAgICAgICAgaWYgKExhYmVsYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBub2RlQXNM
YWJlbGFibGVFbGVtZW50KG5vZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Owor
ICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdGhpczsKKyAgICAgICAgd2hpbGUgKChlbGVtZW50
ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCB0aGlzKSkpIHsKKyAgICAgICAgICAg
IGlmIChMYWJlbGFibGVFbGVtZW50KiBsYWJlbGFibGVFbGVtZW50ID0gbm9kZUFzTGFiZWxhYmxl
RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxhYmxlRWxlbWVu
dDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MzI5KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDIxICs1MCwxOCBAQCBQYXNzUmVmUHRyPEhUTUxMZWdlbmRFbGVtZW50PiBIVE1MTGVnZW5k
CiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENv
bnRyb2woKQogewogICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYSBmaWVsZHNldCBiZWxvbmdpbmcg
dG8gdGhpcyBsZWdlbmQuCi0gICAgQ29udGFpbmVyTm9kZSogZmllbGRzZXQgPSBwYXJlbnROb2Rl
KCk7CisgICAgRWxlbWVudCogZmllbGRzZXQgPSBwYXJlbnRFbGVtZW50KCk7CiAgICAgd2hpbGUg
KGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFnTmFtZShmaWVsZHNldFRhZykpCi0gICAgICAg
IGZpZWxkc2V0ID0gZmllbGRzZXQtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgZmllbGRzZXQgPSBm
aWVsZHNldC0+cGFyZW50RWxlbWVudCgpOwogICAgIGlmICghZmllbGRzZXQpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gRmluZCBmaXJzdCBmb3JtIGVsZW1lbnQgaW5zaWRlIHRoZSBmaWVs
ZHNldCB0aGF0IGlzIG5vdCBhIGxlZ2VuZCBlbGVtZW50LgogICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgY29uc2lkZXIgdGFiaW5kZXg/Ci0gICAgTm9kZSogbm9kZSA9IGZpZWxkc2V0OwotICAgIHdo
aWxlICgobm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgZmllbGRzZXQpKSkgewotICAg
ICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihlbGVtZW50KTsKLSAgICAgICAgfQor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBmaWVsZHNldDsKKyAgICB3aGlsZSAoKGVsZW1lbnQgPSBF
bGVtZW50VHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIGZpZWxkc2V0KSkpIHsKKyAgICAgICAgaWYg
KGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KGVsZW1lbnQpOwogICAgIH0KIAogICAg
IHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMCArNjIsMTAgQEAgSFRNTE1hcEVsZW1lbnQ6On5IVE1M
TWFwRWxlbWVudCgpCiBib29sIEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2ZW50KExheW91dFBv
aW50IGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBzaXplLCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQpCiB7CiAgICAgSFRNTEFyZWFFbGVtZW50KiBkZWZhdWx0QXJlYSA9IDA7Ci0gICAgTm9kZSAq
bm9kZSA9IHRoaXM7Ci0gICAgd2hpbGUgKChub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
LCB0aGlzKSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYXJlYVRhZykpIHsKLSAg
ICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYUVsdCA9IHN0YXRpY19jYXN0PEhUTUxBcmVh
RWxlbWVudCo+KG5vZGUpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOworICAgIHdoaWxl
ICgoZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgdGhpcykpKSB7Cisg
ICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGFyZWFUYWcpKSB7CisgICAgICAgICAgICBI
VE1MQXJlYUVsZW1lbnQqIGFyZWFFbHQgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnQqPihl
bGVtZW50KTsKICAgICAgICAgICAgIGlmIChhcmVhRWx0LT5pc0RlZmF1bHQoKSkgewogICAgICAg
ICAgICAgICAgIGlmICghZGVmYXVsdEFyZWEpCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRB
cmVhID0gYXJlYUVsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVj
dGlvbi5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5h
bWVDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNDcgKzU0LDQ1IEBAIEVsZW1l
bnQqIEhUTUxOYW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW0KICAgICBBU1NFUlRfVU5VU0VEKG9m
ZnNldEluQXJyYXksICFvZmZzZXRJbkFycmF5KTsKICAgICBBU1NFUlQocHJldmlvdXMgIT0gb3du
ZXJOb2RlKCkpOwogCi0gICAgTm9kZSogY3VycmVudDsKKyAgICBFbGVtZW50KiBjdXJyZW50Owog
ICAgIGlmICghcHJldmlvdXMpCi0gICAgICAgIGN1cnJlbnQgPSBvd25lck5vZGUoKS0+Zmlyc3RD
aGlsZCgpOworICAgICAgICBjdXJyZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4o
b3duZXJOb2RlKCkpOwogICAgIGVsc2UKLSAgICAgICAgY3VycmVudCA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQocHJldmlvdXMsIG93bmVyTm9kZSgpKTsKKyAgICAgICAgY3VycmVudCA9IEVsZW1lbnRU
cmF2ZXJzYWw6Om5leHQocHJldmlvdXMsIG93bmVyTm9kZSgpKTsKIAotICAgIGZvciAoOyBjdXJy
ZW50OyBjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBvd25lck5vZGUoKSkp
IHsKLSAgICAgICAgaWYgKCFjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjdXJy
ZW50KTsKKyAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHQoY3VycmVudCwgb3duZXJOb2RlKCkpKSB7CiAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIFdpbmRvd05hbWVkSXRlbXM6CiAgICAgICAgICAgICAgICAgLy8gZmlu
ZCBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIGVtYmVkcyBhbmQgb2JqZWN0cyBieSBuYW1l
LCAKICAgICAgICAgICAgICAgICAvLyBidXQgYW55dGhpbmcgYnkgaWQKLSAgICAgICAgICAgICAg
ICBpZiAoZS0+aGFzVGFnTmFtZShpbWdUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGUtPmhh
c1RhZ05hbWUoZm9ybVRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShh
cHBsZXRUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcp
IHx8Ci0gICAgICAgICAgICAgICAgICAgIGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGUtPmdldE5hbWVBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0
SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKGltZ1RhZykKKyAgICAgICAg
ICAgICAgICAgICAgfHwgY3VycmVudC0+aGFzVGFnTmFtZShmb3JtVGFnKQorICAgICAgICAgICAg
ICAgICAgICB8fCBjdXJyZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykKKyAgICAgICAgICAgICAg
ICAgICAgfHwgY3VycmVudC0+aGFzVGFnTmFtZShlbWJlZFRhZykKKyAgICAgICAgICAgICAgICAg
ICAgfHwgY3VycmVudC0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50LT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9uYW1lKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChjdXJyZW50LT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIERvY3VtZW50TmFtZWRJdGVtczoKICAgICAgICAgICAgICAgICAvLyBm
aW5kIGltYWdlcywgZm9ybXMsIGFwcGxldHMsIGVtYmVkcywgb2JqZWN0cyBhbmQgaWZyYW1lcyBi
eSBuYW1lLCAKICAgICAgICAgICAgICAgICAvLyBhcHBsZXRzIGFuZCBvYmplY3QgYnkgaWQsIGFu
ZCBpbWFnZXMgYnkgaWQgYnV0IG9ubHkgaWYgdGhleSBoYXZlCiAgICAgICAgICAgICAgICAgLy8g
YSBuYW1lIGF0dHJpYnV0ZSAodGhpcyB2ZXJ5IHN0cmFuZ2UgcnVsZSBtYXRjaGVzIElFKQotICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGUtPmhhc1RhZ05hbWUo
ZW1iZWRUYWcpIHx8IGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoZS0+Z2V0TmFtZUF0dHJpYnV0ZSgpID09IG1fbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFn
TmFtZShhcHBsZXRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXROYW1lQXR0
cmlidXRlKCkgPT0gbV9uYW1lIHx8IGUtPmdldElkQXR0cmlidXRlKCkgPT0gbV9uYW1lKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChl
LT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9uYW1lIHx8IGUtPmdldElkQXR0cmlidXRlKCkgPT0g
bV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxP
YmplY3RFbGVtZW50Kj4oZSktPmlzRG9jTmFtZWRJdGVtKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUo
aW1nVGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0TmFtZUF0dHJpYnV0ZSgp
ID09IG1fbmFtZSB8fCAoZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUgJiYgZS0+aGFzTmFt
ZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOworICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGN1cnJlbnQtPmhhc1RhZ05hbWUo
ZW1iZWRUYWcpIHx8IGN1cnJlbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudC0+Z2V0TmFtZUF0dHJpYnV0ZSgpID09IG1fbmFtZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50LT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9uYW1lIHx8IGN1cnJl
bnQtPmdldElkQXR0cmlidXRlKCkgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5oYXNU
YWdOYW1lKG9iamVjdFRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjdXJyZW50LT5n
ZXROYW1lQXR0cmlidXRlKCkgPT0gbV9uYW1lIHx8IGN1cnJlbnQtPmdldElkQXR0cmlidXRlKCkg
PT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9i
amVjdEVsZW1lbnQqPihjdXJyZW50KS0+aXNEb2NOYW1lZEl0ZW0oKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Vy
cmVudC0+aGFzVGFnTmFtZShpbWdUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50LT5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9uYW1lIHx8IChjdXJyZW50LT5nZXRJZEF0dHJp
YnV0ZSgpID09IG1fbmFtZSAmJiBjdXJyZW50LT5oYXNOYW1lKCkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNs
dWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgpAQCAtNDU3LDcgKzQ1OCw3IEBAIGJvb2wgSFRN
TE9iamVjdEVsZW1lbnQ6OmNvbnRhaW5zSmF2YUFwcGwKICAgICBpZiAoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoZ2V0QXR0cmlidXRlKHR5cGVBdHRyKSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICBmb3IgKEVsZW1lbnQqIGNoaWxkID0gZmlyc3RF
bGVtZW50Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRFbGVtZW50U2libGluZygp
KSB7CisgICAgZm9yIChFbGVtZW50KiBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0
aGluKHRoaXMpOyBjaGlsZDsgY2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihjaGlsZCwgdGhpcykpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHBh
cmFtVGFnKQogICAgICAgICAgICAgICAgICYmIGVxdWFsSWdub3JpbmdDYXNlKGNoaWxkLT5nZXRO
YW1lQXR0cmlidXRlKCksICJ0eXBlIikKICAgICAgICAgICAgICAgICAmJiBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShjaGlsZC0+Z2V0QXR0cmlidXRlKHZhbHVlQXR0ciku
c3RyaW5nKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDEzNzMyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzUsMTMgKzczNSwxMiBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoCiAKICAgICBIVE1MT3B0aW9uRWxlbWVudCog
Zm91bmRTZWxlY3RlZCA9IDA7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGZpcnN0T3B0aW9uID0g
MDsKLSAgICBmb3IgKE5vZGUqIGN1cnJlbnROb2RlID0gdGhpcy0+Zmlyc3RDaGlsZCgpOyBjdXJy
ZW50Tm9kZTspIHsKLSAgICAgICAgaWYgKCFjdXJyZW50Tm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKGN1cnJlbnROb2RlLCB0aGlzKTsKKyAgICBmb3IgKEVsZW1lbnQqIGN1cnJlbnRFbGVt
ZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRoaW4odGhpcyk7IGN1cnJlbnRFbGVtZW50
OyApIHsKKyAgICAgICAgaWYgKCFjdXJyZW50RWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7Cisg
ICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGlu
Z0NoaWxkcmVuKGN1cnJlbnRFbGVtZW50LCB0aGlzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9Ci0KLSAgICAgICAgSFRNTEVsZW1lbnQqIGN1cnJlbnQgPSB0b0hUTUxFbGVtZW50
KGN1cnJlbnROb2RlKTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGN1cnJlbnQgPSB0b0hUTUxFbGVt
ZW50KGN1cnJlbnRFbGVtZW50KTsKIAogICAgICAgICAvLyBvcHRncm91cCB0YWdzIG1heSBub3Qg
bmVzdC4gSG93ZXZlciwgYm90aCBGaXJlRm94IGFuZCBJRSB3aWxsCiAgICAgICAgIC8vIGZsYXR0
ZW4gdGhlIHRyZWUgYXV0b21hdGljYWxseSwgc28gd2UgZm9sbG93IHN1aXQuCkBAIC03NDksNyAr
NzQ4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKAogICAgICAg
ICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKICAgICAgICAgICAgIG1f
bGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChjdXJyZW50LT5maXJz
dENoaWxkKCkpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnQtPmZpcnN0
Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6OmZpcnN0V2l0aGluKGN1cnJlbnQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC03NzYsMTIgKzc3NSwxMiBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoCiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5hcHBl
bmQoY3VycmVudCk7CiAKICAgICAgICAgLy8gSW4gY29uZm9ybWluZyBIVE1MIGNvZGUsIG9ubHkg
PG9wdGdyb3VwPiBhbmQgPG9wdGlvbj4gd2lsbCBiZSBmb3VuZAotICAgICAgICAvLyB3aXRoaW4g
YSA8c2VsZWN0Pi4gV2UgY2FsbCBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyBzbyB0aGF0IHdl
IG9ubHkgc3RlcAorICAgICAgICAvLyB3aXRoaW4gYSA8c2VsZWN0Pi4gV2UgY2FsbCBOb2RlVHJh
dmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbiBzbyB0aGF0IHdlIG9ubHkgc3RlcAogICAgICAg
ICAvLyBpbnRvIHRob3NlIHRhZ3MgdGhhdCB3ZSBjaG9vc2UgdG8uIEZvciB3ZWItY29tcGF0LCB3
ZSBzaG91bGQgY29wZQogICAgICAgICAvLyB3aXRoIHRoZSBjYXNlIHdoZXJlIG9kZCB0YWdzIGxp
a2UgYSA8ZGl2PiBoYXZlIGJlZW4gYWRkZWQgYnV0IHdlCiAgICAgICAgIC8vIGhhbmRsZSB0aGlz
IGJlY2F1c2Ugc3VjaCB0YWdzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKICAg
ICAgICAgLy8gPHNlbGVjdD4ncyBzdWJ0cmVlIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIGN1cnJl
bnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oY3VycmVudE5vZGUs
IHRoaXMpOworICAgICAgICBjdXJyZW50RWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKGN1cnJlbnRFbGVtZW50LCB0aGlzKTsKICAgICB9CiAKICAgICBpZiAo
IWZvdW5kU2VsZWN0ZWQgJiYgbV9zaXplIDw9IDEgJiYgZmlyc3RPcHRpb24gJiYgIWZpcnN0T3B0
aW9uLT5zZWxlY3RlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVu
dERpc3RyaWJ1dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsOSArMTAyLDkgQEAgY29uc3QgVmVjdG9yPEluc2VydGlvblBvaW50Kj4mIFNoYWRvd1Jv
bwogICAgIGlmICghc2hhZG93Um9vdC0+aGFzSW5zZXJ0aW9uUG9pbnQoKSkKICAgICAgICAgcmV0
dXJuIG1faW5zZXJ0aW9uUG9pbnRMaXN0OwogCi0gICAgZm9yIChOb2RlKiBub2RlID0gc2hhZG93
Um9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc2hhZG93Um9vdCkp
IHsKLSAgICAgICAgaWYgKG5vZGUtPmlzSW5zZXJ0aW9uUG9pbnQoKSkKLSAgICAgICAgICAgIG1f
aW5zZXJ0aW9uUG9pbnRMaXN0LmFwcGVuZCh0b0luc2VydGlvblBvaW50KG5vZGUpKTsKKyAgICBm
b3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihzaGFk
b3dSb290KTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVu
dCwgc2hhZG93Um9vdCkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzSW5zZXJ0aW9uUG9pbnQo
KSkKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uUG9pbnRMaXN0LmFwcGVuZCh0b0luc2VydGlvblBv
aW50KGVsZW1lbnQpKTsKICAgICB9CiAKICAgICByZXR1cm4gbV9pbnNlcnRpb25Qb2ludExpc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAx
MzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3MCwyMyArNzcwLDIyIEBAIHZvaWQgRm9jdXNDb250cm9sbGVyOjpmaW5k
Rm9jdXNDYW5kaWRhdGUKICAgICBBU1NFUlQoY29udGFpbmVyKTsKICAgICBOb2RlKiBmb2N1c2Vk
Tm9kZSA9IChmb2N1c2VkRnJhbWUoKSAmJiBmb2N1c2VkRnJhbWUoKS0+ZG9jdW1lbnQoKSkgPyBm
b2N1c2VkRnJhbWUoKS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA6IDA7CiAKLSAgICBOb2Rl
KiBub2RlID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKGNvbnRhaW5lcik7CiAgICAgRm9jdXNDYW5k
aWRhdGUgY3VycmVudDsKICAgICBjdXJyZW50LnJlY3QgPSBzdGFydGluZ1JlY3Q7CiAgICAgY3Vy
cmVudC5mb2N1c2FibGVOb2RlID0gZm9jdXNlZE5vZGU7CiAgICAgY3VycmVudC52aXNpYmxlTm9k
ZSA9IGZvY3VzZWROb2RlOwogCi0gICAgZm9yICg7IG5vZGU7IG5vZGUgPSAobm9kZS0+aXNGcmFt
ZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9uKG5vZGUsIGRpcmVjdGlvbikp
ID8gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSwgY29udGFpbmVyKSA6
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgY29udGFpbmVyKSkgewotICAgICAgICBpZiAobm9k
ZSA9PSBmb2N1c2VkTm9kZSkKKyAgICBmb3IgKDsgZWxlbWVudDsgZWxlbWVudCA9IChlbGVtZW50
LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oZWxlbWVudCwg
ZGlyZWN0aW9uKSkKKyAgICAgICAgPyBFbGVtZW50VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGls
ZHJlbihlbGVtZW50LCBjb250YWluZXIpCisgICAgICAgIDogRWxlbWVudFRyYXZlcnNhbDo6bmV4
dChlbGVtZW50LCBjb250YWluZXIpKSB7CisgICAgICAgIGlmIChlbGVtZW50ID09IGZvY3VzZWRO
b2RlKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCisgICAgICAgIGlmICghZWxlbWVudC0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVu
dCkgJiYgIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSAmJiAhY2FuU2Nyb2xsSW5EaXJl
Y3Rpb24oZWxlbWVudCwgZGlyZWN0aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGlmICghbm9kZS0+aXNLZXlib2FyZEZvY3VzYWJsZShldmVudCkgJiYgIW5vZGUtPmlzRnJh
bWVPd25lckVsZW1lbnQoKSAmJiAhY2FuU2Nyb2xsSW5EaXJlY3Rpb24obm9kZSwgZGlyZWN0aW9u
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEZvY3VzQ2FuZGlkYXRlIGNhbmRp
ZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKG5vZGUsIGRpcmVjdGlvbik7CisgICAgICAgIEZvY3VzQ2Fu
ZGlkYXRlIGNhbmRpZGF0ZSA9IEZvY3VzQ2FuZGlkYXRlKGVsZW1lbnQsIGRpcmVjdGlvbik7CiAg
ICAgICAgIGlmIChjYW5kaWRhdGUuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkocmV2aXNp
b24gMTM3MzI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPTGlzdEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAg
LTE5MCwxMyArMTkxLDEzIEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyKGNv
bnMKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBjaGlsZCA9IHNlbGYtPmZpcnN0RWxlbWVudENoaWxkKCk7CisgICAgY2hpbGQgPSBF
bGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbihzZWxmKTsKICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNoaWxkLT5yZW5k
ZXJlcigpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7
CisgICAgICAgICAgICBjaGlsZCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKGNoaWxkLCBzZWxmKTsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSByZW5kZXJlck9m
QWZ0ZXJQc2V1ZG9FbGVtZW50KHNlbGYtPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAocmVzdWx0
KQpAQCAtMjA0LDcgKzIwNSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVy
KGNvbnMKIG5leHRzaWJsaW5nOgogICAgICAgICBpZiAoc2VsZiA9PSBzdGF5V2l0aGluKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNoaWxkID0gc2VsZi0+bmV4dEVsZW1lbnRTaWJs
aW5nKCk7CisgICAgICAgIGNoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4oc2VsZik7CiAgICAgICAgIHNlbGYgPSBzZWxmLT5wYXJlbnRFbGVtZW50KCk7CiAgICAg
ICAgIGlmICghc2VsZikgewogICAgICAgICAgICAgQVNTRVJUKCFjaGlsZCk7IC8vIFdlIGNhbiBv
bmx5IHJlYWNoIHRoaXMgaWYgd2UgYXJlIHNlYXJjaGluZyBiZXlvbmQgdGhlIHJvb3QgZWxlbWVu
dApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MzI5
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDYsMTkgKzM0NiwxOSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KCkK
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IFNWR1NWR0VsZW1lbnQ6OmNvbGxlY3RJbnRlcnNlY3Rpb25P
ckVuY2xvc3VyZUxpc3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBTVkdFbGVtZW50KiByZWZlcmVu
Y2VFbGVtZW50LCBDb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmUgY29sbGVjdCkgY29uc3QK
IHsKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbm9kZXM7Ci0gICAgTm9kZSogbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQocmVmZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0
aGlzKTsKLSAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAobm9kZS0+aXNTVkdFbGVtZW50
KCkpIHsgCisgICAgRWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQocmVm
ZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKKyAgICB3aGlsZSAoZWxl
bWVudCkgeworICAgICAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpIHsgCiAgICAgICAg
ICAgICBpZiAoY29sbGVjdCA9PSBDb2xsZWN0SW50ZXJzZWN0aW9uTGlzdCkgewotICAgICAgICAg
ICAgICAgIGlmIChjaGVja0ludGVyc2VjdGlvbihzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9k
ZSksIHJlY3QpKQotICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobm9kZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGNoZWNrSW50ZXJzZWN0aW9uKHN0YXRpY19jYXN0PFNWR0VsZW1lbnQq
PihlbGVtZW50KSwgcmVjdCkpCisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChlbGVt
ZW50KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrRW5j
bG9zdXJlKHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKSwgcmVjdCkpCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tF
bmNsb3N1cmUoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGVsZW1lbnQpLCByZWN0KSkKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGVsZW1lbnQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcmVmZXJl
bmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKKyAgICAgICAgZWxlbWVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCA/IHJlZmVy
ZW5jZUVsZW1lbnQgOiB0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIFN0YXRpY05vZGVMaXN0Ojph
ZG9wdChub2Rlcyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuaCIKQEAgLTEwMCw4ICsxMDEsOCBAQCBTdHJpbmcgU1ZHU3R5bGVkRWxlbWVudDo6
dGl0bGUoKSBjb25zdAogCiAgICAgLy8gSWYgd2UgYXJlbid0IGFuIGluc3RhbmNlIGluIGEgPHVz
ZT4gb3IgdGhlIDx1c2U+IHRpdGxlIHdhcyBub3QgZm91bmQsIHRoZW4gZmluZCB0aGUgZmlyc3QK
ICAgICAvLyA8dGl0bGU+IGNoaWxkIG9mIHRoaXMgZWxlbWVudC4KLSAgICBFbGVtZW50KiB0aXRs
ZUVsZW1lbnQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOwotICAgIGZvciAoOyB0aXRsZUVsZW1lbnQ7
IHRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKKyAg
ICBFbGVtZW50KiB0aXRsZUVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbih0
aGlzKTsKKyAgICBmb3IgKDsgdGl0bGVFbGVtZW50OyB0aXRsZUVsZW1lbnQgPSBFbGVtZW50VHJh
dmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbih0aXRsZUVsZW1lbnQsIHRoaXMpKSB7CiAgICAg
ICAgIGlmICh0aXRsZUVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnRpdGxlVGFnKSAmJiB0
aXRsZUVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MzI5KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02ODQsMTggKzY4NCwxOCBAQCBib29sIFNWR1VzZUVsZW1lbnQ6Omhhc0N5Y2xlVXNlUmVmZXJl
bmNpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlRGlz
YWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRyZWUoTm9kZSogc3VidHJlZSkKK3N0YXRpYyBpbmxpbmUg
dm9pZCByZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZShFbGVtZW50KiBzdWJ0cmVl
KQogewogICAgIEFTU0VSVCghc3VidHJlZS0+aW5Eb2N1bWVudCgpKTsKLSAgICBOb2RlKiBub2Rl
ID0gc3VidHJlZS0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlm
IChpc0Rpc2FsbG93ZWRFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgICAgICBOb2RlKiBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSwgc3VidHJlZSk7CisgICAg
RWxlbWVudCogZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHN1YnRyZWUp
OworICAgIHdoaWxlIChlbGVtZW50KSB7CisgICAgICAgIGlmIChpc0Rpc2FsbG93ZWRFbGVtZW50
KGVsZW1lbnQpKSB7CisgICAgICAgICAgICBFbGVtZW50KiBuZXh0ID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZWxlbWVudCwgc3VidHJlZSk7CiAgICAgICAgICAgICAv
LyBUaGUgc3VidHJlZSBpcyBub3QgaW4gZG9jdW1lbnQgc28gdGhpcyB3b24ndCBnZW5lcmF0ZSBl
dmVudHMgdGhhdCBjb3VsZCBtdXRhdGUgdGhlIHRyZWUuCi0gICAgICAgICAgICBub2RlLT5wYXJl
bnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUpOwotICAgICAgICAgICAgbm9kZSA9IG5leHQ7Cisg
ICAgICAgICAgICBlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKGVsZW1lbnQpOwor
ICAgICAgICAgICAgZWxlbWVudCA9IG5leHQ7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc3VidHJlZSk7CisgICAgICAgICAgICBl
bGVtZW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCBzdWJ0cmVlKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWlu
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwCShyZXZpc2lvbiAxMzczMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
YW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDkg
KzIyNSw5IEBAIHZvaWQgU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQoVGltZXIKIHZvaWQg
U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCkKIHsKICAgICB1
bnNpZ25lZCB0aW1pbmdFbGVtZW50Q291bnQgPSAwOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1f
b3duZXJTVkdFbGVtZW50OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBt
X293bmVyU1ZHRWxlbWVudCkpIHsKLSAgICAgICAgaWYgKFNWR1NNSUxFbGVtZW50Ojppc1NNSUxF
bGVtZW50KG5vZGUpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU01JTEVsZW1lbnQqPihu
b2RlKS0+c2V0RG9jdW1lbnRPcmRlckluZGV4KHRpbWluZ0VsZW1lbnRDb3VudCsrKTsKKyAgICBm
b3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBtX293bmVyU1ZHRWxlbWVudDsgZWxlbWVudDsgZWxlbWVu
dCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCwgbV9vd25lclNWR0VsZW1lbnQpKSB7
CisgICAgICAgIGlmIChTVkdTTUlMRWxlbWVudDo6aXNTTUlMRWxlbWVudChlbGVtZW50KSkKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PFNWR1NNSUxFbGVtZW50Kj4oZWxlbWVudCktPnNldERvY3Vt
ZW50T3JkZXJJbmRleCh0aW1pbmdFbGVtZW50Q291bnQrKyk7CiAgICAgfQogICAgIG1fZG9jdW1l
bnRPcmRlckluZGV4ZXNEaXJ0eSA9IGZhbHNlOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>