<?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>45218</bug_id>
          
          <creation_ts>2010-09-03 17:56:19 -0700</creation_ts>
          <short_desc>Move functions from Frame to Editor as planned</short_desc>
          <delta_ts>2012-05-30 00:54:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>274298</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-03 17:56:19 -0700</bug_when>
    <thetext>Move functions from Frame to Editor as planned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276211</commentid>
    <comment_count>1</comment_count>
      <attachid>66972</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-08 17:36:01 -0700</bug_when>
    <thetext>Created attachment 66972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276223</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-08 17:57:16 -0700</bug_when>
    <thetext>Attachment 66972 did not build on qt:
Build output: http://queues.webkit.org/results/3949295</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276300</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-08 21:08:40 -0700</bug_when>
    <thetext>Attachment 66972 did not build on gtk:
Build output: http://queues.webkit.org/results/3979090</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276307</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-08 21:47:14 -0700</bug_when>
    <thetext>Attachment 66972 did not build on chromium:
Build output: http://queues.webkit.org/results/3919332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276454</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 07:52:17 -0700</bug_when>
    <thetext>Attachment 66972 did not build on win:
Build output: http://queues.webkit.org/results/3985048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276575</commentid>
    <comment_count>6</comment_count>
      <attachid>67059</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 10:52:42 -0700</bug_when>
    <thetext>Created attachment 67059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276674</commentid>
    <comment_count>7</comment_count>
      <attachid>67059</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-09 12:35:52 -0700</bug_when>
    <thetext>Comment on attachment 67059
Patch

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

&gt; WebCore/editing/Editor.cpp:3366
&gt; +    styleElement-&gt;appendChild(m_frame-&gt;document()-&gt;createEditingTextNode(&quot;&quot;), ec);
&gt; +    ASSERT(!ec);
This is a security vulnerability.  appendChild fires DOM mutation events, which run JavaScript, which can make |node| point off into unallocated memory.  Please RefPtr node.

&gt; WebCore/editing/Editor.cpp:3394
&gt; +    Node* shadowTreeRoot = selection.shadowTreeRootNode();
I bet this needs to be RefPtr for the same reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276757</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 14:16:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 67059 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=67059&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/editing/Editor.cpp:3366
&gt; &gt; +    styleElement-&gt;appendChild(m_frame-&gt;document()-&gt;createEditingTextNode(&quot;&quot;), ec);
&gt; &gt; +    ASSERT(!ec);
&gt; This is a security vulnerability.  appendChild fires DOM mutation events, which run JavaScript, which can make |node| point off into unallocated memory.  Please RefPtr node.

Glad you spotted it. But the node here came from position.node(); Position already holds the node in a RefPtr. I’ll change the code to use position.node() and eliminate the local variable for clarity on this point.

&gt; &gt; WebCore/editing/Editor.cpp:3394
&gt; &gt; +    Node* shadowTreeRoot = selection.shadowTreeRootNode();
&gt; I bet this needs to be RefPtr for the same reason.

I put this in a RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276821</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-09 16:09:16 -0700</bug_when>
    <thetext>Committed r67122: &lt;http://trac.webkit.org/changeset/67122&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636984</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-30 00:54:10 -0700</bug_when>
    <thetext>*** Bug 23430 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66972</attachid>
            <date>2010-09-08 17:36:01 -0700</date>
            <delta_ts>2010-09-09 10:52:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45218-20100908173600.patch</filename>
            <type>text/plain</type>
            <size>112181</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTYgQEAKKzIwMTAtMDktMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
ZnVuY3Rpb25zIGZyb20gRnJhbWUgdG8gRWRpdG9yIGFzIHBsYW5uZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjE4CisKKyAgICAgICAgSnVzdCBl
eGVjdXRpbmcgdGhlIHBsYW4gdGhhdCBoYXMgbG9uZyBiZWVuIGRlc2NyaWJlZCBpbiBGcmFtZS5o
CisgICAgICAgIHRvIG1vdmUgYSBidW5jaCBvZiBmdW5jdGlvbnMgdG8gRWRpdG9yLgorCisgICAg
ICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0ZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3Rpb25IYXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0
YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmxlYXJuU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGVkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpcnN0UmVj
dEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRj
aGVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldE1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAq
IGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9u
dEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICBNb3ZlZCBm
dW5jdGlvbnMgaGVyZS4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWU6OkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzaG91bGRDaGFu
Z2VTZWxlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL21h
Yy9GcmFtZU1hYy5tbToKKyAgICAgICAgTW92ZWQgZnVuY3Rpb25zIG91dCBvZiBoZXJlLgorCisg
ICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVs
ZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVu
dDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0
ZURlbGV0ZVRvTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRmluZFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpleGVjdXRlU2VsZWN0VG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4ZWN1dGVTZXRNYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmsp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5hYmxlZFZpc2libGVTZWxlY3Rpb25BbmRNYXJrKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpmaW5kKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFydERyYWcpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkpOgorICAgICAgICAqIHBhZ2UvUGFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6Om1hcmtBbGxNYXRjaGVzRm9yVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCk6CisgICAgICAgIENoYW5nZWQgY2FsbCBz
aXRlcyB0byB1c2UgZWRpdG9yKCkuCisKIDIwMTAtMDktMDggIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYXR0ZW1wdCB0byBmaXggdGhlIE1hYyBi
dWlsZHMuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDY3MDMwKQorKysgV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNTc5LDE2ICs1NzksMTIgQEAgX19aTjdXZWJDb3JlNUNh
Y2hlMTFzZXREaXNhYmxlZEViCiBfX1pON1dlYkNvcmU1Q2FjaGUxM2dldFN0YXRpc3RpY3NFdgog
X19aTjdXZWJDb3JlNUNhY2hlMTNzZXRDYXBhY2l0aWVzRWpqagogX19aTjdXZWJDb3JlNUZyYW1l
MTBjcmVhdGVWaWV3RVJLTlNfN0ludFNpemVFUktOU181Q29sb3JFYlMzX2JOU18xM1Njcm9sbGJh
ck1vZGVFYlM3X2IKLV9fWk43V2ViQ29yZTVGcmFtZTEwZmluZFN0cmluZ0VSS04zV1RGNlN0cmlu
Z0ViYmJiCiBfX1pON1dlYkNvcmU1RnJhbWUxNGZyYW1lRm9yV2lkZ2V0RVBLTlNfNldpZGdldEUK
IF9fWk43V2ViQ29yZTVGcmFtZTE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1l
bnRFYgotX19aTjdXZWJDb3JlNUZyYW1lMTljb3VudE1hdGNoZXNGb3JUZXh0RVJLTjNXVEY2U3Ry
aW5nRWJqYgogX19aTjdXZWJDb3JlNUZyYW1lMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CiBfX1pO
N1dlYkNvcmU1RnJhbWUyM3Zpc2libGVQb3NpdGlvbkZvclBvaW50RVJLTlNfOEludFBvaW50RQot
X19aTjdXZWJDb3JlNUZyYW1lMjRjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGVFUE5TXzE5Q1NTU3R5
bGVEZWNsYXJhdGlvbkVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU1RnJhbWUyNW1hdGNo
TGFiZWxzQWdhaW5zdEVsZW1lbnRFUDdOU0FycmF5UE5TXzdFbGVtZW50RQogX19aTjdXZWJDb3Jl
NUZyYW1lMjhzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50RVA3TlNBcnJheVBOU183RWxlbWVu
dEVQbVBiCi1fX1pON1dlYkNvcmU1RnJhbWUzNHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxp
Z2h0ZWRFYgogX19aTjdXZWJDb3JlNUZyYW1lNmNyZWF0ZUVQTlNfNFBhZ2VFUE5TXzIxSFRNTEZy
YW1lT3duZXJFbGVtZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19aTjdXZWJDb3JlNUZy
YW1lN3NldFZpZXdFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOUZyYW1lVmlld0VFRQogX19aTjdXZWJD
b3JlNUZyYW1lOW5vZGVJbWFnZUVQTlNfNE5vZGVFCkBAIC02MDUsNiArNjAxLDcgQEAgX19aTjdX
ZWJDb3JlNkN1cnNvcjhmcm9tVHlwZUVOUzBfNFR5cGVFCiBfX1pON1dlYkNvcmU2Q3Vyc29yRDFF
dgogX19aTjdXZWJDb3JlNkN1cnNvcmFTRVJLUzBfCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBhcHBs
eVN0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQorX19aTjdX
ZWJDb3JlNkVkaXRvcjEwZmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0ViYmJiCiBfX1pON1dlYkNv
cmU2RWRpdG9yMTBpbnNlcnRUZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181RXZlbnRFCiBfX1pON1dl
YkNvcmU2RWRpdG9yMTNjYW5ESFRNTFBhc3RlRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxM3BlcmZv
cm1EZWxldGVFdgpAQCAtNjE2LDEyICs2MTMsMTQgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjE2cGFz
dGVBc1BsYWluVGV4dEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2
CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9zaXRpb25FUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9zaXRpb25FdgorX19aTjdXZWJDb3Jl
NkVkaXRvcjE5Y291bnRNYXRjaGVzRm9yVGV4dEVSS04zV1RGNlN0cmluZ0ViamIKIF9fWk43V2Vi
Q29yZTZFZGl0b3IxOWRlbGV0ZVdpdGhEaXJlY3Rpb25FTlNfMTlTZWxlY3Rpb25Db250cm9sbGVy
MTBFRGlyZWN0aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWJiCiBfX1pON1dlYkNvcmU2RWRpdG9y
MTlpbnNlcnRVbm9yZGVyZWRMaXN0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyMWFwcGx5U3R5bGVU
b1NlbGVjdGlvbkVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKIF9f
Wk43V2ViQ29yZTZFZGl0b3IyMWlzU2VsZWN0aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2
RWRpdG9yMjNzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbkVOU18xNldyaXRpbmdEaXJlY3Rpb25FCiBf
X1pON1dlYkNvcmU2RWRpdG9yMjRhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgorX19aTjdXZWJD
b3JlNkVkaXRvcjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFy
YXRpb25FTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjI0aGFuZGxlUmVqZWN0
ZWRDb3JyZWN0aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0
aWNhbEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2
CkBAIC02MzMsNiArNjMyLDcgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjMwZGVsZXRlU2VsZWN0aW9u
V2l0aAogX19aTjdXZWJDb3JlNkVkaXRvcjMwcGFzdGVBc1BsYWluVGV4dEJ5cGFzc2luZ0RIVE1M
RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMmd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9u
RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzM2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJl
ZEV2CitfX1pON1dlYkNvcmU2RWRpdG9yMzRzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkRWIKIF9fWk43V2ViQ29yZTZFZGl0b3IzNWluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5v
cmRlcmVkRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzNXNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0
aW9uQ2hhbmdlRWIKIF9fWk43V2ViQ29yZTZFZGl0b3IzY3V0RXYKQEAgLTY3MiwxNCArNjcyLDE0
IEBAIF9fWk43V2ViQ29yZThEb2N1bWVudDE2aXNQYWdlQm94VmlzaWJsZUUKIF9fWk43V2ViQ29y
ZThEb2N1bWVudDE3Z2V0Rm9jdXNhYmxlTm9kZXNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklO
U180Tm9kZUVFRUxtMEVFRQogX19aTjdXZWJDb3JlOERvY3VtZW50MThjcmVhdGVXcmFwcGVyQ2Fj
aGVFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlOERvY3VtZW50MTlhY2Nlc3NT
VkdFeHRlbnNpb25zRXYKK19fWk43V2ViQ29yZThEb2N1bWVudDIwc3R5bGVTZWxlY3RvckNoYW5n
ZWRFTlNfMjNTdHlsZVNlbGVjdG9yVXBkYXRlRmxhZ0UKIF9fWk43V2ViQ29yZThEb2N1bWVudDIy
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudEV2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQyNGFkZE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lckVQTlNfMjFNZWRpYUNhblN0YXJ0TGlzdGVuZXJFCiBfX1pON1dlYkNv
cmU4RG9jdW1lbnQyNHNldFNob3VsZENyZWF0ZVJlbmRlcmVyc0ViCitfX1pON1dlYkNvcmU4RG9j
dW1lbnQyNXNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGNFdgogX19aTjdXZWJDb3JlOERvY3VtZW50
MjZwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVsc0VpUk5TXzdJbnRTaXplRVJpUzNfUzNfUzNfCiBf
X1pON1dlYkNvcmU4RG9jdW1lbnQyN3JlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lckVQTlNfMjFN
ZWRpYUNhblN0YXJ0TGlzdGVuZXJFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQzNnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0V2Ci1fX1pON1dlYkNvcmU4RG9jdW1lbnQyNXNjaGVk
dWxlRm9yY2VkU3R5bGVSZWNhbGNFdgotX19aTjdXZWJDb3JlOERvY3VtZW50MjBzdHlsZVNlbGVj
dG9yQ2hhbmdlZEVOU18yM1N0eWxlU2VsZWN0b3JVcGRhdGVGbGFnRQogX19aTjdXZWJDb3JlOERv
Y3VtZW50NGhlYWRFdgogX19aTjdXZWJDb3JlOEZvcm1EYXRhNmNyZWF0ZUVQS3ZtCiBfX1pON1dl
YkNvcmU4Rm9ybURhdGFEMUV2CkBAIC03MzcsOSArNzM3LDkgQEAgX19aTjdXZWJDb3JlOFNldHRp
bmdzMzFzZXRTaHJpbmtzU3RhbmRhbAogX19aTjdXZWJDb3JlOFNldHRpbmdzMzJzZXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MzMnNldE5lZWRz
QWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczMzc2V0RG93
bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkRWIKLV9fWk43V2ViQ29yZThTZXR0aW5nczM1c2V0
RW5mb3JjZUNTU01JTUVUeXBlSW5Ob1F1aXJrc01vZGVFYgogX19aTjdXZWJDb3JlOFNldHRpbmdz
MzRzZXRMb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0
aW5nczM1c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNFYgorX19aTjdXZWJDb3Jl
OFNldHRpbmdzMzVzZXRFbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZUViCiBfX1pON1dl
YkNvcmU4U2V0dGluZ3MzNXNldEV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkRWIKIF9f
Wk43V2ViQ29yZThTZXR0aW5nczM1c2V0VHJlYXRzQW55VGV4dENTU0xpbmtBc1N0eWxlc2hlZXRF
YgogX19aTjdXZWJDb3JlOFNldHRpbmdzMzZzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWRFYgpAQCAtNzc0LDEwICs3NzQsMTAgQEAgX19aTjdXZWJDb3JlOUZyYW1lVmlldzIwZW50
ZXJDb21wb3NpdGluZwogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcGFp
bnRzRXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMnNldEJhc2VCYWNrZ3JvdW5kQ29sb3JFTlNf
NUNvbG9yRQogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIzdXBkYXRlQ2FuSGF2ZVNjcm9sbGJhcnNF
dgotX19aTjdXZWJDb3JlOUZyYW1lVmlldzM3dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJl
Y3Vyc2l2ZUV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRp
b25FUktOU185RmxvYXRTaXplRWZOU181RnJhbWUxOUFkanVzdFZpZXdTaXplT3JOb3RFCiBfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MjlzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbkViCiBfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MjlzeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZUV2CitfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3Mzd1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZl
RXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXczOHNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYVBsYXRm
b3JtV2lkZ2V0RXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXc2Y3JlYXRlRVBOU181RnJhbWVFCiBf
X1pON1dlYkNvcmU5RnJhbWVWaWV3NmNyZWF0ZUVQTlNfNUZyYW1lRVJLTlNfN0ludFNpemVFCkBA
IC04ODksOSArODg5LDkgQEAgX19aTks3V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBjdXJyZW50S2V5
YgogX19aTks3V2ViQ29yZTEySWNvbkRhdGFiYXNlMTJkYXRhYmFzZVBhdGhFdgogX19aTks3V2Vi
Q29yZTEySWNvbkRhdGFiYXNlMjRzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHlFdgogX19aTks3V2Vi
Q29yZTEySWNvbkRhdGFiYXNlOWlzRW5hYmxlZEV2Ci1fX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmpl
Y3Q3Y2hpbGRBdEVqCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNGVuY2xvc2luZ0xheWVy
RXYKIF9fWk5LN1dlYkNvcmUxMlJlbmRlck9iamVjdDE1bG9jYWxUb0Fic29sdXRlRU5TXzEwRmxv
YXRQb2ludEViYgorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0N2NoaWxkQXRFagogX19aTks3
V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MTR3aW5kb3dDbGlwUmVjdEV2CiBfX1pOSzdXZWJDb3JlMTJT
aGFyZWRCdWZmZXI0ZGF0YUV2CiBfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZmZXI0c2l6ZUV2CkBA
IC05ODksMTkgKzk4OSwxNCBAQCBfX1pOSzdXZWJDb3JlNFBhZ2UxNWJhY2tGb3J3YXJkTGlzdEV2
CiBfX1pOSzdXZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVF
dgogX19aTks3V2ViQ29yZTRQYWdlOWdyb3VwTmFtZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTFj
dXJyZW50Rm9ybUV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1lMTJzZWxlY3RlZFRleHRFdgogX19aTks3
V2ViQ29yZTVGcmFtZTEzb3duZXJSZW5kZXJlckV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTRzZWxl
Y3Rpb25JbWFnZUViCiBfX1pOSzdXZWJDb3JlNUZyYW1lMTVjb250ZW50UmVuZGVyZXJFdgogX19a
Tks3V2ViQ29yZTVGcmFtZTE1bGF5ZXJUcmVlQXNUZXh0RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUx
NXNlbGVjdGlvbkJvdW5kc0ViCi1fX1pOSzdXZWJDb3JlNUZyYW1lMTdmaXJzdFJlY3RGb3JSYW5n
ZUVQTlNfNVJhbmdlRQogX19aTks3V2ViQ29yZTVGcmFtZTE4ZG9jdW1lbnRUeXBlU3RyaW5nRXYK
IF9fWk5LN1dlYkNvcmU1RnJhbWUxOHNlbGVjdGlvblRleHRSZWN0c0VSTjNXVEY2VmVjdG9ySU5T
XzlGbG9hdFJlY3RFTG0wRUVFTlMwXzMwU2VsZWN0aW9uUmVjdFJlc3BlY3RUcmFuc2Zvcm1zRWIK
IF9fWk5LN1dlYkNvcmU1RnJhbWUyMHNlbGVjdGlvbkdyYW51bGFyaXR5RXYKLV9fWk5LN1dlYkNv
cmU1RnJhbWUzMGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudEV2Ci1fX1pOSzdXZWJDb3Jl
NUZyYW1lMzFmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0RXYKLV9fWk5LN1dlYkNvcmU1
RnJhbWUzN2Jhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnRFdgogX19aTks3V2Vi
Q29yZTVGcmFtZThzZXR0aW5nc0V2CiBfX1pOSzdXZWJDb3JlNUZyYW1lOWRvbVdpbmRvd0V2CiBf
X1pOSzdXZWJDb3JlNVJhbmdlMTFzdGFydE9mZnNldEVSaQpAQCAtMTAxMywxMyArMTAwOCwxOCBA
QCBfX1pOSzdXZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVSaQogX19aTks3V2ViQ29yZTVSYW5nZTlm
aXJzdE5vZGVFdgogX19aTks3V2ViQ29yZTZDaHJvbWUxMmNyZWF0ZVdpbmRvd0VQTlNfNUZyYW1l
RVJLTlNfMTZGcmFtZUxvYWRSZXF1ZXN0RVJLTlNfMTRXaW5kb3dGZWF0dXJlc0UKIF9fWk5LN1dl
YkNvcmU2Q3Vyc29yMTRwbGF0Zm9ybUN1cnNvckV2CitfX1pOSzdXZWJDb3JlNkVkaXRvcjEyc2Vs
ZWN0ZWRUZXh0RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTNjYW5FZGl0UmljaGx5RXYKIF9fWk5L
N1dlYkNvcmU2RWRpdG9yMTZjb21wb3NpdGlvblJhbmdlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9y
MTZmb250Rm9yU2VsZWN0aW9uRVJiCitfX1pOSzdXZWJDb3JlNkVkaXRvcjE3Zmlyc3RSZWN0Rm9y
UmFuZ2VFUE5TXzVSYW5nZUUKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTdzZWxlY3Rpb25IYXNTdHls
ZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRQogX19aTks3V2ViQ29yZTZFZGl0b3IxN3Nob3Vs
ZERlbGV0ZVJhbmdlRVBOU181UmFuZ2VFCiBfX1pOSzdXZWJDb3JlNkVkaXRvcjIyc2VsZWN0aW9u
U3RhcnRIYXNTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRQogX19aTks3V2ViQ29yZTZF
ZGl0b3IyM2dldENvbXBvc2l0aW9uU2VsZWN0aW9uRVJqUzFfCitfX1pOSzdXZWJDb3JlNkVkaXRv
cjMwYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50RXYKK19fWk5LN1dlYkNvcmU2RWRpdG9y
MzFmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0RXYKK19fWk5LN1dlYkNvcmU2RWRpdG9y
MzdiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0RXYKIF9fWk5LN1dlYkNvcmU2
RWRpdG9yNmNhbkN1dEV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjdDb21tYW5kMTFpc1N1cHBvcnRl
ZEV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjdDb21tYW5kMTVpc1RleHRJbnNlcnRpb25FdgpJbmRl
eDogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9JbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYkNvcmUvZG9tL0lucHV0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBJbnB1dEVs
ZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KElucAogICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFz
c3dvcmRGaWVsZCgpKQogICAgICAgICBkb2N1bWVudC0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRy
eVdoZW5BY3RpdmUoZmFsc2UpOwogCi0gICAgZnJhbWUtPnRleHRGaWVsZERpZEVuZEVkaXRpbmco
ZWxlbWVudCk7CisgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGVs
ZW1lbnQpOwogfQogCiB2b2lkIElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKElu
cHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50
KiBlbGVtZW50LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKQEAgLTEyMyw3ICsxMjMs
NyBAQCB2b2lkIElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZChJbnB1dEVsCiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZnJhbWUtPnRleHRGaWVsZERpZEVuZEVkaXRp
bmcoZWxlbWVudCk7CisgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5n
KGVsZW1lbnQpOwogfQogCiB2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIo
SW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ2
LDcgKzc0Niw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgIGlmIChhbmNlc3Rvck5vZGUgJiYgYW5jZXN0b3JOb2RlLT5oYXNUYWdOYW1lKGlucHV0VGFn
KQogICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihhbmNl
c3Rvck5vZGUpLT5pc1RleHRGaWVsZCgpCiAgICAgICAgICAgICAgICAgJiYgYW5jZXN0b3JOb2Rl
LT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT50ZXh0V2lsbEJl
RGVsZXRlZEluVGV4dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1lbnQqPihhbmNlc3Rvck5vZGUpKTsK
KyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT50ZXh0V2lsbEJlRGVs
ZXRlZEluVGV4dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1lbnQqPihhbmNlc3Rvck5vZGUpKTsKICAg
ICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIgbWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkVkaXRpbmdUZXh0Lmgi
CiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtNTcsNiArNTgsNyBAQAogI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKICNpbmNsdWRlICJLaWxsUmluZy5oIgogI2luY2x1ZGUgIk1vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5k
LmgiCkBAIC00NjksNyArNDcxLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9u
dEZvclNlbAogCiAgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAg
ICAgICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
bV9mcmFtZS0+c3R5bGVGb3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5v
ZGVUb1JlbW92ZQorICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlv
blN0YXJ0KG5vZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIHJlc3VsdCA9IDA7CiAgICAgICAgIGlmIChzdHlsZSkKQEAgLTUy
MCw5ICs1MjIsOSBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4dERpcmVjdGlvbkZvCiAg
ICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIE5h
dHVyYWxXcml0aW5nRGlyZWN0aW9uOwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpOworICAgIFBvc2l0aW9u
IHBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93
bnN0cmVhbSgpOwogCi0gICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgTm9kZSogbm9k
ZSA9IHBvc2l0aW9uLm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBOYXR1
cmFsV3JpdGluZ0RpcmVjdGlvbjsKIApAQCAtNTMwLDcgKzUzMiw3IEBAIFdyaXRpbmdEaXJlY3Rp
b24gRWRpdG9yOjp0ZXh0RGlyZWN0aW9uRm8KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCkt
PmlzUmFuZ2UoKSkgewogICAgICAgICBlbmQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkuZW5kKCkudXBzdHJlYW0oKTsKIAotICAgICAgICBOb2RlKiBwYXN0TGFzdCA9IFJhbmdl
OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHBv
cyksIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChlbmQpKS0+cGFzdExhc3ROb2RlKCk7CisgICAg
ICAgIE5vZGUqIHBhc3RMYXN0ID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBy
YW5nZUNvbXBsaWFudEVxdWl2YWxlbnQocG9zaXRpb24pLCByYW5nZUNvbXBsaWFudEVxdWl2YWxl
bnQoZW5kKSktPnBhc3RMYXN0Tm9kZSgpOwogICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBu
ICYmIG4gIT0gcGFzdExhc3Q7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAg
ICAgIGlmICghbi0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC01NDgsNyArNTUwLDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OnRleHREaXJlY3Rp
b25GbwogICAgIH0KIAogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldCgpKSB7
Ci0gICAgICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqdHlwaW5nU3R5bGUgPSBt
X2ZyYW1lLT50eXBpbmdTdHlsZSgpKSB7CisgICAgICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT50eXBpbmdTdHlsZSgpKSB7CiAgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpID0gdHlwaW5nU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CiAgICAgICAgICAgICBpZiAodW5p
Y29kZUJpZGkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodW5pY29kZUJpZGktPmlzUHJpbWl0
aXZlVmFsdWUoKSk7CkBAIC03OTUsNyArNzk3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdAogICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246Ci0gICAgICAgIG1fZnJh
bWUtPmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CisgICAg
ICAgIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246CiAg
ICAgICAgIGlmIChzdHlsZSkKQEAgLTg3Miw3ICs4NzQsNyBAQCBzdGF0aWMgVHJpU3RhdGUgdHJp
U3RhdGVPZlN0eWxlSW5Db21wdXRlCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9S
ZW1vdmU7Ci0gICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9u
U3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7Cisg
ICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBz
ZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzZWxlY3Rpb25T
dHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFRyaVN0YXRlIHN0YXRlID0gdHJpU3Rh
dGVPZlN0eWxlSW5Db21wdXRlZFN0eWxlKHN0eWxlLCBzZWxlY3Rpb25TdHlsZS5nZXQoKSk7CkBA
IC04OTAsNyArODkyLDcgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShDU1NT
dAogCiAgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAgICAgICAg
IE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db21wdXRlZFN0eWxl
KG5vZGVUb1JlbW92ZSk7CisgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24+IHNlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUp
OwogICAgICAgICBpZiAoIXNlbGVjdGlvblN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNl
VHJpU3RhdGU7CiAgICAgICAgIHN0YXRlID0gdHJpU3RhdGVPZlN0eWxlSW5Db21wdXRlZFN0eWxl
KHN0eWxlLCBzZWxlY3Rpb25TdHlsZS5nZXQoKSk7CkBAIC05MzgsNyArOTQwLDcgQEAgc3RhdGlj
IGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sbwogU3RyaW5nIEVkaXRvcjo6c2VsZWN0
aW9uU3RhcnRDU1NQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKQogewogICAgIE5vZGUqIG5v
ZGVUb1JlbW92ZTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5
bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7CisgICAg
UmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9uQ29t
cHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMTA1NCw2ICsxMDU2LDcgQEAgRWRpdG9yOjpFZGl0
b3IoRnJhbWUqIGZyYW1lKQogICAgICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAgICAg
LCBtX2tpbGxSaW5nKGFkb3B0UHRyKG5ldyBLaWxsUmluZykpCiAgICAgLCBtX2NvcnJlY3Rpb25Q
YW5lbFRpbWVyKHRoaXMsICZFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCisgICAg
LCBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTEx
NTEsNyArMTE1NCw3IEBAIHZvaWQgRWRpdG9yOjpjdXQoKQogICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxl
Y3Rpb24uZ2V0KCkpKSB7CiAgICAgICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29udHJvbChtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpKQotICAgICAgICAgICAgUGFzdGVib2Fy
ZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQobV9mcmFtZS0+c2VsZWN0ZWRU
ZXh0KCkpOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3Jp
dGVQbGFpblRleHQoc2VsZWN0ZWRUZXh0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQ
YXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVNlbGVjdGlvbihzZWxlY3Rpb24u
Z2V0KCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUpOwogICAgICAgICBkaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwpAQCAtMTE2OSw3ICsxMTcyLDcgQEAgdm9pZCBFZGl0
b3I6OmNvcHkoKQogICAgIH0KIAogICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29udHJvbChtX2Zy
YW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpKQotICAgICAgICBQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChtX2ZyYW1lLT5zZWxlY3RlZFRleHQo
KSk7CisgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5U
ZXh0KHNlbGVjdGVkVGV4dCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlRWxlbWVudCA9IGltYWdlRWxlbWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KSkK
QEAgLTE2MjUsNyArMTYyOCw3IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAg
aWYgKHNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+cmVtb3ZlTWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpOwogCi0gICAgU3RyaW5nIHRleHQgPSBmcmFtZSgpLT5zZWxlY3RlZFRleHQoKTsKKyAg
ICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgp
KTsKICAgICBjbGllbnQoKS0+aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCh0ZXh0KTsKIH0KQEAg
LTE2MzgsNyArMTY0MSw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICAvLyBG
SVhNRTogV2UgZG9uJ3QgY2FsbCB0aGlzIG9uIHRoZSBNYWMsIGFuZCBpdCBzaG91bGQgcmVtb3Zl
IG1pc3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5kIHRoZSAKICAgICAvLyBsZWFybmVkIHdvcmQsIHNl
ZSA8cmRhcjovL3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBTdHJpbmcgdGV4dCA9IGZyYW1lKCkt
PnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CiAgICAg
QVNTRVJUKHRleHQubGVuZ3RoKCkpOwogICAgIGNsaWVudCgpLT5sZWFybldvcmQodGV4dCk7CiB9
CkBAIC0yMTQwLDcgKzIxNDMsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxs
aW5nKGJvCiAKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogewotICAgIFN0
cmluZyBzZWxlY3RlZFN0cmluZyA9IGZyYW1lKCktPnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmlu
ZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwogICAgIGludCBsZW5ndGggPSBzZWxl
Y3RlZFN0cmluZy5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjIzNiw3ICsyMjM5LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2Vz
Rm9yVW5ncmFtbQogCiBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
U2VsZWN0aW9uKCkKIHsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBmcmFtZSgpLT5zZWxl
Y3RlZFRleHQoKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRleHQoKTsK
ICAgICBBU1NFUlQoc2VsZWN0ZWRTdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgVmVjdG9yPFN0cmlu
Zz4gZ3Vlc3NlczsKQEAgLTMxMDQsNCArMzEwNyw0NDkgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNl
bGVjdGlvbkFmdGVyQ29tbWFuZAogICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNl
bGVjdGlvbigpOwogfQogCitTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBwbGFpblRleHQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpOworfQorCitJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFu
Z2UqIHJhbmdlKSBjb25zdAoreworICAgIGludCBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwOwor
ICAgIEFTU0VSVChyYW5nZS0+c3RhcnRDb250YWluZXIoKSk7CisgICAgQVNTRVJUKHJhbmdlLT5l
bmRDb250YWluZXIoKSk7CisKKyAgICBJbmxpbmVCb3gqIHN0YXJ0SW5saW5lQm94OworICAgIGlu
dCBzdGFydENhcmV0T2Zmc2V0OworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBWaXNpYmxl
UG9zaXRpb24ocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBp
ZiAoc3RhcnRQb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAg
ICBzdGFydFBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBzdGFydElu
bGluZUJveCwgc3RhcnRDYXJldE9mZnNldCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXIgPSBzdGFydFBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBBU1NFUlQoc3Rh
cnRSZW5kZXJlcik7CisgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXIt
PmxvY2FsQ2FyZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0LCAmZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lKTsKKyAgICBpZiAoc3RhcnRDYXJldFJlY3QgIT0gSW50UmVjdCgpKQor
ICAgICAgICBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRSZWN0KHN0YXJ0Q2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKwor
ICAgIElubGluZUJveCogZW5kSW5saW5lQm94OworICAgIGludCBlbmRDYXJldE9mZnNldDsKKyAg
ICBQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihyYW5nZS0+ZW5kUG9zaXRp
b24oKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgZW5kUG9zaXRpb24uZ2V0SW5saW5lQm94QW5k
T2Zmc2V0KFVQU1RSRUFNLCBlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKKworICAgIFJl
bmRlck9iamVjdCogZW5kUmVuZGVyZXIgPSBlbmRQb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCk7
CisgICAgQVNTRVJUKGVuZFJlbmRlcmVyKTsKKyAgICBJbnRSZWN0IGVuZENhcmV0UmVjdCA9IGVu
ZFJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsK
KyAgICBpZiAoZW5kQ2FyZXRSZWN0ICE9IEludFJlY3QoKSkKKyAgICAgICAgZW5kQ2FyZXRSZWN0
ID0gZW5kUmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGVuZENhcmV0UmVj
dCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisKKyAgICBpZiAoc3RhcnRDYXJldFJlY3QueSgp
ID09IGVuZENhcmV0UmVjdC55KCkpIHsKKyAgICAgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmUgb24g
dGhlIHNhbWUgbGluZQorICAgICAgICByZXR1cm4gSW50UmVjdChtaW4oc3RhcnRDYXJldFJlY3Qu
eCgpLCBlbmRDYXJldFJlY3QueCgpKSwKKyAgICAgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LnkoKSwK
KyAgICAgICAgICAgIGFicyhlbmRDYXJldFJlY3QueCgpIC0gc3RhcnRDYXJldFJlY3QueCgpKSwK
KyAgICAgICAgICAgIG1heChzdGFydENhcmV0UmVjdC5oZWlnaHQoKSwgZW5kQ2FyZXRSZWN0Lmhl
aWdodCgpKSk7CisgICAgfQorCisgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmVuJ3Qgb24gdGhlIHNh
bWUgbGluZSwgc28gZ28gZnJvbSBzdGFydCB0byB0aGUgZW5kIG9mIGl0cyBsaW5lCisgICAgcmV0
dXJuIEludFJlY3Qoc3RhcnRDYXJldFJlY3QueCgpLAorICAgICAgICBzdGFydENhcmV0UmVjdC55
KCksCisgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LndpZHRoKCkgKyBleHRyYVdpZHRoVG9FbmRPZkxp
bmUsCisgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LmhlaWdodCgpKTsKK30KKworYm9vbCBFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rp
b24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmlu
aXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAoreworICAgIHJldHVybiBjbGllbnQoKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5
LCBzdGlsbFNlbGVjdGluZyk7Cit9CisKK3ZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5n
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bikKK3sKKyAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgbV9m
cmFtZS0+Y2xlYXJUeXBpbmdTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHlsZS4KKyAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IG11dGFibGVTdHlsZSA9IHN0eWxlLT5tYWtlTXV0YWJsZSgp
OworICAgIGlmIChtX2ZyYW1lLT50eXBpbmdTdHlsZSgpKSB7CisgICAgICAgIG1fZnJhbWUtPnR5
cGluZ1N0eWxlKCktPm1lcmdlKG11dGFibGVTdHlsZS5nZXQoKSk7CisgICAgICAgIG11dGFibGVT
dHlsZSA9IG1fZnJhbWUtPnR5cGluZ1N0eWxlKCk7CisgICAgfQorCisgICAgUmVmUHRyPENTU1Zh
bHVlPiB1bmljb2RlQmlkaTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbjsKKyAgICBp
ZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbikgeworICAg
ICAgICB1bmljb2RlQmlkaSA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVVuaWNvZGVCaWRpKTsKKyAgICAgICAgZGlyZWN0aW9uID0gbXV0YWJsZVN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKKyAgICB9CisKKyAgICBO
b2RlKiBub2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFy
dCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIGNvbXB1dGVkU3R5bGUobm9kZSktPmRp
ZmYobXV0YWJsZVN0eWxlLmdldCgpKTsKKworICAgIGlmIChlZGl0aW5nQWN0aW9uID09IEVkaXRB
Y3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uICYmIHVuaWNvZGVCaWRpKSB7CisgICAgICAgIEFTU0VS
VCh1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAgICAgbXV0YWJsZVN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0SWRlbnQoKSk7CisgICAgICAgIGlm
IChkaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChkaXJlY3Rpb24tPmlzUHJpbWl0aXZl
VmFsdWUoKSk7CisgICAgICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5RGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGRpcmVjdGlvbi5n
ZXQoKSktPmdldElkZW50KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIGJs
b2NrIHN0eWxlcywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KKyAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrU3R5bGUgPSBtdXRhYmxl
U3R5bGUtPmNvcHlCbG9ja1Byb3BlcnRpZXMoKTsKKyAgICBibG9ja1N0eWxlLT5kaWZmKG11dGFi
bGVTdHlsZS5nZXQoKSk7CisgICAgaWYgKGJsb2NrU3R5bGUtPmxlbmd0aCgpID4gMCkKKyAgICAg
ICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1l
bnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikpOworCisgICAgLy8gU2V0IHRo
ZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KKyAgICBtX2ZyYW1lLT5zZXRU
eXBpbmdTdHlsZShtdXRhYmxlU3R5bGUuZ2V0KCkpOworfQorCitQYXNzUmVmUHRyPENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbj4gRWRpdG9yOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUq
JiBub2RlVG9SZW1vdmUpIGNvbnN0Cit7CisgICAgbm9kZVRvUmVtb3ZlID0gMDsKKworICAgIGlm
IChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKSk7CisgICAgUG9zaXRpb24gcG9zaXRpb24gPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9z
aXRpb24oKTsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBwb3NpdGlvbi5lbGVtZW50KCk7Cisg
ICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxFbGVtZW50
PiBzdHlsZUVsZW1lbnQgPSBlbGVtZW50OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisg
ICAgaWYgKG1fZnJhbWUtPnR5cGluZ1N0eWxlKCkpIHsKKyAgICAgICAgc3R5bGVFbGVtZW50ID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CisKKyAg
ICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBtX2ZyYW1lLT50eXBp
bmdTdHlsZSgpLT5jc3NUZXh0KCkuaW1wbCgpLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOwor
CisgICAgICAgIHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlRWRpdGluZ1RleHROb2RlKCIiKSwgZWMpOworICAgICAgICBBU1NFUlQoIWVjKTsKKwor
ICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5j
YW5IYXZlQ2hpbGRyZW4oKSkKKyAgICAgICAgICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKHN0eWxl
RWxlbWVudCwgZWMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9
IGVsZW1lbnQtPnBhcmVudCgpOworICAgICAgICAgICAgTm9kZSogbmV4dCA9IGVsZW1lbnQtPm5l
eHRTaWJsaW5nKCk7CisKKyAgICAgICAgICAgIGlmIChuZXh0KQorICAgICAgICAgICAgICAgIHBh
cmVudC0+aW5zZXJ0QmVmb3JlKHN0eWxlRWxlbWVudCwgbmV4dCwgZWMpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBl
Yyk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKCFlYyk7CisKKyAgICAgICAgbm9kZVRvUmVt
b3ZlID0gc3R5bGVFbGVtZW50LmdldCgpOworICAgIH0KKworICAgIHJldHVybiBjb21wdXRlZFN0
eWxlKHN0eWxlRWxlbWVudC5yZWxlYXNlKCkpOworfQorCit2b2lkIEVkaXRvcjo6dGV4dEZpZWxk
RGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqIGUpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAg
ICBjbGllbnQoKS0+dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKGUpOworfQorCit2b2lkIEVkaXRv
cjo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlKQoreworICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgY2xpZW50KCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoZSk7Cit9CisKK3Zv
aWQgRWRpdG9yOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCogZSkKK3sKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQo
ZSk7Cit9CisKK2Jvb2wgRWRpdG9yOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVu
dCogZSwgS2V5Ym9hcmRFdmVudCoga2UpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBy
ZXR1cm4gY2xpZW50KCktPmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChlLCBrZSk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yOjp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKEVsZW1lbnQqIGlucHV0KQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xp
ZW50KCktPnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoaW5wdXQpOworfQorCit2b2lkIEVk
aXRvcjo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCogZSkKK3sKKyAgICBpZiAoY2xp
ZW50KCkpCisgICAgICAgIGNsaWVudCgpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShlKTsKK30K
Kwordm9pZCBFZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0Cit7
CisgICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxl
bWVudHNCeVRhZ05hbWUoImJvZHkiKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIGFwcGx5
RWRpdGluZ1N0eWxlVG9FbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkp
KSk7Cit9CisKK3ZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAoreworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5zdHlsZSgpOworICAg
IEFTU0VSVChzdHlsZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdvcmQiLCBmYWxzZSwgZWMp
OworICAgIEFTU0VSVCghZWMpOworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdE5ic3BNb2RlLCAic3BhY2UiLCBmYWxzZSwgZWMpOworICAgIEFTU0VSVCghZWMpOworICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhaywgImFmdGVyLXdo
aXRlLXNwYWNlIiwgZmFsc2UsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKworUmVuZGVyU3R5
bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlICombm9kZVRvUmVtb3ZlKSBj
b25zdAoreworICAgIG5vZGVUb1JlbW92ZSA9IDA7CisKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0
aW9uKCktPmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBvc2l0aW9uIHBvc2l0
aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgaWYgKCFwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fZnJhbWUtPnR5cGluZ1N0eWxl
KCkpCisgICAgICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpOworCisgICAgUmVm
UHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVs
ZW1lbnQoc3BhblRhZywgZmFsc2UpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
U3RyaW5nIHN0eWxlVGV4dCA9IG1fZnJhbWUtPnR5cGluZ1N0eWxlKCktPmNzc1RleHQoKSArICIg
ZGlzcGxheTogaW5saW5lIjsKKyAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0
dHIsIHN0eWxlVGV4dC5pbXBsKCksIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAgIHN0eWxl
RWxlbWVudC0+YXBwZW5kQ2hpbGQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1Rl
eHROb2RlKCIiKSwgZWMpOworICAgIEFTU0VSVCghZWMpOworCisgICAgbm9kZS0+cGFyZW50Tm9k
ZSgpLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKwor
ICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKKyAgICByZXR1cm4gc3R5bGVF
bGVtZW50LT5yZW5kZXJlcigpID8gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDog
MDsKK30KKworLy8gU2VhcmNoZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBp
ZiBub3RoaW5nIGlzIHNlbGVjdGVkLgorYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywg
Ym9vbCBzdGFydEluU2VsZWN0aW9uKQoreworICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZS0+ZXhjbHVkZUZyb21UZXh0U2Vh
cmNoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFN0YXJ0IGZyb20gYW4gZWRn
ZSBvZiB0aGUgc2VsZWN0aW9uLCBpZiB0aGVyZSdzIGEgc2VsZWN0aW9uIHRoYXQncyBub3QgaW4g
c2hhZG93IGNvbnRlbnQuIFdoaWNoIGVkZ2UKKyAgICAvLyBpcyB1c2VkIGRlcGVuZHMgb24gd2hl
dGhlciB3ZSdyZSBzZWFyY2hpbmcgZm9yd2FyZCBvciBiYWNrd2FyZCwgYW5kIHdoZXRoZXIgc3Rh
cnRJblNlbGVjdGlvbiBpcyBzZXQuCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5n
ZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpOworICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworCisgICAgaWYg
KGZvcndhcmQpCisgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBzdGFydEluU2Vs
ZWN0aW9uID8gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogc2VsZWN0aW9uLnZpc2libGVFbmQo
KSk7CisgICAgZWxzZQorICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0SW5T
ZWxlY3Rpb24gPyBzZWxlY3Rpb24udmlzaWJsZUVuZCgpIDogc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpKTsKKworICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VsZWN0aW9uLnNoYWRvd1RyZWVS
b290Tm9kZSgpOworICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgeworICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICAgICAgaWYgKGZvcndhcmQpCisgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291bnQo
KSwgZWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQo
c2hhZG93VHJlZVJvb3QsIDAsIGVjKTsKKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3Vs
dFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwg
Y2FzZUZsYWcpKTsKKyAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSBzZWxlY3Rpb24gYW5kIHRo
ZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbiwgZmlu
ZCBhZ2Fpbi4KKyAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0
byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCisgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5z
dGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJy
ZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KKyAgICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiBhcmVS
YW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpIHsK
KyAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQo
KSk7CisgICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFu
Z2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7
CisKKyAgICAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7CisgICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICAgICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgICAgIHNl
YXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jaGlsZE5v
ZGVDb3VudCgpLCBlYyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1RyZWVSb290LCAwLCBlYyk7CisgICAgICAgIH0KKworICAg
ICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdl
dCwgZm9yd2FyZCwgY2FzZUZsYWcpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0
aW9uID0gMDsKKworICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFkb3cgdHJl
ZSwgc2VhcmNoIGluIG1haW4gY29udGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVlLgorICAg
IGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3Qp
IHsKKyAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1l
bnQoKSk7CisgICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dFN0YXJ0QWZ0ZXIoc2hhZG93VHJlZVJvb3QtPnNoYWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShz
aGFkb3dUcmVlUm9vdC0+c2hhZG93UGFyZW50Tm9kZSgpLCBleGNlcHRpb24pOworCisgICAgICAg
IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBm
b3J3YXJkLCBjYXNlRmxhZyk7CisgICAgfQorCisgICAgaWYgKCFpbnNpZGVWaXNpYmxlQXJlYShy
ZXN1bHRSYW5nZS5nZXQoKSkpIHsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBuZXh0VmlzaWJsZVJh
bmdlKHJlc3VsdFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxh
Zyk7CisgICAgICAgIGlmICghcmVzdWx0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdy
YXBwaW5nLCBzZWFyY2ggYWdhaW4gaW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxsCisg
ICAgLy8gcmVkdW5kYW50bHkgcmUtc2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQgaW4g
c29tZSBjYXNlcykuCisgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSAm
JiB3cmFwRmxhZykgeworICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2Zy
YW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNl
YXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKTsKKyAgICAgICAgLy8g
V2UgdXNlZCB0byByZXR1cm4gZmFsc2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1l
IHJhbmdlIHRoYXQgd2Ugc3RhcnRlZCB3aXRoCisgICAgICAgIC8vIChlLmcuLCB0aGUgc2VsZWN0
aW9uIHdhcyBhbHJlYWR5IHRoZSBvbmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1dCB3ZSBk
ZWNpZGVkIHRoYXQKKyAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNhc2UgaW5z
dGVhZCwgc28gd2UnbGwganVzdCBmYWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgorICAgIH0KKwor
ICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAgIG1fZnJhbWUt
PnJldmVhbFNlbGVjdGlvbigpOworICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBFZGl0
b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgY2FzZUZs
YWcsIHVuc2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRjaGVzKQoreworICAgIGlmICh0YXJnZXQu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNo
UmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKKworICAgIEV4Y2Vw
dGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKKyAg
ICBkbyB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChz
ZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBjYXNlRmxhZykpOworICAgICAgICBpZiAo
cmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pKSB7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50
cyhtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dEFmdGVyKHJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gT25seSB0cmVhdCB0aGUgcmVzdWx0IGFzIGEgbWF0Y2ggaWYgaXQgaXMgdmlzaWJsZQor
ICAgICAgICBpZiAoaW5zaWRlVmlzaWJsZUFyZWEocmVzdWx0UmFuZ2UuZ2V0KCkpKSB7CisgICAg
ICAgICAgICArK21hdGNoQ291bnQ7CisgICAgICAgICAgICBpZiAobWFya01hdGNoZXMpCisgICAg
ICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVz
dWx0UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBB
IGxpbWl0IG9mIDAgbWVhbnMgbm8gbGltaXQuCisgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0
Y2hDb3VudCA+PSBsaW1pdCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFNldCB0
aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNoIHJhbmdlIHRvIGJlIHRoZSBlbmQgb2YgdGhlIHBy
ZXZpb3VzCisgICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2Ug
YSBWaXNpYmxlUG9zaXRpb24gaGVyZSwKKyAgICAgICAgLy8gc2luY2UgZmluZFBsYWluVGV4dCB3
aWxsIHVzZSBhIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRoZSB2aXNpYmxlCisgICAgICAgIC8v
IHRleHQgbm9kZXMuIAorICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQocmVzdWx0UmFuZ2Ut
PmVuZENvbnRhaW5lcihleGNlcHRpb24pLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlv
biksIGV4Y2VwdGlvbik7CisKKyAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hS
YW5nZS0+c2hhZG93VHJlZVJvb3ROb2RlKCk7CisgICAgICAgIGlmIChzZWFyY2hSYW5nZS0+Y29s
bGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpCisgICAgICAgICAgICBzZWFyY2hS
YW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291
bnQoKSwgZXhjZXB0aW9uKTsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGlmIChtYXJrTWF0
Y2hlcykgeworICAgICAgICAvLyBEbyBhICJmYWtlIiBwYWludCBpbiBvcmRlciB0byBleGVjdXRl
IHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJlbmRlcmVkIHJlY3QgZm9yIGVhY2ggdGV4dCBt
YXRjaC4KKyAgICAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSAmJiBtX2ZyYW1lLT5jb250ZW50UmVu
ZGVyZXIoKSkgeworICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7IC8vIEVuc3VyZSBsYXlvdXQgaXMgdXAgdG8gZGF0ZS4KKyAgICAgICAgICAgIEludFJlY3Qg
dmlzaWJsZVJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAg
ICAgICAgICAgaWYgKCF2aXNpYmxlUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOworICAg
ICAgICAgICAgICAgIGNvbnRleHQuc2V0UGFpbnRpbmdEaXNhYmxlZCh0cnVlKTsKKyAgICAgICAg
ICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnBhaW50Q29udGVudHMoJmNvbnRleHQsIHZpc2libGVS
ZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXRj
aENvdW50OworfQorCit2b2lkIEVkaXRvcjo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZChib29sIGZsYWcpCit7CisgICAgaWYgKGZsYWcgPT0gbV9hcmVNYXJrZWRUZXh0TWF0Y2hl
c0hpZ2hsaWdodGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FyZU1hcmtlZFRleHRNYXRj
aGVzSGlnaGxpZ2h0ZWQgPSBmbGFnOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7Cit9CisKK3ZvaWQg
RWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykKK3sKKyAgICBib29sIGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gdGhpcy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKTsKKyAgICBib29sIGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKTsKKyAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpIHsKKyAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGphY2VudFdvcmRzOworICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGVkU2VudGVuY2U7CisgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9
IG1fZnJhbWUtPnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKKyAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBuZXdTdGFydChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCku
dmlzaWJsZVN0YXJ0KCkpOworICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVT
ZWxlY3Rpb24oc3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5k
T2ZXb3JkKG5ld1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgICAgIGlm
IChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICAgICAgICAgIG5l
d1NlbGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShuZXdT
dGFydCksIGVuZE9mU2VudGVuY2UobmV3U3RhcnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFdoZW4gdHlwaW5nIHdlIGNoZWNrIHNwZWxsaW5nIGVsc2V3aGVyZSwgc28gZG9uJ3QgcmVkbyBp
dCBoZXJlLgorICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1
bHRpbmcgZnJvbSBhIGRlbGV0ZSBvcGVyYXRpb24sCisgICAgICAgIC8vIG9sZFNlbGVjdGlvbiBt
YXkgbm8gbG9uZ2VyIGJlIGluIHRoZSBkb2N1bWVudC4KKyAgICAgICAgaWYgKGNsb3NlVHlwaW5n
ICYmIG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFy
dCgpLm5vZGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKSk7CisgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZEFkamFjZW50V29y
ZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25C
b3VuZGFyeSksIGVuZE9mV29yZChvbGRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Cisg
ICAgICAgICAgICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3RlZFNlbnRlbmNl
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uob2xkU3RhcnQpLCBlbmRPZlNlbnRl
bmNlKG9sZFN0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFyKG9sZEFkamFjZW50V29yZHMsIG9sZFNlbGVjdGVkU2VudGVuY2UgIT0gbmV3U2Vs
ZWN0ZWRTZW50ZW5jZSwgb2xkU2VsZWN0ZWRTZW50ZW5jZSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKG9s
ZEFkamFjZW50V29yZHMsIGZhbHNlLCBvbGRBZGphY2VudFdvcmRzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgb25seSBlcmFzZXMgbWFya2VycyB0aGF0IGFy
ZSBpbiB0aGUgZmlyc3QgdW5pdCAod29yZCBvciBzZW50ZW5jZSkgb2YgdGhlIHNlbGVjdGlvbi4K
KyAgICAgICAgLy8gUGVyaGFwcyBwZWN1bGlhciwgYnV0IGl0IG1hdGNoZXMgQXBwS2l0LgorICAg
ICAgICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRvTm9y
bWFsaXplZFJhbmdlKCkpIHsKKyAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7CisgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92
ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdT
ZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoc2VudGVuY2VSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOworICAgIH0KKworICAgIC8vIFdoZW4gY29udGlu
dW91cyBzcGVsbCBjaGVja2luZyBpcyBvZmYsIGV4aXN0aW5nIG1hcmtlcnMgZGlzYXBwZWFyIGFm
dGVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4KKyAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKQorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJl
bW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICBpZiAoIWlzQ29udGlu
dW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisKKyAg
ICByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDY3MDMwKQorKysgV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMSBAQAogI2lu
Y2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18pCitjbGFzcyBO
U0RpY3Rpb25hcnk7Cit0eXBlZGVmIGludCBOU1dyaXRpbmdEaXJlY3Rpb247CisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwpAQCAtMzE2
LDEyICszMjEsNDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFzdGVBc1BsYWluVGV4dEJ5cGFzc2lu
Z0RIVE1MKCk7CiAKICAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRGcm9tKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3Q7CisKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkg
Y29uc3Q7CisgICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwg
Ym9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFydEluU2VsZWN0aW9uKTsKKwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsoKSBjb25zdDsgLy8gTWFyaywgdG8gYmUg
dXNlZCBhcyBlbWFjcyB1c2VzIGl0LgorICAgIHZvaWQgc2V0TWFyayhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJik7CisKKyAgICB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOworICAgIHZv
aWQgYXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCkgY29uc3Q7CisgICAgdm9pZCBhcHBs
eUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50KikgY29uc3Q7CisKKyAgICBJbnRSZWN0IGZp
cnN0UmVjdEZvclJhbmdlKFJhbmdlKikgY29uc3Q7CisKKyAgICB2b2lkIHJlc3BvbmRUb0NoYW5n
ZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29sIGNs
b3NlVHlwaW5nKTsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVj
dGlvbiwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKKworICAgIFJlbmRl
clN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0
OworCisgICAgdW5zaWduZWQgY291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmLCBib29s
IGNhc2VGbGFnLCB1bnNpZ25lZCBsaW1pdCwgYm9vbCBtYXJrTWF0Y2hlcyk7CisgICAgYm9vbCBt
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wpOworCisgICAgUGFzc1JlZlB0cjxDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5v
ZGVUb1JlbW92ZSkgY29uc3Q7CisKKyAgICB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhF
bGVtZW50Kik7CisgICAgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKTsKKyAg
ICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50Kik7CisgICAgYm9vbCBkb1Rl
eHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCosIEtleWJvYXJkRXZlbnQqKTsKKyAgICB2
b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCogaW5wdXQpOworICAgIHZv
aWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopOworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIE5TRGljdGlvbmFyeSogZm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNv
bnN0OworICAgIE5TV3JpdGluZ0RpcmVjdGlvbiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVj
dGlvblN0YXJ0KCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFt
ZTsKICAgICBPd25QdHI8RGVsZXRlQnV0dG9uQ29udHJvbGxlcj4gbV9kZWxldGVCdXR0b25Db250
cm9sbGVyOwogICAgIFJlZlB0cjxFZGl0Q29tbWFuZD4gbV9sYXN0RWRpdENvbW1hbmQ7CiAgICAg
UmVmUHRyPE5vZGU+IG1fcmVtb3ZlZEFuY2hvcjsKLQogICAgIFJlZlB0cjxUZXh0PiBtX2NvbXBv
c2l0aW9uTm9kZTsKICAgICB1bnNpZ25lZCBtX2NvbXBvc2l0aW9uU3RhcnQ7CiAgICAgdW5zaWdu
ZWQgbV9jb21wb3NpdGlvbkVuZDsKQEAgLTMzMyw2ICszNzMsOCBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxSYW5nZT4gbV9yYW5nZVRvQmVSZXBsYWNlZEJ5Q29ycmVjdGlvbjsKICAgICBTdHJpbmcg
bV9zdHJpbmdUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb247CiAgICAgVGltZXI8RWRpdG9yPiBtX2Nv
cnJlY3Rpb25QYW5lbFRpbWVyOworICAgIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOworICAgIGJv
b2wgbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdodGVkOwogCiAgICAgYm9vbCBjYW5EZWxl
dGVSYW5nZShSYW5nZSopIGNvbnN0OwogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCopOwpAQCAtMzYxLDYgKzQwMywyMiBAQCBpbmxpbmUgdm9pZCBFZGl0
b3I6OnNldFN0YXJ0TmV3S2lsbFJpbmdTCiAgICAgbV9zaG91bGRTdGFydE5ld0tpbGxSaW5nU2Vx
dWVuY2UgPSBmbGFnOwogfQogCitpbmxpbmUgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgRWRpdG9y
OjptYXJrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tYXJrOworfQorCitpbmxpbmUgdm9pZCBF
ZGl0b3I6OnNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQoreworICAg
IG1fbWFyayA9IHNlbGVjdGlvbjsKK30KKworaW5saW5lIGJvb2wgRWRpdG9yOjptYXJrZWRUZXh0
TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hcmVNYXJrZWRU
ZXh0TWF0Y2hlc0hpZ2hsaWdodGVkOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVkaXRvcl9oCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZp
c2lvbiA2NzAzMCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVUb2dnbGVTdHls
ZUluTGlzdChGcmEKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBOb2RlKiBub2Rl
VG9SZW1vdmUgPSAwOwotICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHNl
bGVjdGlvblN0eWxlID0gZnJhbWUtPnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3Zl
KTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25TdHls
ZSA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUp
OwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc2VsZWN0ZWRDU1NWYWx1ZSA9IHNlbGVjdGlvblN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwogICAgIFN0cmluZyBuZXdTdHlsZSA9
ICJub25lIjsKICAgICBpZiAoc2VsZWN0ZWRDU1NWYWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewpAQCAt
Mzc1LDcgKzM3NSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb0VuZE9mUGFyYWdyYXAK
IAogc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+
IG1hcmsgPSBmcmFtZS0+bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgUmVmUHRyPFJh
bmdlPiBtYXJrID0gZnJhbWUtPmVkaXRvcigpLT5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBpZiAobWFyaykgewogICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24g
PSBmcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24t
PnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgZnJhbWUtPmVkaXRv
cigpLT5zZWxlY3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsKQEAg
LTM4NCw3ICszODQsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lKiBm
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGZyYW1lLT5lZGl0b3IoKS0+
cGVyZm9ybURlbGV0ZSgpOwotICAgIGZyYW1lLT5zZXRNYXJrKGZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCkpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0TWFyayhmcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDAyLDcgKzQw
Miw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVXb3JkRm9yd2FyZChGcmEKIAogc3RhdGlj
IGJvb2wgZXhlY3V0ZUZpbmRTdHJpbmcoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5maW5k
U3RyaW5nKHZhbHVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICAgIHJldHVybiBmcmFt
ZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodmFsdWUsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7
CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVGb250TmFtZShGcmFtZSogZnJhbWUsIEV2ZW50Kiwg
RWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC05NTEs
NyArOTUxLDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFNlbnRlbmNlKEZyYW1lKgogCiBz
dGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxSYW5nZT4gbWFy
ayA9IGZyYW1lLT5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+
IG1hcmsgPSBmcmFtZS0+ZWRpdG9yKCktPm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFJhbmdl
KCk7CiAgICAgaWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24pIHsKICAgICAgICAgc3lzdGVtQmVlcCgp
OwpAQCAtOTY4LDcgKzk2OCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RXb3JkKEZyYW1l
KiBmcmEKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNldE1hcmsoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgZnJhbWUtPnNldE1h
cmsoZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgZnJhbWUtPmVkaXRvcigp
LT5zZXRNYXJrKGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC05OTksMTQgKzk5OSwxNCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU3VwZXJz
Y3JpcHQoRnJhbWUqIGZyCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTd2FwV2l0aE1hcmsoRnJhbWUq
IGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLT5tYXJrKCk7CisgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLT5lZGl0b3IoKS0+bWFyaygpOwogICAg
IGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsuaXNOb25lKCkgfHwgc2VsZWN0aW9uLmlzTm9uZSgp
KSB7CiAgICAgICAgIHN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihtYXJrKTsKLSAgICBmcmFtZS0+
c2V0TWFyayhzZWxlY3Rpb24pOworICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0TWFyayhzZWxlY3Rp
b24pOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTUwLDcgKzExNTAsNyBAQCBzdGF0aWMg
Ym9vbCBlbmFibGVkVmlzaWJsZVNlbGVjdGlvbkFuZE1hCiB7CiAgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25Gb3JDb21tYW5k
KGV2ZW50KTsKICAgICByZXR1cm4gKChzZWxlY3Rpb24uaXNDYXJldCgpICYmIHNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICAmJiBm
cmFtZS0+bWFyaygpLmlzQ2FyZXRPclJhbmdlKCk7CisgICAgICAgICYmIGZyYW1lLT5lZGl0b3Io
KS0+bWFyaygpLmlzQ2FyZXRPclJhbmdlKCk7CiB9CiAKIHN0YXRpYyBib29sIGVuYWJsZUNhcmV0
SW5FZGl0YWJsZVRleHQoRnJhbWUqIGZyYW1lLCBFdmVudCogZXZlbnQsIEVkaXRvckNvbW1hbmRT
b3VyY2UpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA2NzAzMCkKKysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6c2V0U2VsZWN0aW9uKGMKICAgICBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbiA9
IE5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwogICAgIHNlbGVjdEZyYW1lRWxlbWVu
dEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7CiAgICAgbV9mcmFtZS0+bm90aWZ5UmVuZGVyZXJP
ZlNlbGVjdGlvbkNoYW5nZSh1c2VyVHJpZ2dlcmVkKTsKLSAgICBtX2ZyYW1lLT5yZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgY2xvc2VUeXBpbmcpOworICAgIG1fZnJhbWUt
PmVkaXRvcigpLT5yZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbiwgY2xvc2VU
eXBpbmcpOwogICAgIGlmICh1c2VyVHJpZ2dlcmVkKSB7CiAgICAgICAgIFNjcm9sbEFsaWdubWVu
dCBhbGlnbm1lbnQ7CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiA2
NzAzMCkKKysrIFdlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwxMCArMjYsMTIgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRWRpdG9y
LmgiCiAKKyNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDbGlwYm9hcmRNYWMuaCIKICNp
bXBvcnQgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9y
dCAiRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJSZW5kZXJCbG9jay5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTY5LDQgKzcxLDEwMyBAQCB2b2lkIEVkaXRvcjo6cGFzdGUoKQogICAgIGxv
YWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyhmYWxzZSk7CiB9CiAKK05TRGljdGlvbmFyeSog
RWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK3sKKyAgICBO
b2RlKiBub2RlVG9SZW1vdmU7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxl
Y3Rpb25TdGFydChub2RlVG9SZW1vdmUpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBbTlNNdXRhYmxlRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5XTsKKworICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSAhPSAw
KQorICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lXTsKKworICAgIGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250
KCktPmdldE5TRm9udCgpKQorICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udCgp
LnByaW1hcnlGb250KCktPmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
KworICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3Ip
LmlzVmFsaWQoKSAmJiBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29s
b3IpICE9IENvbG9yOjpibGFjaykKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihz
dHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNG
b3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKworICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNo
YWRvdyA9IHN0eWxlLT50ZXh0U2hhZG93KCk7CisgICAgaWYgKHNoYWRvdykgeworICAgICAgICBO
U1NoYWRvdyogcyA9IFtbTlNTaGFkb3cgYWxsb2NdIGluaXRdOworICAgICAgICBbcyBzZXRTaGFk
b3dPZmZzZXQ6TlNNYWtlU2l6ZShzaGFkb3ctPngoKSwgc2hhZG93LT55KCkpXTsKKyAgICAgICAg
W3Mgc2V0U2hhZG93Qmx1clJhZGl1czpzaGFkb3ctPmJsdXIoKV07CisgICAgICAgIFtzIHNldFNo
YWRvd0NvbG9yOm5zQ29sb3Ioc2hhZG93LT5jb2xvcigpKV07CisgICAgICAgIFtyZXN1bHQgc2V0
T2JqZWN0OnMgZm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07CisgICAgfQorCisgICAgaW50
IGRlY29yYXRpb24gPSBzdHlsZS0+dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKKyAgICBpZiAo
ZGVjb3JhdGlvbiAmIExJTkVfVEhST1VHSCkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6W05T
TnVtYmVyIG51bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3Ry
aWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV07CisKKyAgICBpbnQgc3VwZXJzY3JpcHRJbnQg
PSAwOworICAgIHN3aXRjaCAoc3R5bGUtPnZlcnRpY2FsQWxpZ24oKSkgeworICAgICAgICBjYXNl
IEJBU0VMSU5FOgorICAgICAgICBjYXNlIEJPVFRPTToKKyAgICAgICAgY2FzZSBCQVNFTElORV9N
SURETEU6CisgICAgICAgIGNhc2UgTEVOR1RIOgorICAgICAgICBjYXNlIE1JRERMRToKKyAgICAg
ICAgY2FzZSBURVhUX0JPVFRPTToKKyAgICAgICAgY2FzZSBURVhUX1RPUDoKKyAgICAgICAgY2Fz
ZSBUT1A6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVUI6CisgICAgICAgICAg
ICBzdXBlcnNjcmlwdEludCA9IC0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U1VQRVI6CisgICAgICAgICAgICBzdXBlcnNjcmlwdEludCA9IDE7CisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisgICAgaWYgKHN1cGVyc2NyaXB0SW50KQorICAgICAgICBbcmVzdWx0IHNldE9i
amVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpzdXBlcnNjcmlwdEludF0gZm9yS2V5Ok5TU3Vw
ZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXTsKKworICAgIGlmIChkZWNvcmF0aW9uICYgVU5ERVJMSU5F
KQorICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1Vu
ZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVd
OworCisgICAgaWYgKG5vZGVUb1JlbW92ZSkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoZWMpOworICAgICAgICBBU1NFUlQoZWMg
PT0gMCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTlNXcml0aW5nRGlyZWN0
aW9uIEVkaXRvcjo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0
Cit7CisgICAgTlNXcml0aW5nRGlyZWN0aW9uIHJlc3VsdCA9IE5TV3JpdGluZ0RpcmVjdGlvbkxl
ZnRUb1JpZ2h0OworCisgICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgTm9kZSogbm9k
ZSA9IHBvcy5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgaWYg
KCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmICghcmVuZGVyZXIt
PmlzQmxvY2tGbG93KCkpIHsKKyAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgp
OworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAg
IHN3aXRjaCAoc3R5bGUtPmRpcmVjdGlvbigpKSB7CisgICAgICAgIGNhc2UgTFRSOgorICAgICAg
ICAgICAgcmVzdWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBSVEw6CisgICAgICAgICAgICByZXN1bHQgPSBOU1dyaXRp
bmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3MDMwKQorKysgV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYyLDcgKzIyNjIsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAgICAgICAgICAgICAmJiBl
dnQtPmlzS2V5Ym9hcmRFdmVudCgpCiAgICAgICAgICAgICAmJiBmb2N1c2VkKCkKICAgICAgICAg
ICAgICYmIGRvY3VtZW50KCktPmZyYW1lKCkKLSAgICAgICAgICAgICYmIGRvY3VtZW50KCktPmZy
YW1lKCktPmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudCh0aGlzLCBzdGF0aWNfY2FzdDxLZXli
b2FyZEV2ZW50Kj4oZXZ0KSkpIHsKKyAgICAgICAgICAgICYmIGRvY3VtZW50KCktPmZyYW1lKCkt
PmVkaXRvcigpLT5kb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQodGhpcywgc3RhdGljX2Nhc3Q8
S2V5Ym9hcmRFdmVudCo+KGV2dCkpKSB7CiAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogICAgICAgICBicmVhazsKICNlbmRp
ZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgQVNT
RVJUKGZyYW1lLT5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7CisgICAgICAgIEFTU0VSVChmcmFt
ZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLmxlbmd0aCgpKTsKICAgICAgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZS0+c2VsZWN0
aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3Rl
ZCkpIHsKICAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgp
OwogICAgICAgICAgICAgUmVmUHRyPFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kPiBjb21tYW5kID0g
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKGRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHRydWUsIGZhbHNlLCB0cnVl
KTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyLDcgKzEwMTIsNyBAQCBib29sIERP
TVdpbmRvdzo6ZmluZChjb25zdCBTdHJpbmcmIHN0cmluCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIEZJWE1FICgxMzAxNik6IFN1cHBvcnQgd2hvbGVXb3JkLCBzZWFyY2hJbkZyYW1l
cyBhbmQgc2hvd0RpYWxvZwotICAgIHJldHVybiBtX2ZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywg
IWJhY2t3YXJkcywgY2FzZVNlbnNpdGl2ZSwgd3JhcCwgZmFsc2UpOworICAgIHJldHVybiBtX2Zy
YW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhzdHJpbmcsICFiYWNrd2FyZHMsIGNhc2VTZW5zaXRp
dmUsIHdyYXAsIGZhbHNlKTsKIH0KIAogYm9vbCBET01XaW5kb3c6Om9mZnNjcmVlbkJ1ZmZlcmlu
ZygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY3MDMwKQor
KysgV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQx
LDcgKzc0MSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKICAg
ICB9IGVsc2UgaWYgKGlzU2VsZWN0ZWQgJiYgKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3Vy
Y2VBY3Rpb25TZWxlY3Rpb24pKSB7CiAgICAgICAgIGlmICghY2xpcGJvYXJkLT5oYXNEYXRhKCkp
IHsKICAgICAgICAgICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29udHJvbChzcmMtPnNlbGVjdGlv
bigpLT5zdGFydCgpLm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgY2xpcGJvYXJkLT53cml0ZVBs
YWluVGV4dChzcmMtPnNlbGVjdGVkVGV4dCgpKTsKKyAgICAgICAgICAgICAgICBjbGlwYm9hcmQt
PndyaXRlUGxhaW5UZXh0KHNyYy0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpKTsKICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2Ug
PSBzcmMtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgICAg
IEFTU0VSVChzZWxlY3Rpb25SYW5nZSk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNp
b24gNjcwMzApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA1OSw3ICsyMDU5LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVu
dUV2ZW50RgogCiAgICAgaWYgKHN0YXJ0Lm5vZGUoKSAmJiAoc2VsZWN0aW9uQ29udHJvbGxlci0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpIHx8IHNlbGVjdGlvbkNvbnRyb2xsZXItPmlzUmFuZ2UoKSkp
IHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Db250cm9sbGVy
LT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJh
bWUtPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSk7CisgICAgICAgIEludFJlY3Qg
Zmlyc3RSZWN0ID0gbV9mcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlv
bi5nZXQoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3Qucmln
aHQoKSA6IGZpcnN0UmVjdC54KCk7CiAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmly
c3RSZWN0LmJvdHRvbSgpKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gNjcwMzApCisrKyBXZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDYgQEAgaW5saW5l
IEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbQogI2lmIEVOQUJMRShPUklFTlRBVElP
Tl9FVkVOVFMpCiAgICAgLCBtX29yaWVudGF0aW9uKDApCiAjZW5kaWYKLSAgICAsIG1faGlnaGxp
Z2h0VGV4dE1hdGNoZXMoZmFsc2UpCiAgICAgLCBtX2luVmlld1NvdXJjZU1vZGUoZmFsc2UpCiAg
ICAgLCBtX2lzRGlzY29ubmVjdGVkKGZhbHNlKQogICAgICwgbV9leGNsdWRlRnJvbVRleHRTZWFy
Y2goZmFsc2UpCkBAIC0yODcsNTggKzI4Niw2IEBAIFNldHRpbmdzKiBGcmFtZTo6c2V0dGluZ3Mo
KSBjb25zdAogICAgIHJldHVybiBtX3BhZ2UgPyBtX3BhZ2UtPnNldHRpbmdzKCkgOiAwOwogfQog
Ci1TdHJpbmcgRnJhbWU6OnNlbGVjdGVkVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYWlu
VGV4dChzZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci19Ci0KLUludFJl
Y3QgRnJhbWU6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKLXsKLSAgICBp
bnQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMDsKLSAgICBBU1NFUlQocmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCkpOwotICAgIEFTU0VSVChyYW5nZS0+ZW5kQ29udGFpbmVyKCkpOwotCi0gICAgSW5s
aW5lQm94KiBzdGFydElubGluZUJveDsKLSAgICBpbnQgc3RhcnRDYXJldE9mZnNldDsKLSAgICBQ
b3NpdGlvbiBzdGFydFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgc3RhcnRQb3NpdGlvbi5nZXRJbmxpbmVC
b3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgc3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRPZmZzZXQp
OwotCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3NpdGlvbi5ub2Rl
KCktPnJlbmRlcmVyKCk7Ci0gICAgQVNTRVJUKHN0YXJ0UmVuZGVyZXIpOwotICAgIEludFJlY3Qg
c3RhcnRDYXJldFJlY3QgPSBzdGFydFJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChzdGFydElubGlu
ZUJveCwgc3RhcnRDYXJldE9mZnNldCwgJmV4dHJhV2lkdGhUb0VuZE9mTGluZSk7Ci0gICAgaWYg
KHN0YXJ0Q2FyZXRSZWN0ICE9IEludFJlY3QoKSkKLSAgICAgICAgc3RhcnRDYXJldFJlY3QgPSBz
dGFydFJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChzdGFydENhcmV0UmVj
dCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0KLSAgICBJbmxpbmVCb3gqIGVuZElubGluZUJv
eDsKLSAgICBpbnQgZW5kQ2FyZXRPZmZzZXQ7Ci0gICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBW
aXNpYmxlUG9zaXRpb24ocmFuZ2UtPmVuZFBvc2l0aW9uKCkpLmRlZXBFcXVpdmFsZW50KCk7Ci0g
ICAgaWYgKGVuZFBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwot
ICAgIGVuZFBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChVUFNUUkVBTSwgZW5kSW5saW5l
Qm94LCBlbmRDYXJldE9mZnNldCk7Ci0KLSAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0g
ZW5kUG9zaXRpb24ubm9kZSgpLT5yZW5kZXJlcigpOwotICAgIEFTU0VSVChlbmRSZW5kZXJlcik7
Ci0gICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
ZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7Ci0gICAgaWYgKGVuZENhcmV0UmVjdCAhPSBJ
bnRSZWN0KCkpCi0gICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OwotCi0gICAgaWYgKHN0YXJ0Q2FyZXRSZWN0LnkoKSA9PSBlbmRDYXJldFJlY3QueSgpKSB7Ci0g
ICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRoZSBzYW1lIGxpbmUKLSAgICAgICAgcmV0
dXJuIEludFJlY3QobWluKHN0YXJ0Q2FyZXRSZWN0LngoKSwgZW5kQ2FyZXRSZWN0LngoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LnkoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgYWJzKGVuZENhcmV0UmVjdC54KCkgLSBzdGFydENhcmV0UmVjdC54KCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICBtYXgoc3RhcnRDYXJldFJlY3QuaGVpZ2h0KCksIGVuZENhcmV0
UmVjdC5oZWlnaHQoKSkpOwotICAgIH0KLQotICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJlbid0IG9u
IHRoZSBzYW1lIGxpbmUsIHNvIGdvIGZyb20gc3RhcnQgdG8gdGhlIGVuZCBvZiBpdHMgbGluZQot
ICAgIHJldHVybiBJbnRSZWN0KHN0YXJ0Q2FyZXRSZWN0LngoKSwKLSAgICAgICAgICAgICAgICAg
ICBzdGFydENhcmV0UmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3Qu
d2lkdGgoKSArIGV4dHJhV2lkdGhUb0VuZE9mTGluZSwKLSAgICAgICAgICAgICAgICAgICBzdGFy
dENhcmV0UmVjdC5oZWlnaHQoKSk7Ci19Ci0KIFRleHRHcmFudWxhcml0eSBGcmFtZTo6c2VsZWN0
aW9uR3JhbnVsYXJpdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX3NlbGVjdGlvbkNvbnRyb2xs
ZXIuZ3JhbnVsYXJpdHkoKTsKQEAgLTY2NCwxNyArNjExLDYgQEAgdm9pZCBGcmFtZTo6aW5qZWN0
VXNlclNjcmlwdHNGb3JXb3JsZChETwogICAgIH0KIH0KIAotYm9vbCBGcmFtZTo6c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikgY29uc3QK
LXsKLSAgICByZXR1cm4gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwotfQot
Ci1ib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgb2xkU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVB
ZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3QKLXsKLSAgICByZXR1
cm4gZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7Ci19Ci0KIGJvb2wgRnJh
bWU6OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRl
UmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwpAQCAtNjkyLDE1NyAr
NjI4LDYgQEAgdm9pZCBGcmFtZTo6c2V0VHlwaW5nU3R5bGUoQ1NTTXV0YWJsZVN0eQogICAgIG1f
dHlwaW5nU3R5bGUgPSBzdHlsZTsKIH0KIAotdm9pZCBGcmFtZTo6Y29tcHV0ZUFuZFNldFR5cGlu
Z1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCi17Ci0gICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxlbmd0aCgpKSB7Ci0gICAgICAgIGNs
ZWFyVHlwaW5nU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENhbGN1
bGF0ZSB0aGUgY3VycmVudCB0eXBpbmcgc3R5bGUuCi0gICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBtdXRhYmxlU3R5bGUgPSBzdHlsZS0+bWFrZU11dGFibGUoKTsKLSAgICBp
ZiAodHlwaW5nU3R5bGUoKSkgewotICAgICAgICB0eXBpbmdTdHlsZSgpLT5tZXJnZShtdXRhYmxl
U3R5bGUuZ2V0KCkpOwotICAgICAgICBtdXRhYmxlU3R5bGUgPSB0eXBpbmdTdHlsZSgpOwotICAg
IH0KLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGk7Ci0gICAgUmVmUHRyPENTU1Zh
bHVlPiBkaXJlY3Rpb247Ci0gICAgaWYgKGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvblNldFdy
aXRpbmdEaXJlY3Rpb24pIHsKLSAgICAgICAgdW5pY29kZUJpZGkgPSBtdXRhYmxlU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgICAgIGRpcmVj
dGlvbiA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVj
dGlvbik7Ci0gICAgfQotCi0gICAgTm9kZSogbm9kZSA9IHNlbGVjdGlvbigpLT5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKLSAgICBjb21wdXRlZFN0
eWxlKG5vZGUpLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0KLSAgICBpZiAoZWRpdGluZ0Fj
dGlvbiA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbiAmJiB1bmljb2RlQmlkaSkgewot
ICAgICAgICBBU1NFUlQodW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAg
IG11dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih1bmljb2RlQmlkaS5nZXQoKSktPmdldElkZW50KCkp
OwotICAgICAgICBpZiAoZGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZGlyZWN0aW9u
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihkaXJlY3Rpb24uZ2V0KCkpLT5nZXRJZGVudCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVzZSBmcm9tIHRoZSB0eXBp
bmcgc3R5bGUuCi0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBibG9ja1N0
eWxlID0gbXV0YWJsZVN0eWxlLT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7Ci0gICAgYmxvY2tTdHls
ZS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgIGlmIChibG9ja1N0eWxlLT5sZW5ndGgo
KSA+IDApCi0gICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCksIGVkaXRpbmdBY3Rpb24pKTsKLQotICAgIC8vIFNl
dCB0aGUgcmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCi0gICAgbV90eXBpbmdT
dHlsZSA9IG11dGFibGVTdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uPiBGcmFtZTo6c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2RlKiYg
bm9kZVRvUmVtb3ZlKSBjb25zdAotewotICAgIG5vZGVUb1JlbW92ZSA9IDA7Ci0KLSAgICBpZiAo
c2VsZWN0aW9uKCktPmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2Uoc2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkpOwotICAgIFBvc2l0
aW9uIHBvcyA9IHJhbmdlLT5lZGl0aW5nU3RhcnRQb3NpdGlvbigpOwotCi0gICAgRWxlbWVudCAq
ZWxlbSA9IHBvcy5lbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBlbGVtOwotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotCi0gICAgaWYgKG1fdHlwaW5nU3R5bGUpIHsKLSAgICAgICAgc3R5bGVF
bGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7Ci0KLSAg
ICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBtX3R5cGluZ1N0eWxl
LT5jc3NUZXh0KCkuaW1wbCgpLCBlYyk7Ci0gICAgICAgIEFTU0VSVCghZWMpOwotCi0gICAgICAg
IHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHRO
b2RlKCIiKSwgZWMpOwotICAgICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAgICBpZiAoZWxlbS0+
cmVuZGVyZXIoKSAmJiBlbGVtLT5yZW5kZXJlcigpLT5jYW5IYXZlQ2hpbGRyZW4oKSkgewotICAg
ICAgICAgICAgZWxlbS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBOb2RlICpwYXJlbnQgPSBlbGVtLT5wYXJlbnQoKTsKLSAgICAg
ICAgICAgIE5vZGUgKm5leHQgPSBlbGVtLT5uZXh0U2libGluZygpOwotCi0gICAgICAgICAgICBp
ZiAobmV4dCkKLSAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShzdHlsZUVsZW1l
bnQsIG5leHQsIGVjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwYXJlbnQt
PmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZWMpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VS
VCghZWMpOwotCi0gICAgICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gY29tcHV0ZWRTdHlsZShzdHlsZUVsZW1lbnQucmVsZWFzZSgpKTsK
LX0KLQotdm9pZCBGcmFtZTo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqIGUpCi17
Ci0gICAgaWYgKGVkaXRvcigpLT5jbGllbnQoKSkKLSAgICAgICAgZWRpdG9yKCktPmNsaWVudCgp
LT50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoZSk7Ci19Ci0KLXZvaWQgRnJhbWU6OnRleHRGaWVs
ZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZSkKLXsKLSAgICBpZiAoZWRpdG9yKCktPmNsaWVudCgp
KQotICAgICAgICBlZGl0b3IoKS0+Y2xpZW50KCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoZSk7
Ci19Ci0KLXZvaWQgRnJhbWU6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50KiBlKQot
ewotICAgIGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIGVkaXRvcigpLT5jbGllbnQo
KS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKGUpOwotfQotCi1ib29sIEZyYW1lOjpkb1RleHRG
aWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZSwgS2V5Ym9hcmRFdmVudCoga2UpCi17Ci0g
ICAgaWYgKGVkaXRvcigpLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGVkaXRvcigpLT5jbGll
bnQoKS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KGUsIGtlKTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBGcmFtZTo6dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVt
ZW50KiBpbnB1dCkKLXsKLSAgICBpZiAoZWRpdG9yKCktPmNsaWVudCgpKQotICAgICAgICBlZGl0
b3IoKS0+Y2xpZW50KCktPnRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoaW5wdXQpOwotfQot
Ci12b2lkIEZyYW1lOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50KiBlKQotewotICAg
IGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIGVkaXRvcigpLT5jbGllbnQoKS0+dGV4
dERpZENoYW5nZUluVGV4dEFyZWEoZSk7Ci19Ci0KLXZvaWQgRnJhbWU6OmFwcGx5RWRpdGluZ1N0
eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0g
bV9kb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7Ci0gICAgdW5zaWduZWQgbGVuID0g
bGlzdC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKQot
ICAgICAgICBhcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bGlzdC0+aXRlbShpKSkpOwotfQotCi12b2lkIEZyYW1lOjphcHBseUVkaXRpbmdTdHlsZVRvRWxl
bWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGlmICghZWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5z
dHlsZSgpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdvcmQi
LCBmYWxzZSwgZWMpOwotICAgIEFTU0VSVCghZWMpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdE5ic3BNb2RlLCAic3BhY2UiLCBmYWxzZSwgZWMpOwotICAgIEFTU0VS
VCghZWMpOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVh
aywgImFmdGVyLXdoaXRlLXNwYWNlIiwgZmFsc2UsIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLX0K
LQogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBIYXNoU2V0PEZyYW1lKj4mIGtlZXBBbGl2ZVNldCgp
CiB7CkBAIC0xMDY4LDQwICs4NTMsNiBAQCB2b2lkIEZyYW1lOjpjbGVhclRpbWVycygpCiAgICAg
Y2xlYXJUaW1lcnMobV92aWV3LmdldCgpLCBkb2N1bWVudCgpKTsKIH0KIAotUmVuZGVyU3R5bGUg
KkZyYW1lOjpzdHlsZUZvclNlbGVjdGlvblN0YXJ0KE5vZGUgKiZub2RlVG9SZW1vdmUpIGNvbnN0
Ci17Ci0gICAgbm9kZVRvUmVtb3ZlID0gMDsKLQotICAgIGlmIChzZWxlY3Rpb24oKS0+aXNOb25l
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUG9zaXRpb24gcG9zID0gc2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFw
b3MuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgTm9kZSAqbm9kZSA9IHBv
cy5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICgh
bV90eXBpbmdTdHlsZSkKLSAgICAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCk7
Ci0KLSAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChzcGFuVGFnLCBmYWxzZSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBTdHJpbmcgc3R5bGVUZXh0ID0gbV90eXBpbmdTdHlsZS0+Y3NzVGV4dCgpICsgIiBkaXNwbGF5
OiBpbmxpbmUiOwotICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgc3R5
bGVUZXh0LmltcGwoKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOwotCi0gICAgc3R5bGVFbGVtZW50
LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7
Ci0gICAgQVNTRVJUKCFlYyk7Ci0KLSAgICBub2RlLT5wYXJlbnROb2RlKCktPmFwcGVuZENoaWxk
KHN0eWxlRWxlbWVudCwgZWMpOwotICAgIEFTU0VSVCghZWMpOwotCi0gICAgbm9kZVRvUmVtb3Zl
ID0gc3R5bGVFbGVtZW50LmdldCgpOwotICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVy
KCkgPyBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiAwOwotfQotCiB2b2lkIEZy
YW1lOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiB7CiAgICAgLy8gUHV0IGEgY2FyZXQgaW5zaWRl
IHRoZSBib2R5IGlmIHRoZSBlbnRpcmUgZnJhbWUgaXMgZWRpdGFibGUgKGVpdGhlciB0aGUKQEAg
LTExMTgsMTYwICs4NjksNiBAQCB2b2lkIEZyYW1lOjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgpCiAg
ICAgICAgIHNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihQb3NpdGlv
bihub2RlLCAwKSwgRE9XTlNUUkVBTSkpOwogfQogCi0vLyBTZWFyY2hlcyBmcm9tIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIGRvY3VtZW50IGlmIG5vdGhpbmcgaXMgc2VsZWN0ZWQuCi1ib29sIEZyYW1l
OjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2Fz
ZUZsYWcsIGJvb2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbikKLXsKLSAgICBpZiAo
dGFyZ2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGV4Y2x1
ZGVGcm9tVGV4dFNlYXJjaCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTdGFy
dCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHNlbGVjdGlvbiwgaWYgdGhlcmUncyBhIHNlbGVjdGlvbiB0
aGF0J3Mgbm90IGluIHNoYWRvdyBjb250ZW50LiBXaGljaCBlZGdlCi0gICAgLy8gaXMgdXNlZCBk
ZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgc2VhcmNoaW5nIGZvcndhcmQgb3IgYmFja3dhcmQsIGFu
ZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rpb24gaXMgc2V0LgotICAgIFJlZlB0cjxSYW5nZT4gc2Vh
cmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpKTsKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IHRoaXMtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKLQotICAgIGlm
IChmb3J3YXJkKQotICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwgc3RhcnRJblNl
bGVjdGlvbiA/IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSA6IHNlbGVjdGlvbi52aXNpYmxlRW5k
KCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0RW5kKHNlYXJjaFJhbmdlLmdldCgpLCBzdGFydElu
U2VsZWN0aW9uID8gc2VsZWN0aW9uLnZpc2libGVFbmQoKSA6IHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSk7Ci0KLSAgICBOb2RlKiBzaGFkb3dUcmVlUm9vdCA9IHNlbGVjdGlvbi5zaGFkb3dUcmVl
Um9vdE5vZGUoKTsKLSAgICBpZiAoc2hhZG93VHJlZVJvb3QpIHsKLSAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAgICAgc2VhcmNoUmFu
Z2UtPnNldEVuZChzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNoaWxkTm9kZUNvdW50
KCksIGVjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0
KHNoYWRvd1RyZWVSb290LCAwLCBlYyk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFJhbmdlPiByZXN1
bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQs
IGNhc2VGbGFnKSk7Ci0gICAgLy8gSWYgd2Ugc3RhcnRlZCBpbiB0aGUgc2VsZWN0aW9uIGFuZCB0
aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBtYXRjaGVzIHRoZSBleGlzdGluZyBzZWxlY3Rpb24sIGZp
bmQgYWdhaW4uCi0gICAgLy8gQnVpbGQgYSBzZWxlY3Rpb24gd2l0aCB0aGUgZm91bmQgcmFuZ2Ug
dG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLgotICAgIC8vIENvbXBhcmUgcmFuZ2VzIGlu
c3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVjdHMgdG8gaWdub3JlIHRoZSB3YXkgdGhhdCB0aGUgY3Vy
cmVudCBzZWxlY3Rpb24gd2FzIG1hZGUuCi0gICAgaWYgKHN0YXJ0SW5TZWxlY3Rpb24gJiYgYXJl
UmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQoKSkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKSB7
Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAg
ICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgp
LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0
RW5kKHNlYXJjaFJhbmdlLmdldCgpLCBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpOwotCi0gICAg
ICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgewotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAgICAgICBzZWFyY2hSYW5n
ZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291bnQo
KSwgZWMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRTdGFydChzaGFkb3dUcmVlUm9vdCwgMCwgZWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVz
dWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndh
cmQsIGNhc2VGbGFnKTsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7
Ci0KLSAgICAvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJj
aCBpbiBtYWluIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVz
dWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAg
ICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBp
ZiAoZm9yd2FyZCkKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHNoYWRv
d1RyZWVSb290LT5zaGFkb3dQYXJlbnROb2RlKCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmRCZWZvcmUoc2hhZG93VHJlZVJvb3QtPnNo
YWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0aW9uKTsKLQotICAgICAgICByZXN1bHRSYW5nZSA9IGZp
bmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcp
OwotICAgIH0KLQotICAgIGlmICghZWRpdG9yKCktPmluc2lkZVZpc2libGVBcmVhKHJlc3VsdFJh
bmdlLmdldCgpKSkgewotICAgICAgICByZXN1bHRSYW5nZSA9IGVkaXRvcigpLT5uZXh0VmlzaWJs
ZVJhbmdlKHJlc3VsdFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFw
RmxhZyk7Ci0gICAgICAgIGlmICghcmVzdWx0UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3Jl
IHdyYXBwaW5nLCBzZWFyY2ggYWdhaW4gaW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxs
Ci0gICAgLy8gcmVkdW5kYW50bHkgcmUtc2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQg
aW4gc29tZSBjYXNlcykuCi0gICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9u
KSAmJiB3cmFwRmxhZykgewotICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhk
b2N1bWVudCgpKTsKLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJh
bmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKTsKLSAgICAgICAgLy8gV2UgdXNl
ZCB0byByZXR1cm4gZmFsc2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1lIHJhbmdl
IHRoYXQgd2Ugc3RhcnRlZCB3aXRoCi0gICAgICAgIC8vIChlLmcuLCB0aGUgc2VsZWN0aW9uIHdh
cyBhbHJlYWR5IHRoZSBvbmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1dCB3ZSBkZWNpZGVk
IHRoYXQKLSAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNhc2UgaW5zdGVhZCwg
c28gd2UnbGwganVzdCBmYWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgotICAgIH0KLQotICAgIGlm
IChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHRoaXMtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOwotICAgIHJldmVhbFNlbGVjdGlvbigp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNpZ25lZCBGcmFtZTo6Y291bnRNYXRjaGVzRm9y
VGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNlRmxhZywgdW5zaWduZWQgbGltaXQs
IGJvb2wgbWFya01hdGNoZXMpCi17Ci0gICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVu
dHMoZG9jdW1lbnQoKSkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwotICAg
IHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwotICAgIGRvIHsKLSAgICAgICAgUmVmUHRyPFJhbmdl
PiByZXN1bHRSYW5nZShmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIHRy
dWUsIGNhc2VGbGFnKSk7Ci0gICAgICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2Vw
dGlvbikpIHsKLSAgICAgICAgICAgIGlmICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkt
PmlzSW5TaGFkb3dUcmVlKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICAgICAg
c2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpLCBleGNlcHRpb24pOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmx5IHRyZWF0IHRoZSByZXN1bHQgYXMgYSBtYXRj
aCBpZiBpdCBpcyB2aXNpYmxlCi0gICAgICAgIGlmIChlZGl0b3IoKS0+aW5zaWRlVmlzaWJsZUFy
ZWEocmVzdWx0UmFuZ2UuZ2V0KCkpKSB7Ci0gICAgICAgICAgICArK21hdGNoQ291bnQ7Ci0gICAg
ICAgICAgICBpZiAobWFya01hdGNoZXMpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5hZGRNYXJrZXIocmVzdWx0UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpUZXh0
TWF0Y2gpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0
aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9mIDAgbWVhbnMgbm8gbGltaXQuCi0gICAgICAg
IGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIC8vIFNldCB0aGUgbmV3IHN0YXJ0IGZvciB0aGUgc2VhcmNoIHJhbmdlIHRv
IGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCi0gICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhl
cmUgaXMgbm8gbmVlZCB0byB1c2UgYSBWaXNpYmxlUG9zaXRpb24gaGVyZSwKLSAgICAgICAgLy8g
c2luY2UgZmluZFBsYWluVGV4dCB3aWxsIHVzZSBhIFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRo
ZSB2aXNpYmxlCi0gICAgICAgIC8vIHRleHQgbm9kZXMuIAotICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQocmVzdWx0UmFuZ2UtPmVuZENvbnRhaW5lcihleGNlcHRpb24pLCByZXN1bHRSYW5n
ZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIGV4Y2VwdGlvbik7Ci0KLSAgICAgICAgTm9kZSogc2hh
ZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+c2hhZG93VHJlZVJvb3ROb2RlKCk7Ci0gICAgICAg
IGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3Qp
Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dU
cmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZXhjZXB0aW9uKTsKLSAgICB9IHdoaWxlICh0cnVl
KTsKLQotICAgIGlmIChtYXJrTWF0Y2hlcykgewotICAgICAgICAvLyBEbyBhICJmYWtlIiBwYWlu
dCBpbiBvcmRlciB0byBleGVjdXRlIHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJlbmRlcmVk
IHJlY3QgZm9yIGVhY2ggdGV4dCBtYXRjaC4KLSAgICAgICAgaWYgKG1fdmlldyAmJiBjb250ZW50
UmVuZGVyZXIoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7IC8v
IEVuc3VyZSBsYXlvdXQgaXMgdXAgdG8gZGF0ZS4KLSAgICAgICAgICAgIEludFJlY3QgdmlzaWJs
ZVJlY3QgPSBtX3ZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgaWYgKCF2
aXNpYmxlUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOwotICAgICAgICAgICAgICAgIGNv
bnRleHQuc2V0UGFpbnRpbmdEaXNhYmxlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICBtX3ZpZXct
PnBhaW50Q29udGVudHMoJmNvbnRleHQsIHZpc2libGVSZWN0KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtYXRjaENvdW50OwotfQotCi12b2lkIEZyYW1l
OjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKLXsKLSAgICBp
ZiAoZmxhZyA9PSBtX2hpZ2hsaWdodFRleHRNYXRjaGVzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2hpZ2hsaWdodFRleHRNYXRjaGVzID0gZmxhZzsKLSAgICBkb2N1bWVudCgpLT5tYXJrZXJz
KCktPnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwotfQotCiB2b2lk
IEZyYW1lOjpzZXRET01XaW5kb3coRE9NV2luZG93KiBkb21XaW5kb3cpCiB7CiAgICAgaWYgKG1f
ZG9tV2luZG93KSB7CkBAIC0xMzgyLDUzICs5NzksOSBAQCBTdHJpbmcgRnJhbWU6OmRvY3VtZW50
VHlwZVN0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEZyYW1l
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNl
bGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykKK2Jvb2wgRnJhbWU6OnNob3VsZENoYW5nZVNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0CiB7Ci0gICAg
Ym9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGVkaXRvcigpLT5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwotICAgIGJvb2wgaXNDb250aW51b3VzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkICYmIGVk
aXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKLSAgICBpZiAoaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQpIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdBZGph
Y2VudFdvcmRzOwotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGVkU2VudGVuY2U7
Ci0gICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IHNldHRpbmdzKCkgJiYgc2V0dGluZ3MoKS0+
Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbigpLT5zZWxlY3Rp
b24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKLSAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBuZXdTdGFydChzZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkpOwotICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rp
b24oc3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3Jk
KG5ld1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICAgICAgICAgIGlmIChpc0Nv
bnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQotICAgICAgICAgICAgICAgIG5ld1NlbGVj
dGVkU2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCks
IGVuZE9mU2VudGVuY2UobmV3U3RhcnQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdoZW4g
dHlwaW5nIHdlIGNoZWNrIHNwZWxsaW5nIGVsc2V3aGVyZSwgc28gZG9uJ3QgcmVkbyBpdCBoZXJl
LgotICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcg
ZnJvbSBhIGRlbGV0ZSBvcGVyYXRpb24sCi0gICAgICAgIC8vIG9sZFNlbGVjdGlvbiBtYXkgbm8g
bG9uZ2VyIGJlIGluIHRoZSBkb2N1bWVudC4KLSAgICAgICAgaWYgKGNsb3NlVHlwaW5nICYmIG9s
ZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5v
ZGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkgewotICAg
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSk7Ci0gICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBW
aXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFy
eSksIGVuZE9mV29yZChvbGRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgICAg
ICAgICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3RlZFNlbnRlbmNlID0gVmlz
aWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uob2xkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKG9s
ZFN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGVkaXRvcigpLT5tYXJrTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hcihvbGRBZGphY2VudFdvcmRzLCBvbGRTZWxlY3RlZFNlbnRlbmNlICE9IG5l
d1NlbGVjdGVkU2VudGVuY2UsIG9sZFNlbGVjdGVkU2VudGVuY2UpOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBlZGl0b3IoKS0+bWFya01pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXIob2xkQWRqYWNlbnRXb3JkcywgZmFsc2UsIG9sZEFkamFjZW50V29yZHMpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhpcyBvbmx5IGVyYXNlcyBt
YXJrZXJzIHRoYXQgYXJlIGluIHRoZSBmaXJzdCB1bml0ICh3b3JkIG9yIHNlbnRlbmNlKSBvZiB0
aGUgc2VsZWN0aW9uLgotICAgICAgICAvLyBQZXJoYXBzIHBlY3VsaWFyLCBidXQgaXQgbWF0Y2hl
cyBBcHBLaXQuCi0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFj
ZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFy
a2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VudGVuY2VSYW5nZSA9IG5ld1NlbGVj
dGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhzZW50ZW5jZVJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcik7Ci0gICAgfQotCi0gICAgLy8gV2hlbiBjb250aW51b3VzIHNwZWxsIGNo
ZWNraW5nIGlzIG9mZiwgZXhpc3RpbmcgbWFya2VycyBkaXNhcHBlYXIgYWZ0ZXIgdGhlIHNlbGVj
dGlvbiBjaGFuZ2VzLgotICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQp
Ci0gICAgICAgIGRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcpOwotICAgIGlmICghaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKLSAgICAgICAgZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKERvY3Vt
ZW50TWFya2VyOjpHcmFtbWFyKTsKLQotICAgIGVkaXRvcigpLT5yZXNwb25kVG9DaGFuZ2VkU2Vs
ZWN0aW9uKG9sZFNlbGVjdGlvbik7CisgICAgcmV0dXJuIGVkaXRvcigpLT5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oc2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLCBuZXdTZWxlY3Rpb24sIG5ld1NlbGVj
dGlvbi5hZmZpbml0eSgpLCBmYWxzZSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBGcmFtZTo6dmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuaAko
cmV2aXNpb24gNjcwMzApCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKICNpbmNs
dWRlICJab29tTW9kZS5oIgogCkBAIC01MiwxMCArNTEsOCBAQAogI2lmIFBMQVRGT1JNKE1BQykK
ICNpZm5kZWYgX19PQkpDX18KIGNsYXNzIE5TQXJyYXk7Ci1jbGFzcyBOU0RpY3Rpb25hcnk7CiBj
bGFzcyBOU011dGFibGVEaWN0aW9uYXJ5OwogY2xhc3MgTlNTdHJpbmc7Ci10eXBlZGVmIGludCBO
U1dyaXRpbmdEaXJlY3Rpb247CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xNzYsNDkgKzE3MywxNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gRnJhbWVWaWV3
LCBub3QgRnJhbWUuCiAgICAgICAgIFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9y
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZWRCYWNraW5nU3RvcmUuZ2V0KCk7IH0KICAgICAgICAg
dm9pZCBzZXRUaWxlZEJhY2tpbmdTdG9yZUVuYWJsZWQoYm9vbCk7CiAjZW5kaWYKIAotICAgIHBy
aXZhdGU6Ci0gICAgICAgIHZvaWQgbGlmZVN1cHBvcnRUaW1lckZpcmVkKFRpbWVyPEZyYW1lPiop
OwotCi0gICAgLy8gPT09IHRvIGJlIG1vdmVkIGludG8gRWRpdG9yCi0KLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdDsKLSAgICAgICAgYm9vbCBmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFw
RmxhZywgYm9vbCBzdGFydEluU2VsZWN0aW9uKTsKLQotICAgICAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBp
dC4KLSAgICAgICAgdm9pZCBzZXRNYXJrKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKLQotICAg
ICAgICB2b2lkIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiAs
IEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uVW5zcGVjaWZpZWQpOwotICAgICAgICB2b2lkIGFwcGx5
RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0OwotICAgICAgICB2b2lkIGFwcGx5RWRp
dGluZ1N0eWxlVG9FbGVtZW50KEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICBJbnRSZWN0IGZp
cnN0UmVjdEZvclJhbmdlKFJhbmdlKikgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgYm9v
bCBjbG9zZVR5cGluZyk7Ci0gICAgICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
bmV3U2VsZWN0aW9uLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwotCi0g
ICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KE5vZGUqJiBub2RlVG9S
ZW1vdmUpIGNvbnN0OwotCi0gICAgICAgIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29u
c3QgU3RyaW5nJiwgYm9vbCBjYXNlRmxhZywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNo
ZXMpOwotICAgICAgICBib29sIG1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25z
dDsKLSAgICAgICAgdm9pZCBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wg
ZmxhZyk7Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+
IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7Ci0KLSAg
ICAgICAgdm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoRWxlbWVudCopOwotICAgICAgICB2
b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCopOwotICAgICAgICB2b2lkIHRleHRE
aWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50Kik7Ci0gICAgICAgIGJvb2wgZG9UZXh0RmllbGRD
b21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIHZvaWQg
dGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBpbnB1dCk7Ci0gICAgICAgIHZv
aWQgdGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCopOwotCiAgICAgICAgIERyYWdJbWFn
ZVJlZiBub2RlSW1hZ2UoTm9kZSopOwogICAgICAgICBEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlRm9y
U2VsZWN0aW9uKCk7CiAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGxpZmVTdXBwb3J0VGlt
ZXJGaXJlZChUaW1lcjxGcmFtZT4qKTsKKwogICAgIC8vID09PSB0byBiZSBtb3ZlZCBpbnRvIFNl
bGVjdGlvbkNvbnRyb2xsZXIKIAogICAgIHB1YmxpYzoKQEAgLTI1Niw2ICsyMjEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudEF0UG9pbnQoY29uc3Qg
SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKIAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQorICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgaW4gRnJhbWVWaWV3LCBub3QgRnJh
bWUuCiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCBp
bnRlcmZhY2UKQEAgLTI4MSwxNiArMjQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIE5TSW1hZ2UqIHNlbGVjdGlvbkltYWdlKGJvb2wgZm9yY2VCbGFja1RleHQgPSBmYWxzZSkg
Y29uc3Q7CiAgICAgICAgIE5TSW1hZ2UqIHNuYXBzaG90RHJhZ0ltYWdlKE5vZGUqLCBOU1JlY3Qq
IGltYWdlUmVjdCwgTlNSZWN0KiBlbGVtZW50UmVjdCkgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgog
ICAgICAgICBOU0ltYWdlKiBpbWFnZUZyb21SZWN0KE5TUmVjdCkgY29uc3Q7CiAKLSAgICAvLyA9
PT0gdG8gYmUgbW92ZWQgaW50byBFZGl0b3IKLQotICAgIHB1YmxpYzoKLSAgICAgICAgTlNEaWN0
aW9uYXJ5KiBmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgICAg
IE5TV3JpdGluZ0RpcmVjdGlvbiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0
KCkgY29uc3Q7Ci0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKQEAgLTMwOCw3ICsyNjYsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU2NyaXB0Q29udHJvbGxlciBtX3NjcmlwdDsK
IAotICAgICAgICBtdXRhYmxlIFZpc2libGVTZWxlY3Rpb24gbV9tYXJrOwogICAgICAgICBtdXRh
YmxlIEVkaXRvciBtX2VkaXRvcjsKICAgICAgICAgbXV0YWJsZSBTZWxlY3Rpb25Db250cm9sbGVy
IG1fc2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICAgICAgbXV0YWJsZSBFdmVudEhhbmRsZXIgbV9l
dmVudEhhbmRsZXI7CkBAIC0zMjIsNyArMjc5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBpbnQgbV9vcmllbnRhdGlvbjsKICNlbmRpZgogCi0gICAgICAgIGJvb2wgbV9oaWdobGln
aHRUZXh0TWF0Y2hlczsKICAgICAgICAgYm9vbCBtX2luVmlld1NvdXJjZU1vZGU7CiAgICAgICAg
IGJvb2wgbV9pc0Rpc2Nvbm5lY3RlZDsKICAgICAgICAgYm9vbCBtX2V4Y2x1ZGVGcm9tVGV4dFNl
YXJjaDsKQEAgLTM3NywyMSArMzMzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBy
ZXR1cm4gJm1fYW5pbWF0aW9uQ29udHJvbGxlcjsKICAgICB9CiAKLSAgICBpbmxpbmUgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgRnJhbWU6Om1hcmsoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fbWFyazsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCBGcmFtZTo6c2V0TWFyayhjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFzLmJhc2UoKS5u
b2RlKCkgfHwgcy5iYXNlKCkubm9kZSgpLT5kb2N1bWVudCgpID09IGRvY3VtZW50KCkpOwotICAg
ICAgICBBU1NFUlQoIXMuZXh0ZW50KCkubm9kZSgpIHx8IHMuZXh0ZW50KCkubm9kZSgpLT5kb2N1
bWVudCgpID09IGRvY3VtZW50KCkpOwotICAgICAgICBBU1NFUlQoIXMuc3RhcnQoKS5ub2RlKCkg
fHwgcy5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCgpKTsKLSAgICAgICAg
QVNTRVJUKCFzLmVuZCgpLm5vZGUoKSB8fCBzLmVuZCgpLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBk
b2N1bWVudCgpKTsKLQotICAgICAgICBtX21hcmsgPSBzOwotICAgIH0KLQogICAgIGlubGluZSBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogRnJhbWU6OnR5cGluZ1N0eWxlKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3R5cGluZ1N0eWxlLmdldCgpOwpAQCAtNDM3LDExICszNzgs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG1faW5WaWV3U291cmNlTW9kZSA9IG1v
ZGU7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgRnJhbWU6Om1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGlnaGxpZ2h0VGV4
dE1hdGNoZXM7Ci0gICAgfQotCiAgICAgaW5saW5lIEZyYW1lVHJlZSogRnJhbWU6OnRyZWUoKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICZtX3RyZWVOb2RlOwpJbmRleDogV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNp
b24gNjcwMzApCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
Niw3ICs0OTYsNyBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnCiAg
ICAgRnJhbWUqIGZyYW1lID0gZm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OwogICAgIEZyYW1lKiBzdGFydEZyYW1lID0gZnJhbWU7CiAgICAgZG8gewotICAgICAgICBpZiAo
ZnJhbWUtPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlvbkZvcndh
cmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgZmFsc2UsIHRydWUpKSB7
CisgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rp
b24gPT0gRmluZERpcmVjdGlvbkZvcndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNl
bnNpdGl2ZSwgZmFsc2UsIHRydWUpKSB7CiAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gc3RhcnRG
cmFtZSkKICAgICAgICAgICAgICAgICBzdGFydEZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsK
ICAgICAgICAgICAgIGZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOwpA
QCAtNTA4LDcgKzUwOCw3IEBAIGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRh
cmcKICAgICAvLyBTZWFyY2ggY29udGVudHMgb2Ygc3RhcnRGcmFtZSwgb24gdGhlIG90aGVyIHNp
ZGUgb2YgdGhlIHNlbGVjdGlvbiB0aGF0IHdlIGRpZCBlYXJsaWVyLgogICAgIC8vIFdlIGNoZWF0
IGEgYml0IGFuZCBqdXN0IHJlc2VhcmNoIHdpdGggd3JhcCBvbgogICAgIGlmIChzaG91bGRXcmFw
ICYmICFzdGFydEZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpIHsKLSAgICAgICAgYm9vbCBm
b3VuZCA9IHN0YXJ0RnJhbWUtPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERp
cmVjdGlvbkZvcndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgdHJ1
ZSwgdHJ1ZSk7CisgICAgICAgIGJvb2wgZm91bmQgPSBzdGFydEZyYW1lLT5lZGl0b3IoKS0+Zmlu
ZFN0cmluZyh0YXJnZXQsIGRpcmVjdGlvbiA9PSBGaW5kRGlyZWN0aW9uRm9yd2FyZCwgY2FzZVNl
bnNpdGl2aXR5ID09IFRleHRDYXNlU2Vuc2l0aXZlLCB0cnVlLCB0cnVlKTsKICAgICAgICAgZm9j
dXNDb250cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShmcmFtZSk7CiAgICAgICAgIHJldHVybiBm
b3VuZDsKICAgICB9CkBAIC01MjUsOCArNTI1LDggQEAgdW5zaWduZWQgaW50IFBhZ2U6Om1hcmtB
bGxNYXRjaGVzRm9yVGV4dAogCiAgICAgRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7CiAgICAg
ZG8gewotICAgICAgICBmcmFtZS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChz
aG91bGRIaWdobGlnaHQpOwotICAgICAgICBtYXRjaGVzICs9IGZyYW1lLT5jb3VudE1hdGNoZXNG
b3JUZXh0KHRhcmdldCwgY2FzZVNlbnNpdGl2aXR5ID09IFRleHRDYXNlU2Vuc2l0aXZlLCAobGlt
aXQgPT0gMCkgPyAwIDogKGxpbWl0IC0gbWF0Y2hlcyksIHRydWUpOworICAgICAgICBmcmFtZS0+
ZWRpdG9yKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoc2hvdWxkSGlnaGxp
Z2h0KTsKKyAgICAgICAgbWF0Y2hlcyArPSBmcmFtZS0+ZWRpdG9yKCktPmNvdW50TWF0Y2hlc0Zv
clRleHQodGFyZ2V0LCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUsIGxpbWl0
ID8gKGxpbWl0IC0gbWF0Y2hlcykgOiAwLCB0cnVlKTsKICAgICAgICAgZnJhbWUgPSBpbmNyZW1l
bnRGcmFtZShmcmFtZSwgdHJ1ZSwgZmFsc2UpOwogICAgIH0gd2hpbGUgKGZyYW1lKTsKIApJbmRl
eDogV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvbWFjL0ZyYW1lTWFjLm1tCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYkNvcmUvcGFnZS9tYWMv
RnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDYgQEAKICNpbXBvcnQgIkNv
bG9yTWFjLmgiCiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCi0j
aW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgotI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCiAjaW1w
b3J0ICJFdmVudC5oIgogI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbXBvcnQgIkZy
YW1lVmlldy5oIgpAQCAtNTQsNyArNTIsNiBAQAogI2ltcG9ydCAiU2ltcGxlRm9udERhdGEuaCIK
ICNpbXBvcnQgIldlYkNvcmVWaWV3RmFjdG9yeS5oIgogI2ltcG9ydCAidmlzaWJsZV91bml0cy5o
IgotCiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAKQEAgLTM5OCwxMDUgKzM5NSw2IEBAIERyYWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdl
KE5vZGUqIG5vZGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1OU0RpY3Rpb25hcnkqIEZyYW1l
Ojpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKLXsKLSAgICBOb2RlKiBu
b2RlVG9SZW1vdmU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JTZWxlY3Rpb25T
dGFydChub2RlVG9SZW1vdmUpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBOU011dGFibGVEaWN0aW9uYXJ5KiByZXN1bHQgPSBbTlNNdXRhYmxlRGljdGlvbmFy
eSBkaWN0aW9uYXJ5XTsKLQotICAgIGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuYWxwaGEoKSAhPSAwKQotICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpuc0NvbG9yKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lXTsKLQotICAgIGlmIChzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPmdl
dE5TRm9udCgpKQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpzdHlsZS0+Zm9udCgpLnByaW1h
cnlGb250KCktPmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQotICAg
IGlmIChzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLmlzVmFs
aWQoKSAmJiBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpICE9
IENvbG9yOjpibGFjaykKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKSBmb3JLZXk6TlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLQotICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdyA9
IHN0eWxlLT50ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRvdykgewotICAgICAgICBOU1NoYWRv
dyogcyA9IFtbTlNTaGFkb3cgYWxsb2NdIGluaXRdOwotICAgICAgICBbcyBzZXRTaGFkb3dPZmZz
ZXQ6TlNNYWtlU2l6ZShzaGFkb3ctPngoKSwgc2hhZG93LT55KCkpXTsKLSAgICAgICAgW3Mgc2V0
U2hhZG93Qmx1clJhZGl1czpzaGFkb3ctPmJsdXIoKV07Ci0gICAgICAgIFtzIHNldFNoYWRvd0Nv
bG9yOm5zQ29sb3Ioc2hhZG93LT5jb2xvcigpKV07Ci0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0
OnMgZm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07Ci0gICAgfQotCi0gICAgaW50IGRlY29y
YXRpb24gPSBzdHlsZS0+dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKLSAgICBpZiAoZGVjb3Jh
dGlvbiAmIExJTkVfVEhST1VHSCkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TU3RyaWtldGhy
b3VnaFN0eWxlQXR0cmlidXRlTmFtZV07Ci0KLSAgICBpbnQgc3VwZXJzY3JpcHRJbnQgPSAwOwot
ICAgIHN3aXRjaCAoc3R5bGUtPnZlcnRpY2FsQWxpZ24oKSkgewotICAgICAgICBjYXNlIEJBU0VM
SU5FOgotICAgICAgICBjYXNlIEJPVFRPTToKLSAgICAgICAgY2FzZSBCQVNFTElORV9NSURETEU6
Ci0gICAgICAgIGNhc2UgTEVOR1RIOgotICAgICAgICBjYXNlIE1JRERMRToKLSAgICAgICAgY2Fz
ZSBURVhUX0JPVFRPTToKLSAgICAgICAgY2FzZSBURVhUX1RPUDoKLSAgICAgICAgY2FzZSBUT1A6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVUI6Ci0gICAgICAgICAgICBzdXBl
cnNjcmlwdEludCA9IC0xOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1VQRVI6
Ci0gICAgICAgICAgICBzdXBlcnNjcmlwdEludCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgaWYgKHN1cGVyc2NyaXB0SW50KQotICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpzdXBlcnNjcmlwdEludF0gZm9yS2V5Ok5TU3VwZXJzY3Jp
cHRBdHRyaWJ1dGVOYW1lXTsKLQotICAgIGlmIChkZWNvcmF0aW9uICYgVU5ERVJMSU5FKQotICAg
ICAgICBbcmVzdWx0IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGlu
ZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdOwotCi0g
ICAgaWYgKG5vZGVUb1JlbW92ZSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICAgICAgbm9kZVRvUmVtb3ZlLT5yZW1vdmUoZWMpOwotICAgICAgICBBU1NFUlQoZWMgPT0gMCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTlNXcml0aW5nRGlyZWN0aW9uIEZy
YW1lOjpiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29uc3QKLXsKLSAg
ICBOU1dyaXRpbmdEaXJlY3Rpb24gcmVzdWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmln
aHQ7Ci0KLSAgICBQb3NpdGlvbiBwb3MgPSBzZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJs
ZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsK
LSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKCFyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSkg
ewotICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAg
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgaWYgKCFzdHls
ZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgCi0gICAgc3dpdGNoIChzdHlsZS0+
ZGlyZWN0aW9uKCkpIHsKLSAgICAgICAgY2FzZSBMVFI6Ci0gICAgICAgICAgICByZXN1bHQgPSBO
U1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFJUTDoKLSAgICAgICAgICAgIHJlc3VsdCA9IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0
VG9MZWZ0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKIE5TTXV0YWJsZURpY3Rpb25hcnkq
IEZyYW1lOjpkYXNoYm9hcmRSZWdpb25zRGljdGlvbmFyeSgpCiB7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNjcwMzApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY2LDcgKzg2Niw3IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIKICAgICByZW5kZXJlcigpLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPnNldFJlbmRlcmVkUmVjdEZvck1hcmtlcihyZW5kZXJlcigp
LT5ub2RlKCksIG1hcmtlciwgbWFya2VyUmVjdCk7CiAgICAgIAogICAgIC8vIE9wdGlvbmFsbHkg
aGlnaGxpZ2h0IHRoZSB0ZXh0Ci0gICAgaWYgKHJlbmRlcmVyKCktPmZyYW1lKCktPm1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSkgeworICAgIGlmIChyZW5kZXJlcigpLT5mcmFtZSgp
LT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpKSB7CiAgICAgICAg
IENvbG9yIGNvbG9yID0gbWFya2VyLmFjdGl2ZU1hdGNoID8KICAgICAgICAgICAgIHJlbmRlcmVy
KCktPnRoZW1lKCktPnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgOgog
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcigpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmNwcAkocmV2aXNpb24gNjcwMzApCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZQog
ICAgIG5vZGUoKS0+ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnB1
dEV2ZW50LCB0cnVlLCBmYWxzZSkpOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCkpCi0gICAgICAgIGZyYW1lLT50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYSh0ZXh0QXJlYSk7
CisgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEFyZWEodGV4dEFy
ZWEpOwogfQogCiBib29sIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAJKHJldmlzaW9uIDY3MDMwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDEyICsxODEsMTIgQEAg
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN1YnRyZQogCiAgICAgaWYgKCF3YXND
aGFuZ2VkICYmIG5vZGUoKS0+Zm9jdXNlZCgpKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSB0aGlzLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPnRleHRGaWVsZERpZEJlZ2luRWRp
dGluZyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgICAgICAgICBmcmFtZS0+
ZWRpdG9yKCktPnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKG5vZGUoKS0+Zm9jdXNlZCgpKSB7CiAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJh
bWUtPnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgp
KSk7CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHREaWRDaGFuZ2VJblRleHRGaWVs
ZChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY3MDM3KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA5LTA4ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBNb3ZlIGZ1bmN0aW9ucyBmcm9tIEZyYW1lIHRvIEVkaXRvciBhcyBwbGFubmVkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTIxOAorCisg
ICAgICAgICogc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OnNlbGVjdE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDbGll
bnRJbXBsOjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgICogc3JjL1dl
YkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6ZmluZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c3RvcEZpbmRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OnNjb3BlU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNhcmV0T3JTZWxl
Y3Rpb25Cb3VuZHMpOgorICAgICAgICBDaGFuZ2VkIGNhbGwgc2l0ZXMgdG8gdXNlIGVkaXRvcigp
LgorCiAyMDEwLTA5LTA4ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDY3MDMwKQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBib29sIGlzQVNpbmdsZVdvcmQoY29uc3QgU3RyaW5n
JiAKIHN0YXRpYyBTdHJpbmcgc2VsZWN0TWlzc3BlbGxlZFdvcmQoY29uc3QgQ29udGV4dE1lbnUq
IGRlZmF1bHRNZW51LCBGcmFtZSogc2VsZWN0ZWRGcmFtZSkKIHsKICAgICAvLyBGaXJzdCBzZWxl
Y3QgZnJvbSBzZWxlY3RlZFRleHQgdG8gY2hlY2sgZm9yIG11bHRpcGxlIHdvcmQgc2VsZWN0aW9u
LgotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGVkVGV4
dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHNlbGVj
dGVkRnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIAog
ICAgIC8vIElmIHNvbWUgdGV4dHMgd2VyZSBhbHJlYWR5IHNlbGVjdGVkLCB3ZSBkb24ndCBjaGFu
Z2UgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewpA
QCAtMTE5LDcgKzExOSw3IEBAIHN0YXRpYyBTdHJpbmcgc2VsZWN0TWlzc3BlbGxlZFdvcmQoY29u
c3QKICAgICAgICAgcmV0dXJuIG1pc3NwZWxsZWRXb3JkOyAvLyBJdCBpcyBlbXB0eS4KIAogICAg
IFdlYkZyYW1lSW1wbDo6c2VsZWN0V29yZEFyb3VuZFBvc2l0aW9uKHNlbGVjdGVkRnJhbWUsIHBv
cyk7Ci0gICAgbWlzc3BlbGxlZFdvcmQgPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3RlZFRleHQoKS5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICBtaXNzcGVsbGVkV29yZCA9IHNlbGVjdGVkRnJhbWUtPmVk
aXRvcigpLT5zZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIAogI2lmIE9TKERBUldJ
TikKICAgICAvLyBJZiBtaXNzcGVsbGVkIHdvcmQgaXMgc3RpbGwgZW1wdHksIHRoZW4gdGhhdCBw
b3J0aW9uIHNob3VsZCBub3QgYmUKQEAgLTIzMyw3ICsyMzMsNyBAQCBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCiAgICAgICAgIGRhdGEuZnJhbWVVUkwgPSB1cmxGcm9t
RnJhbWUoc2VsZWN0ZWRGcmFtZSk7CiAKICAgICBpZiAoci5pc1NlbGVjdGVkKCkpCi0gICAgICAg
IGRhdGEuc2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0ZWRUZXh0KCkuc3RyaXBX
aGl0ZVNwYWNlKCk7CisgICAgICAgIGRhdGEuc2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRGcmFtZS0+
ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOwogCiAgICAgaWYgKHIu
aXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICBkYXRhLmlzRWRpdGFibGUgPSB0cnVlOwpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNjcwMzApCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNTYsNyArMTM1Niw3IEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpmaW5kKGludCBpZGVudGlmaWVy
LAogICAgIH0KIAogICAgIEFTU0VSVChmcmFtZSgpICYmIGZyYW1lKCktPnZpZXcoKSk7Ci0gICAg
Ym9vbCBmb3VuZCA9IGZyYW1lKCktPmZpbmRTdHJpbmcoCisgICAgYm9vbCBmb3VuZCA9IGZyYW1l
KCktPmVkaXRvcigpLT5maW5kU3RyaW5nKAogICAgICAgICBzZWFyY2hUZXh0LCBvcHRpb25zLmZv
cndhcmQsIG9wdGlvbnMubWF0Y2hDYXNlLCB3cmFwV2l0aGluRnJhbWUsCiAgICAgICAgIHN0YXJ0
SW5TZWxlY3Rpb24pOwogICAgIGlmIChmb3VuZCkgewpAQCAtMTQzOSw3ICsxNDM5LDcgQEAgdm9p
ZCBXZWJGcmFtZUltcGw6OnN0b3BGaW5kaW5nKGJvb2wgY2xlYQogCiAgICAgLy8gUmVtb3ZlIGFs
bCBtYXJrZXJzIGZvciBtYXRjaGVzIGZvdW5kIGFuZCB0dXJuIG9mZiB0aGUgaGlnaGxpZ2h0aW5n
LgogICAgIGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhEb2N1
bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICBmcmFtZSgpLT5zZXRNYXJrZWRUZXh0TWF0Y2hl
c0FyZUhpZ2hsaWdodGVkKGZhbHNlKTsKKyAgICBmcmFtZSgpLT5lZGl0b3IoKS0+c2V0TWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChmYWxzZSk7CiAKICAgICAvLyBMZXQgdGhlIGZyYW1l
IGtub3cgdGhhdCB3ZSBkb24ndCB3YW50IHRpY2ttYXJrcyBvciBoaWdobGlnaHRpbmcgYW55bW9y
ZS4KICAgICBpbnZhbGlkYXRlQXJlYShJbnZhbGlkYXRlQWxsKTsKQEAgLTE0NjAsNyArMTQ2MCw3
IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpzY29wZVN0cmluZ01hdGNoZXMoaW4KICAgICAgICAgLy8g
U2NvcGluZyBpcyBqdXN0IGFib3V0IHRvIGJlZ2luLgogICAgICAgICBtX3Njb3BpbmdDb21wbGV0
ZSA9IGZhbHNlOwogICAgICAgICAvLyBDbGVhciBoaWdobGlnaHRpbmcgZm9yIHRoaXMgZnJhbWUu
Ci0gICAgICAgIGlmIChmcmFtZSgpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkp
CisgICAgICAgIGlmIChmcmFtZSgpLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZCgpKQogICAgICAgICAgICAgZnJhbWUoKS0+cGFnZSgpLT51bm1hcmtBbGxUZXh0TWF0
Y2hlcygpOwogICAgICAgICAvLyBDbGVhciB0aGUgY291bnRlcnMgZnJvbSBsYXN0IG9wZXJhdGlv
bi4KICAgICAgICAgbV9sYXN0TWF0Y2hDb3VudCA9IDA7CkBAIC0xNTg1LDcgKzE1ODUsNyBAQCB2
b2lkIFdlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVzKGluCiAgICAgbV9sYXN0U2VhcmNo
U3RyaW5nID0gc2VhcmNoVGV4dDsKIAogICAgIGlmIChtYXRjaENvdW50ID4gMCkgewotICAgICAg
ICBmcmFtZSgpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKHRydWUpOworICAg
ICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZCh0cnVlKTsKIAogICAgICAgICBtX2xhc3RNYXRjaENvdW50ICs9IG1hdGNoQ291bnQ7CiAKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc4
LDcgKzEyNzgsNyBAQCBXZWJSZWN0IFdlYlZpZXdJbXBsOjpjYXJldE9yU2VsZWN0aW9uQm91CiAg
ICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVy
biByZWN0OwogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY29udHJvbGxlci0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICAgICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZm9j
dXNlZC0+Zmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpKTsKKyAgICAgICAgcmVjdCA9IHZp
ZXctPmNvbnRlbnRzVG9XaW5kb3coZm9jdXNlZC0+ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdl
KHJhbmdlLmdldCgpKSk7CiAgICAgfQogICAgIHJldHVybiByZWN0OwogfQpJbmRleDogV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDY3MDM3KQorKysgV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMSBAQAorMjAxMC0wOS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmdW5j
dGlvbnMgZnJvbSBGcmFtZSB0byBFZGl0b3IgYXMgcGxhbm5lZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMTgKKworICAgICAgICAqIGV3ay9ld2tf
ZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX2VkaXRhYmxlX3NldCk6CisgICAgICAgIChl
d2tfZnJhbWVfc2VsZWN0aW9uX2dldCk6CisgICAgICAgIChld2tfZnJhbWVfdGV4dF9zZWFyY2gp
OgorICAgICAgICAoZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19tYXJrKToKKyAgICAgICAgKGV3a19m
cmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldCk6CisgICAgICAgIChld2tfZnJhbWVfdGV4
dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQpOgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChld2tfdmlld19zZWxlY3Rpb25fZ2V0KToKKyAgICAgICAgQ2hhbmdlZCBjYWxsIHNp
dGVzIHRvIHVzZSBlZGl0b3IoKS4KKwogMjAxMC0wOS0wOCAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNo
b2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCkluZGV4OiBX
ZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdr
L2V3a19mcmFtZS5jcHAJKHJldmlzaW9uIDY3MDMwKQorKysgV2ViS2l0L2VmbC9ld2svZXdrX2Zy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM2LDcgKzYzNiw3IEBAIEVpbmFfQm9vbCBld2tf
ZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2IKICAgICBpZiAoc2QtPmVkaXRhYmxlID09IGVkaXRh
YmxlKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAgIGlmIChlZGl0YWJsZSkKLSAgICAg
ICAgc2QtPmZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAg
c2QtPmZyYW1lLT5lZGl0b3IoKS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNjUxLDcgKzY1MSw3IEBAIGNoYXIqIGV3a19m
cmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXMKIHsKICAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgMCk7Ci0gICAgV1RGOjpDU3RyaW5nIHMgPSBzZC0+ZnJhbWUtPnNlbGVjdGVkVGV4
dCgpLnV0ZjgoKTsKKyAgICBXVEY6OkNTdHJpbmcgcyA9IHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNl
bGVjdGVkVGV4dCgpLnV0ZjgoKTsKICAgICBpZiAocy5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CkBAIC03NTEsNyArNzUxLDcgQEAgRWlu
YV9Cb29sIGV3a19mcmFtZV90ZXh0X3NlYXJjaChjb25zdCBFdgogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJuIHNk
LT5mcmFtZS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgZm9yd2Fy
ZCwgY2FzZV9zZW5zaXRpdmUsIHdyYXAsIHRydWUpOworICAgIHJldHVybiBzZC0+ZnJhbWUtPmVk
aXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBmb3J3YXJk
LCBjYXNlX3NlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7CiB9CiAKIC8qKgpAQCAtNzcxLDggKzc3MSw4
IEBAIHVuc2lnbmVkIGludCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX21hcmsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCAwKTsKIAotICAgIHNkLT5mcmFtZS0+
c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOwotICAgIHJldHVy
biBzZC0+ZnJhbWUtPmNvdW50TWF0Y2hlc0ZvclRleHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0
cmluZyksIGNhc2Vfc2Vuc2l0aXZlLCBsaW1pdCwgdHJ1ZSk7CisgICAgc2QtPmZyYW1lLT5lZGl0
b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOworICAg
IHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlX3NlbnNpdGl2ZSwgbGltaXQsIHRydWUpOwogfQog
CiAvKioKQEAgLTgwMyw3ICs4MDMsNyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hl
c19oaWdobGlnCiB7CiAgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZChoaWdobGlnaHQpOworICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRleHRN
YXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCkBAIC04MTgsNyArODE4LDcgQEAgRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNf
aGlnaGxpZwogewogICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCk7CisgICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQoKTsKIH0KIAogLyoqIApJbmRleDogV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAkocmV2
aXNpb24gNjcwMzApCisrKyBXZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIGNoYXIqIGV3a192aWV3X3NlbGVjdGlvbl9nZXQoY29u
c3QgRXZhc18KIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIFdURjo6Q1N0
cmluZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CisgICAgV1RGOjpDU3RyaW5nIHMgPSBwcml2LT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5z
ZWxlY3RlZFRleHQoKS51dGY4KCk7CiAgICAgaWYgKHMuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkpOwpJbmRleDogV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3MDM3
KQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBA
QAorMjAxMC0wOS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmdW5jdGlvbnMgZnJv
bSBGcmFtZSB0byBFZGl0b3IgYXMgcGxhbm5lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMTgKKworICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19zZXRfaGlnaGxpZ2h0X3RleHRfbWF0
Y2hlcyk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NlbGVjdGVkX3RleHQpOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X3NldF9lZGl0YWJsZSk6CisgICAgICAgIENoYW5nZWQgY2Fs
bCBzaXRlcyB0byB1c2UgZWRpdG9yKCkuCisKIDIwMTAtMDktMDggIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBS
b2JpbnNvbi4KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA2
NzAzMCkKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjkzLDcgKzM2OTMsNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfaGlnaGxp
Z2h0X3RleHRfCiAKICAgICBGcmFtZSAqZnJhbWUgPSBjb3JlKHdlYlZpZXcpLT5tYWluRnJhbWUo
KTsKICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKHNob3VsZEhpZ2hsaWdodCk7CisgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChzaG91bGRIaWdobGlnaHQpOwogICAgICAgICBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dFdpdGhXcmFwKGZhbHNlKTsKICAgICB9
IHdoaWxlIChmcmFtZSk7CiB9CkBAIC0zODc1LDcgKzM4NzUsNyBAQCBnY2hhciogd2Via2l0X3dl
Yl92aWV3X2dldF9zZWxlY3RlZF90ZXh0CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Vi
VmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICByZXR1
cm4gZ19zdHJkdXAoZnJhbWUtPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJl
dHVybiBnX3N0cmR1cChmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKS5kYXRh
KCkpOwogfQogCiAvKioKQEAgLTM5NDcsNyArMzk0Nyw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3
X3NldF9lZGl0YWJsZShXZWJLaXQKICAgICBwcml2LT5lZGl0YWJsZSA9IGZsYWc7CiAKICAgICBp
ZiAoZmxhZykgewotICAgICAgICBmcmFtZS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50
KCk7CisgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVt
ZW50KCk7CiAgICAgICAgIC8vIFRPRE86IElmIHRoZSBXZWJLaXRXZWJWaWV3IGlzIG1hZGUgZWRp
dGFibGUgYW5kIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHksIHNldCBpdCB0byBzb21ldGhpbmcuCiAg
ICAgICAgIC8vaWYgKCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NlbGVjdGVkX2RvbV9yYW5nZSh3ZWJW
aWV3KSkKICAgICAgICAgLy8gICAgbWFpbkZyYW1lLT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwpJ
bmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY3MDM3KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wOS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW92ZSBmdW5jdGlvbnMgZnJvbSBGcmFtZSB0byBFZGl0b3IgYXMgcGxhbm5lZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMTgKKworICAgICAg
ICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3RlZFN0
cmluZ10pOgorICAgICAgICAoLVtXZWJGcmFtZSBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6XSk6Cisg
ICAgICAgICgtW1dlYkZyYW1lIF9tYXJrRE9NUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViRnJhbWUg
X3NldFR5cGluZ1N0eWxlOndpdGhVbmRvQWN0aW9uOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
SFRNTFJlcHJlc2VudGF0aW9uLm1tOgorICAgICAgICAoLVtXZWJIVE1MUmVwcmVzZW50YXRpb24g
ZmluaXNoZWRMb2FkaW5nV2l0aERhdGFTb3VyY2U6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJI
VE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3NlbGVjdGlvblN0YXJ0Rm9udEF0
dHJpYnV0ZXNBc1JURl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyB0b2dnbGVCYXNlV3JpdGlu
Z0RpcmVjdGlvbjpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2VhcmNoRm9yOmRpcmVjdGlv
bjpjYXNlU2Vuc2l0aXZlOndyYXA6c3RhcnRJblNlbGVjdGlvbjpdKToKKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgY291bnRNYXRjaGVzRm9yVGV4dDpjYXNlU2Vuc2l0aXZlOmxpbWl0Om1hcmtNYXRj
aGVzOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtYXJrZWRUZXh0TWF0Y2hlc0Fy
ZUhpZ2hsaWdodGVkXSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAo
LVtXZWJWaWV3IHNldEVkaXRhYmxlOl0pOgorICAgICAgICBDaGFuZ2VkIGNhbGwgc2l0ZXMgdG8g
dXNlIGVkaXRvcigpLgorCiAyMDEwLTA5LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTI5LDcgKzUyOSw3IEBAIC0gKE5TU3RyaW5n
ICopX21hcmt1cFN0cmluZ0Zyb21SYW5nZTooRE8KIAogLSAoTlNTdHJpbmcgKilfc2VsZWN0ZWRT
dHJpbmcKIHsKLSAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZGlzcGxheVN0cmluZ01v
ZGlmaWVkQnlFbmNvZGluZyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3RlZFRleHQoKSk7Cisg
ICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5j
b2RpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpKTsKIH0K
IAogLSAoTlNTdHJpbmcgKilfc3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKQEAgLTY2
Miw3ICs2NjIsNyBAQCAtIChOU1JlY3QpX2NhcmV0UmVjdEF0Tm9kZTooRE9NTm9kZSAqKW5vCiAK
IC0gKE5TUmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAg
IHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5maXJzdFJlY3RGb3JSYW5nZShjb3JlKHJhbmdl
KSk7CisgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVjdEZv
clJhbmdlKGNvcmUocmFuZ2UpKTsKIH0KIAogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6KERPTVJhbmdlICopcmFuZ2UKQEAgLTc4OCw3ICs3ODgsNyBAQCAtIChOU1JhbmdlKV9jb252
ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6KERPCiAKIC0gKERPTVJhbmdlICopX21hcmtET01SYW5nZQog
ewotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+bWFyaygpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRp
dG9yKCktPm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAogLy8gR2l2ZW4g
cHJvcG9zZWRSYW5nZSwgcmV0dXJucyBhbiBleHRlbmRlZCByYW5nZSB0aGF0IGluY2x1ZGVzIGFk
amFjZW50IHdoaXRlc3BhY2UgdGhhdCBzaG91bGQKQEAgLTkwNCw3ICs5MDQsNyBAQCAtICh2b2lk
KV9zZXRUeXBpbmdTdHlsZTooRE9NQ1NTU3R5bGVEZWNsCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+Y29t
cHV0ZUFuZFNldFR5cGluZ1N0eWxlKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9uKTsKKyAgICBfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKGNvcmUo
c3R5bGUpLCB1bmRvQWN0aW9uKTsKIH0KIAogLSAodm9pZClfZHJhZ1NvdXJjZUVuZGVkQXQ6KE5T
UG9pbnQpd2luZG93TG9jIG9wZXJhdGlvbjooTlNEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCShyZXZpc2lv
biA2NzAzMCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCAtICh2b2lkKWZpbmlzaGVkTG9hZGlu
Z1dpdGhEYXRhU291cmNlOihXCiAgICAgICAgIAogICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0g
W2ZyYW1lIHdlYlZpZXddOwogICAgICAgICBpZiAoW3dlYlZpZXcgaXNFZGl0YWJsZV0pCi0gICAg
ICAgICAgICBjb3JlKGZyYW1lKS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7Cisg
ICAgICAgICAgICBjb3JlKGZyYW1lKS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5
RWxlbWVudCgpOwogICAgIH0KIH0KIApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
cmV2aXNpb24gNjcwMzApCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQyMDQsNyArNDIwNCw3IEBAIC0gKE5TRGF0YSAqKV9zZWxlY3Rpb25T
dGFydEZvbnRBdHRyaWJ1dGUKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIngiCi0gICAgICAgIGF0dHJpYnV0ZXM6Y29y
ZUZyYW1lID8gY29yZUZyYW1lLT5mb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgOiBu
aWxdOworICAgICAgICBhdHRyaWJ1dGVzOmNvcmVGcmFtZSA/IGNvcmVGcmFtZS0+ZWRpdG9yKCkt
PmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSA6IG5pbF07CiAgICAgTlNEYXRhICpk
YXRhID0gW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhd
KSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKICAgICBbc3RyaW5nIHJlbGVhc2VdOwogICAgIHJl
dHVybiBkYXRhOwpAQCAtNDgzMSw3ICs0ODMxLDcgQEAgLSAodm9pZCl0b2dnbGVCYXNlV3JpdGlu
Z0RpcmVjdGlvbjooaWQpcwogICAgICAgICByZXR1cm47CiAKICAgICBXcml0aW5nRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsKLSAgICBzd2l0Y2ggKGNv
cmVGcmFtZS0+YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpKSB7CisgICAg
c3dpdGNoIChjb3JlRnJhbWUtPmVkaXRvcigpLT5iYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVj
dGlvblN0YXJ0KCkpIHsKICAgICAgICAgY2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdo
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0OgpAQCAtNjE2Nyw3ICs2MTY3LDcgQEAgLSAoQk9PTClzZWFyY2hGb3I6KE5TU3Ry
aW5nICopc3RyaW5nIGRpcgogICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQogICAgICAgICByZXR1
cm4gTk87CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
cmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJk
LCBjYXNlRmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rpb24pOworICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGZvcndhcmQs
IGNhc2VGbGFnLCB3cmFwRmxhZywgc3RhcnRJblNlbGVjdGlvbik7CiB9CiAKIEBlbmQKQEAgLTYx
OTcsNyArNjE5Nyw3IEBAIC0gKE5TVUludGVnZXIpY291bnRNYXRjaGVzRm9yVGV4dDooTlNTdHIK
ICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNv
cmVGcmFtZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+Y291bnRN
YXRjaGVzRm9yVGV4dChzdHJpbmcsIGNhc2VGbGFnLCBsaW1pdCwgbWFya01hdGNoZXMpOworICAg
IHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KHN0cmluZywg
Y2FzZUZsYWcsIGxpbWl0LCBtYXJrTWF0Y2hlcyk7CiB9CiAKIC0gKHZvaWQpc2V0TWFya2VkVGV4
dE1hdGNoZXNBcmVIaWdobGlnaHRlZDooQk9PTCluZXdWYWx1ZQpAQCAtNjIwNSwxMyArNjIwNSwx
MyBAQCAtICh2b2lkKXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0CiAgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAg
ICAgICAgIHJldHVybjsKLSAgICBjb3JlRnJhbWUtPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGln
aGxpZ2h0ZWQobmV3VmFsdWUpOworICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQobmV3VmFsdWUpOwogfQogCiAtIChCT09MKW1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+bWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOwogfQog
CiAtICh2b2lkKXVubWFya0FsbFRleHRNYXRjaGVzCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQko
cmV2aXNpb24gNjcwMzApCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDc2Niw3ICs0NzY2LDcgQEAgLSAodm9pZClzZXRFZGl0YWJsZTooQk9PTClm
bGFnCiAgICAgICAgIEZyYW1lKiBtYWluRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CiAg
ICAgICAgIGlmIChtYWluRnJhbWUpIHsKICAgICAgICAgICAgIGlmIChmbGFnKSB7Ci0gICAgICAg
ICAgICAgICAgbWFpbkZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBtYWluRnJhbWUtPmVkaXRvcigpLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9k
eUVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgV2ViVmlldyBpcyBtYWRlIGVk
aXRhYmxlIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5LCBzZXQgaXQgdG8gc29tZXRoaW5nLgog
ICAgICAgICAgICAgICAgIGlmICghW3NlbGYgc2VsZWN0ZWRET01SYW5nZV0pCiAgICAgICAgICAg
ICAgICAgICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKSW5kZXg6IFdlYktp
dC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNp
b24gNjcwMzcpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTAtMDktMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgZnVuY3Rp
b25zIGZyb20gRnJhbWUgdG8gRWRpdG9yIGFzIHBsYW5uZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjE4CisKKyAgICAgICAgKiBBcGkvcXdlYnBh
Z2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnNlbGVjdGVkVGV4dCk6CisgICAgICAgIChRV2Vi
UGFnZTo6c2V0Q29udGVudEVkaXRhYmxlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRRdC5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UpOgorICAgICAgICBDaGFuZ2VkIGNhbGwgc2l0
ZXMgdG8gdXNlIGVkaXRvcigpLgorCiAyMDEwLTA5LTA4ICBQZXRlciBLYXN0aW5nICA8cGthc3Rp
bmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KSW5kZXg6
IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDE3LDcgKzI0MTcsNyBAQCBib29sIFFXZWJQYWdlOjph
Y2NlcHROYXZpZ2F0aW9uUmVxdWVzdChRCiBRU3RyaW5nIFFXZWJQYWdlOjpzZWxlY3RlZFRleHQo
KSBjb25zdAogewogICAgIGQtPmNyZWF0ZU1haW5GcmFtZSgpOwotICAgIHJldHVybiBkLT5wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGVkVGV4dCgp
OworICAgIHJldHVybiBkLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCktPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKIH0KIAogI2lmbmRlZiBRVF9OT19BQ1RJ
T04KQEAgLTI4ODEsNyArMjg4MSw3IEBAIHZvaWQgUVdlYlBhZ2U6OnNldENvbnRlbnRFZGl0YWJs
ZShib29sIGUKICAgICAgICAgaWYgKGQtPm1haW5GcmFtZSkgewogICAgICAgICAgICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gZC0+bWFpbkZyYW1lLT5kLT5mcmFtZTsKICAgICAgICAgICAgIGlm
IChlZGl0YWJsZSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRp
dGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWMg
cG9ydCBjYWxscyB0aGlzIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkRE9NUmFuZ2UKICAgICAgICAg
ICAgICAgICAvL2ZyYW1lLT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwogICAgICAgICAgICAgfQpJ
bmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw3ICs0
ODksNyBAQCBRVmFyaWFudExpc3QgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmZpCiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuIFFWYXJpYW50TGlzdCgpOwogCi0gICAgUVJlY3QgcmVz
dWx0UmVjdCA9IGZyYW1lLT5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CisgICAgUVJl
Y3QgcmVzdWx0UmVjdCA9IGZyYW1lLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2Uu
Z2V0KCkpOwogICAgIHJlY3QgPDwgcmVzdWx0UmVjdC54KCkgPDwgcmVzdWx0UmVjdC55KCkgPDwg
cmVzdWx0UmVjdC53aWR0aCgpIDw8IHJlc3VsdFJlY3QuaGVpZ2h0KCk7CiAgICAgcmV0dXJuIHJl
Y3Q7CiB9CkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
d2luL0NoYW5nZUxvZwkocmV2aXNpb24gNjcwMzcpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA5LTA4ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb3ZlIGZ1bmN0aW9ucyBmcm9tIEZyYW1lIHRvIEVkaXRvciBhcyBwbGFubmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTIxOAor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhHb29nbGUpOgorICAgICAgICAq
IFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkZyYW1lOjpzZWxlY3RlZFN0cmluZyk6CisgICAg
ICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzZWxlY3RlZFRleHQpOgorICAg
ICAgICAoV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyk6CisgICAgICAgIChXZWJWaWV3
OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24pOgorICAgICAgICBDaGFuZ2VkIGNhbGwgc2l0ZXMg
dG8gdXNlIGVkaXRvcigpLgorCiAyMDEwLTA5LTA4ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQsIGJ1aWxkIGZpeC4KSW5kZXg6IFdl
YktpdC93aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViRnJhbWUu
Y3BwCShyZXZpc2lvbiA2NzAzMCkKKysrIFdlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQ1LDcgKzEwNDUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdl
YkZyYW1lOjpzZWxlCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBFX0ZBSUw7
CiAKLSAgICBTdHJpbmcgdGV4dCA9IGNvcmVGcmFtZS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlF
bmNvZGluZyhjb3JlRnJhbWUtPnNlbGVjdGVkVGV4dCgpKTsKKyAgICBTdHJpbmcgdGV4dCA9IGNv
cmVGcmFtZS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhjb3JlRnJhbWUtPmVkaXRv
cigpLT5zZWxlY3RlZFRleHQoKSk7CiAKICAgICAqcmVzdWx0ID0gQlN0cmluZyh0ZXh0KS5yZWxl
YXNlKCk7CiAgICAgcmV0dXJuIFNfT0s7CkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDY3MDMwKQorKysg
V2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0Nyw3ICszNTQ3LDcg
QEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3OjpzZWxlYwogICAgIGlmICghZm9j
dXNlZEZyYW1lKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgU3RyaW5nIGZyYW1lU2Vs
ZWN0ZWRUZXh0ID0gZm9jdXNlZEZyYW1lLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcgZnJh
bWVTZWxlY3RlZFRleHQgPSBmb2N1c2VkRnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsK
ICAgICAqdGV4dCA9IFN5c0FsbG9jU3RyaW5nTGVuKGZyYW1lU2VsZWN0ZWRUZXh0LmNoYXJhY3Rl
cnMoKSwgZnJhbWVTZWxlY3RlZFRleHQubGVuZ3RoKCkpOwogICAgIGlmICghKnRleHQgJiYgZnJh
bWVTZWxlY3RlZFRleHQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwpA
QCAtNTI2Nyw3ICs1MjY3LDcgQEAgdm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRlV2luZG93
KEZyYQogICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IHRlbXBSYW5nZSA9IHJhbmdlLT5j
bG9uZVJhbmdlKGVjKTsKLSAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+Zmlyc3RSZWN0Rm9y
UmFuZ2UodGVtcFJhbmdlLmdldCgpKTsKKyAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRp
dG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7CiAgICAgfQogICAgIGNh
cmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJldCk7CiAgICAg
Q0FORElEQVRFRk9STSBmb3JtOwpAQCAtNTUzOCw3ICs1NTM4LDcgQEAgTFJFU1VMVCBXZWJWaWV3
OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpbwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZW1wUmFuZ2UgPSByYW5nZS0+Y2xvbmVSYW5nZShlYyk7
CiAgICAgICAgIHRlbXBSYW5nZS0+c2V0U3RhcnQodGVtcFJhbmdlLT5zdGFydENvbnRhaW5lcihl
YyksIHRlbXBSYW5nZS0+c3RhcnRPZmZzZXQoZWMpICsgY2hhclBvcy0+ZHdDaGFyUG9zLCBlYyk7
Ci0gICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmZpcnN0UmVjdEZvclJhbmdlKHRlbXBSYW5n
ZS5nZXQoKSk7CisgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5maXJzdFJl
Y3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwogICAgIH0KICAgICBjYXJldCA9IHRhcmdldEZy
YW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOwogICAgIGNoYXJQb3MtPnB0Lngg
PSBjYXJldC54KCk7CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRN
ZW51Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkNvbnRleHRNZW51Q2xpZW50LmNwcAkocmV2aXNpb24gNjcwMzApCisrKyBXZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMxLDcgKzEzMSw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OmRvd25sb2FkVVJMKGMK
IAogdm9pZCBXZWJDb250ZXh0TWVudUNsaWVudDo6c2VhcmNoV2l0aEdvb2dsZShjb25zdCBGcmFt
ZSogZnJhbWUpCiB7Ci0gICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGZyYW1lLT5zZWxlY3RlZFRl
eHQoKTsKKyAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rl
ZFRleHQoKTsKICAgICBzZWFyY2hTdHJpbmcuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgU3RyaW5n
IGVuY29kZWQgPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHNlYXJjaFN0cmluZyk7CiAg
ICAgZW5jb2RlZC5yZXBsYWNlKCIlMjAiLCAiKyIpOwpJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzAzNykKKysr
IFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
MC0wOS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmdW5jdGlvbnMgZnJvbSBGcmFt
ZSB0byBFZGl0b3IgYXMgcGxhbm5lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDUyMTgKKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAg
KHd4V2ViRnJhbWU6OkZpbmRTdHJpbmcpOgorICAgICAgICBDaGFuZ2VkIGNhbGwgc2l0ZXMgdG8g
dXNlIGVkaXRvcigpLgorCiAyMDEwLTA4LTMxICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQvd3gvV2Vi
RnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJGcmFtZS5jcHAJKHJldmlzaW9u
IDY3MDMwKQorKysgV2ViS2l0L3d4L1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcz
LDcgKzI3Myw3IEBAIHd4U3RyaW5nIHd4V2ViRnJhbWU6OkdldEVkaXRDb21tYW5kVmFsdWUKIGJv
b2wgd3hXZWJGcmFtZTo6RmluZFN0cmluZyhjb25zdCB3eFN0cmluZyYgc3RyaW5nLCBib29sIGZv
cndhcmQsIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCB3cmFwU2VsZWN0aW9uLCBib29sIHN0YXJ0
SW5TZWxlY3Rpb24pCiB7CiAgICAgaWYgKG1faW1wbC0+ZnJhbWUpCi0gICAgICAgIHJldHVybiBt
X2ltcGwtPmZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwg
d3JhcFNlbGVjdGlvbiwgc3RhcnRJblNlbGVjdGlvbik7CisgICAgICAgIHJldHVybiBtX2ltcGwt
PmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VTZW5zaXRp
dmUsIHdyYXBTZWxlY3Rpb24sIHN0YXJ0SW5TZWxlY3Rpb24pOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67059</attachid>
            <date>2010-09-09 10:52:42 -0700</date>
            <delta_ts>2010-09-09 12:35:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45218-20100909105241.patch</filename>
            <type>text/plain</type>
            <size>117264</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTYgQEAKKzIwMTAtMDktMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
ZnVuY3Rpb25zIGZyb20gRnJhbWUgdG8gRWRpdG9yIGFzIHBsYW5uZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjE4CisKKyAgICAgICAgSnVzdCBl
eGVjdXRpbmcgdGhlIHBsYW4gdGhhdCBoYXMgbG9uZyBiZWVuIGRlc2NyaWJlZCBpbiBGcmFtZS5o
CisgICAgICAgIHRvIG1vdmUgYSBidW5jaCBvZiBmdW5jdGlvbnMgdG8gRWRpdG9yLgorCisgICAg
ICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0ZWQuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpz
ZWxlY3Rpb25IYXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVjdGlvblN0
YXJ0Q1NTUHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OkVkaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmxlYXJuU3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNlbGVjdGVkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZpcnN0UmVj
dEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRj
aGVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldE1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAq
IGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Zm9u
dEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQpOgorICAgICAgICBNb3ZlZCBm
dW5jdGlvbnMgaGVyZS4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWU6OkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzaG91bGRDaGFu
Z2VTZWxlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL21h
Yy9GcmFtZU1hYy5tbToKKyAgICAgICAgTW92ZWQgZnVuY3Rpb25zIG91dCBvZiBoZXJlLgorCisg
ICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVs
ZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVu
dDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0
ZURlbGV0ZVRvTWFyayk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRmluZFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpleGVjdXRlU2VsZWN0VG9NYXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OmV4ZWN1dGVTZXRNYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTd2FwV2l0aE1hcmsp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5hYmxlZFZpc2libGVTZWxlY3Rpb25BbmRNYXJrKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpmaW5kKToKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFydERyYWcpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkpOgorICAgICAgICAqIHBhZ2UvUGFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2U6Om1hcmtBbGxNYXRjaGVzRm9yVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRUZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCk6CisgICAgICAgIENoYW5nZWQgY2FsbCBz
aXRlcyB0byB1c2UgZWRpdG9yKCkuCisKIDIwMTAtMDktMDkgIENocmlzIEZsZWl6YWNoICA8Y2Zs
ZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29y
a2luZyBjb3B5KQpAQCAtNTc5LDE2ICs1NzksMTIgQEAgX19aTjdXZWJDb3JlNUNhY2hlMTFzZXRE
aXNhYmxlZEViCiBfX1pON1dlYkNvcmU1Q2FjaGUxM2dldFN0YXRpc3RpY3NFdgogX19aTjdXZWJD
b3JlNUNhY2hlMTNzZXRDYXBhY2l0aWVzRWpqagogX19aTjdXZWJDb3JlNUZyYW1lMTBjcmVhdGVW
aWV3RVJLTlNfN0ludFNpemVFUktOU181Q29sb3JFYlMzX2JOU18xM1Njcm9sbGJhck1vZGVFYlM3
X2IKLV9fWk43V2ViQ29yZTVGcmFtZTEwZmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0ViYmJiCiBf
X1pON1dlYkNvcmU1RnJhbWUxNGZyYW1lRm9yV2lkZ2V0RVBLTlNfNldpZGdldEUKIF9fWk43V2Vi
Q29yZTVGcmFtZTE1cmV2ZWFsU2VsZWN0aW9uRVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFYgotX19a
TjdXZWJDb3JlNUZyYW1lMTljb3VudE1hdGNoZXNGb3JUZXh0RVJLTjNXVEY2U3RyaW5nRWJqYgog
X19aTjdXZWJDb3JlNUZyYW1lMjBzZXRTZWxlY3Rpb25Gcm9tTm9uZUV2CiBfX1pON1dlYkNvcmU1
RnJhbWUyM3Zpc2libGVQb3NpdGlvbkZvclBvaW50RVJLTlNfOEludFBvaW50RQotX19aTjdXZWJD
b3JlNUZyYW1lMjRjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGVFUE5TXzE5Q1NTU3R5bGVEZWNsYXJh
dGlvbkVOU18xMEVkaXRBY3Rpb25FCiBfX1pON1dlYkNvcmU1RnJhbWUyNW1hdGNoTGFiZWxzQWdh
aW5zdEVsZW1lbnRFUDdOU0FycmF5UE5TXzdFbGVtZW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjhz
ZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50RVA3TlNBcnJheVBOU183RWxlbWVudEVQbVBiCi1f
X1pON1dlYkNvcmU1RnJhbWUzNHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRFYgog
X19aTjdXZWJDb3JlNUZyYW1lNmNyZWF0ZUVQTlNfNFBhZ2VFUE5TXzIxSFRNTEZyYW1lT3duZXJF
bGVtZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19aTjdXZWJDb3JlNUZyYW1lN3NldFZp
ZXdFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOUZyYW1lVmlld0VFRQogX19aTjdXZWJDb3JlNUZyYW1l
OW5vZGVJbWFnZUVQTlNfNE5vZGVFCkBAIC02MDUsNiArNjAxLDcgQEAgX19aTjdXZWJDb3JlNkN1
cnNvcjhmcm9tVHlwZUVOUzBfNFR5cGVFCiBfX1pON1dlYkNvcmU2Q3Vyc29yRDFFdgogX19aTjdX
ZWJDb3JlNkN1cnNvcmFTRVJLUzBfCiBfX1pON1dlYkNvcmU2RWRpdG9yMTBhcHBseVN0eWxlRVBO
U18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQorX19aTjdXZWJDb3JlNkVk
aXRvcjEwZmluZFN0cmluZ0VSS04zV1RGNlN0cmluZ0ViYmJiCiBfX1pON1dlYkNvcmU2RWRpdG9y
MTBpbnNlcnRUZXh0RVJLTjNXVEY2U3RyaW5nRVBOU181RXZlbnRFCiBfX1pON1dlYkNvcmU2RWRp
dG9yMTNjYW5ESFRNTFBhc3RlRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IxM3BlcmZvcm1EZWxldGVF
dgpAQCAtNjE2LDEyICs2MTMsMTQgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjE2cGFzdGVBc1BsYWlu
VGV4dEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9zaXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dl
YkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9zaXRpb25FdgorX19aTjdXZWJDb3JlNkVkaXRvcjE5
Y291bnRNYXRjaGVzRm9yVGV4dEVSS04zV1RGNlN0cmluZ0ViamIKIF9fWk43V2ViQ29yZTZFZGl0
b3IxOWRlbGV0ZVdpdGhEaXJlY3Rpb25FTlNfMTlTZWxlY3Rpb25Db250cm9sbGVyMTBFRGlyZWN0
aW9uRU5TXzE1VGV4dEdyYW51bGFyaXR5RWJiCiBfX1pON1dlYkNvcmU2RWRpdG9yMTlpbnNlcnRV
bm9yZGVyZWRMaXN0RXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyMWFwcGx5U3R5bGVUb1NlbGVjdGlv
bkVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29y
ZTZFZGl0b3IyMWlzU2VsZWN0aW9uTWlzc3BlbGxlZEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMjNz
ZXRCYXNlV3JpdGluZ0RpcmVjdGlvbkVOU18xNldyaXRpbmdEaXJlY3Rpb25FCiBfX1pON1dlYkNv
cmU2RWRpdG9yMjRhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgorX19aTjdXZWJDb3JlNkVkaXRv
cjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNf
MTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVkaXRvcjI0aGFuZGxlUmVqZWN0ZWRDb3JyZWN0
aW9uRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CkBAIC02MzMs
NiArNjMyLDcgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjMwZGVsZXRlU2VsZWN0aW9uV2l0aAogX19a
TjdXZWJDb3JlNkVkaXRvcjMwcGFzdGVBc1BsYWluVGV4dEJ5cGFzc2luZ0RIVE1MRXYKIF9fWk43
V2ViQ29yZTZFZGl0b3IzMmd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uRXYKIF9fWk43
V2ViQ29yZTZFZGl0b3IzM2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZEV2CitfX1pO
N1dlYkNvcmU2RWRpdG9yMzRzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRWIKIF9f
Wk43V2ViQ29yZTZFZGl0b3IzNWluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkRXYK
IF9fWk43V2ViQ29yZTZFZGl0b3IzNXNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdl
RWIKIF9fWk43V2ViQ29yZTZFZGl0b3IzY3V0RXYKQEAgLTY3MiwxNCArNjcyLDE0IEBAIF9fWk43
V2ViQ29yZThEb2N1bWVudDE2aXNQYWdlQm94VmlzaWJsZUUKIF9fWk43V2ViQ29yZThEb2N1bWVu
dDE3Z2V0Rm9jdXNhYmxlTm9kZXNFUk4zV1RGNlZlY3RvcklOUzFfNlJlZlB0cklOU180Tm9kZUVF
RUxtMEVFRQogX19aTjdXZWJDb3JlOERvY3VtZW50MThjcmVhdGVXcmFwcGVyQ2FjaGVFUE5TXzE1
RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlOERvY3VtZW50MTlhY2Nlc3NTVkdFeHRlbnNp
b25zRXYKK19fWk43V2ViQ29yZThEb2N1bWVudDIwc3R5bGVTZWxlY3RvckNoYW5nZWRFTlNfMjNT
dHlsZVNlbGVjdG9yVXBkYXRlRmxhZ0UKIF9fWk43V2ViQ29yZThEb2N1bWVudDIyY3JlYXRlRG9j
dW1lbnRGcmFnbWVudEV2CiBfX1pON1dlYkNvcmU4RG9jdW1lbnQyNGFkZE1lZGlhQ2FuU3RhcnRM
aXN0ZW5lckVQTlNfMjFNZWRpYUNhblN0YXJ0TGlzdGVuZXJFCiBfX1pON1dlYkNvcmU4RG9jdW1l
bnQyNHNldFNob3VsZENyZWF0ZVJlbmRlcmVyc0ViCitfX1pON1dlYkNvcmU4RG9jdW1lbnQyNXNj
aGVkdWxlRm9yY2VkU3R5bGVSZWNhbGNFdgogX19aTjdXZWJDb3JlOERvY3VtZW50MjZwYWdlU2l6
ZUFuZE1hcmdpbnNJblBpeGVsc0VpUk5TXzdJbnRTaXplRVJpUzNfUzNfUzNfCiBfX1pON1dlYkNv
cmU4RG9jdW1lbnQyN3JlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0ZW5lckVQTlNfMjFNZWRpYUNhblN0
YXJ0TGlzdGVuZXJFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQzNnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0c0V2Ci1fX1pON1dlYkNvcmU4RG9jdW1lbnQyNXNjaGVkdWxlRm9yY2Vk
U3R5bGVSZWNhbGNFdgotX19aTjdXZWJDb3JlOERvY3VtZW50MjBzdHlsZVNlbGVjdG9yQ2hhbmdl
ZEVOU18yM1N0eWxlU2VsZWN0b3JVcGRhdGVGbGFnRQogX19aTjdXZWJDb3JlOERvY3VtZW50NGhl
YWRFdgogX19aTjdXZWJDb3JlOEZvcm1EYXRhNmNyZWF0ZUVQS3ZtCiBfX1pON1dlYkNvcmU4Rm9y
bURhdGFEMUV2CkBAIC03MzcsOSArNzM3LDkgQEAgX19aTjdXZWJDb3JlOFNldHRpbmdzMzFzZXRT
aHJpbmtzU3RhbmRhbAogX19aTjdXZWJDb3JlOFNldHRpbmdzMzJzZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MzMnNldE5lZWRzQWRvYmVGcmFt
ZVJlbG9hZGluZ1F1aXJrRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczMzc2V0RG93bmxvYWRhYmxl
QmluYXJ5Rm9udHNFbmFibGVkRWIKLV9fWk43V2ViQ29yZThTZXR0aW5nczM1c2V0RW5mb3JjZUNT
U01JTUVUeXBlSW5Ob1F1aXJrc01vZGVFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMzRzZXRMb2Nh
bEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkRWIKIF9fWk43V2ViQ29yZThTZXR0aW5nczM1c2V0
QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNFYgorX19aTjdXZWJDb3JlOFNldHRpbmdz
MzVzZXRFbmZvcmNlQ1NTTUlNRVR5cGVJbk5vUXVpcmtzTW9kZUViCiBfX1pON1dlYkNvcmU4U2V0
dGluZ3MzNXNldEV4cGVyaW1lbnRhbE5vdGlmaWNhdGlvbnNFbmFibGVkRWIKIF9fWk43V2ViQ29y
ZThTZXR0aW5nczM1c2V0VHJlYXRzQW55VGV4dENTU0xpbmtBc1N0eWxlc2hlZXRFYgogX19aTjdX
ZWJDb3JlOFNldHRpbmdzMzZzZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWRFYgpA
QCAtNzc0LDEwICs3NzQsMTAgQEAgX19aTjdXZWJDb3JlOUZyYW1lVmlldzIwZW50ZXJDb21wb3Np
dGluZwogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIxZmx1c2hEZWZlcnJlZFJlcGFpbnRzRXYKIF9f
Wk43V2ViQ29yZTlGcmFtZVZpZXcyMnNldEJhc2VCYWNrZ3JvdW5kQ29sb3JFTlNfNUNvbG9yRQog
X19aTjdXZWJDb3JlOUZyYW1lVmlldzIzdXBkYXRlQ2FuSGF2ZVNjcm9sbGJhcnNFdgotX19aTjdX
ZWJDb3JlOUZyYW1lVmlldzM3dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZUV2
CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjRmb3JjZUxheW91dEZvclBhZ2luYXRpb25FUktOU185
RmxvYXRTaXplRWZOU181RnJhbWUxOUFkanVzdFZpZXdTaXplT3JOb3RFCiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjlzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbkViCiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MjlzeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZUV2CitfX1pON1dlYkNvcmU5
RnJhbWVWaWV3Mzd1cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlRXYKIF9fWk43
V2ViQ29yZTlGcmFtZVZpZXczOHNjcm9sbFBvc2l0aW9uQ2hhbmdlZFZpYVBsYXRmb3JtV2lkZ2V0
RXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXc2Y3JlYXRlRVBOU181RnJhbWVFCiBfX1pON1dlYkNv
cmU5RnJhbWVWaWV3NmNyZWF0ZUVQTlNfNUZyYW1lRVJLTlNfN0ludFNpemVFCkBAIC04ODksOSAr
ODg5LDkgQEAgX19aTks3V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBjdXJyZW50S2V5YgogX19aTks3
V2ViQ29yZTEySWNvbkRhdGFiYXNlMTJkYXRhYmFzZVBhdGhFdgogX19aTks3V2ViQ29yZTEySWNv
bkRhdGFiYXNlMjRzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHlFdgogX19aTks3V2ViQ29yZTEySWNv
bkRhdGFiYXNlOWlzRW5hYmxlZEV2Ci1fX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3Q3Y2hpbGRB
dEVqCiBfX1pOSzdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNGVuY2xvc2luZ0xheWVyRXYKIF9fWk5L
N1dlYkNvcmUxMlJlbmRlck9iamVjdDE1bG9jYWxUb0Fic29sdXRlRU5TXzEwRmxvYXRQb2ludEVi
YgorX19aTks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0N2NoaWxkQXRFagogX19aTks3V2ViQ29yZTEy
UmVuZGVyV2lkZ2V0MTR3aW5kb3dDbGlwUmVjdEV2CiBfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZm
ZXI0ZGF0YUV2CiBfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZmZXI0c2l6ZUV2CkBAIC05ODksMTkg
Kzk4OSwxNCBAQCBfX1pOSzdXZWJDb3JlNFBhZ2UxNWJhY2tGb3J3YXJkTGlzdEV2CiBfX1pOSzdX
ZWJDb3JlNFBhZ2UzNGluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVFdgogX19aTks3
V2ViQ29yZTRQYWdlOWdyb3VwTmFtZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTFjdXJyZW50Rm9y
bUV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1lMTJzZWxlY3RlZFRleHRFdgogX19aTks3V2ViQ29yZTVG
cmFtZTEzb3duZXJSZW5kZXJlckV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTRzZWxlY3Rpb25JbWFn
ZUViCiBfX1pOSzdXZWJDb3JlNUZyYW1lMTVjb250ZW50UmVuZGVyZXJFdgogX19aTks3V2ViQ29y
ZTVGcmFtZTE1bGF5ZXJUcmVlQXNUZXh0RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxNXNlbGVjdGlv
bkJvdW5kc0ViCi1fX1pOSzdXZWJDb3JlNUZyYW1lMTdmaXJzdFJlY3RGb3JSYW5nZUVQTlNfNVJh
bmdlRQogX19aTks3V2ViQ29yZTVGcmFtZTE4ZG9jdW1lbnRUeXBlU3RyaW5nRXYKIF9fWk5LN1dl
YkNvcmU1RnJhbWUxOHNlbGVjdGlvblRleHRSZWN0c0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJl
Y3RFTG0wRUVFTlMwXzMwU2VsZWN0aW9uUmVjdFJlc3BlY3RUcmFuc2Zvcm1zRWIKIF9fWk5LN1dl
YkNvcmU1RnJhbWUyMHNlbGVjdGlvbkdyYW51bGFyaXR5RXYKLV9fWk5LN1dlYkNvcmU1RnJhbWUz
MGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudEV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1lMzFm
b250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0RXYKLV9fWk5LN1dlYkNvcmU1RnJhbWUzN2Jh
c2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnRFdgogX19aTks3V2ViQ29yZTVGcmFt
ZThzZXR0aW5nc0V2CiBfX1pOSzdXZWJDb3JlNUZyYW1lOWRvbVdpbmRvd0V2CiBfX1pOSzdXZWJD
b3JlNVJhbmdlMTFzdGFydE9mZnNldEVSaQpAQCAtMTAxMywxMyArMTAwOCwxOCBAQCBfX1pOSzdX
ZWJDb3JlNVJhbmdlOWVuZE9mZnNldEVSaQogX19aTks3V2ViQ29yZTVSYW5nZTlmaXJzdE5vZGVF
dgogX19aTks3V2ViQ29yZTZDaHJvbWUxMmNyZWF0ZVdpbmRvd0VQTlNfNUZyYW1lRVJLTlNfMTZG
cmFtZUxvYWRSZXF1ZXN0RVJLTlNfMTRXaW5kb3dGZWF0dXJlc0UKIF9fWk5LN1dlYkNvcmU2Q3Vy
c29yMTRwbGF0Zm9ybUN1cnNvckV2CitfX1pOSzdXZWJDb3JlNkVkaXRvcjEyc2VsZWN0ZWRUZXh0
RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTNjYW5FZGl0UmljaGx5RXYKIF9fWk5LN1dlYkNvcmU2
RWRpdG9yMTZjb21wb3NpdGlvblJhbmdlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTZmb250Rm9y
U2VsZWN0aW9uRVJiCitfX1pOSzdXZWJDb3JlNkVkaXRvcjE3Zmlyc3RSZWN0Rm9yUmFuZ2VFUE5T
XzVSYW5nZUUKIF9fWk5LN1dlYkNvcmU2RWRpdG9yMTdzZWxlY3Rpb25IYXNTdHlsZUVQTlNfMTlD
U1NTdHlsZURlY2xhcmF0aW9uRQogX19aTks3V2ViQ29yZTZFZGl0b3IxN3Nob3VsZERlbGV0ZVJh
bmdlRVBOU181UmFuZ2VFCiBfX1pOSzdXZWJDb3JlNkVkaXRvcjIyc2VsZWN0aW9uU3RhcnRIYXNT
dHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRQogX19aTks3V2ViQ29yZTZFZGl0b3IyM2dl
dENvbXBvc2l0aW9uU2VsZWN0aW9uRVJqUzFfCitfX1pOSzdXZWJDb3JlNkVkaXRvcjMwYXBwbHlF
ZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50RXYKK19fWk5LN1dlYkNvcmU2RWRpdG9yMzFmb250QXR0
cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0RXYKK19fWk5LN1dlYkNvcmU2RWRpdG9yMzdiYXNlV3Jp
dGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yNmNh
bkN1dEV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjdDb21tYW5kMTFpc1N1cHBvcnRlZEV2CiBfX1pO
SzdXZWJDb3JlNkVkaXRvcjdDb21tYW5kMTVpc1RleHRJbnNlcnRpb25FdgpJbmRleDogV2ViQ29y
ZS9kb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9JbnB1dEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OmRp
c3BhdGNoQmx1ckV2ZW50KElucAogICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVs
ZCgpKQogICAgICAgICBkb2N1bWVudC0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3Rp
dmUoZmFsc2UpOwogCi0gICAgZnJhbWUtPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoZWxlbWVudCk7
CisgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGVsZW1lbnQpOwog
fQogCiB2b2lkIElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKElucHV0RWxlbWVu
dERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50
LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lk
IElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZChJbnB1dEVsCiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZnJhbWUtPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoZWxlbWVu
dCk7CisgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGVsZW1lbnQp
OwogfQogCiB2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVt
ZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDcgKzc0Niw3
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlmIChh
bmNlc3Rvck5vZGUgJiYgYW5jZXN0b3JOb2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKQogICAgICAg
ICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihhbmNlc3Rvck5vZGUp
LT5pc1RleHRGaWVsZCgpCiAgICAgICAgICAgICAgICAgJiYgYW5jZXN0b3JOb2RlLT5mb2N1c2Vk
KCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT50ZXh0V2lsbEJlRGVsZXRlZElu
VGV4dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1lbnQqPihhbmNlc3Rvck5vZGUpKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4
dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1lbnQqPihhbmNlc3Rvck5vZGUpKTsKICAgICB9CiAKICAg
ICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIgbWFrZSB0aGUgc2VsZWN0aW9uIHdpdGgKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkVkaXRpbmdUZXh0LmgiCiAjaW5jbHVk
ZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgpAQCAtNTcsNiArNTgsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKICNpbmNsdWRlICJLaWxsUmluZy5oIgogI2luY2x1ZGUgIk1vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCkBAIC00
NjksNyArNDcxLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAog
CiAgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAgICAgICAgIE5v
ZGUqIG5vZGVUb1JlbW92ZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9mcmFtZS0+
c3R5bGVGb3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92
ZQorICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5v
ZGVUb1JlbW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIHJlc3VsdCA9IDA7CiAgICAgICAgIGlmIChzdHlsZSkKQEAgLTUyMCw5ICs1MjIs
OSBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4dERpcmVjdGlvbkZvCiAgICAgaWYgKG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIE5hdHVyYWxXcml0
aW5nRGlyZWN0aW9uOwogCi0gICAgUG9zaXRpb24gcG9zID0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpOworICAgIFBvc2l0aW9uIHBvc2l0aW9u
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
OwogCi0gICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvc2l0
aW9uLm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBOYXR1cmFsV3JpdGlu
Z0RpcmVjdGlvbjsKIApAQCAtNTMwLDcgKzUzMiw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9y
Ojp0ZXh0RGlyZWN0aW9uRm8KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KSkgewogICAgICAgICBlbmQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5k
KCkudXBzdHJlYW0oKTsKIAotICAgICAgICBOb2RlKiBwYXN0TGFzdCA9IFJhbmdlOjpjcmVhdGUo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KHBvcyksIHJhbmdl
Q29tcGxpYW50RXF1aXZhbGVudChlbmQpKS0+cGFzdExhc3ROb2RlKCk7CisgICAgICAgIE5vZGUq
IHBhc3RMYXN0ID0gUmFuZ2U6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCByYW5nZUNvbXBs
aWFudEVxdWl2YWxlbnQocG9zaXRpb24pLCByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZW5kKSkt
PnBhc3RMYXN0Tm9kZSgpOwogICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4gIT0g
cGFzdExhc3Q7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgICAgIGlmICgh
bi0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC01NDgs
NyArNTUwLDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OnRleHREaXJlY3Rpb25GbwogICAg
IH0KIAogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldCgpKSB7Ci0gICAgICAg
IGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT50
eXBpbmdTdHlsZSgpKSB7CisgICAgICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
dHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT50eXBpbmdTdHlsZSgpKSB7CiAgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpID0gdHlwaW5nU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CiAgICAgICAgICAgICBpZiAodW5pY29kZUJpZGkp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQodW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUo
KSk7CkBAIC03OTUsNyArNzk3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdAogICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
VmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246Ci0gICAgICAgIG1fZnJhbWUtPmNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CisgICAgICAgIGNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246CiAgICAgICAgIGlm
IChzdHlsZSkKQEAgLTg3Miw3ICs4NzQsNyBAQCBzdGF0aWMgVHJpU3RhdGUgdHJpU3RhdGVPZlN0
eWxlSW5Db21wdXRlCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0g
ICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBt
X2ZyYW1lLT5zZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7CisgICAgUmVmUHRy
PENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBzZWxlY3Rpb25D
b21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7CiAgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFRyaVN0YXRlIHN0YXRlID0gdHJpU3RhdGVPZlN0eWxl
SW5Db21wdXRlZFN0eWxlKHN0eWxlLCBzZWxlY3Rpb25TdHlsZS5nZXQoKSk7CkBAIC04OTAsNyAr
ODkyLDcgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShDU1NTdAogCiAgICAg
aWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5v
ZGVUb1JlbW92ZTsKLSAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4g
c2VsZWN0aW9uU3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1Jl
bW92ZSk7CisgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVj
dGlvblN0eWxlID0gc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOwogICAgICAg
ICBpZiAoIXNlbGVjdGlvblN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7
CiAgICAgICAgIHN0YXRlID0gdHJpU3RhdGVPZlN0eWxlSW5Db21wdXRlZFN0eWxlKHN0eWxlLCBz
ZWxlY3Rpb25TdHlsZS5nZXQoKSk7CkBAIC05MzgsNyArOTQwLDcgQEAgc3RhdGljIGJvb2wgaGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sbwogU3RyaW5nIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRD
U1NQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKQogewogICAgIE5vZGUqIG5vZGVUb1JlbW92
ZTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBtX2Zy
YW1lLT5zZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7CisgICAgUmVmUHRyPENT
U1N0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvblN0eWxlID0gc2VsZWN0aW9uQ29tcHV0ZWRTdHls
ZShub2RlVG9SZW1vdmUpOwogICAgIGlmICghc2VsZWN0aW9uU3R5bGUpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIApAQCAtMTA1NCw2ICsxMDU2LDcgQEAgRWRpdG9yOjpFZGl0b3IoRnJhbWUq
IGZyYW1lKQogICAgICwgbV9zaG91bGRTdHlsZVdpdGhDU1MoZmFsc2UpCiAgICAgLCBtX2tpbGxS
aW5nKGFkb3B0UHRyKG5ldyBLaWxsUmluZykpCiAgICAgLCBtX2NvcnJlY3Rpb25QYW5lbFRpbWVy
KHRoaXMsICZFZGl0b3I6OmNvcnJlY3Rpb25QYW5lbFRpbWVyRmlyZWQpCisgICAgLCBtX2FyZU1h
cmtlZFRleHRNYXRjaGVzSGlnaGxpZ2h0ZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTExNTEsNyArMTE1
NCw3IEBAIHZvaWQgRWRpdG9yOjpjdXQoKQogICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0g
c2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0
KCkpKSB7CiAgICAgICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29udHJvbChtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpKQotICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJh
bFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQobV9mcmFtZS0+c2VsZWN0ZWRUZXh0KCkpOwor
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRl
eHQoc2VsZWN0ZWRUZXh0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQYXN0ZWJvYXJk
OjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCksIGNh
blNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUpOwogICAgICAgICBkaWRXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZCgpOwpAQCAtMTE2OSw3ICsxMTcyLDcgQEAgdm9pZCBFZGl0b3I6OmNvcHko
KQogICAgIH0KIAogICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29udHJvbChtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpKQotICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFz
dGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChtX2ZyYW1lLT5zZWxlY3RlZFRleHQoKSk7CisgICAg
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHNlbGVj
dGVkVGV4dCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxl
bWVudCA9IGltYWdlRWxlbWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KSkKQEAgLTE2MjUs
NyArMTYyOCw3IEBAIHZvaWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgaWYgKHNlbGVj
dGVkUmFuZ2UpCiAgICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3Zl
TWFya2VycyhzZWxlY3RlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwog
Ci0gICAgU3RyaW5nIHRleHQgPSBmcmFtZSgpLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcg
dGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpKTsKICAgICBj
bGllbnQoKS0+aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCh0ZXh0KTsKIH0KQEAgLTE2MzgsNyAr
MTY0MSw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICAvLyBGSVhNRTogV2Ug
ZG9uJ3QgY2FsbCB0aGlzIG9uIHRoZSBNYWMsIGFuZCBpdCBzaG91bGQgcmVtb3ZlIG1pc3NwZWxs
aW5nIG1hcmtlcnMgYXJvdW5kIHRoZSAKICAgICAvLyBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjov
L3Byb2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBTdHJpbmcgdGV4dCA9IGZyYW1lKCktPnNlbGVjdGVk
VGV4dCgpOworICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CiAgICAgQVNTRVJUKHRl
eHQubGVuZ3RoKCkpOwogICAgIGNsaWVudCgpLT5sZWFybldvcmQodGV4dCk7CiB9CkBAIC0yMTQw
LDcgKzIxNDMsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAK
IGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogewotICAgIFN0cmluZyBzZWxl
Y3RlZFN0cmluZyA9IGZyYW1lKCktPnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmluZyBzZWxlY3Rl
ZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwogICAgIGludCBsZW5ndGggPSBzZWxlY3RlZFN0cmlu
Zy5sZW5ndGgoKTsKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjIzNiw3ICsyMjM5LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yVW5ncmFt
bQogCiBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9u
KCkKIHsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBmcmFtZSgpLT5zZWxlY3RlZFRleHQo
KTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRleHQoKTsKICAgICBBU1NF
UlQoc2VsZWN0ZWRTdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nl
czsKQEAgLTMxMjcsNCArMzEzMCw0NDkgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZVNlbGVjdGlvbkFm
dGVyQ29tbWFuZAogICAgICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigp
OwogfQogCitTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBwbGFpblRleHQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCkpOworfQorCitJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqIHJhbmdl
KSBjb25zdAoreworICAgIGludCBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwOworICAgIEFTU0VS
VChyYW5nZS0+c3RhcnRDb250YWluZXIoKSk7CisgICAgQVNTRVJUKHJhbmdlLT5lbmRDb250YWlu
ZXIoKSk7CisKKyAgICBJbmxpbmVCb3gqIHN0YXJ0SW5saW5lQm94OworICAgIGludCBzdGFydENh
cmV0T2Zmc2V0OworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24o
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBpZiAoc3RhcnRQ
b3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBzdGFydFBv
c2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBzdGFydElubGluZUJveCwg
c3RhcnRDYXJldE9mZnNldCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIgPSBz
dGFydFBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBBU1NFUlQoc3RhcnRSZW5kZXJl
cik7CisgICAgSW50UmVjdCBzdGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2Fy
ZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENhcmV0T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKTsKKyAgICBpZiAoc3RhcnRDYXJldFJlY3QgIT0gSW50UmVjdCgpKQorICAgICAgICBz
dGFydENhcmV0UmVjdCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KHN0YXJ0Q2FyZXRSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKworICAgIElubGlu
ZUJveCogZW5kSW5saW5lQm94OworICAgIGludCBlbmRDYXJldE9mZnNldDsKKyAgICBQb3NpdGlv
biBlbmRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihyYW5nZS0+ZW5kUG9zaXRpb24oKSkuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICBpZiAoZW5kUG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CisgICAgZW5kUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFVQ
U1RSRUFNLCBlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKKworICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXIgPSBlbmRQb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgQVNT
RVJUKGVuZFJlbmRlcmVyKTsKKyAgICBJbnRSZWN0IGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVy
LT5sb2NhbENhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKKyAgICBpZiAo
ZW5kQ2FyZXRSZWN0ICE9IEludFJlY3QoKSkKKyAgICAgICAgZW5kQ2FyZXRSZWN0ID0gZW5kUmVu
ZGVyZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGVuZENhcmV0UmVjdCkpLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCk7CisKKyAgICBpZiAoc3RhcnRDYXJldFJlY3QueSgpID09IGVuZENh
cmV0UmVjdC55KCkpIHsKKyAgICAgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmUgb24gdGhlIHNhbWUg
bGluZQorICAgICAgICByZXR1cm4gSW50UmVjdChtaW4oc3RhcnRDYXJldFJlY3QueCgpLCBlbmRD
YXJldFJlY3QueCgpKSwKKyAgICAgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LnkoKSwKKyAgICAgICAg
ICAgIGFicyhlbmRDYXJldFJlY3QueCgpIC0gc3RhcnRDYXJldFJlY3QueCgpKSwKKyAgICAgICAg
ICAgIG1heChzdGFydENhcmV0UmVjdC5oZWlnaHQoKSwgZW5kQ2FyZXRSZWN0LmhlaWdodCgpKSk7
CisgICAgfQorCisgICAgLy8gc3RhcnQgYW5kIGVuZCBhcmVuJ3Qgb24gdGhlIHNhbWUgbGluZSwg
c28gZ28gZnJvbSBzdGFydCB0byB0aGUgZW5kIG9mIGl0cyBsaW5lCisgICAgcmV0dXJuIEludFJl
Y3Qoc3RhcnRDYXJldFJlY3QueCgpLAorICAgICAgICBzdGFydENhcmV0UmVjdC55KCksCisgICAg
ICAgIHN0YXJ0Q2FyZXRSZWN0LndpZHRoKCkgKyBleHRyYVdpZHRoVG9FbmRPZkxpbmUsCisgICAg
ICAgIHN0YXJ0Q2FyZXRSZWN0LmhlaWdodCgpKTsKK30KKworYm9vbCBFZGl0b3I6OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAoreworICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
bmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNl
bGVjdGluZyk7Cit9CisKK3ZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3sKKyAg
ICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgbV9mcmFtZS0+Y2xl
YXJUeXBpbmdTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2FsY3Vs
YXRlIHRoZSBjdXJyZW50IHR5cGluZyBzdHlsZS4KKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IG11dGFibGVTdHlsZSA9IHN0eWxlLT5tYWtlTXV0YWJsZSgpOworICAgIGlm
IChtX2ZyYW1lLT50eXBpbmdTdHlsZSgpKSB7CisgICAgICAgIG1fZnJhbWUtPnR5cGluZ1N0eWxl
KCktPm1lcmdlKG11dGFibGVTdHlsZS5nZXQoKSk7CisgICAgICAgIG11dGFibGVTdHlsZSA9IG1f
ZnJhbWUtPnR5cGluZ1N0eWxlKCk7CisgICAgfQorCisgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmlj
b2RlQmlkaTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbjsKKyAgICBpZiAoZWRpdGlu
Z0FjdGlvbiA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbikgeworICAgICAgICB1bmlj
b2RlQmlkaSA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVu
aWNvZGVCaWRpKTsKKyAgICAgICAgZGlyZWN0aW9uID0gbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKKyAgICB9CisKKyAgICBOb2RlKiBub2Rl
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpOworICAgIGNvbXB1dGVkU3R5bGUobm9kZSktPmRpZmYobXV0YWJs
ZVN0eWxlLmdldCgpKTsKKworICAgIGlmIChlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb25TZXRX
cml0aW5nRGlyZWN0aW9uICYmIHVuaWNvZGVCaWRpKSB7CisgICAgICAgIEFTU0VSVCh1bmljb2Rl
QmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0SWRlbnQoKSk7CisgICAgICAgIGlmIChkaXJlY3Rp
b24pIHsKKyAgICAgICAgICAgIEFTU0VSVChkaXJlY3Rpb24tPmlzUHJpbWl0aXZlVmFsdWUoKSk7
CisgICAgICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGRpcmVjdGlvbi5nZXQoKSktPmdl
dElkZW50KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxl
cywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KKyAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNv
cHlCbG9ja1Byb3BlcnRpZXMoKTsKKyAgICBibG9ja1N0eWxlLT5kaWZmKG11dGFibGVTdHlsZS5n
ZXQoKSk7CisgICAgaWYgKGJsb2NrU3R5bGUtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgYXBwbHlD
b21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYmxv
Y2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikpOworCisgICAgLy8gU2V0IHRoZSByZW1haW5p
bmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KKyAgICBtX2ZyYW1lLT5zZXRUeXBpbmdTdHls
ZShtdXRhYmxlU3R5bGUuZ2V0KCkpOworfQorCitQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbj4gRWRpdG9yOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUqJiBub2RlVG9S
ZW1vdmUpIGNvbnN0Cit7CisgICAgbm9kZVRvUmVtb3ZlID0gMDsKKworICAgIGlmIChtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKSk7
CisgICAgUG9zaXRpb24gcG9zaXRpb24gPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKTsK
KworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBwb3NpdGlvbi5lbGVtZW50KCk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVs
ZW1lbnQgPSBlbGVtZW50OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworCisgICAgaWYgKG1f
ZnJhbWUtPnR5cGluZ1N0eWxlKCkpIHsKKyAgICAgICAgc3R5bGVFbGVtZW50ID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CisKKyAgICAgICAgc3R5
bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBtX2ZyYW1lLT50eXBpbmdTdHlsZSgp
LT5jc3NUZXh0KCkuaW1wbCgpLCBlYyk7CisgICAgICAgIEFTU0VSVCghZWMpOworCisgICAgICAg
IHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRp
dGluZ1RleHROb2RlKCIiKSwgZWMpOworICAgICAgICBBU1NFUlQoIWVjKTsKKworICAgICAgICBp
ZiAoZWxlbWVudC0+cmVuZGVyZXIoKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpLT5jYW5IYXZlQ2hp
bGRyZW4oKSkKKyAgICAgICAgICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwg
ZWMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IGVsZW1lbnQt
PnBhcmVudCgpOworICAgICAgICAgICAgTm9kZSogbmV4dCA9IGVsZW1lbnQtPm5leHRTaWJsaW5n
KCk7CisKKyAgICAgICAgICAgIGlmIChuZXh0KQorICAgICAgICAgICAgICAgIHBhcmVudC0+aW5z
ZXJ0QmVmb3JlKHN0eWxlRWxlbWVudCwgbmV4dCwgZWMpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKCFlYyk7CisKKyAgICAgICAgbm9kZVRvUmVtb3ZlID0gc3R5
bGVFbGVtZW50LmdldCgpOworICAgIH0KKworICAgIHJldHVybiBjb21wdXRlZFN0eWxlKHN0eWxl
RWxlbWVudC5yZWxlYXNlKCkpOworfQorCit2b2lkIEVkaXRvcjo6dGV4dEZpZWxkRGlkQmVnaW5F
ZGl0aW5nKEVsZW1lbnQqIGUpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQo
KS0+dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKGUpOworfQorCit2b2lkIEVkaXRvcjo6dGV4dEZp
ZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlKQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50KCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoZSk7Cit9CisKK3ZvaWQgRWRpdG9y
Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCogZSkKK3sKKyAgICBpZiAoY2xpZW50
KCkpCisgICAgICAgIGNsaWVudCgpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoZSk7Cit9CisK
K2Jvb2wgRWRpdG9yOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZSwgS2V5
Ym9hcmRFdmVudCoga2UpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICByZXR1cm4gY2xp
ZW50KCktPmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChlLCBrZSk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgRWRpdG9yOjp0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVs
ZW1lbnQqIGlucHV0KQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPnRl
eHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoaW5wdXQpOworfQorCit2b2lkIEVkaXRvcjo6dGV4
dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVudCogZSkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisg
ICAgICAgIGNsaWVudCgpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShlKTsKK30KKwordm9pZCBF
ZGl0b3I6OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0Cit7CisgICAgUmVm
UHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNCeVRh
Z05hbWUoImJvZHkiKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIGFwcGx5RWRpdGluZ1N0
eWxlVG9FbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihsaXN0LT5pdGVtKGkpKSk7Cit9CisK
K3ZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50KiBlbGVtZW50
KSBjb25zdAoreworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5zdHlsZSgpOworICAgIEFTU0VSVChz
dHlsZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdvcmQiLCBmYWxzZSwgZWMpOworICAgIEFT
U0VSVCghZWMpOworICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdE5ic3BN
b2RlLCAic3BhY2UiLCBmYWxzZSwgZWMpOworICAgIEFTU0VSVCghZWMpOworICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdExpbmVCcmVhaywgImFmdGVyLXdoaXRlLXNwYWNl
IiwgZmFsc2UsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKworUmVuZGVyU3R5bGUqIEVkaXRv
cjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlICombm9kZVRvUmVtb3ZlKSBjb25zdAorewor
ICAgIG5vZGVUb1JlbW92ZSA9IDA7CisKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlz
Tm9uZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gbV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFs
ZW50KCk7CisgICAgaWYgKCFwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1fZnJhbWUtPnR5cGluZ1N0eWxlKCkpCisgICAg
ICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpOworCisgICAgUmVmUHRyPEVsZW1l
bnQ+IHN0eWxlRWxlbWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc3Bh
blRhZywgZmFsc2UpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU3RyaW5nIHN0
eWxlVGV4dCA9IG1fZnJhbWUtPnR5cGluZ1N0eWxlKCktPmNzc1RleHQoKSArICIgZGlzcGxheTog
aW5saW5lIjsKKyAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxl
VGV4dC5pbXBsKCksIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAgIHN0eWxlRWxlbWVudC0+
YXBwZW5kQ2hpbGQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKCIi
KSwgZWMpOworICAgIEFTU0VSVCghZWMpOworCisgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5hcHBl
bmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKKworICAgIG5vZGVU
b1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKKyAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5y
ZW5kZXJlcigpID8gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogMDsKK30KKwor
Ly8gU2VhcmNoZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5n
IGlzIHNlbGVjdGVkLgorYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFy
dEluU2VsZWN0aW9uKQoreworICAgIGlmICh0YXJnZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAobV9mcmFtZS0+ZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFN0YXJ0IGZyb20gYW4gZWRnZSBvZiB0aGUg
c2VsZWN0aW9uLCBpZiB0aGVyZSdzIGEgc2VsZWN0aW9uIHRoYXQncyBub3QgaW4gc2hhZG93IGNv
bnRlbnQuIFdoaWNoIGVkZ2UKKyAgICAvLyBpcyB1c2VkIGRlcGVuZHMgb24gd2hldGhlciB3ZSdy
ZSBzZWFyY2hpbmcgZm9yd2FyZCBvciBiYWNrd2FyZCwgYW5kIHdoZXRoZXIgc3RhcnRJblNlbGVj
dGlvbiBpcyBzZXQuCisgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVu
dHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpOworICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworCisgICAgaWYgKGZvcndhcmQp
CisgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgpLCBzdGFydEluU2VsZWN0aW9uID8g
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpIDogc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAg
ZWxzZQorICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0SW5TZWxlY3Rpb24g
PyBzZWxlY3Rpb24udmlzaWJsZUVuZCgpIDogc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKTsKKwor
ICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VsZWN0aW9uLnNoYWRvd1RyZWVSb290Tm9kZSgp
OworICAgIGlmIChzaGFkb3dUcmVlUm9vdCkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgaWYgKGZvcndhcmQpCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5k
KHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZWMpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJl
ZVJvb3QsIDAsIGVjKTsKKyAgICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZp
bmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcp
KTsKKyAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCBy
YW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4K
KyAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUg
Y29sbGFwc2VkIHdoaXRlc3BhY2UuCisgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBz
ZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVj
dGlvbiB3YXMgbWFkZS4KKyAgICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiBhcmVSYW5nZXNFcXVh
bChWaXNpYmxlU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpIHsKKyAgICAgICAg
c2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAg
ICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCks
IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRF
bmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CisKKyAgICAg
ICAgaWYgKHNoYWRvd1RyZWVSb290KSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICAgICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jaGlsZE5vZGVDb3VudCgp
LCBlYyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNl
dFN0YXJ0KHNoYWRvd1RyZWVSb290LCAwLCBlYyk7CisgICAgICAgIH0KKworICAgICAgICByZXN1
bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2Fy
ZCwgY2FzZUZsYWcpOworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsK
KworICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFkb3cgdHJlZSwgc2VhcmNo
IGluIG1haW4gY29udGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVlLgorICAgIGlmIChyZXN1
bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpIHsKKyAgICAg
ICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Cisg
ICAgICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0
ZXIoc2hhZG93VHJlZVJvb3QtPnNoYWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dUcmVl
Um9vdC0+c2hhZG93UGFyZW50Tm9kZSgpLCBleGNlcHRpb24pOworCisgICAgICAgIHJlc3VsdFJh
bmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBj
YXNlRmxhZyk7CisgICAgfQorCisgICAgaWYgKCFpbnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5n
ZS5nZXQoKSkpIHsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBuZXh0VmlzaWJsZVJhbmdlKHJlc3Vs
dFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZyk7CisgICAg
ICAgIGlmICghcmVzdWx0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdyYXBwaW5nLCBz
ZWFyY2ggYWdhaW4gaW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxsCisgICAgLy8gcmVk
dW5kYW50bHkgcmUtc2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQgaW4gc29tZSBjYXNl
cykuCisgICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSAmJiB3cmFwRmxh
ZykgeworICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5kb2N1
bWVudCgpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdl
LmdldCgpLCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnKTsKKyAgICAgICAgLy8gV2UgdXNlZCB0
byByZXR1cm4gZmFsc2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1lIHJhbmdlIHRo
YXQgd2Ugc3RhcnRlZCB3aXRoCisgICAgICAgIC8vIChlLmcuLCB0aGUgc2VsZWN0aW9uIHdhcyBh
bHJlYWR5IHRoZSBvbmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1dCB3ZSBkZWNpZGVkIHRo
YXQKKyAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNhc2UgaW5zdGVhZCwgc28g
d2UnbGwganVzdCBmYWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgorICAgIH0KKworICAgIGlmIChy
ZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlv
bihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAgIG1fZnJhbWUtPnJldmVhbFNl
bGVjdGlvbigpOworICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBFZGl0b3I6OmNvdW50
TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgY2FzZUZsYWcsIHVuc2ln
bmVkIGxpbWl0LCBib29sIG1hcmtNYXRjaGVzKQoreworICAgIGlmICh0YXJnZXQuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFu
Z2VPZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZXhjZXB0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKKyAgICBkbyB7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5n
ZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBjYXNlRmxhZykpOworICAgICAgICBpZiAocmVzdWx0UmFu
Z2UtPmNvbGxhcHNlZChleGNlcHRpb24pKSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1l
LT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHJl
c3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT25s
eSB0cmVhdCB0aGUgcmVzdWx0IGFzIGEgbWF0Y2ggaWYgaXQgaXMgdmlzaWJsZQorICAgICAgICBp
ZiAoaW5zaWRlVmlzaWJsZUFyZWEocmVzdWx0UmFuZ2UuZ2V0KCkpKSB7CisgICAgICAgICAgICAr
K21hdGNoQ291bnQ7CisgICAgICAgICAgICBpZiAobWFya01hdGNoZXMpCisgICAgICAgICAgICAg
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIocmVzdWx0UmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9m
IDAgbWVhbnMgbm8gbGltaXQuCisgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+
PSBsaW1pdCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFNldCB0aGUgbmV3IHN0
YXJ0IGZvciB0aGUgc2VhcmNoIHJhbmdlIHRvIGJlIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzCisg
ICAgICAgIC8vIHJlc3VsdCByYW5nZS4gVGhlcmUgaXMgbm8gbmVlZCB0byB1c2UgYSBWaXNpYmxl
UG9zaXRpb24gaGVyZSwKKyAgICAgICAgLy8gc2luY2UgZmluZFBsYWluVGV4dCB3aWxsIHVzZSBh
IFRleHRJdGVyYXRvciB0byBnbyBvdmVyIHRoZSB2aXNpYmxlCisgICAgICAgIC8vIHRleHQgbm9k
ZXMuIAorICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQocmVzdWx0UmFuZ2UtPmVuZENvbnRh
aW5lcihleGNlcHRpb24pLCByZXN1bHRSYW5nZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbiksIGV4Y2Vw
dGlvbik7CisKKyAgICAgICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWFyY2hSYW5nZS0+c2hh
ZG93VHJlZVJvb3ROb2RlKCk7CisgICAgICAgIGlmIChzZWFyY2hSYW5nZS0+Y29sbGFwc2VkKGV4
Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0
RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZXhj
ZXB0aW9uKTsKKyAgICB9IHdoaWxlICh0cnVlKTsKKworICAgIGlmIChtYXJrTWF0Y2hlcykgewor
ICAgICAgICAvLyBEbyBhICJmYWtlIiBwYWludCBpbiBvcmRlciB0byBleGVjdXRlIHRoZSBjb2Rl
IHRoYXQgY29tcHV0ZXMgdGhlIHJlbmRlcmVkIHJlY3QgZm9yIGVhY2ggdGV4dCBtYXRjaC4KKyAg
ICAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSAmJiBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkg
eworICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7IC8vIEVu
c3VyZSBsYXlvdXQgaXMgdXAgdG8gZGF0ZS4KKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAg
aWYgKCF2aXNpYmxlUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOworICAgICAgICAgICAg
ICAgIGNvbnRleHQuc2V0UGFpbnRpbmdEaXNhYmxlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBt
X2ZyYW1lLT52aWV3KCktPnBhaW50Q29udGVudHMoJmNvbnRleHQsIHZpc2libGVSZWN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXRjaENvdW50Owor
fQorCit2b2lkIEVkaXRvcjo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29s
IGZsYWcpCit7CisgICAgaWYgKGZsYWcgPT0gbV9hcmVNYXJrZWRUZXh0TWF0Y2hlc0hpZ2hsaWdo
dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FyZU1hcmtlZFRleHRNYXRjaGVzSGlnaGxp
Z2h0ZWQgPSBmbGFnOworICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVwYWlu
dE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7Cit9CisKK3ZvaWQgRWRpdG9yOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgYm9vbCBjbG9zZVR5cGluZykKK3sKKyAgICBib29sIGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gdGhpcy0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
KyAgICBib29sIGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKyAg
ICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpIHsKKyAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBuZXdBZGphY2VudFdvcmRzOworICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5l
d1NlbGVjdGVkU2VudGVuY2U7CisgICAgICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUt
PnNldHRpbmdzKCkgJiYgbV9mcmFtZS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQo
KTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpIHx8IGNhcmV0QnJvd3NpbmcpIHsKKyAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBuZXdTdGFydChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOworICAgICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24o
c3RhcnRPZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5l
d1N0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgICAgIGlmIChpc0NvbnRp
bnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVk
U2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCksIGVu
ZE9mU2VudGVuY2UobmV3U3RhcnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gdHlw
aW5nIHdlIGNoZWNrIHNwZWxsaW5nIGVsc2V3aGVyZSwgc28gZG9uJ3QgcmVkbyBpdCBoZXJlLgor
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJv
bSBhIGRlbGV0ZSBvcGVyYXRpb24sCisgICAgICAgIC8vIG9sZFNlbGVjdGlvbiBtYXkgbm8gbG9u
Z2VyIGJlIGluIHRoZSBkb2N1bWVudC4KKyAgICAgICAgaWYgKGNsb3NlVHlwaW5nICYmIG9sZFNl
bGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUo
KSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxlU3RhcnQo
KSk7CisgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSks
IGVuZE9mV29yZChvbGRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgICAgICAg
ICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzQ29udGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJs
ZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uob2xkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKG9sZFN0
YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KG9sZEFkamFjZW50V29yZHMsIG9sZFNlbGVjdGVkU2VudGVuY2UgIT0gbmV3U2VsZWN0ZWRTZW50
ZW5jZSwgb2xkU2VsZWN0ZWRTZW50ZW5jZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKG9sZEFkamFjZW50
V29yZHMsIGZhbHNlLCBvbGRBZGphY2VudFdvcmRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIFRoaXMgb25seSBlcmFzZXMgbWFya2VycyB0aGF0IGFyZSBpbiB0aGUg
Zmlyc3QgdW5pdCAod29yZCBvciBzZW50ZW5jZSkgb2YgdGhlIHNlbGVjdGlvbi4KKyAgICAgICAg
Ly8gUGVyaGFwcyBwZWN1bGlhciwgYnV0IGl0IG1hdGNoZXMgQXBwS2l0LgorICAgICAgICBpZiAo
UmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJh
bmdlKCkpIHsKKyAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVt
b3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Cisg
ICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMo
d29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgICAgICB9
CisgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNl
bnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoc2VudGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIpOworICAgIH0KKworICAgIC8vIFdoZW4gY29udGludW91cyBzcGVs
bCBjaGVja2luZyBpcyBvZmYsIGV4aXN0aW5nIG1hcmtlcnMgZGlzYXBwZWFyIGFmdGVyIHRoZSBz
ZWxlY3Rpb24gY2hhbmdlcy4KKyAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKQorICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtl
cnMoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICBpZiAoIWlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMo
KS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisKKyAgICByZXNwb25k
VG9DaGFuZ2VkU2VsZWN0aW9uKG9sZFNlbGVjdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwxMSBAQAogI2luY2x1ZGUgIkVk
aXRvckluc2VydEFjdGlvbi5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIAor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18pCitjbGFzcyBOU0RpY3Rpb25h
cnk7Cit0eXBlZGVmIGludCBOU1dyaXRpbmdEaXJlY3Rpb247CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwpAQCAtMzE5LDEyICszMjQs
NDcgQEAgcHVibGljOgogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCiAgICAgTm9kZSogZmluZEV2ZW50VGFyZ2V0RnJvbShj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0OworCisgICAgU3RyaW5nIHNl
bGVjdGVkVGV4dCgpIGNvbnN0OworICAgIGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBi
b29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJvb2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNl
bGVjdGlvbik7CisKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBtYXJrKCkgY29uc3Q7IC8v
IE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBpdC4KKyAgICB2b2lkIHNldE1hcmsoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYpOworCisgICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lm
aWVkKTsKKyAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0Owor
ICAgIHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0OworCisg
ICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OworCisgICAgdm9pZCBy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7
CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiYgbm9kZVRv
UmVtb3ZlKSBjb25zdDsKKworICAgIHVuc2lnbmVkIGNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3Qg
U3RyaW5nJiwgYm9vbCBjYXNlRmxhZywgdW5zaWduZWQgbGltaXQsIGJvb2wgbWFya01hdGNoZXMp
OworICAgIGJvb2wgbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpIGNvbnN0OworICAg
IHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sKTsKKworICAgIFBh
c3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25Db21wdXRlZFN0
eWxlKE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0OworCisgICAgdm9pZCB0ZXh0RmllbGREaWRC
ZWdpbkVkaXRpbmcoRWxlbWVudCopOworICAgIHZvaWQgdGV4dEZpZWxkRGlkRW5kRWRpdGluZyhF
bGVtZW50Kik7CisgICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCopOwor
ICAgIGJvb2wgZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqLCBLZXlib2FyZEV2
ZW50Kik7CisgICAgdm9pZCB0ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKEVsZW1lbnQqIGlu
cHV0KTsKKyAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKTsKKworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBOU0RpY3Rpb25hcnkqIGZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0
aW9uU3RhcnQoKSBjb25zdDsKKyAgICBOU1dyaXRpbmdEaXJlY3Rpb24gYmFzZVdyaXRpbmdEaXJl
Y3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
RnJhbWUqIG1fZnJhbWU7CiAgICAgT3duUHRyPERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI+IG1fZGVs
ZXRlQnV0dG9uQ29udHJvbGxlcjsKICAgICBSZWZQdHI8RWRpdENvbW1hbmQ+IG1fbGFzdEVkaXRD
b21tYW5kOwogICAgIFJlZlB0cjxOb2RlPiBtX3JlbW92ZWRBbmNob3I7Ci0KICAgICBSZWZQdHI8
VGV4dD4gbV9jb21wb3NpdGlvbk5vZGU7CiAgICAgdW5zaWduZWQgbV9jb21wb3NpdGlvblN0YXJ0
OwogICAgIHVuc2lnbmVkIG1fY29tcG9zaXRpb25FbmQ7CkBAIC0zMzYsNiArMzc2LDggQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VUb0JlUmVwbGFjZWRCeUNvcnJlY3Rpb247
CiAgICAgU3RyaW5nIG1fc3RyaW5nVG9CZVJlcGxhY2VkQnlDb3JyZWN0aW9uOwogICAgIFRpbWVy
PEVkaXRvcj4gbV9jb3JyZWN0aW9uUGFuZWxUaW1lcjsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIG1f
bWFyazsKKyAgICBib29sIG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsKIAogICAg
IGJvb2wgY2FuRGVsZXRlUmFuZ2UoUmFuZ2UqKSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVw
bGFjZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKQEAgLTM2NCw2ICs0MDYsMjIgQEAgaW5s
aW5lIHZvaWQgRWRpdG9yOjpzZXRTdGFydE5ld0tpbGxSaW5nUwogICAgIG1fc2hvdWxkU3RhcnRO
ZXdLaWxsUmluZ1NlcXVlbmNlID0gZmxhZzsKIH0KIAoraW5saW5lIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIEVkaXRvcjo6bWFyaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFyazsKK30KKwor
aW5saW5lIHZvaWQgRWRpdG9yOjpzZXRNYXJrKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikKK3sKKyAgICBtX21hcmsgPSBzZWxlY3Rpb247Cit9CisKK2lubGluZSBib29sIEVkaXRv
cjo6bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYXJlTWFya2VkVGV4dE1hdGNoZXNIaWdobGlnaHRlZDsKK30KKworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFZGl0b3JfaApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMgYm9vbCBleGVj
dXRlVG9nZ2xlU3R5bGVJbkxpc3QoRnJhCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgTm9kZSogbm9kZVRvUmVtb3ZlID0gMDsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uPiBzZWxlY3Rpb25TdHlsZSA9IGZyYW1lLT5zZWxlY3Rpb25Db21wdXRlZFN0eWxl
KG5vZGVUb1JlbW92ZSk7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4g
c2VsZWN0aW9uU3R5bGUgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkNvbXB1dGVkU3R5bGUo
bm9kZVRvUmVtb3ZlKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHNlbGVjdGVkQ1NTVmFsdWUgPSBz
ZWxlY3Rpb25TdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKICAgICBTdHJp
bmcgbmV3U3R5bGUgPSAibm9uZSI7CiAgICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWUtPmlzVmFsdWVM
aXN0KCkpIHsKQEAgLTM3NSw3ICszNzUsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9F
bmRPZlBhcmFncmFwCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
UmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUtPm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLT5lZGl0b3IoKS0+bWFyaygpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgaWYgKG1hcmspIHsKICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwogICAgICAgICBib29sIHNlbGVjdGVk
ID0gc2VsZWN0aW9uLT5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKG1hcmsuZ2V0KCks
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRSYW5nZSgpLmdldCgpKS5nZXQoKSwgRE9XTlNUUkVB
TSwgdHJ1ZSk7CkBAIC0zODQsNyArMzg0LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRv
TWFyayhGcmFtZSogZgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBmcmFt
ZS0+ZWRpdG9yKCktPnBlcmZvcm1EZWxldGUoKTsKLSAgICBmcmFtZS0+c2V0TWFyayhmcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnNldE1hcmso
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTQwMiw3ICs0MDIsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlV29yZEZvcndhcmQo
RnJhCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVGaW5kU3RyaW5nKEZyYW1lKiBmcmFtZSwgRXZlbnQq
LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVy
biBmcmFtZS0+ZmluZFN0cmluZyh2YWx1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlKTsKKyAg
ICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKHZhbHVlLCB0cnVlLCBmYWxzZSwg
dHJ1ZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgYm9vbCBleGVjdXRlRm9udE5hbWUoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQpAQCAtOTUxLDcgKzk1MSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RTZW50ZW5j
ZShGcmFtZSoKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSogZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQ
dHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS0+bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
UmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUtPmVkaXRvcigpLT5tYXJrKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IGZyYW1lLT5lZGl0b3IoKS0+
c2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghbWFyayB8fCAhc2VsZWN0aW9uKSB7CiAgICAgICAg
IHN5c3RlbUJlZXAoKTsKQEAgLTk2OCw3ICs5NjgsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2Vs
ZWN0V29yZChGcmFtZSogZnJhCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZXRNYXJrKEZyYW1lKiBm
cmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAg
IGZyYW1lLT5zZXRNYXJrKGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIGZy
YW1lLT5lZGl0b3IoKS0+c2V0TWFyayhmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTk5LDE0ICs5OTksMTQgQEAgc3RhdGljIGJvb2wg
ZXhlY3V0ZVN1cGVyc2NyaXB0KEZyYW1lKiBmcgogCiBzdGF0aWMgYm9vbCBleGVjdXRlU3dhcFdp
dGhNYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBT
dHJpbmcmKQogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFtZS0+bWFy
aygpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG1hcmsgPSBmcmFtZS0+ZWRpdG9yKCkt
Pm1hcmsoKTsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJrLmlzTm9uZSgpIHx8IHNlbGVj
dGlvbi5pc05vbmUoKSkgewogICAgICAgICBzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obWFyayk7
Ci0gICAgZnJhbWUtPnNldE1hcmsoc2VsZWN0aW9uKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnNl
dE1hcmsoc2VsZWN0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTE1MCw3ICsxMTUw
LDcgQEAgc3RhdGljIGJvb2wgZW5hYmxlZFZpc2libGVTZWxlY3Rpb25BbmRNYQogewogICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
aW9uRm9yQ29tbWFuZChldmVudCk7CiAgICAgcmV0dXJuICgoc2VsZWN0aW9uLmlzQ2FyZXQoKSAm
JiBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkK
LSAgICAgICAgJiYgZnJhbWUtPm1hcmsoKS5pc0NhcmV0T3JSYW5nZSgpOworICAgICAgICAmJiBm
cmFtZS0+ZWRpdG9yKCktPm1hcmsoKS5pc0NhcmV0T3JSYW5nZSgpOwogfQogCiBzdGF0aWMgYm9v
bCBlbmFibGVDYXJldEluRWRpdGFibGVUZXh0KEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBF
ZGl0b3JDb21tYW5kU291cmNlKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmNwcAkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjCiAgICAgbV94UG9zRm9yVmVydGljYWxBcnJv
d05hdmlnYXRpb24gPSBOb1hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKICAgICBzZWxl
Y3RGcmFtZUVsZW1lbnRJblBhcmVudElmRnVsbHlTZWxlY3RlZCgpOwogICAgIG1fZnJhbWUtPm5v
dGlmeVJlbmRlcmVyT2ZTZWxlY3Rpb25DaGFuZ2UodXNlclRyaWdnZXJlZCk7Ci0gICAgbV9mcmFt
ZS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24sIGNsb3NlVHlwaW5nKTsK
KyAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxl
Y3Rpb24sIGNsb3NlVHlwaW5nKTsKICAgICBpZiAodXNlclRyaWdnZXJlZCkgewogICAgICAgICBT
Y3JvbGxBbGlnbm1lbnQgYWxpZ25tZW50OwogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDEyIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIkVkaXRvci5oIgogCisjaW1wb3J0ICJDb2xvck1hYy5oIgogI2ltcG9ydCAiQ2xpcGJv
YXJkTWFjLmgiCiAjaW1wb3J0ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2ltcG9ydCAiRnJh
bWUuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgorI2ltcG9ydCAiUmVuZGVyQmxvY2suaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02OSw0ICs3MSwxMDMgQEAgdm9pZCBFZGl0b3I6OnBh
c3RlKCkKICAgICBsb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXMoZmFsc2UpOwogfQogCitO
U0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNv
bnN0Cit7CisgICAgTm9kZSogbm9kZVRvUmVtb3ZlOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQobm9kZVRvUmVtb3ZlKTsKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0ID0g
W05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisKKyAgICBpZiAoc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYm
IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
LmFscGhhKCkgIT0gMCkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5
Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICBpZiAoc3R5bGUtPmZvbnQo
KS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6
c3R5bGUtPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CisKKyAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUNvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKSAhPSBDb2xvcjo6YmxhY2spCisgICAgICAgIFtyZXN1bHQgc2V0T2Jq
ZWN0Om5zQ29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3cgPSBzdHlsZS0+dGV4dFNoYWRvdygpOworICAgIGlmIChzaGFkb3cp
IHsKKyAgICAgICAgTlNTaGFkb3cqIHMgPSBbW05TU2hhZG93IGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgW3Mgc2V0U2hhZG93T2Zmc2V0Ok5TTWFrZVNpemUoc2hhZG93LT54KCksIHNoYWRvdy0+eSgp
KV07CisgICAgICAgIFtzIHNldFNoYWRvd0JsdXJSYWRpdXM6c2hhZG93LT5ibHVyKCldOworICAg
ICAgICBbcyBzZXRTaGFkb3dDb2xvcjpuc0NvbG9yKHNoYWRvdy0+Y29sb3IoKSldOworICAgICAg
ICBbcmVzdWx0IHNldE9iamVjdDpzIGZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOworICAg
IH0KKworICAgIGludCBkZWNvcmF0aW9uID0gc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0
KCk7CisgICAgaWYgKGRlY29yYXRpb24gJiBMSU5FX1RIUk9VR0gpCisgICAgICAgIFtyZXN1bHQg
c2V0T2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVd
IGZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdOworCisgICAgaW50IHN1
cGVyc2NyaXB0SW50ID0gMDsKKyAgICBzd2l0Y2ggKHN0eWxlLT52ZXJ0aWNhbEFsaWduKCkpIHsK
KyAgICAgICAgY2FzZSBCQVNFTElORToKKyAgICAgICAgY2FzZSBCT1RUT006CisgICAgICAgIGNh
c2UgQkFTRUxJTkVfTUlERExFOgorICAgICAgICBjYXNlIExFTkdUSDoKKyAgICAgICAgY2FzZSBN
SURETEU6CisgICAgICAgIGNhc2UgVEVYVF9CT1RUT006CisgICAgICAgIGNhc2UgVEVYVF9UT1A6
CisgICAgICAgIGNhc2UgVE9QOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1VC
OgorICAgICAgICAgICAgc3VwZXJzY3JpcHRJbnQgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNVUEVSOgorICAgICAgICAgICAgc3VwZXJzY3JpcHRJbnQgPSAxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChzdXBlcnNjcmlwdEludCkKKyAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c3VwZXJzY3JpcHRJbnRd
IGZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV07CisKKyAgICBpZiAoZGVjb3JhdGlv
biAmIFVOREVSTElORSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVB
dHRyaWJ1dGVOYW1lXTsKKworICAgIGlmIChub2RlVG9SZW1vdmUpIHsKKyAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKGVjKTsKKyAgICAg
ICAgQVNTRVJUKGVjID09IDApOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK05T
V3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9u
U3RhcnQoKSBjb25zdAoreworICAgIE5TV3JpdGluZ0RpcmVjdGlvbiByZXN1bHQgPSBOU1dyaXRp
bmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKKworICAgIFBvc2l0aW9uIHBvcyA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwor
ICAgIE5vZGUqIG5vZGUgPSBwb3Mubm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJl
cigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBp
ZiAoIXJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpKSB7CisgICAgICAgIHJlbmRlcmVyID0gcmVuZGVy
ZXItPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5k
ZXJlci0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAKKyAgICBzd2l0Y2ggKHN0eWxlLT5kaXJlY3Rpb24oKSkgeworICAgICAgICBjYXNl
IExUUjoKKyAgICAgICAgICAgIHJlc3VsdCA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRMOgorICAgICAgICAgICAgcmVz
dWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2Miw3
ICsyMjYyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAg
ICAgICAgICAgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKQogICAgICAgICAgICAgJiYgZm9jdXNl
ZCgpCiAgICAgICAgICAgICAmJiBkb2N1bWVudCgpLT5mcmFtZSgpCi0gICAgICAgICAgICAmJiBk
b2N1bWVudCgpLT5mcmFtZSgpLT5kb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQodGhpcywgc3Rh
dGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCkpKSB7CisgICAgICAgICAgICAmJiBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KHRoaXMs
IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpKSkgewogICAgICAgICBldnQtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
Q29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIy
Niw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6
Ci0gICAgICAgIEFTU0VSVChmcmFtZS0+c2VsZWN0ZWRUZXh0KCkubGVuZ3RoKCkpOworICAgICAg
ICBBU1NFUlQoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7CiAgICAg
ICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwg
ZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb25QYXN0ZWQpKSB7CiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIpLCB0cnVl
LCBmYWxzZSwgdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gNjcwOTUpCisrKyBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMiw3ICsxMDEy
LDcgQEAgYm9vbCBET01XaW5kb3c6OmZpbmQoY29uc3QgU3RyaW5nJiBzdHJpbgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRSAoMTMwMTYpOiBTdXBwb3J0IHdob2xlV29yZCwg
c2VhcmNoSW5GcmFtZXMgYW5kIHNob3dEaWFsb2cKLSAgICByZXR1cm4gbV9mcmFtZS0+ZmluZFN0
cmluZyhzdHJpbmcsICFiYWNrd2FyZHMsIGNhc2VTZW5zaXRpdmUsIHdyYXAsIGZhbHNlKTsKKyAg
ICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCAhYmFja3dhcmRz
LCBjYXNlU2Vuc2l0aXZlLCB3cmFwLCBmYWxzZSk7CiB9CiAKIGJvb2wgRE9NV2luZG93OjpvZmZz
Y3JlZW5CdWZmZXJpbmcoKSBjb25zdApJbmRleDogV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0MSw3ICs3NDEsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWco
RnJhbWUqIHNyCiAgICAgfSBlbHNlIGlmIChpc1NlbGVjdGVkICYmIChtX2RyYWdTb3VyY2VBY3Rp
b24gJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSkgewogICAgICAgICBpZiAoIWNsaXBib2Fy
ZC0+aGFzRGF0YSgpKSB7CiAgICAgICAgICAgICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2wo
c3JjLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGNsaXBi
b2FyZC0+d3JpdGVQbGFpblRleHQoc3JjLT5zZWxlY3RlZFRleHQoKSk7CisgICAgICAgICAgICAg
ICAgY2xpcGJvYXJkLT53cml0ZVBsYWluVGV4dChzcmMtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQo
KSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGlvblJhbmdlID0gc3JjLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFuZ2UpOwpJbmRleDogV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNTksNyArMjA1OSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpz
ZW5kQ29udGV4dE1lbnVFdmVudEYKIAogICAgIGlmIChzdGFydC5ub2RlKCkgJiYgKHNlbGVjdGlv
bkNvbnRyb2xsZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb25Db250cm9sbGVy
LT5pc1JhbmdlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0
aW9uQ29udHJvbGxlci0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgSW50UmVjdCBmaXJz
dFJlY3QgPSBtX2ZyYW1lLT5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb24uZ2V0KCkpOworICAg
ICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUtPmVkaXRvcigpLT5maXJzdFJlY3RGb3JS
YW5nZShzZWxlY3Rpb24uZ2V0KCkpOwogCiAgICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8g
Zmlyc3RSZWN0LnJpZ2h0KCkgOiBmaXJzdFJlY3QueCgpOwogICAgICAgICBsb2NhdGlvbiA9IElu
dFBvaW50KHgsIGZpcnN0UmVjdC5ib3R0b20oKSk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDY3MDk1
KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0
NCw2IEBAIGlubGluZSBGcmFtZTo6RnJhbWUoUGFnZSogcGFnZSwgSFRNTEZyYW0KICNpZiBFTkFC
TEUoT1JJRU5UQVRJT05fRVZFTlRTKQogICAgICwgbV9vcmllbnRhdGlvbigwKQogI2VuZGlmCi0g
ICAgLCBtX2hpZ2hsaWdodFRleHRNYXRjaGVzKGZhbHNlKQogICAgICwgbV9pblZpZXdTb3VyY2VN
b2RlKGZhbHNlKQogICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChmYWxzZSkKICAgICAsIG1fZXhjbHVk
ZUZyb21UZXh0U2VhcmNoKGZhbHNlKQpAQCAtMjg3LDU4ICsyODYsNiBAQCBTZXR0aW5ncyogRnJh
bWU6OnNldHRpbmdzKCkgY29uc3QKICAgICByZXR1cm4gbV9wYWdlID8gbV9wYWdlLT5zZXR0aW5n
cygpIDogMDsKIH0KIAotU3RyaW5nIEZyYW1lOjpzZWxlY3RlZFRleHQoKSBjb25zdAotewotICAg
IHJldHVybiBwbGFpblRleHQoc2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkp
OwotfQotCi1JbnRSZWN0IEZyYW1lOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNv
bnN0Ci17Ci0gICAgaW50IGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDA7Ci0gICAgQVNTRVJUKHJh
bmdlLT5zdGFydENvbnRhaW5lcigpKTsKLSAgICBBU1NFUlQocmFuZ2UtPmVuZENvbnRhaW5lcigp
KTsKLQotICAgIElubGluZUJveCogc3RhcnRJbmxpbmVCb3g7Ci0gICAgaW50IHN0YXJ0Q2FyZXRP
ZmZzZXQ7Ci0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihyYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKS5kZWVwRXF1aXZhbGVudCgpOwotICAgIGlmIChzdGFydFBvc2l0
aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHN0YXJ0UG9zaXRp
b24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIHN0YXJ0SW5saW5lQm94LCBzdGFy
dENhcmV0T2Zmc2V0KTsKLQotICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciA9IHN0YXJ0
UG9zaXRpb24ubm9kZSgpLT5yZW5kZXJlcigpOwotICAgIEFTU0VSVChzdGFydFJlbmRlcmVyKTsK
LSAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJl
Y3Qoc3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRPZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxp
bmUpOwotICAgIGlmIChzdGFydENhcmV0UmVjdCAhPSBJbnRSZWN0KCkpCi0gICAgICAgIHN0YXJ0
Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
c3RhcnRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotCi0gICAgSW5saW5lQm94
KiBlbmRJbmxpbmVCb3g7Ci0gICAgaW50IGVuZENhcmV0T2Zmc2V0OwotICAgIFBvc2l0aW9uIGVu
ZFBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHJhbmdlLT5lbmRQb3NpdGlvbigpKS5kZWVwRXF1
aXZhbGVudCgpOwotICAgIGlmIChlbmRQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKLSAgICBlbmRQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoVVBTVFJF
QU0sIGVuZElubGluZUJveCwgZW5kQ2FyZXRPZmZzZXQpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBl
bmRSZW5kZXJlciA9IGVuZFBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKTsKLSAgICBBU1NFUlQo
ZW5kUmVuZGVyZXIpOwotICAgIEludFJlY3QgZW5kQ2FyZXRSZWN0ID0gZW5kUmVuZGVyZXItPmxv
Y2FsQ2FyZXRSZWN0KGVuZElubGluZUJveCwgZW5kQ2FyZXRPZmZzZXQpOwotICAgIGlmIChlbmRD
YXJldFJlY3QgIT0gSW50UmVjdCgpKQotICAgICAgICBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJl
ci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoZW5kQ2FyZXRSZWN0KSkuZW5jbG9zaW5n
Qm91bmRpbmdCb3goKTsKLQotICAgIGlmIChzdGFydENhcmV0UmVjdC55KCkgPT0gZW5kQ2FyZXRS
ZWN0LnkoKSkgewotICAgICAgICAvLyBzdGFydCBhbmQgZW5kIGFyZSBvbiB0aGUgc2FtZSBsaW5l
Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KG1pbihzdGFydENhcmV0UmVjdC54KCksIGVuZENhcmV0
UmVjdC54KCkpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC55KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgIGFicyhlbmRDYXJldFJlY3QueCgpIC0gc3RhcnRDYXJldFJl
Y3QueCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbWF4KHN0YXJ0Q2FyZXRSZWN0LmhlaWdo
dCgpLCBlbmRDYXJldFJlY3QuaGVpZ2h0KCkpKTsKLSAgICB9Ci0KLSAgICAvLyBzdGFydCBhbmQg
ZW5kIGFyZW4ndCBvbiB0aGUgc2FtZSBsaW5lLCBzbyBnbyBmcm9tIHN0YXJ0IHRvIHRoZSBlbmQg
b2YgaXRzIGxpbmUKLSAgICByZXR1cm4gSW50UmVjdChzdGFydENhcmV0UmVjdC54KCksCi0gICAg
ICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgIHN0
YXJ0Q2FyZXRSZWN0LndpZHRoKCkgKyBleHRyYVdpZHRoVG9FbmRPZkxpbmUsCi0gICAgICAgICAg
ICAgICAgICAgc3RhcnRDYXJldFJlY3QuaGVpZ2h0KCkpOwotfQotCiBUZXh0R3JhbnVsYXJpdHkg
RnJhbWU6OnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zZWxl
Y3Rpb25Db250cm9sbGVyLmdyYW51bGFyaXR5KCk7CkBAIC02NjQsMTcgKzYxMSw2IEBAIHZvaWQg
RnJhbWU6OmluamVjdFVzZXJTY3JpcHRzRm9yV29ybGQoRE8KICAgICB9CiB9CiAKLWJvb2wgRnJh
bWU6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxl
Y3Rpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmluaXR5KCks
IGZhbHNlKTsKLX0KLQotYm9vbCBGcmFtZTo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3
U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwot
fQotCiBib29sIEZyYW1lOjpzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKSBjb25zdAogewogICAgIHJldHVybiBlZGl0b3IoKS0+Y2xpZW50KCkt
PnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsK
QEAgLTY5MiwxNTcgKzYyOCw2IEBAIHZvaWQgRnJhbWU6OnNldFR5cGluZ1N0eWxlKENTU011dGFi
bGVTdHkKICAgICBtX3R5cGluZ1N0eWxlID0gc3R5bGU7CiB9CiAKLXZvaWQgRnJhbWU6OmNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uKQotewotICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5sZW5ndGgoKSkg
ewotICAgICAgICBjbGVhclR5cGluZ1N0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgdHlwaW5nIHN0eWxlLgotICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbXV0YWJsZVN0eWxlID0gc3R5bGUtPm1ha2VNdXRh
YmxlKCk7Ci0gICAgaWYgKHR5cGluZ1N0eWxlKCkpIHsKLSAgICAgICAgdHlwaW5nU3R5bGUoKS0+
bWVyZ2UobXV0YWJsZVN0eWxlLmdldCgpKTsKLSAgICAgICAgbXV0YWJsZVN0eWxlID0gdHlwaW5n
U3R5bGUoKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpOwotICAg
IFJlZlB0cjxDU1NWYWx1ZT4gZGlyZWN0aW9uOwotICAgIGlmIChlZGl0aW5nQWN0aW9uID09IEVk
aXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKSB7Ci0gICAgICAgIHVuaWNvZGVCaWRpID0gbXV0
YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkpOwot
ICAgICAgICBkaXJlY3Rpb24gPSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlEaXJlY3Rpb24pOwotICAgIH0KLQotICAgIE5vZGUqIG5vZGUgPSBzZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7Ci0g
ICAgY29tcHV0ZWRTdHlsZShub2RlKS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOwotCi0gICAg
aWYgKGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24gJiYgdW5p
Y29kZUJpZGkpIHsKLSAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpOwotICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29k
ZUJpZGksIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odW5pY29kZUJpZGkuZ2V0KCkp
LT5nZXRJZGVudCgpKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbikgewotICAgICAgICAgICAgQVNT
RVJUKGRpcmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgIG11dGFibGVT
dHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4oZGlyZWN0aW9uLmdldCgpKS0+Z2V0SWRlbnQoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBIYW5kbGUgYmxvY2sgc3R5bGVzLCBzdWJzdHJhY3RpbmcgdGhlc2Ug
ZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gYmxvY2tTdHlsZSA9IG11dGFibGVTdHlsZS0+Y29weUJsb2NrUHJvcGVydGllcygpOwot
ICAgIGJsb2NrU3R5bGUtPmRpZmYobXV0YWJsZVN0eWxlLmdldCgpKTsKLSAgICBpZiAoYmxvY2tT
dHlsZS0+bGVuZ3RoKCkgPiAwKQotICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7
Ci0KLSAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgot
ICAgIG1fdHlwaW5nU3R5bGUgPSBtdXRhYmxlU3R5bGUucmVsZWFzZSgpOwotfQotCi1QYXNzUmVm
UHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gRnJhbWU6OnNlbGVjdGlvbkNvbXB1dGVk
U3R5bGUoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3QKLXsKLSAgICBub2RlVG9SZW1vdmUgPSAw
OwotCi0gICAgaWYgKHNlbGVjdGlvbigpLT5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlKHNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
KTsKLSAgICBQb3NpdGlvbiBwb3MgPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKTsKLQot
ICAgIEVsZW1lbnQgKmVsZW0gPSBwb3MuZWxlbWVudCgpOwotICAgIGlmICghZWxlbSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gZWxlbTsK
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLQotICAgIGlmIChtX3R5cGluZ1N0eWxlKSB7Ci0g
ICAgICAgIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoc3BhblRhZywg
ZmFsc2UpOwotCi0gICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwg
bV90eXBpbmdTdHlsZS0+Y3NzVGV4dCgpLmltcGwoKSwgZWMpOwotICAgICAgICBBU1NFUlQoIWVj
KTsKLQotICAgICAgICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0
ZUVkaXRpbmdUZXh0Tm9kZSgiIiksIGVjKTsKLSAgICAgICAgQVNTRVJUKCFlYyk7Ci0KLSAgICAg
ICAgaWYgKGVsZW0tPnJlbmRlcmVyKCkgJiYgZWxlbS0+cmVuZGVyZXIoKS0+Y2FuSGF2ZUNoaWxk
cmVuKCkpIHsKLSAgICAgICAgICAgIGVsZW0tPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZWMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTm9kZSAqcGFyZW50ID0gZWxlbS0+cGFy
ZW50KCk7Ci0gICAgICAgICAgICBOb2RlICpuZXh0ID0gZWxlbS0+bmV4dFNpYmxpbmcoKTsKLQot
ICAgICAgICAgICAgaWYgKG5leHQpCi0gICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZv
cmUoc3R5bGVFbGVtZW50LCBuZXh0LCBlYyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICAgICAgfQot
ICAgICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAgICBub2RlVG9SZW1vdmUgPSBzdHlsZUVsZW1l
bnQuZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUoc3R5bGVFbGVtZW50
LnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgRnJhbWU6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhF
bGVtZW50KiBlKQotewotICAgIGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIGVkaXRv
cigpLT5jbGllbnQoKS0+dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKGUpOwotfQotCi12b2lkIEZy
YW1lOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGUpCi17Ci0gICAgaWYgKGVkaXRv
cigpLT5jbGllbnQoKSkKLSAgICAgICAgZWRpdG9yKCktPmNsaWVudCgpLT50ZXh0RmllbGREaWRF
bmRFZGl0aW5nKGUpOwotfQotCi12b2lkIEZyYW1lOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQo
RWxlbWVudCogZSkKLXsKLSAgICBpZiAoZWRpdG9yKCktPmNsaWVudCgpKQotICAgICAgICBlZGl0
b3IoKS0+Y2xpZW50KCktPnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChlKTsKLX0KLQotYm9vbCBG
cmFtZTo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KEVsZW1lbnQqIGUsIEtleWJvYXJkRXZl
bnQqIGtlKQotewotICAgIGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiBl
ZGl0b3IoKS0+Y2xpZW50KCktPmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChlLCBrZSk7Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRnJhbWU6OnRleHRXaWxsQmVEZWxldGVkSW5U
ZXh0RmllbGQoRWxlbWVudCogaW5wdXQpCi17Ci0gICAgaWYgKGVkaXRvcigpLT5jbGllbnQoKSkK
LSAgICAgICAgZWRpdG9yKCktPmNsaWVudCgpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxk
KGlucHV0KTsKLX0KLQotdm9pZCBGcmFtZTo6dGV4dERpZENoYW5nZUluVGV4dEFyZWEoRWxlbWVu
dCogZSkKLXsKLSAgICBpZiAoZWRpdG9yKCktPmNsaWVudCgpKQotICAgICAgICBlZGl0b3IoKS0+
Y2xpZW50KCktPnRleHREaWRDaGFuZ2VJblRleHRBcmVhKGUpOwotfQotCi12b2lkIEZyYW1lOjph
cHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAotewotICAgIFJlZlB0cjxOb2Rl
TGlzdD4gbGlzdCA9IG1fZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpOwotICAgIHVu
c2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW47IGkrKykKLSAgICAgICAgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpKTsKLX0KLQotdm9pZCBGcmFtZTo6YXBwbHlFZGl0
aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBpZiAoIWVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
ID0gZWxlbWVudC0+c3R5bGUoKTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V29yZFdyYXAs
ICJicmVhay13b3JkIiwgZmFsc2UsIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLSAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNlIiwgZmFsc2UsIGVj
KTsKLSAgICBBU1NFUlQoIWVjKTsKLSAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRMaW5lQnJlYWssICJhZnRlci13aGl0ZS1zcGFjZSIsIGZhbHNlLCBlYyk7Ci0gICAgQVNT
RVJUKCFlYyk7Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiBzdGF0aWMgSGFzaFNldDxGcmFtZSo+JiBr
ZWVwQWxpdmVTZXQoKQogewpAQCAtMTA2OCw0MCArODUzLDYgQEAgdm9pZCBGcmFtZTo6Y2xlYXJU
aW1lcnMoKQogICAgIGNsZWFyVGltZXJzKG1fdmlldy5nZXQoKSwgZG9jdW1lbnQoKSk7CiB9CiAK
LVJlbmRlclN0eWxlICpGcmFtZTo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlICombm9kZVRv
UmVtb3ZlKSBjb25zdAotewotICAgIG5vZGVUb1JlbW92ZSA9IDA7Ci0KLSAgICBpZiAoc2VsZWN0
aW9uKCktPmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFBvc2l0aW9uIHBvcyA9
IHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgp
OwotICAgIGlmICghcG9zLmlzQ2FuZGlkYXRlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIE5v
ZGUgKm5vZGUgPSBwb3Mubm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBpZiAoIW1fdHlwaW5nU3R5bGUpCi0gICAgICAgIHJldHVybiBub2RlLT5yZW5kZXJl
cigpLT5zdHlsZSgpOwotCi0gICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGRvY3Vt
ZW50KCktPmNyZWF0ZUVsZW1lbnQoc3BhblRhZywgZmFsc2UpOwotCi0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHN0eWxlVGV4dCA9IG1fdHlwaW5nU3R5bGUtPmNzc1RleHQo
KSArICIgZGlzcGxheTogaW5saW5lIjsKLSAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShz
dHlsZUF0dHIsIHN0eWxlVGV4dC5pbXBsKCksIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLQotICAg
IHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHRO
b2RlKCIiKSwgZWMpOwotICAgIEFTU0VSVCghZWMpOwotCi0gICAgbm9kZS0+cGFyZW50Tm9kZSgp
LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICBBU1NFUlQoIWVjKTsKLQotICAg
IG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKLSAgICByZXR1cm4gc3R5bGVFbGVt
ZW50LT5yZW5kZXJlcigpID8gc3R5bGVFbGVtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogMDsK
LX0KLQogdm9pZCBGcmFtZTo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoKQogewogICAgIC8vIFB1dCBh
IGNhcmV0IGluc2lkZSB0aGUgYm9keSBpZiB0aGUgZW50aXJlIGZyYW1lIGlzIGVkaXRhYmxlIChl
aXRoZXIgdGhlCkBAIC0xMTE4LDE2MCArODY5LDYgQEAgdm9pZCBGcmFtZTo6c2V0U2VsZWN0aW9u
RnJvbU5vbmUoKQogICAgICAgICBzZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oUG9zaXRpb24obm9kZSwgMCksIERPV05TVFJFQU0pKTsKIH0KIAotLy8gU2VhcmNoZXMg
ZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5nIGlzIHNlbGVjdGVk
LgotYm9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3
YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29sIHN0YXJ0SW5TZWxlY3Rpb24p
Ci17Ci0gICAgaWYgKHRhcmdldC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmIChleGNsdWRlRnJvbVRleHRTZWFyY2goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gU3RhcnQgZnJvbSBhbiBlZGdlIG9mIHRoZSBzZWxlY3Rpb24sIGlmIHRoZXJlJ3Mg
YSBzZWxlY3Rpb24gdGhhdCdzIG5vdCBpbiBzaGFkb3cgY29udGVudC4gV2hpY2ggZWRnZQotICAg
IC8vIGlzIHVzZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIHNlYXJjaGluZyBmb3J3YXJkIG9y
IGJhY2t3YXJkLCBhbmQgd2hldGhlciBzdGFydEluU2VsZWN0aW9uIGlzIHNldC4KLSAgICBSZWZQ
dHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKSk7Ci0gICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSB0aGlzLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCk7Ci0KLSAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0
KCksIHN0YXJ0SW5TZWxlY3Rpb24gPyBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgOiBzZWxlY3Rp
b24udmlzaWJsZUVuZCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5n
ZXQoKSwgc3RhcnRJblNlbGVjdGlvbiA/IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkgOiBzZWxlY3Rp
b24udmlzaWJsZVN0YXJ0KCkpOwotCi0gICAgTm9kZSogc2hhZG93VHJlZVJvb3QgPSBzZWxlY3Rp
b24uc2hhZG93VHJlZVJvb3ROb2RlKCk7Ci0gICAgaWYgKHNoYWRvd1RyZWVSb290KSB7Ci0gICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAg
ICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5j
aGlsZE5vZGVDb3VudCgpLCBlYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJh
bmdlLT5zZXRTdGFydChzaGFkb3dUcmVlUm9vdCwgMCwgZWMpOwotICAgIH0KLQotICAgIFJlZlB0
cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFy
Z2V0LCBmb3J3YXJkLCBjYXNlRmxhZykpOwotICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gdGhlIHNl
bGVjdGlvbiBhbmQgdGhlIGZvdW5kIHJhbmdlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgZXhpc3Rpbmcg
c2VsZWN0aW9uLCBmaW5kIGFnYWluLgotICAgIC8vIEJ1aWxkIGEgc2VsZWN0aW9uIHdpdGggdGhl
IGZvdW5kIHJhbmdlIHRvIHJlbW92ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZS4KLSAgICAvLyBDb21w
YXJlIHJhbmdlcyBpbnN0ZWFkIG9mIHNlbGVjdGlvbiBvYmplY3RzIHRvIGlnbm9yZSB0aGUgd2F5
IHRoYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHdhcyBtYWRlLgotICAgIGlmIChzdGFydEluU2Vs
ZWN0aW9uICYmIGFyZVJhbmdlc0VxdWFsKFZpc2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UuZ2V0
KCkpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKSkgewotICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1
bWVudCgpKTsKLSAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZXRTdGFydChzZWFy
Y2hSYW5nZS5nZXQoKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNldEVuZChzZWFyY2hSYW5nZS5nZXQoKSwgc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpKTsKLQotICAgICAgICBpZiAoc2hhZG93VHJlZVJvb3QpIHsKLSAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICAg
ICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNo
aWxkTm9kZUNvdW50KCksIGVjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QsIDAsIGVjKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwg
dGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7Ci0gICAgfQotCi0gICAgRXhjZXB0aW9uQ29kZSBl
eGNlcHRpb24gPSAwOwotCi0gICAgLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW4gdGhlIHNoYWRv
dyB0cmVlLCBzZWFyY2ggaW4gbWFpbiBjb250ZW50IGZvbGxvd2luZyB0aGUgc2hhZG93IHRyZWUu
Ci0gICAgaWYgKHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSAmJiBzaGFkb3dUcmVl
Um9vdCkgewotICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgp
KTsKLSAgICAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3Rh
cnRBZnRlcihzaGFkb3dUcmVlUm9vdC0+c2hhZG93UGFyZW50Tm9kZSgpLCBleGNlcHRpb24pOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kQmVmb3JlKHNoYWRv
d1RyZWVSb290LT5zaGFkb3dQYXJlbnROb2RlKCksIGV4Y2VwdGlvbik7Ci0KLSAgICAgICAgcmVz
dWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIGZvcndh
cmQsIGNhc2VGbGFnKTsKLSAgICB9Ci0KLSAgICBpZiAoIWVkaXRvcigpLT5pbnNpZGVWaXNpYmxl
QXJlYShyZXN1bHRSYW5nZS5nZXQoKSkpIHsKLSAgICAgICAgcmVzdWx0UmFuZ2UgPSBlZGl0b3Io
KS0+bmV4dFZpc2libGVSYW5nZShyZXN1bHRSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBj
YXNlRmxhZywgd3JhcEZsYWcpOwotICAgICAgICBpZiAoIXJlc3VsdFJhbmdlKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRo
aW5nIGFuZCB3ZSdyZSB3cmFwcGluZywgc2VhcmNoIGFnYWluIGluIHRoZSBlbnRpcmUgZG9jdW1l
bnQgKHRoaXMgd2lsbAotICAgIC8vIHJlZHVuZGFudGx5IHJlLXNlYXJjaCB0aGUgYXJlYSBhbHJl
YWR5IHNlYXJjaGVkIGluIHNvbWUgY2FzZXMpLgotICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFw
c2VkKGV4Y2VwdGlvbikgJiYgd3JhcEZsYWcpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5n
ZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBsYWlu
VGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7Ci0gICAg
ICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0aCB0
aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAotICAgICAgICAvLyAoZS5nLiwgdGhl
IHNlbGVjdGlvbiB3YXMgYWxyZWFkeSB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGlzIHRleHQpLiBC
dXQgd2UgZGVjaWRlZCB0aGF0Ci0gICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBj
YXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIGluIHRoYXQgY2FzZS4KLSAg
ICB9Ci0KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0aGlzLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKFZp
c2libGVTZWxlY3Rpb24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKLSAgICByZXZl
YWxTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdW5zaWduZWQgRnJhbWU6OmNv
dW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGJvb2wgY2FzZUZsYWcsIHVu
c2lnbmVkIGxpbWl0LCBib29sIG1hcmtNYXRjaGVzKQotewotICAgIGlmICh0YXJnZXQuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2Uo
cmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0
aW9uID0gMDsKLSAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMDsKLSAgICBkbyB7Ci0gICAgICAg
IFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQo
KSwgdGFyZ2V0LCB0cnVlLCBjYXNlRmxhZykpOwotICAgICAgICBpZiAocmVzdWx0UmFuZ2UtPmNv
bGxhcHNlZChleGNlcHRpb24pKSB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5pc0luU2hhZG93VHJlZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsK
LSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHJlc3VsdFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25seSB0cmVhdCB0aGUgcmVz
dWx0IGFzIGEgbWF0Y2ggaWYgaXQgaXMgdmlzaWJsZQotICAgICAgICBpZiAoZWRpdG9yKCktPmlu
c2lkZVZpc2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewotICAgICAgICAgICAgKyttYXRj
aENvdW50OwotICAgICAgICAgICAgaWYgKG1hcmtNYXRjaGVzKQotICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKHJlc3VsdFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0b3AgbG9va2lu
ZyBpZiB3ZSBoaXQgdGhlIHNwZWNpZmllZCBsaW1pdC4gQSBsaW1pdCBvZiAwIG1lYW5zIG5vIGxp
bWl0LgotICAgICAgICBpZiAobGltaXQgPiAwICYmIG1hdGNoQ291bnQgPj0gbGltaXQpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBTZXQgdGhlIG5ldyBzdGFydCBmb3IgdGhlIHNl
YXJjaCByYW5nZSB0byBiZSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cwotICAgICAgICAvLyByZXN1
bHQgcmFuZ2UuIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIGEgVmlzaWJsZVBvc2l0aW9uIGhlcmUs
Ci0gICAgICAgIC8vIHNpbmNlIGZpbmRQbGFpblRleHQgd2lsbCB1c2UgYSBUZXh0SXRlcmF0b3Ig
dG8gZ28gb3ZlciB0aGUgdmlzaWJsZQotICAgICAgICAvLyB0ZXh0IG5vZGVzLiAKLSAgICAgICAg
c2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlc3VsdFJhbmdlLT5lbmRDb250YWluZXIoZXhjZXB0aW9u
KSwgcmVzdWx0UmFuZ2UtPmVuZE9mZnNldChleGNlcHRpb24pLCBleGNlcHRpb24pOwotCi0gICAg
ICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VhcmNoUmFuZ2UtPnNoYWRvd1RyZWVSb290Tm9k
ZSgpOwotICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pICYmIHNo
YWRvd1RyZWVSb290KQotICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChzaGFkb3dUcmVl
Um9vdCwgc2hhZG93VHJlZVJvb3QtPmNoaWxkTm9kZUNvdW50KCksIGV4Y2VwdGlvbik7Ci0gICAg
fSB3aGlsZSAodHJ1ZSk7Ci0KLSAgICBpZiAobWFya01hdGNoZXMpIHsKLSAgICAgICAgLy8gRG8g
YSAiZmFrZSIgcGFpbnQgaW4gb3JkZXIgdG8gZXhlY3V0ZSB0aGUgY29kZSB0aGF0IGNvbXB1dGVz
IHRoZSByZW5kZXJlZCByZWN0IGZvciBlYWNoIHRleHQgbWF0Y2guCi0gICAgICAgIGlmIChtX3Zp
ZXcgJiYgY29udGVudFJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0
ZUxheW91dCgpOyAvLyBFbnN1cmUgbGF5b3V0IGlzIHVwIHRvIGRhdGUuCi0gICAgICAgICAgICBJ
bnRSZWN0IHZpc2libGVSZWN0ID0gbV92aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAg
ICAgICAgIGlmICghdmlzaWJsZVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoKFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KikwKTsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LnNldFBhaW50aW5nRGlzYWJsZWQodHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgbV92aWV3LT5wYWludENvbnRlbnRzKCZjb250ZXh0LCB2aXNpYmxlUmVjdCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2hDb3VudDsKLX0K
LQotdm9pZCBGcmFtZTo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZs
YWcpCi17Ci0gICAgaWYgKGZsYWcgPT0gbV9oaWdobGlnaHRUZXh0TWF0Y2hlcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9oaWdobGlnaHRUZXh0TWF0Y2hlcyA9IGZsYWc7Ci0gICAgZG9jdW1l
bnQoKS0+bWFya2VycygpLT5yZXBhaW50TWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNo
KTsKLX0KLQogdm9pZCBGcmFtZTo6c2V0RE9NV2luZG93KERPTVdpbmRvdyogZG9tV2luZG93KQog
ewogICAgIGlmIChtX2RvbVdpbmRvdykgewpAQCAtMTM4Miw1MyArOTc5LDkgQEAgU3RyaW5nIEZy
YW1lOjpkb2N1bWVudFR5cGVTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0K
IAotdm9pZCBGcmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpCitib29sIEZyYW1lOjpzaG91
bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uKSBj
b25zdAogewotICAgIGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlZGl0
b3IoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKLSAgICBib29sIGlzQ29u
dGludW91c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCAmJiBlZGl0b3IoKS0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgaWYg
KGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3QWRqYWNlbnRXb3JkczsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3RlZFNlbnRlbmNlOwotICAgICAgICBib29sIGNhcmV0QnJvd3NpbmcgPSBzZXR0aW5ncygpICYm
IHNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgICAgIGlmIChzZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSB7
Ci0gICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQoc2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpKTsKLSAgICAgICAgICAgIG5ld0FkamFjZW50V29yZHMgPSBW
aXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKG5ld1N0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFy
eSksIGVuZE9mV29yZChuZXdTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgICAg
ICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgICAg
ICAgICBuZXdTZWxlY3RlZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVu
Y2UobmV3U3RhcnQpLCBlbmRPZlNlbnRlbmNlKG5ld1N0YXJ0KSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUsIHNvIGRvbid0
IHJlZG8gaXQgaGVyZS4KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBpbiBzZWxlY3Rp
b24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLAotICAgICAgICAvLyBvbGRTZWxl
Y3Rpb24gbWF5IG5vIGxvbmdlciBiZSBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIGlmIChjbG9z
ZVR5cGluZyAmJiBvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSAmJiBvbGRTZWxlY3Rp
b24uc3RhcnQoKS5ub2RlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5pbkRvY3Vt
ZW50KCkpIHsKLSAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbGRTdGFydChvbGRTZWxlY3Rp
b24udmlzaWJsZVN0YXJ0KCkpOwotICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRBZGph
Y2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChvbGRTdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQob2xkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFy
eSkpOwotICAgICAgICAgICAgaWYgKG9sZEFkamFjZW50V29yZHMgIT0gbmV3QWRqYWNlbnRXb3Jk
cykgewotICAgICAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0ZWRT
ZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKG9sZFN0YXJ0KSwgZW5k
T2ZTZW50ZW5jZShvbGRTdGFydCkpOwotICAgICAgICAgICAgICAgICAgICBlZGl0b3IoKS0+bWFy
a01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIob2xkQWRqYWNlbnRXb3Jkcywgb2xkU2VsZWN0ZWRT
ZW50ZW5jZSAhPSBuZXdTZWxlY3RlZFNlbnRlbmNlLCBvbGRTZWxlY3RlZFNlbnRlbmNlKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZWRpdG9yKCktPm1hcmtN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKG9sZEFkamFjZW50V29yZHMsIGZhbHNlLCBvbGRBZGph
Y2VudFdvcmRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMg
b25seSBlcmFzZXMgbWFya2VycyB0aGF0IGFyZSBpbiB0aGUgZmlyc3QgdW5pdCAod29yZCBvciBz
ZW50ZW5jZSkgb2YgdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgLy8gUGVyaGFwcyBwZWN1bGlhciwg
YnV0IGl0IG1hdGNoZXMgQXBwS2l0LgotICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2UgPSBuZXdBZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAg
IGRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5tYXJrZXJz
KCktPnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFu
Z2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgICAg
ICBkb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoc2VudGVuY2VSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgIH0KLQotICAgIC8vIFdoZW4gY29udGlu
dW91cyBzcGVsbCBjaGVja2luZyBpcyBvZmYsIGV4aXN0aW5nIG1hcmtlcnMgZGlzYXBwZWFyIGFm
dGVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4KLSAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKQotICAgICAgICBkb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtl
cnMoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICBpZiAoIWlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIGRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3Zl
TWFya2VycyhEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7Ci0KLSAgICBlZGl0b3IoKS0+cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOworICAgIHJldHVybiBlZGl0b3IoKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSwgbmV3U2VsZWN0
aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwogfQogCiBWaXNpYmxlUG9zaXRp
b24gRnJhbWU6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBv
aW50KQpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0ZyYW1lLmgJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIK
LSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVXNlclNjcmlwdFR5
cGVzLmgiCiAjaW5jbHVkZSAiWm9vbU1vZGUuaCIKIApAQCAtNTIsMTAgKzUxLDggQEAKICNpZiBQ
TEFURk9STShNQUMpCiAjaWZuZGVmIF9fT0JKQ19fCiBjbGFzcyBOU0FycmF5OwotY2xhc3MgTlNE
aWN0aW9uYXJ5OwogY2xhc3MgTlNNdXRhYmxlRGljdGlvbmFyeTsKIGNsYXNzIE5TU3RyaW5nOwot
dHlwZWRlZiBpbnQgTlNXcml0aW5nRGlyZWN0aW9uOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtMTc2
LDQ5ICsxNzMsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICNpZiBFTkFC
TEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGluIEZyYW1lVmlldywgbm90IEZyYW1lLgogICAgICAgICBUaWxlZEJhY2tpbmdTdG9yZSogdGls
ZWRCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVkQmFja2luZ1N0b3JlLmdldCgp
OyB9CiAgICAgICAgIHZvaWQgc2V0VGlsZWRCYWNraW5nU3RvcmVFbmFibGVkKGJvb2wpOwogI2Vu
ZGlmCiAKLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGxpZmVTdXBwb3J0VGltZXJGaXJlZChU
aW1lcjxGcmFtZT4qKTsKLQotICAgIC8vID09PSB0byBiZSBtb3ZlZCBpbnRvIEVkaXRvcgotCi0g
ICAgcHVibGljOgotICAgICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7Ci0gICAgICAg
IGJvb2wgZmluZFN0cmluZyhjb25zdCBTdHJpbmcmLCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZs
YWcsIGJvb2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbik7Ci0KLSAgICAgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgbWFyaygpIGNvbnN0OyAvLyBNYXJrLCB0byBiZSB1c2VkIGFz
IGVtYWNzIHVzZXMgaXQuCi0gICAgICAgIHZvaWQgc2V0TWFyayhjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJik7Ci0KLSAgICAgICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKLSAgICAg
ICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdDsKLSAgICAgICAg
dm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVtZW50KikgY29uc3Q7Ci0KLSAgICAg
ICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OwotCi0gICAgICAgIHZv
aWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRT
ZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpOwotICAgICAgICBib29sIHNob3VsZENoYW5nZVNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KSBjb25zdDsKLQotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChO
b2RlKiYgbm9kZVRvUmVtb3ZlKSBjb25zdDsKLQotICAgICAgICB1bnNpZ25lZCBjb3VudE1hdGNo
ZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgY2FzZUZsYWcsIHVuc2lnbmVkIGxpbWl0LCBi
b29sIG1hcmtNYXRjaGVzKTsKLSAgICAgICAgYm9vbCBtYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZChib29sIGZsYWcpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUqJiBub2RlVG9SZW1vdmUp
IGNvbnN0OwotCi0gICAgICAgIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQq
KTsKLSAgICAgICAgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKTsKLSAgICAg
ICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCopOwotICAgICAgICBib29s
IGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCopOwot
ICAgICAgICB2b2lkIHRleHRXaWxsQmVEZWxldGVkSW5UZXh0RmllbGQoRWxlbWVudCogaW5wdXQp
OwotICAgICAgICB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKTsKLQogICAg
ICAgICBEcmFnSW1hZ2VSZWYgbm9kZUltYWdlKE5vZGUqKTsKICAgICAgICAgRHJhZ0ltYWdlUmVm
IGRyYWdJbWFnZUZvclNlbGVjdGlvbigpOwogCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBs
aWZlU3VwcG9ydFRpbWVyRmlyZWQoVGltZXI8RnJhbWU+Kik7CisKICAgICAvLyA9PT0gdG8gYmUg
bW92ZWQgaW50byBTZWxlY3Rpb25Db250cm9sbGVyCiAKICAgICBwdWJsaWM6CkBAIC0yNTYsNiAr
MjIxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnRB
dFBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CiAKICNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGluIEZyYW1l
Vmlldywgbm90IEZyYW1lLgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gVGlsZWRCYWNraW5n
U3RvcmVDbGllbnQgaW50ZXJmYWNlCkBAIC0yODEsMTYgKzI0Nyw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICBOU0ltYWdlKiBzZWxlY3Rpb25JbWFnZShib29sIGZvcmNlQmxhY2tU
ZXh0ID0gZmFsc2UpIGNvbnN0OwogICAgICAgICBOU0ltYWdlKiBzbmFwc2hvdERyYWdJbWFnZShO
b2RlKiwgTlNSZWN0KiBpbWFnZVJlY3QsIE5TUmVjdCogZWxlbWVudFJlY3QpIGNvbnN0OwotCi0g
ICAgcHJpdmF0ZToKICAgICAgICAgTlNJbWFnZSogaW1hZ2VGcm9tUmVjdChOU1JlY3QpIGNvbnN0
OwogCi0gICAgLy8gPT09IHRvIGJlIG1vdmVkIGludG8gRWRpdG9yCi0KLSAgICBwdWJsaWM6Ci0g
ICAgICAgIE5TRGljdGlvbmFyeSogZm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNv
bnN0OwotICAgICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JT
ZWxlY3Rpb25TdGFydCgpIGNvbnN0OwotCiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkBAIC0zMDgs
NyArMjY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFNjcmlwdENvbnRyb2xs
ZXIgbV9zY3JpcHQ7CiAKLSAgICAgICAgbXV0YWJsZSBWaXNpYmxlU2VsZWN0aW9uIG1fbWFyazsK
ICAgICAgICAgbXV0YWJsZSBFZGl0b3IgbV9lZGl0b3I7CiAgICAgICAgIG11dGFibGUgU2VsZWN0
aW9uQ29udHJvbGxlciBtX3NlbGVjdGlvbkNvbnRyb2xsZXI7CiAgICAgICAgIG11dGFibGUgRXZl
bnRIYW5kbGVyIG1fZXZlbnRIYW5kbGVyOwpAQCAtMzIyLDcgKzI3OSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgaW50IG1fb3JpZW50YXRpb247CiAjZW5kaWYKIAotICAgICAgICBi
b29sIG1faGlnaGxpZ2h0VGV4dE1hdGNoZXM7CiAgICAgICAgIGJvb2wgbV9pblZpZXdTb3VyY2VN
b2RlOwogICAgICAgICBib29sIG1faXNEaXNjb25uZWN0ZWQ7CiAgICAgICAgIGJvb2wgbV9leGNs
dWRlRnJvbVRleHRTZWFyY2g7CkBAIC0zNzcsMjEgKzMzMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgcmV0dXJuICZtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiAgICAgfQogCi0gICAg
aW5saW5lIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIEZyYW1lOjptYXJrKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX21hcms7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgRnJhbWU6
OnNldE1hcmsoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgcykKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCghcy5iYXNlKCkubm9kZSgpIHx8IHMuYmFzZSgpLm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1
bWVudCgpKTsKLSAgICAgICAgQVNTRVJUKCFzLmV4dGVudCgpLm5vZGUoKSB8fCBzLmV4dGVudCgp
Lm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCgpKTsKLSAgICAgICAgQVNTRVJUKCFzLnN0
YXJ0KCkubm9kZSgpIHx8IHMuc3RhcnQoKS5ub2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQo
KSk7Ci0gICAgICAgIEFTU0VSVCghcy5lbmQoKS5ub2RlKCkgfHwgcy5lbmQoKS5ub2RlKCktPmRv
Y3VtZW50KCkgPT0gZG9jdW1lbnQoKSk7Ci0KLSAgICAgICAgbV9tYXJrID0gczsKLSAgICB9Ci0K
ICAgICBpbmxpbmUgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIEZyYW1lOjp0eXBpbmdTdHls
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90eXBpbmdTdHlsZS5nZXQoKTsKQEAg
LTQzNywxMSArMzc4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtX2luVmlld1Nv
dXJjZU1vZGUgPSBtb2RlOwogICAgIH0KIAotICAgIGlubGluZSBib29sIEZyYW1lOjptYXJrZWRU
ZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2hpZ2hsaWdodFRleHRNYXRjaGVzOwotICAgIH0KLQogICAgIGlubGluZSBGcmFtZVRyZWUqIEZy
YW1lOjp0cmVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAmbV90cmVlTm9kZTsKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OTYsNyArNDk2LDcgQEAgYm9vbCBQYWdlOjpmaW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZwogICAgIEZyYW1lKiBmcmFtZSA9IGZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKICAgICBGcmFtZSogc3RhcnRGcmFtZSA9IGZyYW1lOwogICAgIGRvIHsK
LSAgICAgICAgaWYgKGZyYW1lLT5maW5kU3RyaW5nKHRhcmdldCwgZGlyZWN0aW9uID09IEZpbmRE
aXJlY3Rpb25Gb3J3YXJkLCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUsIGZh
bHNlLCB0cnVlKSkgeworICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKHRh
cmdldCwgZGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJkLCBjYXNlU2Vuc2l0aXZpdHkg
PT0gVGV4dENhc2VTZW5zaXRpdmUsIGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgICAgaWYgKGZy
YW1lICE9IHN0YXJ0RnJhbWUpCiAgICAgICAgICAgICAgICAgc3RhcnRGcmFtZS0+c2VsZWN0aW9u
KCktPmNsZWFyKCk7CiAgICAgICAgICAgICBmb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZy
YW1lKGZyYW1lKTsKQEAgLTUwOCw3ICs1MDgsNyBAQCBib29sIFBhZ2U6OmZpbmRTdHJpbmcoY29u
c3QgU3RyaW5nJiB0YXJnCiAgICAgLy8gU2VhcmNoIGNvbnRlbnRzIG9mIHN0YXJ0RnJhbWUsIG9u
IHRoZSBvdGhlciBzaWRlIG9mIHRoZSBzZWxlY3Rpb24gdGhhdCB3ZSBkaWQgZWFybGllci4KICAg
ICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVzdCByZXNlYXJjaCB3aXRoIHdyYXAgb24KICAgICBp
ZiAoc2hvdWxkV3JhcCAmJiAhc3RhcnRGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKSB7Ci0g
ICAgICAgIGJvb2wgZm91bmQgPSBzdGFydEZyYW1lLT5maW5kU3RyaW5nKHRhcmdldCwgZGlyZWN0
aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJkLCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VT
ZW5zaXRpdmUsIHRydWUsIHRydWUpOworICAgICAgICBib29sIGZvdW5kID0gc3RhcnRGcmFtZS0+
ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlvbkZv
cndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgdHJ1ZSwgdHJ1ZSk7
CiAgICAgICAgIGZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOwogICAg
ICAgICByZXR1cm4gZm91bmQ7CiAgICAgfQpAQCAtNTI1LDggKzUyNSw4IEBAIHVuc2lnbmVkIGlu
dCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQKIAogICAgIEZyYW1lKiBmcmFtZSA9IG1haW5G
cmFtZSgpOwogICAgIGRvIHsKLSAgICAgICAgZnJhbWUtPnNldE1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWQoc2hvdWxkSGlnaGxpZ2h0KTsKLSAgICAgICAgbWF0Y2hlcyArPSBmcmFtZS0+
Y291bnRNYXRjaGVzRm9yVGV4dCh0YXJnZXQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNl
bnNpdGl2ZSwgKGxpbWl0ID09IDApID8gMCA6IChsaW1pdCAtIG1hdGNoZXMpLCB0cnVlKTsKKyAg
ICAgICAgZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVk
KHNob3VsZEhpZ2hsaWdodCk7CisgICAgICAgIG1hdGNoZXMgKz0gZnJhbWUtPmVkaXRvcigpLT5j
b3VudE1hdGNoZXNGb3JUZXh0KHRhcmdldCwgY2FzZVNlbnNpdGl2aXR5ID09IFRleHRDYXNlU2Vu
c2l0aXZlLCBsaW1pdCA/IChsaW1pdCAtIG1hdGNoZXMpIDogMCwgdHJ1ZSk7CiAgICAgICAgIGZy
YW1lID0gaW5jcmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIGZhbHNlKTsKICAgICB9IHdoaWxlIChm
cmFtZSk7CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJD
b3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw2IEBA
CiAjaW1wb3J0ICJDb2xvck1hYy5oIgogI2ltcG9ydCAiQ3Vyc29yLmgiCiAjaW1wb3J0ICJET01J
bnRlcm5hbC5oIgotI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbXBvcnQgIkVkaXRvckNs
aWVudC5oIgogI2ltcG9ydCAiRXZlbnQuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKQEAgLTU0LDcgKzUyLDYgQEAKICNpbXBvcnQgIlNpbXBs
ZUZvbnREYXRhLmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKICNpbXBvcnQgInZp
c2libGVfdW5pdHMuaCIKLQogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgogI2ltcG9ydCA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCkBAIC0zOTgsMTA1ICszOTUsNiBAQCBEcmFnSW1hZ2VSZWYgRnJh
bWU6Om5vZGVJbWFnZShOb2RlKiBub2RlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTlNEaWN0
aW9uYXJ5KiBGcmFtZTo6Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0Ci17
Ci0gICAgTm9kZSogbm9kZVRvUmVtb3ZlOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxl
Rm9yU2VsZWN0aW9uU3RhcnQobm9kZVRvUmVtb3ZlKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAg
ICByZXR1cm4gbmlsOwotCi0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSogcmVzdWx0ID0gW05TTXV0
YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07Ci0KLSAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpICYmIHN0eWxl
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmFscGhh
KCkgIT0gMCkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6bnNDb2xvcihzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkgZm9yS2V5Ok5TQmFj
a2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0KLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5wcmlt
YXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6c3R5bGUt
PmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5nZXROU0ZvbnQoKSBmb3JLZXk6TlNGb250QXR0cmlidXRl
TmFtZV07Ci0KLSAgICBpZiAoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUNvbG9yKS5pc1ZhbGlkKCkgJiYgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUNvbG9yKSAhPSBDb2xvcjo6YmxhY2spCi0gICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0Om5z
Q29sb3Ioc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSkgZm9y
S2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0KLSAgICBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3cgPSBzdHlsZS0+dGV4dFNoYWRvdygpOwotICAgIGlmIChzaGFkb3cpIHsKLSAg
ICAgICAgTlNTaGFkb3cqIHMgPSBbW05TU2hhZG93IGFsbG9jXSBpbml0XTsKLSAgICAgICAgW3Mg
c2V0U2hhZG93T2Zmc2V0Ok5TTWFrZVNpemUoc2hhZG93LT54KCksIHNoYWRvdy0+eSgpKV07Ci0g
ICAgICAgIFtzIHNldFNoYWRvd0JsdXJSYWRpdXM6c2hhZG93LT5ibHVyKCldOwotICAgICAgICBb
cyBzZXRTaGFkb3dDb2xvcjpuc0NvbG9yKHNoYWRvdy0+Y29sb3IoKSldOwotICAgICAgICBbcmVz
dWx0IHNldE9iamVjdDpzIGZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOwotICAgIH0KLQot
ICAgIGludCBkZWNvcmF0aW9uID0gc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7Ci0g
ICAgaWYgKGRlY29yYXRpb24gJiBMSU5FX1RIUk9VR0gpCi0gICAgICAgIFtyZXN1bHQgc2V0T2Jq
ZWN0OltOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktl
eTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdOwotCi0gICAgaW50IHN1cGVyc2Ny
aXB0SW50ID0gMDsKLSAgICBzd2l0Y2ggKHN0eWxlLT52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAg
ICAgY2FzZSBCQVNFTElORToKLSAgICAgICAgY2FzZSBCT1RUT006Ci0gICAgICAgIGNhc2UgQkFT
RUxJTkVfTUlERExFOgotICAgICAgICBjYXNlIExFTkdUSDoKLSAgICAgICAgY2FzZSBNSURETEU6
Ci0gICAgICAgIGNhc2UgVEVYVF9CT1RUT006Ci0gICAgICAgIGNhc2UgVEVYVF9UT1A6Ci0gICAg
ICAgIGNhc2UgVE9QOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1VCOgotICAg
ICAgICAgICAgc3VwZXJzY3JpcHRJbnQgPSAtMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNVUEVSOgotICAgICAgICAgICAgc3VwZXJzY3JpcHRJbnQgPSAxOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChzdXBlcnNjcmlwdEludCkKLSAgICAgICAgW3Jlc3Vs
dCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c3VwZXJzY3JpcHRJbnRdIGZvcktl
eTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV07Ci0KLSAgICBpZiAoZGVjb3JhdGlvbiAmIFVO
REVSTElORSkKLSAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0gZm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1
dGVOYW1lXTsKLQotICAgIGlmIChub2RlVG9SZW1vdmUpIHsKLSAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKGVjKTsKLSAgICAgICAgQVNT
RVJUKGVjID09IDApOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5TV3JpdGlu
Z0RpcmVjdGlvbiBGcmFtZTo6YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgp
IGNvbnN0Ci17Ci0gICAgTlNXcml0aW5nRGlyZWN0aW9uIHJlc3VsdCA9IE5TV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OwotCi0gICAgUG9zaXRpb24gcG9zID0gc2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSogbm9kZSA9
IHBvcy5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmICghcmVuZGVyZXItPmlz
QmxvY2tGbG93KCkpIHsKLSAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwot
ICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgIHN3
aXRjaCAoc3R5bGUtPmRpcmVjdGlvbigpKSB7Ci0gICAgICAgIGNhc2UgTFRSOgotICAgICAgICAg
ICAgcmVzdWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBSVEw6Ci0gICAgICAgICAgICByZXN1bHQgPSBOU1dyaXRpbmdE
aXJlY3Rpb25SaWdodFRvTGVmdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiBOU011dGFi
bGVEaWN0aW9uYXJ5KiBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0RpY3Rpb25hcnkoKQogewpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMyw3ICs1MzMsNyBAQCB2b2lkIENsaXBi
b2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlCiAgICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRt
bCA9IGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdl
LCBmYWxzZSwgQWJzb2x1dGVVUkxzKTsKICAgICBtX2RhdGFPYmplY3QtPmh0bWxCYXNlVXJsID0g
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOwogCi0gICAgU3RyaW5nIHN0ciA9IGZyYW1lLT5zZWxl
Y3RlZFRleHQoKTsKKyAgICBTdHJpbmcgc3RyID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRl
eHQoKTsKICNpZiBPUyhXSU5ET1dTKQogICAgIHJlcGxhY2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5
bGVOZXdsaW5lcyhzdHIpOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODQsNyArODQsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdl
KiBzCiAgICAgU3RyaW5nIGh0bWwgPSBjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIEFic29sdXRlVVJMcyk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgS1VSTCB1cmwgPSBzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5l
cihlYyktPmRvY3VtZW50KCktPnVybCgpOwotICAgIFN0cmluZyBwbGFpblRleHQgPSBmcmFtZS0+
c2VsZWN0ZWRUZXh0KCk7CisgICAgU3RyaW5nIHBsYWluVGV4dCA9IGZyYW1lLT5lZGl0b3IoKS0+
c2VsZWN0ZWRUZXh0KCk7CiAjaWYgT1MoV0lORE9XUykKICAgICByZXBsYWNlTmV3bGluZXNXaXRo
V2luZG93c1N0eWxlTmV3bGluZXMocGxhaW5UZXh0KTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw3ICszNDgs
NyBAQCB2b2lkIENsaXBib2FyZEd0azo6d3JpdGVSYW5nZShSYW5nZSogcmFuCiB7CiAgICAgQVNT
RVJUKHJhbmdlKTsKIAotICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChmcmFtZS0+c2VsZWN0ZWRU
ZXh0KCkpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChmcmFtZS0+ZWRpdG9yKCktPnNlbGVj
dGVkVGV4dCgpKTsKICAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAocmFu
Z2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpKTsKIAog
ICAgIGlmIChtX2NsaXBib2FyZCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRH
dGsuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHMKIHsKICAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2Fy
ZCA9IG1faGVscGVyLT5nZXRDbGlwYm9hcmQoZnJhbWUpOwogICAgIERhdGFPYmplY3RHdGsqIGRh
dGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJvYXJkKTsKLSAgICBk
YXRhT2JqZWN0LT5zZXRUZXh0KGZyYW1lLT5zZWxlY3RlZFRleHQoKSk7CisgICAgZGF0YU9iamVj
dC0+c2V0VGV4dChmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpKTsKICAgICBkYXRhT2Jq
ZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpKTsKICAgICBtX2hlbHBlci0+d3JpdGVD
bGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9x
dC9DbGlwYm9hcmRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlw
Ym9hcmRRdC5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlw
Ym9hcmRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCB2b2lkIENsaXBi
b2FyZFF0Ojp3cml0ZVJhbmdlKFJhbmdlKiByYW5nCiAKICAgICBpZiAoIW1fd3JpdGFibGVEYXRh
KQogICAgICAgICBtX3dyaXRhYmxlRGF0YSA9IG5ldyBRTWltZURhdGE7Ci0gICAgUVN0cmluZyB0
ZXh0ID0gZnJhbWUtPnNlbGVjdGVkVGV4dCgpOworICAgIFFTdHJpbmcgdGV4dCA9IGZyYW1lLT5l
ZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CiAgICAgdGV4dC5yZXBsYWNlKFFDaGFyKDB4YTApLCBR
TGF0aW4xQ2hhcignICcpKTsKICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0VGV4dCh0ZXh0KTsKICAg
ICBtX3dyaXRhYmxlRGF0YS0+c2V0SHRtbChjcmVhdGVNYXJrdXAocmFuZ2UsIDAsIEFubm90YXRl
Rm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9QYXN0ZWJvYXJkUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIFBh
c3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXIKIHZvaWQgUGFzdGVib2FyZDo6
d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JE
ZWxldGUsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBRTWltZURhdGEqIG1kID0gbmV3IFFNaW1lRGF0
YTsKLSAgICBRU3RyaW5nIHRleHQgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgUVN0cmlu
ZyB0ZXh0ID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICAgICB0ZXh0LnJlcGxh
Y2UoUUNoYXIoMHhhMCksIFFMYXRpbjFDaGFyKCcgJykpOwogICAgIG1kLT5zZXRUZXh0KHRleHQp
OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHJldmlzaW9uIDY3
MDk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzc2LDcgKzc3Niw3IEBAIHZvaWQgQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlKFJh
bmdlKiBzZWwKICAgICBpZiAobWVkaXVtLmhHbG9iYWwgJiYgRkFJTEVEKG1fd3JpdGFibGVEYXRh
T2JqZWN0LT5TZXREYXRhKGh0bWxGb3JtYXQoKSwgJm1lZGl1bSwgVFJVRSkpKQogICAgICAgICA6
Okdsb2JhbEZyZWUobWVkaXVtLmhHbG9iYWwpOwogCi0gICAgU3RyaW5nIHN0ciA9IGZyYW1lLT5z
ZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcgc3RyID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rl
ZFRleHQoKTsKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3Ry
KTsKICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwogICAgIG1lZGl1bS5oR2xvYmFsID0g
Y3JlYXRlR2xvYmFsRGF0YShzdHIpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVi
b2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2Fy
ZFdpbi5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVi
b2FyZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzCiAgICAgfQogICAgIAogICAgIC8vIFB1dCBw
bGFpbiBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQuIENGX1VOSUNPREVURVhUIGNvdmVycyBDRl9U
RVhUIGFzIHdlbGwKLSAgICBTdHJpbmcgc3RyID0gZnJhbWUtPnNlbGVjdGVkVGV4dCgpOworICAg
IFN0cmluZyBzdHIgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpOwogICAgIHJlcGxh
Y2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIpOwogICAgIHJlcGxhY2VOQlNQ
V2l0aFNwYWNlKHN0cik7CiAgICAgaWYgKDo6T3BlbkNsaXBib2FyZChtX293bmVyKSkgewpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Niw3
ICs4NjYsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyCiAgICAg
cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5zZXRSZW5kZXJlZFJlY3RGb3JNYXJr
ZXIocmVuZGVyZXIoKS0+bm9kZSgpLCBtYXJrZXIsIG1hcmtlclJlY3QpOwogICAgICAKICAgICAv
LyBPcHRpb25hbGx5IGhpZ2hsaWdodCB0aGUgdGV4dAotICAgIGlmIChyZW5kZXJlcigpLT5mcmFt
ZSgpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkpIHsKKyAgICBpZiAocmVuZGVy
ZXIoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQo
KSkgewogICAgICAgICBDb2xvciBjb2xvciA9IG1hcmtlci5hY3RpdmVNYXRjaCA/CiAgICAgICAg
ICAgICByZW5kZXJlcigpLT50aGVtZSgpLT5wbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcigpIDoKICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCktPnBsYXRmb3JtSW5h
Y3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDY3MDk1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmU6OnN1YnRyZWUKICAgICBub2RlKCktPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuaW5wdXRFdmVudCwgdHJ1ZSwgZmFsc2UpKTsKIAogICAgIGlmIChGcmFtZSogZnJh
bWUgPSB0aGlzLT5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+dGV4dERpZENoYW5nZUluVGV4dEFy
ZWEodGV4dEFyZWEpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHREaWRDaGFuZ2VJblRl
eHRBcmVhKHRleHRBcmVhKTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwx
MiArMTgxLDEyIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmUKIAog
ICAgIGlmICghd2FzQ2hhbmdlZCAmJiBub2RlKCktPmZvY3VzZWQoKSkgewogICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT50ZXh0Rmll
bGREaWRCZWdpbkVkaXRpbmcoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOworICAgICAg
ICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAgIH0KIAogICAgIGlmIChub2RlKCktPmZvY3VzZWQo
KSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAg
ICAgICAgICAgIGZyYW1lLT50ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUoKSkpOworICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hh
bmdlSW5UZXh0RmllbGQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAgIH0KIH0K
IApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wOS0wOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmdW5jdGlvbnMgZnJvbSBGcmFtZSB0byBFZGl0b3Ig
YXMgcGxhbm5lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDUyMTgKKworICAgICAgICAqIHNyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpzZWxlY3RNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorICAg
ICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OmZpbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnN0b3BGaW5kaW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzY29wZVN0cmluZ01hdGNoZXMpOgorICAg
ICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpjYXJldE9yU2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgQ2hhbmdlZCBjYWxsIHNpdGVzIHRv
IHVzZSBlZGl0b3IoKS4KKwogMjAxMC0wOS0wOSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDY3
MDk1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBib29sIGlzQVNpbmdsZVdvcmQo
Y29uc3QgU3RyaW5nJiAKIHN0YXRpYyBTdHJpbmcgc2VsZWN0TWlzc3BlbGxlZFdvcmQoY29uc3Qg
Q29udGV4dE1lbnUqIGRlZmF1bHRNZW51LCBGcmFtZSogc2VsZWN0ZWRGcmFtZSkKIHsKICAgICAv
LyBGaXJzdCBzZWxlY3QgZnJvbSBzZWxlY3RlZFRleHQgdG8gY2hlY2sgZm9yIG11bHRpcGxlIHdv
cmQgc2VsZWN0aW9uLgotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHNlbGVjdGVkRnJhbWUt
PnNlbGVjdGVkVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIFN0cmluZyBtaXNzcGVsbGVk
V29yZCA9IHNlbGVjdGVkRnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRl
U3BhY2UoKTsKIAogICAgIC8vIElmIHNvbWUgdGV4dHMgd2VyZSBhbHJlYWR5IHNlbGVjdGVkLCB3
ZSBkb24ndCBjaGFuZ2UgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlz
RW1wdHkoKSkgewpAQCAtMTE5LDcgKzExOSw3IEBAIHN0YXRpYyBTdHJpbmcgc2VsZWN0TWlzc3Bl
bGxlZFdvcmQoY29uc3QKICAgICAgICAgcmV0dXJuIG1pc3NwZWxsZWRXb3JkOyAvLyBJdCBpcyBl
bXB0eS4KIAogICAgIFdlYkZyYW1lSW1wbDo6c2VsZWN0V29yZEFyb3VuZFBvc2l0aW9uKHNlbGVj
dGVkRnJhbWUsIHBvcyk7Ci0gICAgbWlzc3BlbGxlZFdvcmQgPSBzZWxlY3RlZEZyYW1lLT5zZWxl
Y3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBtaXNzcGVsbGVkV29yZCA9IHNlbGVj
dGVkRnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIAog
I2lmIE9TKERBUldJTikKICAgICAvLyBJZiBtaXNzcGVsbGVkIHdvcmQgaXMgc3RpbGwgZW1wdHks
IHRoZW4gdGhhdCBwb3J0aW9uIHNob3VsZCBub3QgYmUKQEAgLTIzMyw3ICsyMzMsNyBAQCBQbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCiAgICAgICAgIGRhdGEuZnJhbWVV
UkwgPSB1cmxGcm9tRnJhbWUoc2VsZWN0ZWRGcmFtZSk7CiAKICAgICBpZiAoci5pc1NlbGVjdGVk
KCkpCi0gICAgICAgIGRhdGEuc2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0ZWRU
ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIGRhdGEuc2VsZWN0ZWRUZXh0ID0gc2Vs
ZWN0ZWRGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOwog
CiAgICAgaWYgKHIuaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICBkYXRhLmlzRWRpdGFi
bGUgPSB0cnVlOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNp
b24gNjcwOTUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNTYsNyArMTM1Niw3IEBAIGJvb2wgV2ViRnJhbWVJbXBsOjpmaW5kKGlu
dCBpZGVudGlmaWVyLAogICAgIH0KIAogICAgIEFTU0VSVChmcmFtZSgpICYmIGZyYW1lKCktPnZp
ZXcoKSk7Ci0gICAgYm9vbCBmb3VuZCA9IGZyYW1lKCktPmZpbmRTdHJpbmcoCisgICAgYm9vbCBm
b3VuZCA9IGZyYW1lKCktPmVkaXRvcigpLT5maW5kU3RyaW5nKAogICAgICAgICBzZWFyY2hUZXh0
LCBvcHRpb25zLmZvcndhcmQsIG9wdGlvbnMubWF0Y2hDYXNlLCB3cmFwV2l0aGluRnJhbWUsCiAg
ICAgICAgIHN0YXJ0SW5TZWxlY3Rpb24pOwogICAgIGlmIChmb3VuZCkgewpAQCAtMTQzOSw3ICsx
NDM5LDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnN0b3BGaW5kaW5nKGJvb2wgY2xlYQogCiAgICAg
Ly8gUmVtb3ZlIGFsbCBtYXJrZXJzIGZvciBtYXRjaGVzIGZvdW5kIGFuZCB0dXJuIG9mZiB0aGUg
aGlnaGxpZ2h0aW5nLgogICAgIGZyYW1lKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3Zl
TWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICBmcmFtZSgpLT5zZXRNYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGZhbHNlKTsKKyAgICBmcmFtZSgpLT5lZGl0b3Io
KS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChmYWxzZSk7CiAKICAgICAvLyBM
ZXQgdGhlIGZyYW1lIGtub3cgdGhhdCB3ZSBkb24ndCB3YW50IHRpY2ttYXJrcyBvciBoaWdobGln
aHRpbmcgYW55bW9yZS4KICAgICBpbnZhbGlkYXRlQXJlYShJbnZhbGlkYXRlQWxsKTsKQEAgLTE0
NjAsNyArMTQ2MCw3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpzY29wZVN0cmluZ01hdGNoZXMoaW4K
ICAgICAgICAgLy8gU2NvcGluZyBpcyBqdXN0IGFib3V0IHRvIGJlZ2luLgogICAgICAgICBtX3Nj
b3BpbmdDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgICAvLyBDbGVhciBoaWdobGlnaHRpbmcgZm9y
IHRoaXMgZnJhbWUuCi0gICAgICAgIGlmIChmcmFtZSgpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkKCkpCisgICAgICAgIGlmIChmcmFtZSgpLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZCgpKQogICAgICAgICAgICAgZnJhbWUoKS0+cGFnZSgpLT51bm1h
cmtBbGxUZXh0TWF0Y2hlcygpOwogICAgICAgICAvLyBDbGVhciB0aGUgY291bnRlcnMgZnJvbSBs
YXN0IG9wZXJhdGlvbi4KICAgICAgICAgbV9sYXN0TWF0Y2hDb3VudCA9IDA7CkBAIC0xNTg1LDcg
KzE1ODUsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6c2NvcGVTdHJpbmdNYXRjaGVzKGluCiAgICAg
bV9sYXN0U2VhcmNoU3RyaW5nID0gc2VhcmNoVGV4dDsKIAogICAgIGlmIChtYXRjaENvdW50ID4g
MCkgewotICAgICAgICBmcmFtZSgpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVk
KHRydWUpOworICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZCh0cnVlKTsKIAogICAgICAgICBtX2xhc3RNYXRjaENvdW50ICs9IG1hdGNo
Q291bnQ7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZpc2lvbiA2
NzA5NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjc4LDcgKzEyNzgsNyBAQCBXZWJSZWN0IFdlYlZpZXdJbXBsOjpjYXJldE9yU2Vs
ZWN0aW9uQm91CiAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKICAgICAg
ICAgICAgIHJldHVybiByZWN0OwogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY29udHJv
bGxlci0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgcmVjdCA9IHZpZXctPmNvbnRlbnRz
VG9XaW5kb3coZm9jdXNlZC0+Zmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpKTsKKyAgICAg
ICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZm9jdXNlZC0+ZWRpdG9yKCktPmZpcnN0
UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKSk7CiAgICAgfQogICAgIHJldHVybiByZWN0OwogfQpJ
bmRleDogV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2VmbC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wOS0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTW92ZSBmdW5jdGlvbnMgZnJvbSBGcmFtZSB0byBFZGl0b3IgYXMgcGxhbm5lZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMTgKKworICAgICAg
ICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoZXdrX2ZyYW1lX2VkaXRhYmxlX3NldCk6
CisgICAgICAgIChld2tfZnJhbWVfc2VsZWN0aW9uX2dldCk6CisgICAgICAgIChld2tfZnJhbWVf
dGV4dF9zZWFyY2gpOgorICAgICAgICAoZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19tYXJrKToKKyAg
ICAgICAgKGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldCk6CisgICAgICAgIChl
d2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQpOgorICAgICAgICAqIGV3ay9ld2tf
dmlldy5jcHA6CisgICAgICAgIChld2tfdmlld19zZWxlY3Rpb25fZ2V0KToKKyAgICAgICAgQ2hh
bmdlZCBjYWxsIHNpdGVzIHRvIHVzZSBlZGl0b3IoKS4KKwogMjAxMC0wOS0wOSAgR3l1eW91bmcg
S2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgZml4LgpJbmRleDogV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYktp
dC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzNiw3ICs2MzYsNyBA
QCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFzX09iCiAgICAgaWYgKHNkLT5l
ZGl0YWJsZSA9PSBlZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICBpZiAo
ZWRpdGFibGUpCi0gICAgICAgIHNkLT5mcmFtZS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVt
ZW50KCk7CisgICAgICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9C
b2R5RWxlbWVudCgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTY1MSw3ICs2NTEs
NyBAQCBjaGFyKiBld2tfZnJhbWVfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzCiB7CiAgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwotICAgIFdURjo6Q1N0cmluZyBzID0gc2QtPmZy
YW1lLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CisgICAgV1RGOjpDU3RyaW5nIHMgPSBzZC0+ZnJh
bWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CiAgICAgaWYgKHMuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkpOwpAQCAtNzUx
LDcgKzc1MSw3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXYKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsK
IAotICAgIHJldHVybiBzZC0+ZnJhbWUtPmZpbmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0cmluZyksIGZvcndhcmQsIGNhc2Vfc2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKKyAgICByZXR1
cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3RyaW5nKSwgZm9yd2FyZCwgY2FzZV9zZW5zaXRpdmUsIHdyYXAsIHRydWUpOwogfQogCiAvKioK
QEAgLTc3MSw4ICs3NzEsOCBAQCB1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19t
YXJrCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgMCk7CiAK
LSAgICBzZC0+ZnJhbWUtPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxp
Z2h0KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlX3NlbnNpdGl2ZSwgbGltaXQsIHRydWUpOworICAg
IHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQo
aGlnaGxpZ2h0KTsKKyAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVz
Rm9yVGV4dChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgY2FzZV9zZW5zaXRpdmUsIGxp
bWl0LCB0cnVlKTsKIH0KIAogLyoqCkBAIC04MDMsNyArODAzLDcgQEAgRWluYV9Cb29sIGV3a19m
cmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZwogewogICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPnNldE1hcmtlZFRleHRN
YXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKKyAgICBzZC0+ZnJhbWUtPmVkaXRvcigp
LT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtODE4LDcgKzgxOCw3IEBAIEVpbmFfQm9vbCBld2tfZnJh
bWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWcKIHsKICAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+bWFya2VkVGV4
dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOworICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigp
LT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7CiB9CiAKIC8qKiAKSW5kZXg6IFdl
YktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ1LDcgKzE0NDUsNyBAQCBjaGFyKiBld2tfdmlld19z
ZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAw
KTsKLSAgICBXVEY6OkNTdHJpbmcgcyA9IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOworICAgIFdURjo6Q1N0
cmluZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3RyZHVwKHMuZGF0YSgpKTsKSW5kZXg6
IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDktMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgZnVuY3Rpb25zIGZyb20gRnJhbWUgdG8gRWRpdG9yIGFzIHBsYW5uZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjE4CisKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfc2V0X2hp
Z2hsaWdodF90ZXh0X21hdGNoZXMpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9zZWxl
Y3RlZF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19zZXRfZWRpdGFibGUpOgorICAg
ICAgICBDaGFuZ2VkIGNhbGwgc2l0ZXMgdG8gdXNlIGVkaXRvcigpLgorCiAyMDEwLTA5LTA5ICBQ
aGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cAkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzY5Myw3ICszNjkzLDcgQEAgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X2hpZ2hsaWdodF90ZXh0XwogCiAgICAgRnJhbWUgKmZyYW1lID0gY29yZSh3ZWJWaWV3
KS0+bWFpbkZyYW1lKCk7CiAgICAgZG8gewotICAgICAgICBmcmFtZS0+c2V0TWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZChzaG91bGRIaWdobGlnaHQpOworICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoc2hvdWxkSGlnaGxpZ2h0
KTsKICAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHRXaXRoV3JhcChm
YWxzZSk7CiAgICAgfSB3aGlsZSAoZnJhbWUpOwogfQpAQCAtMzg3NSw3ICszODc1LDcgQEAgZ2No
YXIqIHdlYmtpdF93ZWJfdmlld19nZXRfc2VsZWN0ZWRfdGV4dAogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CiAKICAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1l
KCk7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKGZyYW1lLT5zZWxlY3RlZFRleHQoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICByZXR1cm4gZ19zdHJkdXAoZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQo
KS51dGY4KCkuZGF0YSgpKTsKIH0KIAogLyoqCkBAIC0zOTQ3LDcgKzM5NDcsNyBAQCB2b2lkIHdl
YmtpdF93ZWJfdmlld19zZXRfZWRpdGFibGUoV2ViS2l0CiAgICAgcHJpdi0+ZWRpdGFibGUgPSBm
bGFnOwogCiAgICAgaWYgKGZsYWcpIHsKLSAgICAgICAgZnJhbWUtPmFwcGx5RWRpdGluZ1N0eWxl
VG9Cb2R5RWxlbWVudCgpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0
eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgICAgICAvLyBUT0RPOiBJZiB0aGUgV2ViS2l0V2ViVmll
dyBpcyBtYWRlIGVkaXRhYmxlIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5LCBzZXQgaXQgdG8g
c29tZXRoaW5nLgogICAgICAgICAvL2lmICghd2Via2l0X3dlYl92aWV3X2dldF9zZWxlY3RlZF9k
b21fcmFuZ2Uod2ViVmlldykpCiAgICAgICAgIC8vICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9u
RnJvbU5vbmUoKTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDktMDggIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25zIGZyb20gRnJhbWUgdG8gRWRpdG9yIGFzIHBs
YW5uZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
MjE4CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFt
ZSBfc2VsZWN0ZWRTdHJpbmddKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2ZpcnN0UmVjdEZvckRP
TVJhbmdlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfbWFya0RPTVJhbmdlXSk6CisgICAgICAg
ICgtW1dlYkZyYW1lIF9zZXRUeXBpbmdTdHlsZTp3aXRoVW5kb0FjdGlvbjpdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJl
cHJlc2VudGF0aW9uIGZpbmlzaGVkTG9hZGluZ1dpdGhEYXRhU291cmNlOl0pOgorICAgICAgICAq
IFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zZWxlY3Rp
b25TdGFydEZvbnRBdHRyaWJ1dGVzQXNSVEZdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgdG9n
Z2xlQmFzZVdyaXRpbmdEaXJlY3Rpb246XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlYXJj
aEZvcjpkaXJlY3Rpb246Y2FzZVNlbnNpdGl2ZTp3cmFwOnN0YXJ0SW5TZWxlY3Rpb246XSk6Cisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IGNvdW50TWF0Y2hlc0ZvclRleHQ6Y2FzZVNlbnNpdGl2ZTps
aW1pdDptYXJrTWF0Y2hlczpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4
dE1hdGNoZXNBcmVIaWdobGlnaHRlZDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZF0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5t
bToKKyAgICAgICAgKC1bV2ViVmlldyBzZXRFZGl0YWJsZTpdKToKKyAgICAgICAgQ2hhbmdlZCBj
YWxsIHNpdGVzIHRvIHVzZSBlZGl0b3IoKS4KKwogMjAxMC0wOS0wOCAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJ
bmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyOSw3ICs1MjksNyBAQCAt
IChOU1N0cmluZyAqKV9tYXJrdXBTdHJpbmdGcm9tUmFuZ2U6KERPCiAKIC0gKE5TU3RyaW5nICop
X3NlbGVjdGVkU3RyaW5nCiB7Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmRpc3Bs
YXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0ZWRU
ZXh0KCkpOworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kaXNwbGF5U3RyaW5nTW9k
aWZpZWRCeUVuY29kaW5nKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRl
eHQoKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopX3N0cmluZ0ZvclJhbmdlOihET01SYW5nZSAqKXJh
bmdlCkBAIC02NjIsNyArNjYyLDcgQEAgLSAoTlNSZWN0KV9jYXJldFJlY3RBdE5vZGU6KERPTU5v
ZGUgKilubwogCiAtIChOU1JlY3QpX2ZpcnN0UmVjdEZvckRPTVJhbmdlOihET01SYW5nZSAqKXJh
bmdlCiB7Ci0gICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+Zmlyc3RSZWN0Rm9yUmFuZ2Uo
Y29yZShyYW5nZSkpOworICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLT5m
aXJzdFJlY3RGb3JSYW5nZShjb3JlKHJhbmdlKSk7CiB9CiAKIC0gKHZvaWQpX3Njcm9sbERPTVJh
bmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlCkBAIC03ODgsNyArNzg4LDcgQEAgLSAoTlNS
YW5nZSlfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOihETwogCiAtIChET01SYW5nZSAqKV9tYXJr
RE9NUmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPm1hcmsoKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3Jl
RnJhbWUtPmVkaXRvcigpLT5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiB9CiAK
IC8vIEdpdmVuIHByb3Bvc2VkUmFuZ2UsIHJldHVybnMgYW4gZXh0ZW5kZWQgcmFuZ2UgdGhhdCBp
bmNsdWRlcyBhZGphY2VudCB3aGl0ZXNwYWNlIHRoYXQgc2hvdWxkCkBAIC05MDQsNyArOTA0LDcg
QEAgLSAodm9pZClfc2V0VHlwaW5nU3R5bGU6KERPTUNTU1N0eWxlRGVjbAogewogICAgIGlmICgh
X3ByaXZhdGUtPmNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAgIF9wcml2YXRlLT5jb3Jl
RnJhbWUtPmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7
CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbXB1dGVBbmRTZXRUeXBpbmdT
dHlsZShjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7CiB9CiAKIC0gKHZvaWQpX2RyYWdTb3VyY2VF
bmRlZEF0OihOU1BvaW50KXdpbmRvd0xvYyBvcGVyYXRpb246KE5TRHJhZ09wZXJhdGlvbilvcGVy
YXRpb24KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bQkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgLSAodm9pZClmaW5p
c2hlZExvYWRpbmdXaXRoRGF0YVNvdXJjZTooVwogICAgICAgICAKICAgICAgICAgV2ViVmlldyAq
d2ViVmlldyA9IFtmcmFtZSB3ZWJWaWV3XTsKICAgICAgICAgaWYgKFt3ZWJWaWV3IGlzRWRpdGFi
bGVdKQotICAgICAgICAgICAgY29yZShmcmFtZSktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxl
bWVudCgpOworICAgICAgICAgICAgY29yZShmcmFtZSktPmVkaXRvcigpLT5hcHBseUVkaXRpbmdT
dHlsZVRvQm9keUVsZW1lbnQoKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0JKHJldmlzaW9uIDY3MDk1KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjA0LDcgKzQyMDQsNyBAQCAtIChOU0RhdGEgKilf
c2VsZWN0aW9uU3RhcnRGb250QXR0cmlidXRlCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJ4IgotICAgICAgICBhdHRy
aWJ1dGVzOmNvcmVGcmFtZSA/IGNvcmVGcmFtZS0+Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25T
dGFydCgpIDogbmlsXTsKKyAgICAgICAgYXR0cmlidXRlczpjb3JlRnJhbWUgPyBjb3JlRnJhbWUt
PmVkaXRvcigpLT5mb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgOiBuaWxdOwogICAg
IE5TRGF0YSAqZGF0YSA9IFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJp
bmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CiAgICAgW3N0cmluZyByZWxlYXNl
XTsKICAgICByZXR1cm4gZGF0YTsKQEAgLTQ4MzEsNyArNDgzMSw3IEBAIC0gKHZvaWQpdG9nZ2xl
QmFzZVdyaXRpbmdEaXJlY3Rpb246KGlkKXMKICAgICAgICAgcmV0dXJuOwogCiAgICAgV3JpdGlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247Ci0gICAg
c3dpdGNoIChjb3JlRnJhbWUtPmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQo
KSkgeworICAgIHN3aXRjaCAoY29yZUZyYW1lLT5lZGl0b3IoKS0+YmFzZVdyaXRpbmdEaXJlY3Rp
b25Gb3JTZWxlY3Rpb25TdGFydCgpKSB7CiAgICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9u
TGVmdFRvUmlnaHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOU1dyaXRpbmdE
aXJlY3Rpb25SaWdodFRvTGVmdDoKQEAgLTYxNjcsNyArNjE2Nyw3IEBAIC0gKEJPT0wpc2VhcmNo
Rm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXIKICAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKICAg
ICAgICAgcmV0dXJuIE5POwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5maW5kU3RyaW5nKHN0cmlu
ZywgZm9yd2FyZCwgY2FzZUZsYWcsIHdyYXBGbGFnLCBzdGFydEluU2VsZWN0aW9uKTsKKyAgICBy
ZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5n
LCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rpb24pOwogfQogCiBA
ZW5kCkBAIC02MTk3LDcgKzYxOTcsNyBAQCAtIChOU1VJbnRlZ2VyKWNvdW50TWF0Y2hlc0ZvclRl
eHQ6KE5TU3RyCiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb3JlRnJh
bWUtPmNvdW50TWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjYXNlRmxhZywgbGltaXQsIG1hcmtNYXRj
aGVzKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4
dChzdHJpbmcsIGNhc2VGbGFnLCBsaW1pdCwgbWFya01hdGNoZXMpOwogfQogCiAtICh2b2lkKXNl
dE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3VmFsdWUKQEAgLTYyMDUs
MTMgKzYyMDUsMTMgQEAgLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodAog
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29y
ZUZyYW1lKQogICAgICAgICByZXR1cm47Ci0gICAgY29yZUZyYW1lLT5zZXRNYXJrZWRUZXh0TWF0
Y2hlc0FyZUhpZ2hsaWdodGVkKG5ld1ZhbHVlKTsKKyAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5z
ZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKG5ld1ZhbHVlKTsKIH0KIAogLSAoQk9P
TCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJh
bWUtPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsKKyAgICByZXR1cm4gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQoKTsKIH0KIAogLSAodm9pZCl1bm1hcmtBbGxUZXh0TWF0Y2hlcwpJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHJldmlzaW9uIDY3MDk1KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3NjYsNyArNDc2Niw3IEBAIC0gKHZvaWQpc2V0RWRpdGFi
bGU6KEJPT0wpZmxhZwogICAgICAgICBGcmFtZSogbWFpbkZyYW1lID0gW3NlbGYgX21haW5Db3Jl
RnJhbWVdOwogICAgICAgICBpZiAobWFpbkZyYW1lKSB7CiAgICAgICAgICAgICBpZiAoZmxhZykg
ewotICAgICAgICAgICAgICAgIG1haW5GcmFtZS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVt
ZW50KCk7CisgICAgICAgICAgICAgICAgbWFpbkZyYW1lLT5lZGl0b3IoKS0+YXBwbHlFZGl0aW5n
U3R5bGVUb0JvZHlFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIFdlYlZpZXcg
aXMgbWFkZSBlZGl0YWJsZSBhbmQgdGhlIHNlbGVjdGlvbiBpcyBlbXB0eSwgc2V0IGl0IHRvIHNv
bWV0aGluZy4KICAgICAgICAgICAgICAgICBpZiAoIVtzZWxmIHNlbGVjdGVkRE9NUmFuZ2VdKQog
ICAgICAgICAgICAgICAgICAgICBtYWluRnJhbWUtPnNldFNlbGVjdGlvbkZyb21Ob25lKCk7Cklu
ZGV4OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA5LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
b3ZlIGZ1bmN0aW9ucyBmcm9tIEZyYW1lIHRvIEVkaXRvciBhcyBwbGFubmVkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTIxOAorCisgICAgICAgICog
QXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjpzZWxlY3RlZFRleHQpOgorICAg
ICAgICAoUVdlYlBhZ2U6OnNldENvbnRlbnRFZGl0YWJsZSk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKToKKyAgICAgICAgQ2hhbmdl
ZCBjYWxsIHNpdGVzIHRvIHVzZSBlZGl0b3IoKS4KKwogMjAxMC0wOS0wOCAgUGV0ZXIgS2FzdGlu
ZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlh
dHQuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxNyw3ICsyNDE3LDcgQEAgYm9vbCBR
V2ViUGFnZTo6YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoUQogUVN0cmluZyBRV2ViUGFnZTo6c2Vs
ZWN0ZWRUZXh0KCkgY29uc3QKIHsKICAgICBkLT5jcmVhdGVNYWluRnJhbWUoKTsKLSAgICByZXR1
cm4gZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5zZWxl
Y3RlZFRleHQoKTsKKyAgICByZXR1cm4gZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CiB9CiAKICNpZm5kZWYg
UVRfTk9fQUNUSU9OCkBAIC0yODgxLDcgKzI4ODEsNyBAQCB2b2lkIFFXZWJQYWdlOjpzZXRDb250
ZW50RWRpdGFibGUoYm9vbCBlCiAgICAgICAgIGlmIChkLT5tYWluRnJhbWUpIHsKICAgICAgICAg
ICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGQtPm1haW5GcmFtZS0+ZC0+ZnJhbWU7CiAgICAg
ICAgICAgICBpZiAoZWRpdGFibGUpIHsKLSAgICAgICAgICAgICAgICBmcmFtZS0+YXBwbHlFZGl0
aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogbWFjIHBvcnQgY2FsbHMgdGhpcyBpZiB0aGVyZSBpcyBubyBzZWxlY3RlZERPTVJhbmdl
CiAgICAgICAgICAgICAgICAgLy9mcmFtZS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00ODksNyArNDg5LDcgQEAgUVZhcmlhbnRMaXN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpm
aQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBRVmFyaWFudExpc3QoKTsKIAotICAg
IFFSZWN0IHJlc3VsdFJlY3QgPSBmcmFtZS0+Zmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkp
OworICAgIFFSZWN0IHJlc3VsdFJlY3QgPSBmcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJh
bmdlKHJhbmdlLmdldCgpKTsKICAgICByZWN0IDw8IHJlc3VsdFJlY3QueCgpIDw8IHJlc3VsdFJl
Y3QueSgpIDw8IHJlc3VsdFJlY3Qud2lkdGgoKSA8PCByZXN1bHRSZWN0LmhlaWdodCgpOwogICAg
IHJldHVybiByZWN0OwogfQpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3MDk1KQorKysgV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wOS0wOCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSBmdW5jdGlvbnMgZnJvbSBGcmFtZSB0byBFZGl0b3Ig
YXMgcGxhbm5lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDUyMTgKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29vZ2xlKToK
KyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJGcmFtZTo6c2VsZWN0ZWRTdHJp
bmcpOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6c2VsZWN0ZWRU
ZXh0KToKKyAgICAgICAgKFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3cpOgorICAgICAg
ICAoV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKToKKyAgICAgICAgQ2hhbmdlZCBj
YWxsIHNpdGVzIHRvIHVzZSBlZGl0b3IoKS4KKwogMjAxMC0wOS0wOCAgUGV0ZXIgS2FzdGluZyAg
PHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkLCBidWlsZCBmaXgu
CkluZGV4OiBXZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2lu
L1dlYkZyYW1lLmNwcAkocmV2aXNpb24gNjcwOTUpCisrKyBXZWJLaXQvd2luL1dlYkZyYW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA0NSw3ICsxMDQ1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJGcmFtZTo6c2VsZQogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1
cm4gRV9GQUlMOwogCi0gICAgU3RyaW5nIHRleHQgPSBjb3JlRnJhbWUtPmRpc3BsYXlTdHJpbmdN
b2RpZmllZEJ5RW5jb2RpbmcoY29yZUZyYW1lLT5zZWxlY3RlZFRleHQoKSk7CisgICAgU3RyaW5n
IHRleHQgPSBjb3JlRnJhbWUtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoY29yZUZy
YW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkpOwogCiAgICAgKnJlc3VsdCA9IEJTdHJpbmco
dGV4dCkucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwpJbmRleDogV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2
NzA5NSkKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NDcs
NyArMzU0Nyw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2VsZWMKICAg
ICBpZiAoIWZvY3VzZWRGcmFtZSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAotICAgIFN0cmlu
ZyBmcmFtZVNlbGVjdGVkVGV4dCA9IGZvY3VzZWRGcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAg
U3RyaW5nIGZyYW1lU2VsZWN0ZWRUZXh0ID0gZm9jdXNlZEZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
ZWRUZXh0KCk7CiAgICAgKnRleHQgPSBTeXNBbGxvY1N0cmluZ0xlbihmcmFtZVNlbGVjdGVkVGV4
dC5jaGFyYWN0ZXJzKCksIGZyYW1lU2VsZWN0ZWRUZXh0Lmxlbmd0aCgpKTsKICAgICBpZiAoISp0
ZXh0ICYmIGZyYW1lU2VsZWN0ZWRUZXh0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gRV9PVVRP
Rk1FTU9SWTsKQEAgLTUyNjcsNyArNTI2Nyw3IEBAIHZvaWQgV2ViVmlldzo6cHJlcGFyZUNhbmRp
ZGF0ZVdpbmRvdyhGcmEKICAgICBpZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRhcmdldEZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewogICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZW1wUmFuZ2Ug
PSByYW5nZS0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmZp
cnN0UmVjdEZvclJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7CisgICAgICAgIGNhcmV0ID0gdGFyZ2V0
RnJhbWUtPmVkaXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwogICAg
IH0KICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2Fy
ZXQpOwogICAgIENBTkRJREFURUZPUk0gZm9ybTsKQEAgLTU1MzgsNyArNTUzOCw3IEBAIExSRVNV
TFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW8KICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gdGVtcFJhbmdlID0gcmFuZ2UtPmNsb25l
UmFuZ2UoZWMpOwogICAgICAgICB0ZW1wUmFuZ2UtPnNldFN0YXJ0KHRlbXBSYW5nZS0+c3RhcnRD
b250YWluZXIoZWMpLCB0ZW1wUmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSArIGNoYXJQb3MtPmR3Q2hh
clBvcywgZWMpOwotICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5maXJzdFJlY3RGb3JSYW5n
ZSh0ZW1wUmFuZ2UuZ2V0KCkpOworICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3Io
KS0+Zmlyc3RSZWN0Rm9yUmFuZ2UodGVtcFJhbmdlLmdldCgpKTsKICAgICB9CiAgICAgY2FyZXQg
PSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKICAgICBjaGFy
UG9zLT5wdC54ID0gY2FyZXQueCgpOwpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJDb250ZXh0TWVudUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDY3MDk1KQorKysgV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50Ojpkb3du
bG9hZFVSTChjCiAKIHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OnNlYXJjaFdpdGhHb29nbGUo
Y29uc3QgRnJhbWUqIGZyYW1lKQogewotICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBmcmFtZS0+
c2VsZWN0ZWRUZXh0KCk7CisgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGZyYW1lLT5lZGl0b3Io
KS0+c2VsZWN0ZWRUZXh0KCk7CiAgICAgc2VhcmNoU3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpOwog
ICAgIFN0cmluZyBlbmNvZGVkID0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhzZWFyY2hT
dHJpbmcpOwogICAgIGVuY29kZWQucmVwbGFjZSgiJTIwIiwgIisiKTsKSW5kZXg6IFdlYktpdC93
eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24g
NjcwOTUpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTAtMDktMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgZnVuY3Rpb25z
IGZyb20gRnJhbWUgdG8gRWRpdG9yIGFzIHBsYW5uZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MjE4CisKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6
CisgICAgICAgICh3eFdlYkZyYW1lOjpGaW5kU3RyaW5nKToKKyAgICAgICAgQ2hhbmdlZCBjYWxs
IHNpdGVzIHRvIHVzZSBlZGl0b3IoKS4KKwogMjAxMC0wOC0zMSAgRGF2ZSBIeWF0dCAgPGh5YXR0
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2Vi
S2l0L3d4L1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViRnJhbWUuY3Bw
CShyZXZpc2lvbiA2NzA5NSkKKysrIFdlYktpdC93eC9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB3eFN0cmluZyB3eFdlYkZyYW1lOjpHZXRFZGl0Q29tbWFu
ZFZhbHVlCiBib29sIHd4V2ViRnJhbWU6OkZpbmRTdHJpbmcoY29uc3Qgd3hTdHJpbmcmIHN0cmlu
ZywgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgd3JhcFNlbGVjdGlvbiwg
Ym9vbCBzdGFydEluU2VsZWN0aW9uKQogewogICAgIGlmIChtX2ltcGwtPmZyYW1lKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5mcmFtZS0+ZmluZFN0cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VT
ZW5zaXRpdmUsIHdyYXBTZWxlY3Rpb24sIHN0YXJ0SW5TZWxlY3Rpb24pOworICAgICAgICByZXR1
cm4gbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBj
YXNlU2Vuc2l0aXZlLCB3cmFwU2VsZWN0aW9uLCBzdGFydEluU2VsZWN0aW9uKTsKIAogICAgIHJl
dHVybiBmYWxzZTsKIH0K
</data>
<flag name="review"
          id="56251"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="56286"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>